uox3/source/UOXJSPropertyFuncs.cpp

4303 lines
157 KiB
C++
Raw Permalink Normal View History

//o------------------------------------------------------------------------------------------------o
Instance-support and misc code cleanup Misc code and documentation cleanup: Updated and standardized function comment blocks throughout entire codebase Grouped getters and setters together in pairs and documented them as one Removed empty and/or non-useful information from comment blocks Removed unused function from cItem.cpp/h - IncID() - formerly used to change IDs for doors Added new feature - Instances Objects (characters, items, multis, spawnregions) can now make use of a 5th parameter to determine their location in the game world. In addition to the traditional X, Y, Z and WORLDNUMBER parameters, a new one has been added - INSTANCEID - that allows objects to exist at the same coordinates in the same world, but in different "dimensions". Code has been updated in multiple places to support this, and a default instanceID of 0 is assumed if nothing else is specified. Added support for new DFN tag in town regions, spawn regions and locations - INSTANCEID (defaults to 0 if not present) Added support for another start location parameter after worldNum in UOX.INI representing instanceID (defaults to 0 if not present) Updated TWEAK menu to include WorldNumber and instanceID Fixed BaseWeight option in TWEAK menu Updated CBase_Teleport - now takes an optional 5th parameter instanceID Updated SE_SpawnNPC now takes an optional 5th parameter - instanceID Updated SE_FindMulti now takes an optional 5th parameter - instanceID Updated SE_GetItem now takes an optional 5th parameter - instanceID Updated SE_FindItem now takes an optional 6th parameter - instanceID Added new JS property for Items, Characters, Regions: .instanceID Added JS property for Regions: .members - returns comma-separated list of town member serials Updated JS scripts making use of the above-mentioned JS Methods/Functions Updated dictionaries with new tweak menu entry texts Exposed SpawnRegions to JS engine, and updated JS docs with details: SpawnRegion JS Functions IterateOverSpawnRegions() GetSpawnRegion( spawnRegNum ) GetSpawnRegionCount() SpawnRegion JS Properties name regionNum itemList npcList item npc maxItems maxNpcs itemCount npcCount onlyOutside prefZ x1 y1 x2 y2 world instanceID minTime maxTime call
2020-08-08 13:57:15 +08:00
//| File - UOXJSPropertyFuncts.cpp
//| Date - 12/14/2001
//o------------------------------------------------------------------------------------------------o
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
//| Purpose - 1.0 14th December, 2001 Initial implementation
Instance-support and misc code cleanup Misc code and documentation cleanup: Updated and standardized function comment blocks throughout entire codebase Grouped getters and setters together in pairs and documented them as one Removed empty and/or non-useful information from comment blocks Removed unused function from cItem.cpp/h - IncID() - formerly used to change IDs for doors Added new feature - Instances Objects (characters, items, multis, spawnregions) can now make use of a 5th parameter to determine their location in the game world. In addition to the traditional X, Y, Z and WORLDNUMBER parameters, a new one has been added - INSTANCEID - that allows objects to exist at the same coordinates in the same world, but in different "dimensions". Code has been updated in multiple places to support this, and a default instanceID of 0 is assumed if nothing else is specified. Added support for new DFN tag in town regions, spawn regions and locations - INSTANCEID (defaults to 0 if not present) Added support for another start location parameter after worldNum in UOX.INI representing instanceID (defaults to 0 if not present) Updated TWEAK menu to include WorldNumber and instanceID Fixed BaseWeight option in TWEAK menu Updated CBase_Teleport - now takes an optional 5th parameter instanceID Updated SE_SpawnNPC now takes an optional 5th parameter - instanceID Updated SE_FindMulti now takes an optional 5th parameter - instanceID Updated SE_GetItem now takes an optional 5th parameter - instanceID Updated SE_FindItem now takes an optional 6th parameter - instanceID Added new JS property for Items, Characters, Regions: .instanceID Added JS property for Regions: .members - returns comma-separated list of town member serials Updated JS scripts making use of the above-mentioned JS Methods/Functions Updated dictionaries with new tweak menu entry texts Exposed SpawnRegions to JS engine, and updated JS docs with details: SpawnRegion JS Functions IterateOverSpawnRegions() GetSpawnRegion( spawnRegNum ) GetSpawnRegionCount() SpawnRegion JS Properties name regionNum itemList npcList item npc maxItems maxNpcs itemCount npcCount onlyOutside prefZ x1 y1 x2 y2 world instanceID minTime maxTime call
2020-08-08 13:57:15 +08:00
//| Includes property getters for CItem and CChar, and property
//| setters for CChar
//o------------------------------------------------------------------------------------------------o
2002-04-07 20:53:41 +00:00
#include "uox3.h"
#include "UOXJSClasses.h"
#include "UOXJSPropertySpecs.h"
#include "UOXJSPropertyEnums.h"
#include "UOXJSPropertyFuncs.h"
#include "JSEncapsulate.h"
#include "CJSEngine.h"
2002-04-07 20:53:41 +00:00
Added: -JS Get/Set "vulnerable" handlers for character properties (Abaddon) -willHunger with Get/Set HungerStatus() wrappers to CChar class (can now selectively stop a character/creature from continuing to hunger) -JS Get/Set "willhunger" handlers for character properties Changed: Linux compile fixes (thanks Malketh) Hash.h warning fixed (thanks Philantrop) Fixes to getRootPack() and getPackOwner() Removed many #includes from the global scope, including them in the specific files that need them This should greatly reduce compile time and filesize, along with the need to recompile after altering most headers Removed the linux ifdefs around typedefd function declarations, this should work with gcc 3.2 Moved global loading functions into a new cFileIO() class to take them out of global scope Fixed an issue causing items to not be sent to the client (thanks Malketh) Moved some global structs into the CWorldMain class Fixed a bug causing a crash on character / item creation Moved all effects stuff into its own class to take it out of global scope Changed the variable CChar::region to CChar::regionNum to avoid conflicts with the cTownRegion region[] indexes Moved getbestskill(), isHuman(), and inDungeon() into the CChar class to remove them from global scope Took npcSimpleAttackTarget() out of global scope Rewrote restock() to make use of restockNPC() Changed the typedef'd iterator in hash.h to HASHITERATOR to kill a Linux warning Renamed cEffects::soundeffect() to PlaySound() and removed unneeded overloads Fixed a bug causing executebatch to be set with locationcount data Rewrote cEffects::bgsound() Documented sounds.cpp Misc minor cleanups / fixes Removed: sendItemsInRange() (CChar::Teleport() does the same thing) Many #includes that were not being used deathMenu() respawnnow() and moved all of its code into command_respawn() one instance of cEffects::scpSoundEffect() and renamed the other to PlaySound() 3/13/2003 Changed Fixed an issue allowing the server to not have a dictionary.ZRO (which would cause a crash when a dictionary entry was called with no language) Fixed an issue causing the server to puke when it attempted a restart Moved SpawnRandomItem() into cItem class Moved SpawnRandomMonster() into cCharHandle class Broke necro.dfn into fishing.dfn and digging.dfn Made better use of SpawnRandomItem() and SpawnRandomMonster() 3/12/2003 Added: CPOpenGump and CPSpeech packet class to remove some global vars (Note these are pretty basic classes and someone with a better understanding of how we handle sending/recieving packets could probably expand these to make better use of them) Changed: Moved many global vars into the CWorldMain() class Cleaned ResetVars() in uox3.cpp as ResetDefaults() in CWorldMain() now handles much of that Added a check to ensure text wasn't sent twice in talking(), should fix double-speech Cleaned up cmdtable.cpp removing a couple duplicate entries, etc Changed target() to only require 4 values (as the first two were always 0 and 1) Removed many unneeded typedefs and globals Went through cServerData() and noted unused server.ini entries Moved title1(), title2(), and title3() to cClick.cpp since that is their only usage, made use of MAX_TITLE to ensure we wouldn't overrun the buffers, and renamed them matching what title they were 3/11/2003 Changed: Fixed a potentially very serious bugs with how containers were being set upon loading the world Fixed possible re-adding of weight to containers and characters at load Fixed a bug causing equipped items that were not weapons to take damage in combat Minor cleanups / warning fixes / Linux compatability issues (punt) 3/7/2003 Overhauls/Additions/Major Changes Changed: Tweaks/Object Conversions/Misc Small Changes Changed: Changed CItem::Get/SetLayer() to a UI08 Fixed a bug in speech causing you to see your own text twice Fixed a nasty crash bug
2003-03-23 10:18:02 +00:00
#include "cGuild.h"
#include "combat.h"
#include "townregion.h"
#include "cRaces.h"
#include "skills.h"
#include "CJSMapping.h"
Added: -JS Get/Set "vulnerable" handlers for character properties (Abaddon) -willHunger with Get/Set HungerStatus() wrappers to CChar class (can now selectively stop a character/creature from continuing to hunger) -JS Get/Set "willhunger" handlers for character properties Changed: Linux compile fixes (thanks Malketh) Hash.h warning fixed (thanks Philantrop) Fixes to getRootPack() and getPackOwner() Removed many #includes from the global scope, including them in the specific files that need them This should greatly reduce compile time and filesize, along with the need to recompile after altering most headers Removed the linux ifdefs around typedefd function declarations, this should work with gcc 3.2 Moved global loading functions into a new cFileIO() class to take them out of global scope Fixed an issue causing items to not be sent to the client (thanks Malketh) Moved some global structs into the CWorldMain class Fixed a bug causing a crash on character / item creation Moved all effects stuff into its own class to take it out of global scope Changed the variable CChar::region to CChar::regionNum to avoid conflicts with the cTownRegion region[] indexes Moved getbestskill(), isHuman(), and inDungeon() into the CChar class to remove them from global scope Took npcSimpleAttackTarget() out of global scope Rewrote restock() to make use of restockNPC() Changed the typedef'd iterator in hash.h to HASHITERATOR to kill a Linux warning Renamed cEffects::soundeffect() to PlaySound() and removed unneeded overloads Fixed a bug causing executebatch to be set with locationcount data Rewrote cEffects::bgsound() Documented sounds.cpp Misc minor cleanups / fixes Removed: sendItemsInRange() (CChar::Teleport() does the same thing) Many #includes that were not being used deathMenu() respawnnow() and moved all of its code into command_respawn() one instance of cEffects::scpSoundEffect() and renamed the other to PlaySound() 3/13/2003 Changed Fixed an issue allowing the server to not have a dictionary.ZRO (which would cause a crash when a dictionary entry was called with no language) Fixed an issue causing the server to puke when it attempted a restart Moved SpawnRandomItem() into cItem class Moved SpawnRandomMonster() into cCharHandle class Broke necro.dfn into fishing.dfn and digging.dfn Made better use of SpawnRandomItem() and SpawnRandomMonster() 3/12/2003 Added: CPOpenGump and CPSpeech packet class to remove some global vars (Note these are pretty basic classes and someone with a better understanding of how we handle sending/recieving packets could probably expand these to make better use of them) Changed: Moved many global vars into the CWorldMain() class Cleaned ResetVars() in uox3.cpp as ResetDefaults() in CWorldMain() now handles much of that Added a check to ensure text wasn't sent twice in talking(), should fix double-speech Cleaned up cmdtable.cpp removing a couple duplicate entries, etc Changed target() to only require 4 values (as the first two were always 0 and 1) Removed many unneeded typedefs and globals Went through cServerData() and noted unused server.ini entries Moved title1(), title2(), and title3() to cClick.cpp since that is their only usage, made use of MAX_TITLE to ensure we wouldn't overrun the buffers, and renamed them matching what title they were 3/11/2003 Changed: Fixed a potentially very serious bugs with how containers were being set upon loading the world Fixed possible re-adding of weight to containers and characters at load Fixed a bug causing equipped items that were not weapons to take damage in combat Minor cleanups / warning fixes / Linux compatability issues (punt) 3/7/2003 Overhauls/Additions/Major Changes Changed: Tweaks/Object Conversions/Misc Small Changes Changed: Changed CItem::Get/SetLayer() to a UI08 Fixed a bug in speech causing you to see your own text twice Fixed a nasty crash bug
2003-03-23 10:18:02 +00:00
#include "cScript.h"
#include "regions.h"
#include "magic.h"
#include "cMagic.h"
#include "scriptc.h"
#include "ssection.h"
#include "classes.h"
#include "movement.h"
#include "Dictionary.h"
Instance-support and misc code cleanup Misc code and documentation cleanup: Updated and standardized function comment blocks throughout entire codebase Grouped getters and setters together in pairs and documented them as one Removed empty and/or non-useful information from comment blocks Removed unused function from cItem.cpp/h - IncID() - formerly used to change IDs for doors Added new feature - Instances Objects (characters, items, multis, spawnregions) can now make use of a 5th parameter to determine their location in the game world. In addition to the traditional X, Y, Z and WORLDNUMBER parameters, a new one has been added - INSTANCEID - that allows objects to exist at the same coordinates in the same world, but in different "dimensions". Code has been updated in multiple places to support this, and a default instanceID of 0 is assumed if nothing else is specified. Added support for new DFN tag in town regions, spawn regions and locations - INSTANCEID (defaults to 0 if not present) Added support for another start location parameter after worldNum in UOX.INI representing instanceID (defaults to 0 if not present) Updated TWEAK menu to include WorldNumber and instanceID Fixed BaseWeight option in TWEAK menu Updated CBase_Teleport - now takes an optional 5th parameter instanceID Updated SE_SpawnNPC now takes an optional 5th parameter - instanceID Updated SE_FindMulti now takes an optional 5th parameter - instanceID Updated SE_GetItem now takes an optional 5th parameter - instanceID Updated SE_FindItem now takes an optional 6th parameter - instanceID Added new JS property for Items, Characters, Regions: .instanceID Added JS property for Regions: .members - returns comma-separated list of town member serials Updated JS scripts making use of the above-mentioned JS Methods/Functions Updated dictionaries with new tweak menu entry texts Exposed SpawnRegions to JS engine, and updated JS docs with details: SpawnRegion JS Functions IterateOverSpawnRegions() GetSpawnRegion( spawnRegNum ) GetSpawnRegionCount() SpawnRegion JS Properties name regionNum itemList npcList item npc maxItems maxNpcs itemCount npcCount onlyOutside prefZ x1 y1 x2 y2 world instanceID minTime maxTime call
2020-08-08 13:57:15 +08:00
#include "cSpawnRegion.h"
Added: -JS Get/Set "vulnerable" handlers for character properties (Abaddon) -willHunger with Get/Set HungerStatus() wrappers to CChar class (can now selectively stop a character/creature from continuing to hunger) -JS Get/Set "willhunger" handlers for character properties Changed: Linux compile fixes (thanks Malketh) Hash.h warning fixed (thanks Philantrop) Fixes to getRootPack() and getPackOwner() Removed many #includes from the global scope, including them in the specific files that need them This should greatly reduce compile time and filesize, along with the need to recompile after altering most headers Removed the linux ifdefs around typedefd function declarations, this should work with gcc 3.2 Moved global loading functions into a new cFileIO() class to take them out of global scope Fixed an issue causing items to not be sent to the client (thanks Malketh) Moved some global structs into the CWorldMain class Fixed a bug causing a crash on character / item creation Moved all effects stuff into its own class to take it out of global scope Changed the variable CChar::region to CChar::regionNum to avoid conflicts with the cTownRegion region[] indexes Moved getbestskill(), isHuman(), and inDungeon() into the CChar class to remove them from global scope Took npcSimpleAttackTarget() out of global scope Rewrote restock() to make use of restockNPC() Changed the typedef'd iterator in hash.h to HASHITERATOR to kill a Linux warning Renamed cEffects::soundeffect() to PlaySound() and removed unneeded overloads Fixed a bug causing executebatch to be set with locationcount data Rewrote cEffects::bgsound() Documented sounds.cpp Misc minor cleanups / fixes Removed: sendItemsInRange() (CChar::Teleport() does the same thing) Many #includes that were not being used deathMenu() respawnnow() and moved all of its code into command_respawn() one instance of cEffects::scpSoundEffect() and renamed the other to PlaySound() 3/13/2003 Changed Fixed an issue allowing the server to not have a dictionary.ZRO (which would cause a crash when a dictionary entry was called with no language) Fixed an issue causing the server to puke when it attempted a restart Moved SpawnRandomItem() into cItem class Moved SpawnRandomMonster() into cCharHandle class Broke necro.dfn into fishing.dfn and digging.dfn Made better use of SpawnRandomItem() and SpawnRandomMonster() 3/12/2003 Added: CPOpenGump and CPSpeech packet class to remove some global vars (Note these are pretty basic classes and someone with a better understanding of how we handle sending/recieving packets could probably expand these to make better use of them) Changed: Moved many global vars into the CWorldMain() class Cleaned ResetVars() in uox3.cpp as ResetDefaults() in CWorldMain() now handles much of that Added a check to ensure text wasn't sent twice in talking(), should fix double-speech Cleaned up cmdtable.cpp removing a couple duplicate entries, etc Changed target() to only require 4 values (as the first two were always 0 and 1) Removed many unneeded typedefs and globals Went through cServerData() and noted unused server.ini entries Moved title1(), title2(), and title3() to cClick.cpp since that is their only usage, made use of MAX_TITLE to ensure we wouldn't overrun the buffers, and renamed them matching what title they were 3/11/2003 Changed: Fixed a potentially very serious bugs with how containers were being set upon loading the world Fixed possible re-adding of weight to containers and characters at load Fixed a bug causing equipped items that were not weapons to take damage in combat Minor cleanups / warning fixes / Linux compatability issues (punt) 3/7/2003 Overhauls/Additions/Major Changes Changed: Tweaks/Object Conversions/Misc Small Changes Changed: Changed CItem::Get/SetLayer() to a UI08 Fixed a bug in speech causing you to see your own text twice Fixed a nasty crash bug
2003-03-23 10:18:02 +00:00
#include "jsobj.h"
#include "jsutil.h"
2002-04-07 20:53:41 +00:00
#include "PartySystem.h"
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
void MakeShop( CChar *c );
void ScriptError( JSContext *cx, const char *txt, ... );
2002-04-07 20:53:41 +00:00
2025-04-07 14:11:13 +10:00
std::map< std::string, intN > propLookupAccount;
2025-04-07 12:44:01 +10:00
std::map< std::string, intN > propLookupChar;
2025-04-07 14:11:13 +10:00
std::map< std::string, intN > propLookupConsole;
std::map< std::string, intN > propLookupGuild;
std::map< std::string, intN > propLookupItem;
std::map< std::string, intN > propLookupParty;
std::map< std::string, intN > propLookupRace;
std::map< std::string, intN > propLookupRegion;
std::map< std::string, intN > propLookupResource;
std::map< std::string, intN > propLookupSkills;
std::map< std::string, intN > propLookupSocket;
std::map< std::string, intN > propLookupSpawnRegion;
2025-04-07 12:44:01 +10:00
UI16 GetPropByName( JSPrototypes protoNum, const std::string& prop )
{
const std::map< std::string, intN > * toScan = nullptr;
2025-04-07 14:11:13 +10:00
switch( protoNum )
2025-04-07 12:44:01 +10:00
{
case JSP_ITEM: toScan = &propLookupItem; break;
case JSP_CHAR: toScan = &propLookupChar; break;
2025-04-07 14:11:13 +10:00
case JSP_SOCK: toScan = &propLookupSocket; break;
case JSP_GUILD: toScan = &propLookupGuild; break;
case JSP_RACE: toScan = &propLookupRace; break;
case JSP_REGION: toScan = &propLookupRegion; break;
case JSP_SPAWNREGION: toScan = &propLookupSpawnRegion; break;
case JSP_RESOURCE: toScan = &propLookupResource; break;
case JSP_ACCOUNT: toScan = &propLookupAccount; break;
case JSP_CONSOLE: toScan = &propLookupConsole; break;
case JSP_PARTY: toScan = &propLookupParty; break;
case JSP_GLOBALSKILLS: toScan = &propLookupSkills; break;
2025-04-07 12:44:01 +10:00
case JSP_SPELL:
case JSP_SPELLS:
case JSP_GLOBALSKILL:
case JSP_ACCOUNTS:
case JSP_FILE:
case JSP_CREATEENTRY:
case JSP_CREATEENTRIES:
case JSP_TIMER:
case JSP_SCRIPT:
2025-04-07 14:11:13 +10:00
case JSP_GUMP:
case JSP_PACKET:
2025-04-07 12:44:01 +10:00
break;
};
if( toScan != nullptr )
{
std::map< std::string, intN >::const_iterator citer = toScan->find( prop );
if( citer != toScan->cend() ) {
return citer->second;
}
else {
return 0xFFFF;
}
}
else
{
return 0xFFFF;
}
}
2025-04-07 14:11:13 +10:00
UI16 getScriptID( JSContext *cx, jsid id, JSPrototypes section )
{
UI16 propID = 0xFFFF;
if( JSID_IS_STRING( id ) )
{
auto str = JSID_TO_STRING( id );
char* chars = JS_EncodeString( cx, str );
propID = GetPropByName( section, chars );
/*if( propID == 0xFFFF )
2025-04-07 14:11:13 +10:00
{
Console.Log( oldstrutil::format( "String property '%s' found on object type %d in script %d", chars, section, JSMapping->currentActive()->GetScriptID() ), "warning.log");
}*/
2025-04-07 14:11:13 +10:00
js_free( chars );
}
else if( JSID_IS_INT( id ) )
{
propID = JSID_TO_INT( id );
}
return propID;
}
2025-04-07 12:44:01 +10:00
JSBool CGuildsProps_getProperty( JSContext *cx, JSObject *obj, jsid id, jsval *vp )
2002-04-07 20:53:41 +00:00
{
*vp = INT_TO_JSVAL( 0 );
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
return JS_TRUE;
}
2002-04-07 20:53:41 +00:00
2025-03-28 13:23:59 +10:00
JSBool CGuildsProps_setProperty( JSContext* cx, JSObject* obj, jsid id, JSBool strict, jsval* vp )
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
{
return JS_TRUE;
}
JSBool CSpellsProps_getProperty( JSContext *cx, JSObject *obj, jsid id, jsval *vp )
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
{
size_t spellId = JSID_TO_INT( id );
2002-04-07 20:53:41 +00:00
if( spellId >= Magic->spells.size() )
{
ScriptError( cx, oldstrutil::format( "Spells: Invalid Spell ID (%i) provided", spellId ).c_str() );
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
*vp = JSVAL_NULL;
return JS_FALSE;
}
2002-04-07 20:53:41 +00:00
CSpellInfo *mySpell = &Magic->spells[spellId];
2021-06-12 07:30:23 -04:00
if( mySpell == nullptr )
{
ScriptError( cx, oldstrutil::format( "Spells: Invalid Spell with spellId %i", spellId ).c_str() );
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
*vp = JSVAL_NULL;
return JS_FALSE;
}
2002-04-07 20:53:41 +00:00
2021-06-12 07:30:23 -04:00
JSObject *jsSpell = JS_NewObject( cx, &UOXSpell_class, nullptr, obj );
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
JS_DefineProperties( cx, jsSpell, CSpellProperties );
JS_SetPrivate( cx, jsSpell, mySpell );
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
*vp = OBJECT_TO_JSVAL( jsSpell );
return JS_TRUE;
}
2025-03-28 13:23:59 +10:00
JSBool CSpellProps_setProperty( JSContext* cx, JSObject* obj, jsid id, JSBool strict, jsval* vp )
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
{
return JS_TRUE;
}
JSBool CSpellProps_getProperty( JSContext *cx, JSObject *obj, jsid id, jsval *vp )
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
{
CSpellInfo *gPriv = static_cast<CSpellInfo*>( JS_GetPrivate( cx, obj ));
2021-06-12 07:30:23 -04:00
if( gPriv == nullptr )
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
return JS_FALSE;
std::string spellName = "";
2002-04-07 20:53:41 +00:00
if( JSID_IS_INT( id ))
2002-04-07 20:53:41 +00:00
{
2021-06-12 07:30:23 -04:00
JSString *tString = nullptr;
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
bool bDone = false;
size_t i = 0;
switch( JSID_TO_INT( id ))
2002-04-07 20:53:41 +00:00
{
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
case CSP_ID:
for( i = 0; i < Magic->spells.size() && !bDone; ++i )
{
if( &Magic->spells[i] == gPriv )
{
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
*vp = INT_TO_JSVAL( i );
bDone = true;
}
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
}
break;
case CSP_ACTION: *vp = INT_TO_JSVAL( gPriv->Action() ); break;
case CSP_BASEDMG: *vp = INT_TO_JSVAL( gPriv->BaseDmg() ); break;
08/08/2021 - Xuri (0.99.4w) Added support for new Skills DFN tag: SKILLDELAY=# // Delay in seconds before another skill can be used after using this skill. Overrides global delay from UOX.INI Updated skill cSkills::SkillUse() to use skill-specific skill delays if set for a given skill, or global delay from ini if not. Also added a check to see if skill delay timer has been modified by onSkill JS event before attempting to set a default timer Updated skill delays to better match ~pub15 era: Reduced global SKILLDELAY setting in UOX.INI from 2 to 1 second Detecting Hidden skill now has a default skill delay of 10 seconds Herding skill now has a default skill delay of 10 seconds Hiding skill now has a default skill delay of 10 seconds, with shorter delays (global skill delay) for trying to hide while in combat or for successfully hiding Meditation skill now has a default skill delay of 10 seconds, with shorter delays (global skill delay) for failing due to hands being occupied or already being at max mana Peacemaking skill now has a default skill delay of 10 seconds for failed skill checks, and 5 seconds delay for successful ones Poisoning skill now has a default skill delay of 10 seconds Provocation skill now has a default skill delay of 10 seconds Remove Trap skill now has a default skill delay of 10 seconds Stealing skill now has a default skill delay of 10 seconds Stealth skill now has a default skill delay of 10 seconds Tracking skill now has a default skill delay of 10 seconds Veterinary skill now has a default skill delay of 10 seconds Fixed an issue with global JS Timer object that would reference the wrong timerIDs Extended global JS timer object to include timers from socket as well (marked with SOCK_ prefix): .SOCK_SKILLDELAY // Delay before the next time player can use another skill .SOCK_OBJDELAY // Delay before next time player can use another object .SOCK_SPIRITSPEAK // Timer that tracks remaining duration of player's Spirit Speak .SOCK_TRACKING // Timer that tracks remaining duration for player's Tracking skill .SOCK_FISHING // Timer that tracks remaining duration for player's Fishing skill .SOCK_MUTETIME // Timer that tracks remaining duration a player remains muted .SOCK_TRACKINGDISPLAY // Timer that tracks interval between each time tracking display is updated Updated various JS scripts to use the new Timer.TIMERNAME with .GetTimer()/.SetTimer() JS Methods for Characters and Sockets Updated Persecution ability for player ghosts to use the skill delay of the Spirit Speak skill, if set Updated Persecution ability to base mana damage primarily on player's Spirit Speak skill rather than their Intelligence In order to cut down on the amount of messages sent from server to players trying to spam-use objects/skills, UOX3 now only sends a maximum of one message for object use delay and one message for skill use delay while the delay timers for these are in effect. This resets on the next successful use of an object or skill. This is tracked via bools in cSocket class: bool objDelayMsgShown bool skillDelayMsgShown Converted DELAY tag in spells.dfn to use seconds (with decimals) instead of tenths of a second, which was not precise enough. This controls the cast time of spells. What would previously say DELAY=10 (10/10ths of a second) now says DELAY=1.0 (1 second) Added support for new Spells DFN tag to control delay until damage takes place after casting a spell, replacing UOX.INI setting COMBATEXPLODEDELAY, which is no longer used: DAMAGEDELAY=# // Delay in seconds (decimal) until a direct damage spell deals its damage Added support for a new Spells DFN tag to control cast recovery time, during which additional spells cannot be cast: RECOVERYDELAY=# // Delay in seconds (decimal) until player can cast another spell Added new setting in UOX.INI to control whether player spellcasting gets interrupted upon equipping/picking up items: ITEMSINTERRUPTCASTING=1 // If enabled, spellcasting gets interrupted by equipping/picking up items. Defaults to enabled. All direct damage spells by default have a 1.0s delay before damage (and VFX) is applied, except Explosion which has a 2.5s delay All spells by default have a cast recovery duration of 1.0s; from the moment a spellcast is completed/moment targeting cursor appears, the player will be unable to cast any other spell for the duration of the cast recovery Reagent checks and skill-check now take place AFTER the spellcast animation, not before! Spell cast times now follow this formula, though values set per spell and can be modified: 0.25 + ( spellCircle * 0.25 ) Overhauled spell sound FX and VFX for for all spells Players can no longer cast spells while holding items on the cursor Fixed Magic Trap, Magic Untrap, Magic Lock and Magic Unlock not being usable on containers in one's own backpack Fixed an issue that caused Magic Trap to deal between 50 to 100 damage to the player. New damage: 5 to 10, depending on Magery skill Fixed an issue where Magic Untrap spell would completely remove traps from spawn containers instead of disable them Fixed an issue where Telekinesis spell would not set off traps on containers properly Added additional FX for Teleport spell played at player's original location before the teleport took place Fixed a bug where creatures summoned with the Summon Creature spell were not dispellable Fixed an issue where the Reveal spell would not reveal players hidden using the Hiding skill Dispel and Mass Dispel spells are no longer guaranteed to succeed at dispelling summoned creatures. Instead, the chance to dispel is based on the following simple formula, with dispelChance capped at 95% to always leave some chance for a creature to resist a dispel: dispelChance = ( 50 - ( targetResistSkill - casterMagerySkill )) / 1.5 The targetResistSkill is based on the highest value of the summoned creature's spell resistance skill and the spell resistance skill of its summoner Fixed an issue where the Create Food spell attempted to create an invalid item Fixed issue where code that checked for valid drop locations for items didn't allow negative z values (Dragon Slayer) Fixed issue where players could drop items on blocking map tiles like water or mountains (Dragon Slayer) Fixed issue where some JS functions like CheckStaticFlag, CheckDynamicFlag, DoesStaticBlock, DoesDynamicBlock and DoesMapBlock would not work correctly when passed negative Z values Fixed issue where context menu were listing skills to train from NPCs based on effective skill rather than base skill Fixed issue where NPCs would offer skills for training even if those skills were not above the minimum 60 skillpoints Updated clilocID used for Gump JS Method AddToolTip - as well as for some item/character tooltip data - from 1050045 to 1042971 for improved client compatibility Human/Elf/Gargoyle NPCs with spellcasting capabilities will now play a casting animation and briefly stop moving when they cast spells Updated NPC spellcasting code to help NPCs make a bit better choices of what spells to cast during combat. Now they take their own health percentage into account, and cast more offensive spells when at near full health vs more defensive spells as their health drops Fixed an issue where Hirelings wouldn't always immediately start following their new owners Fixed a bug where the Earthquake spell could incorrectly add NPC characters marked for deletion to the refresh queue Updated skills and stats of all implemented human NPCs (including vendors) to better match the state of those NPCs around the time of Pub15 Fixed SPATTACK values for a couple of NPCs that were still using values based on spell bitmask instead of spell circle value Updated stats of Jukan and Meer NPCs (dfndata/npc/lbrraces.dfn) to match stats from official LBR guide Added support for an optional third parameter for Character/Socket JS Method .CustomTarget() to allow highlighting targeting cursors as neutral (0, default aura), harmful (1, red aura), helpful (2, blue aura). A value of 3 will cancel the currently active targeting cursor. New syntax: myChar/mySock.CustomTarget( targetID, txtToSay, cursorType ) // supported cursorTypes: 0 = neutral, 1 = harmful, 2 = helpful, 3 = cancel current target cursor Various target cursors triggered by code (like hard-coded spells, some pet commands) also make use of these cursorTypes
2021-08-08 01:57:25 +08:00
case CSP_DELAY: JS_NewNumberValue( cx, gPriv->Delay(), vp ); break;
case CSP_DAMAGEDELAY: JS_NewNumberValue( cx, gPriv->DamageDelay(), vp ); break;
case CSP_RECOVERYDELAY: JS_NewNumberValue( cx, gPriv->RecoveryDelay(), vp ); break;
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
case CSP_HEALTH: *vp = INT_TO_JSVAL( gPriv->Health() ); break;
case CSP_STAMINA: *vp = INT_TO_JSVAL( gPriv->Stamina() ); break;
case CSP_MANA: *vp = INT_TO_JSVAL( gPriv->Mana() ); break;
case CSP_MANTRA: tString = JS_NewStringCopyZ( cx, gPriv->Mantra().c_str() );
*vp = STRING_TO_JSVAL( tString );
break;
case CSP_NAME:
for( i = 0; i < Magic->spells.size() && !bDone; ++i )
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
{
if( &Magic->spells[i] == gPriv - 1 )
{
spellName = Dictionary->GetEntry( magic_table[i].spell_name );
tString = JS_NewStringCopyZ( cx, spellName.c_str() );
*vp = STRING_TO_JSVAL( tString );
bDone = true;
}
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
}
break;
case CSP_STRTOSAY:
tString = JS_NewStringCopyZ( cx, gPriv->StringToSay().c_str() );
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
*vp = STRING_TO_JSVAL( tString );
break;
case CSP_SCROLLLOW: *vp = INT_TO_JSVAL( gPriv->ScrollLow() ); break;
case CSP_SCROLLHIGH: *vp = INT_TO_JSVAL( gPriv->ScrollHigh() ); break;
case CSP_CIRCLE: *vp = INT_TO_JSVAL( gPriv->Circle() ); break;
case CSP_LOWSKILL: *vp = INT_TO_JSVAL( gPriv->LowSkill() ); break;
case CSP_HIGHSKILL: *vp = INT_TO_JSVAL( gPriv->HighSkill() ); break;
case CSP_REQUIRETARGET: *vp = BOOLEAN_TO_JSVAL( gPriv->RequireTarget() ); break;
case CSP_REQUIREITEM: *vp = BOOLEAN_TO_JSVAL( gPriv->RequireItemTarget() ); break;
case CSP_REQUIRECHAR: *vp = BOOLEAN_TO_JSVAL( gPriv->RequireCharTarget() ); break;
case CSP_REQUIRELOCATION: *vp = BOOLEAN_TO_JSVAL( gPriv->RequireLocTarget() ); break;
case CSP_TRAVELSPELL: *vp = BOOLEAN_TO_JSVAL( gPriv->TravelSpell() ); break;
case CSP_FIELDSPELL: *vp = BOOLEAN_TO_JSVAL( gPriv->FieldSpell() ); break;
case CSP_REFLECTABLE: *vp = BOOLEAN_TO_JSVAL( gPriv->SpellReflectable() ); break;
case CSP_AGGRESSIVESPELL: *vp = BOOLEAN_TO_JSVAL( gPriv->AggressiveSpell() ); break;
case CSP_RESISTABLE: *vp = BOOLEAN_TO_JSVAL( gPriv->Resistable() ); break;
case CSP_SOUNDEFFECT: *vp = INT_TO_JSVAL( gPriv->Effect() ); break;
case CSP_ENABLED: *vp = BOOLEAN_TO_JSVAL( gPriv->Enabled() ); break;
2025-03-08 16:34:37 -06:00
case CSP_TITHING: *vp = INT_TO_JSVAL( gPriv->Tithing() ); break;
case CSP_REAGENTS:
{
JSObject *reagents = JS_NewArrayObject( cx, 0, nullptr );
const auto& spellReagents = gPriv->Reagents();
for( size_t reagentIndex = 0; reagentIndex < spellReagents.size(); ++reagentIndex )
{
const auto& spellReagent = spellReagents[reagentIndex];
JSObject *reagent = JS_NewArrayObject( cx, 0, nullptr );
jsval sectionId = STRING_TO_JSVAL( JS_NewStringCopyZ( cx, spellReagent.sectionId.c_str() ));
jsval amount = INT_TO_JSVAL( spellReagent.amount );
JS_SetElement( cx, reagent, 0, &sectionId );
JS_SetElement( cx, reagent, 1, &amount );
if( spellReagent.colourCheck )
{
jsval colour = INT_TO_JSVAL( spellReagent.colour );
JS_SetElement( cx, reagent, 2, &colour );
}
jsval reagentValue = OBJECT_TO_JSVAL( reagent );
JS_SetElement( cx, reagents, reagentIndex, &reagentValue );
}
*vp = OBJECT_TO_JSVAL( reagents );
break;
}
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
default: break;
2002-04-07 20:53:41 +00:00
}
}
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
return JS_TRUE;
}
2002-04-07 20:53:41 +00:00
2025-03-28 13:23:59 +10:00
JSBool CGlobalSkillsProps_getProperty( JSContext *cx, JSObject *obj, jsid id, jsval *vp )
08/08/2021 - Xuri (0.99.4w) Added support for new Skills DFN tag: SKILLDELAY=# // Delay in seconds before another skill can be used after using this skill. Overrides global delay from UOX.INI Updated skill cSkills::SkillUse() to use skill-specific skill delays if set for a given skill, or global delay from ini if not. Also added a check to see if skill delay timer has been modified by onSkill JS event before attempting to set a default timer Updated skill delays to better match ~pub15 era: Reduced global SKILLDELAY setting in UOX.INI from 2 to 1 second Detecting Hidden skill now has a default skill delay of 10 seconds Herding skill now has a default skill delay of 10 seconds Hiding skill now has a default skill delay of 10 seconds, with shorter delays (global skill delay) for trying to hide while in combat or for successfully hiding Meditation skill now has a default skill delay of 10 seconds, with shorter delays (global skill delay) for failing due to hands being occupied or already being at max mana Peacemaking skill now has a default skill delay of 10 seconds for failed skill checks, and 5 seconds delay for successful ones Poisoning skill now has a default skill delay of 10 seconds Provocation skill now has a default skill delay of 10 seconds Remove Trap skill now has a default skill delay of 10 seconds Stealing skill now has a default skill delay of 10 seconds Stealth skill now has a default skill delay of 10 seconds Tracking skill now has a default skill delay of 10 seconds Veterinary skill now has a default skill delay of 10 seconds Fixed an issue with global JS Timer object that would reference the wrong timerIDs Extended global JS timer object to include timers from socket as well (marked with SOCK_ prefix): .SOCK_SKILLDELAY // Delay before the next time player can use another skill .SOCK_OBJDELAY // Delay before next time player can use another object .SOCK_SPIRITSPEAK // Timer that tracks remaining duration of player's Spirit Speak .SOCK_TRACKING // Timer that tracks remaining duration for player's Tracking skill .SOCK_FISHING // Timer that tracks remaining duration for player's Fishing skill .SOCK_MUTETIME // Timer that tracks remaining duration a player remains muted .SOCK_TRACKINGDISPLAY // Timer that tracks interval between each time tracking display is updated Updated various JS scripts to use the new Timer.TIMERNAME with .GetTimer()/.SetTimer() JS Methods for Characters and Sockets Updated Persecution ability for player ghosts to use the skill delay of the Spirit Speak skill, if set Updated Persecution ability to base mana damage primarily on player's Spirit Speak skill rather than their Intelligence In order to cut down on the amount of messages sent from server to players trying to spam-use objects/skills, UOX3 now only sends a maximum of one message for object use delay and one message for skill use delay while the delay timers for these are in effect. This resets on the next successful use of an object or skill. This is tracked via bools in cSocket class: bool objDelayMsgShown bool skillDelayMsgShown Converted DELAY tag in spells.dfn to use seconds (with decimals) instead of tenths of a second, which was not precise enough. This controls the cast time of spells. What would previously say DELAY=10 (10/10ths of a second) now says DELAY=1.0 (1 second) Added support for new Spells DFN tag to control delay until damage takes place after casting a spell, replacing UOX.INI setting COMBATEXPLODEDELAY, which is no longer used: DAMAGEDELAY=# // Delay in seconds (decimal) until a direct damage spell deals its damage Added support for a new Spells DFN tag to control cast recovery time, during which additional spells cannot be cast: RECOVERYDELAY=# // Delay in seconds (decimal) until player can cast another spell Added new setting in UOX.INI to control whether player spellcasting gets interrupted upon equipping/picking up items: ITEMSINTERRUPTCASTING=1 // If enabled, spellcasting gets interrupted by equipping/picking up items. Defaults to enabled. All direct damage spells by default have a 1.0s delay before damage (and VFX) is applied, except Explosion which has a 2.5s delay All spells by default have a cast recovery duration of 1.0s; from the moment a spellcast is completed/moment targeting cursor appears, the player will be unable to cast any other spell for the duration of the cast recovery Reagent checks and skill-check now take place AFTER the spellcast animation, not before! Spell cast times now follow this formula, though values set per spell and can be modified: 0.25 + ( spellCircle * 0.25 ) Overhauled spell sound FX and VFX for for all spells Players can no longer cast spells while holding items on the cursor Fixed Magic Trap, Magic Untrap, Magic Lock and Magic Unlock not being usable on containers in one's own backpack Fixed an issue that caused Magic Trap to deal between 50 to 100 damage to the player. New damage: 5 to 10, depending on Magery skill Fixed an issue where Magic Untrap spell would completely remove traps from spawn containers instead of disable them Fixed an issue where Telekinesis spell would not set off traps on containers properly Added additional FX for Teleport spell played at player's original location before the teleport took place Fixed a bug where creatures summoned with the Summon Creature spell were not dispellable Fixed an issue where the Reveal spell would not reveal players hidden using the Hiding skill Dispel and Mass Dispel spells are no longer guaranteed to succeed at dispelling summoned creatures. Instead, the chance to dispel is based on the following simple formula, with dispelChance capped at 95% to always leave some chance for a creature to resist a dispel: dispelChance = ( 50 - ( targetResistSkill - casterMagerySkill )) / 1.5 The targetResistSkill is based on the highest value of the summoned creature's spell resistance skill and the spell resistance skill of its summoner Fixed an issue where the Create Food spell attempted to create an invalid item Fixed issue where code that checked for valid drop locations for items didn't allow negative z values (Dragon Slayer) Fixed issue where players could drop items on blocking map tiles like water or mountains (Dragon Slayer) Fixed issue where some JS functions like CheckStaticFlag, CheckDynamicFlag, DoesStaticBlock, DoesDynamicBlock and DoesMapBlock would not work correctly when passed negative Z values Fixed issue where context menu were listing skills to train from NPCs based on effective skill rather than base skill Fixed issue where NPCs would offer skills for training even if those skills were not above the minimum 60 skillpoints Updated clilocID used for Gump JS Method AddToolTip - as well as for some item/character tooltip data - from 1050045 to 1042971 for improved client compatibility Human/Elf/Gargoyle NPCs with spellcasting capabilities will now play a casting animation and briefly stop moving when they cast spells Updated NPC spellcasting code to help NPCs make a bit better choices of what spells to cast during combat. Now they take their own health percentage into account, and cast more offensive spells when at near full health vs more defensive spells as their health drops Fixed an issue where Hirelings wouldn't always immediately start following their new owners Fixed a bug where the Earthquake spell could incorrectly add NPC characters marked for deletion to the refresh queue Updated skills and stats of all implemented human NPCs (including vendors) to better match the state of those NPCs around the time of Pub15 Fixed SPATTACK values for a couple of NPCs that were still using values based on spell bitmask instead of spell circle value Updated stats of Jukan and Meer NPCs (dfndata/npc/lbrraces.dfn) to match stats from official LBR guide Added support for an optional third parameter for Character/Socket JS Method .CustomTarget() to allow highlighting targeting cursors as neutral (0, default aura), harmful (1, red aura), helpful (2, blue aura). A value of 3 will cancel the currently active targeting cursor. New syntax: myChar/mySock.CustomTarget( targetID, txtToSay, cursorType ) // supported cursorTypes: 0 = neutral, 1 = harmful, 2 = helpful, 3 = cancel current target cursor Various target cursors triggered by code (like hard-coded spells, some pet commands) also make use of these cursorTypes
2021-08-08 01:57:25 +08:00
{
size_t skillId = JSID_TO_INT( id );
08/08/2021 - Xuri (0.99.4w) Added support for new Skills DFN tag: SKILLDELAY=# // Delay in seconds before another skill can be used after using this skill. Overrides global delay from UOX.INI Updated skill cSkills::SkillUse() to use skill-specific skill delays if set for a given skill, or global delay from ini if not. Also added a check to see if skill delay timer has been modified by onSkill JS event before attempting to set a default timer Updated skill delays to better match ~pub15 era: Reduced global SKILLDELAY setting in UOX.INI from 2 to 1 second Detecting Hidden skill now has a default skill delay of 10 seconds Herding skill now has a default skill delay of 10 seconds Hiding skill now has a default skill delay of 10 seconds, with shorter delays (global skill delay) for trying to hide while in combat or for successfully hiding Meditation skill now has a default skill delay of 10 seconds, with shorter delays (global skill delay) for failing due to hands being occupied or already being at max mana Peacemaking skill now has a default skill delay of 10 seconds for failed skill checks, and 5 seconds delay for successful ones Poisoning skill now has a default skill delay of 10 seconds Provocation skill now has a default skill delay of 10 seconds Remove Trap skill now has a default skill delay of 10 seconds Stealing skill now has a default skill delay of 10 seconds Stealth skill now has a default skill delay of 10 seconds Tracking skill now has a default skill delay of 10 seconds Veterinary skill now has a default skill delay of 10 seconds Fixed an issue with global JS Timer object that would reference the wrong timerIDs Extended global JS timer object to include timers from socket as well (marked with SOCK_ prefix): .SOCK_SKILLDELAY // Delay before the next time player can use another skill .SOCK_OBJDELAY // Delay before next time player can use another object .SOCK_SPIRITSPEAK // Timer that tracks remaining duration of player's Spirit Speak .SOCK_TRACKING // Timer that tracks remaining duration for player's Tracking skill .SOCK_FISHING // Timer that tracks remaining duration for player's Fishing skill .SOCK_MUTETIME // Timer that tracks remaining duration a player remains muted .SOCK_TRACKINGDISPLAY // Timer that tracks interval between each time tracking display is updated Updated various JS scripts to use the new Timer.TIMERNAME with .GetTimer()/.SetTimer() JS Methods for Characters and Sockets Updated Persecution ability for player ghosts to use the skill delay of the Spirit Speak skill, if set Updated Persecution ability to base mana damage primarily on player's Spirit Speak skill rather than their Intelligence In order to cut down on the amount of messages sent from server to players trying to spam-use objects/skills, UOX3 now only sends a maximum of one message for object use delay and one message for skill use delay while the delay timers for these are in effect. This resets on the next successful use of an object or skill. This is tracked via bools in cSocket class: bool objDelayMsgShown bool skillDelayMsgShown Converted DELAY tag in spells.dfn to use seconds (with decimals) instead of tenths of a second, which was not precise enough. This controls the cast time of spells. What would previously say DELAY=10 (10/10ths of a second) now says DELAY=1.0 (1 second) Added support for new Spells DFN tag to control delay until damage takes place after casting a spell, replacing UOX.INI setting COMBATEXPLODEDELAY, which is no longer used: DAMAGEDELAY=# // Delay in seconds (decimal) until a direct damage spell deals its damage Added support for a new Spells DFN tag to control cast recovery time, during which additional spells cannot be cast: RECOVERYDELAY=# // Delay in seconds (decimal) until player can cast another spell Added new setting in UOX.INI to control whether player spellcasting gets interrupted upon equipping/picking up items: ITEMSINTERRUPTCASTING=1 // If enabled, spellcasting gets interrupted by equipping/picking up items. Defaults to enabled. All direct damage spells by default have a 1.0s delay before damage (and VFX) is applied, except Explosion which has a 2.5s delay All spells by default have a cast recovery duration of 1.0s; from the moment a spellcast is completed/moment targeting cursor appears, the player will be unable to cast any other spell for the duration of the cast recovery Reagent checks and skill-check now take place AFTER the spellcast animation, not before! Spell cast times now follow this formula, though values set per spell and can be modified: 0.25 + ( spellCircle * 0.25 ) Overhauled spell sound FX and VFX for for all spells Players can no longer cast spells while holding items on the cursor Fixed Magic Trap, Magic Untrap, Magic Lock and Magic Unlock not being usable on containers in one's own backpack Fixed an issue that caused Magic Trap to deal between 50 to 100 damage to the player. New damage: 5 to 10, depending on Magery skill Fixed an issue where Magic Untrap spell would completely remove traps from spawn containers instead of disable them Fixed an issue where Telekinesis spell would not set off traps on containers properly Added additional FX for Teleport spell played at player's original location before the teleport took place Fixed a bug where creatures summoned with the Summon Creature spell were not dispellable Fixed an issue where the Reveal spell would not reveal players hidden using the Hiding skill Dispel and Mass Dispel spells are no longer guaranteed to succeed at dispelling summoned creatures. Instead, the chance to dispel is based on the following simple formula, with dispelChance capped at 95% to always leave some chance for a creature to resist a dispel: dispelChance = ( 50 - ( targetResistSkill - casterMagerySkill )) / 1.5 The targetResistSkill is based on the highest value of the summoned creature's spell resistance skill and the spell resistance skill of its summoner Fixed an issue where the Create Food spell attempted to create an invalid item Fixed issue where code that checked for valid drop locations for items didn't allow negative z values (Dragon Slayer) Fixed issue where players could drop items on blocking map tiles like water or mountains (Dragon Slayer) Fixed issue where some JS functions like CheckStaticFlag, CheckDynamicFlag, DoesStaticBlock, DoesDynamicBlock and DoesMapBlock would not work correctly when passed negative Z values Fixed issue where context menu were listing skills to train from NPCs based on effective skill rather than base skill Fixed issue where NPCs would offer skills for training even if those skills were not above the minimum 60 skillpoints Updated clilocID used for Gump JS Method AddToolTip - as well as for some item/character tooltip data - from 1050045 to 1042971 for improved client compatibility Human/Elf/Gargoyle NPCs with spellcasting capabilities will now play a casting animation and briefly stop moving when they cast spells Updated NPC spellcasting code to help NPCs make a bit better choices of what spells to cast during combat. Now they take their own health percentage into account, and cast more offensive spells when at near full health vs more defensive spells as their health drops Fixed an issue where Hirelings wouldn't always immediately start following their new owners Fixed a bug where the Earthquake spell could incorrectly add NPC characters marked for deletion to the refresh queue Updated skills and stats of all implemented human NPCs (including vendors) to better match the state of those NPCs around the time of Pub15 Fixed SPATTACK values for a couple of NPCs that were still using values based on spell bitmask instead of spell circle value Updated stats of Jukan and Meer NPCs (dfndata/npc/lbrraces.dfn) to match stats from official LBR guide Added support for an optional third parameter for Character/Socket JS Method .CustomTarget() to allow highlighting targeting cursors as neutral (0, default aura), harmful (1, red aura), helpful (2, blue aura). A value of 3 will cancel the currently active targeting cursor. New syntax: myChar/mySock.CustomTarget( targetID, txtToSay, cursorType ) // supported cursorTypes: 0 = neutral, 1 = harmful, 2 = helpful, 3 = cancel current target cursor Various target cursors triggered by code (like hard-coded spells, some pet commands) also make use of these cursorTypes
2021-08-08 01:57:25 +08:00
if( skillId > THROWING )
08/08/2021 - Xuri (0.99.4w) Added support for new Skills DFN tag: SKILLDELAY=# // Delay in seconds before another skill can be used after using this skill. Overrides global delay from UOX.INI Updated skill cSkills::SkillUse() to use skill-specific skill delays if set for a given skill, or global delay from ini if not. Also added a check to see if skill delay timer has been modified by onSkill JS event before attempting to set a default timer Updated skill delays to better match ~pub15 era: Reduced global SKILLDELAY setting in UOX.INI from 2 to 1 second Detecting Hidden skill now has a default skill delay of 10 seconds Herding skill now has a default skill delay of 10 seconds Hiding skill now has a default skill delay of 10 seconds, with shorter delays (global skill delay) for trying to hide while in combat or for successfully hiding Meditation skill now has a default skill delay of 10 seconds, with shorter delays (global skill delay) for failing due to hands being occupied or already being at max mana Peacemaking skill now has a default skill delay of 10 seconds for failed skill checks, and 5 seconds delay for successful ones Poisoning skill now has a default skill delay of 10 seconds Provocation skill now has a default skill delay of 10 seconds Remove Trap skill now has a default skill delay of 10 seconds Stealing skill now has a default skill delay of 10 seconds Stealth skill now has a default skill delay of 10 seconds Tracking skill now has a default skill delay of 10 seconds Veterinary skill now has a default skill delay of 10 seconds Fixed an issue with global JS Timer object that would reference the wrong timerIDs Extended global JS timer object to include timers from socket as well (marked with SOCK_ prefix): .SOCK_SKILLDELAY // Delay before the next time player can use another skill .SOCK_OBJDELAY // Delay before next time player can use another object .SOCK_SPIRITSPEAK // Timer that tracks remaining duration of player's Spirit Speak .SOCK_TRACKING // Timer that tracks remaining duration for player's Tracking skill .SOCK_FISHING // Timer that tracks remaining duration for player's Fishing skill .SOCK_MUTETIME // Timer that tracks remaining duration a player remains muted .SOCK_TRACKINGDISPLAY // Timer that tracks interval between each time tracking display is updated Updated various JS scripts to use the new Timer.TIMERNAME with .GetTimer()/.SetTimer() JS Methods for Characters and Sockets Updated Persecution ability for player ghosts to use the skill delay of the Spirit Speak skill, if set Updated Persecution ability to base mana damage primarily on player's Spirit Speak skill rather than their Intelligence In order to cut down on the amount of messages sent from server to players trying to spam-use objects/skills, UOX3 now only sends a maximum of one message for object use delay and one message for skill use delay while the delay timers for these are in effect. This resets on the next successful use of an object or skill. This is tracked via bools in cSocket class: bool objDelayMsgShown bool skillDelayMsgShown Converted DELAY tag in spells.dfn to use seconds (with decimals) instead of tenths of a second, which was not precise enough. This controls the cast time of spells. What would previously say DELAY=10 (10/10ths of a second) now says DELAY=1.0 (1 second) Added support for new Spells DFN tag to control delay until damage takes place after casting a spell, replacing UOX.INI setting COMBATEXPLODEDELAY, which is no longer used: DAMAGEDELAY=# // Delay in seconds (decimal) until a direct damage spell deals its damage Added support for a new Spells DFN tag to control cast recovery time, during which additional spells cannot be cast: RECOVERYDELAY=# // Delay in seconds (decimal) until player can cast another spell Added new setting in UOX.INI to control whether player spellcasting gets interrupted upon equipping/picking up items: ITEMSINTERRUPTCASTING=1 // If enabled, spellcasting gets interrupted by equipping/picking up items. Defaults to enabled. All direct damage spells by default have a 1.0s delay before damage (and VFX) is applied, except Explosion which has a 2.5s delay All spells by default have a cast recovery duration of 1.0s; from the moment a spellcast is completed/moment targeting cursor appears, the player will be unable to cast any other spell for the duration of the cast recovery Reagent checks and skill-check now take place AFTER the spellcast animation, not before! Spell cast times now follow this formula, though values set per spell and can be modified: 0.25 + ( spellCircle * 0.25 ) Overhauled spell sound FX and VFX for for all spells Players can no longer cast spells while holding items on the cursor Fixed Magic Trap, Magic Untrap, Magic Lock and Magic Unlock not being usable on containers in one's own backpack Fixed an issue that caused Magic Trap to deal between 50 to 100 damage to the player. New damage: 5 to 10, depending on Magery skill Fixed an issue where Magic Untrap spell would completely remove traps from spawn containers instead of disable them Fixed an issue where Telekinesis spell would not set off traps on containers properly Added additional FX for Teleport spell played at player's original location before the teleport took place Fixed a bug where creatures summoned with the Summon Creature spell were not dispellable Fixed an issue where the Reveal spell would not reveal players hidden using the Hiding skill Dispel and Mass Dispel spells are no longer guaranteed to succeed at dispelling summoned creatures. Instead, the chance to dispel is based on the following simple formula, with dispelChance capped at 95% to always leave some chance for a creature to resist a dispel: dispelChance = ( 50 - ( targetResistSkill - casterMagerySkill )) / 1.5 The targetResistSkill is based on the highest value of the summoned creature's spell resistance skill and the spell resistance skill of its summoner Fixed an issue where the Create Food spell attempted to create an invalid item Fixed issue where code that checked for valid drop locations for items didn't allow negative z values (Dragon Slayer) Fixed issue where players could drop items on blocking map tiles like water or mountains (Dragon Slayer) Fixed issue where some JS functions like CheckStaticFlag, CheckDynamicFlag, DoesStaticBlock, DoesDynamicBlock and DoesMapBlock would not work correctly when passed negative Z values Fixed issue where context menu were listing skills to train from NPCs based on effective skill rather than base skill Fixed issue where NPCs would offer skills for training even if those skills were not above the minimum 60 skillpoints Updated clilocID used for Gump JS Method AddToolTip - as well as for some item/character tooltip data - from 1050045 to 1042971 for improved client compatibility Human/Elf/Gargoyle NPCs with spellcasting capabilities will now play a casting animation and briefly stop moving when they cast spells Updated NPC spellcasting code to help NPCs make a bit better choices of what spells to cast during combat. Now they take their own health percentage into account, and cast more offensive spells when at near full health vs more defensive spells as their health drops Fixed an issue where Hirelings wouldn't always immediately start following their new owners Fixed a bug where the Earthquake spell could incorrectly add NPC characters marked for deletion to the refresh queue Updated skills and stats of all implemented human NPCs (including vendors) to better match the state of those NPCs around the time of Pub15 Fixed SPATTACK values for a couple of NPCs that were still using values based on spell bitmask instead of spell circle value Updated stats of Jukan and Meer NPCs (dfndata/npc/lbrraces.dfn) to match stats from official LBR guide Added support for an optional third parameter for Character/Socket JS Method .CustomTarget() to allow highlighting targeting cursors as neutral (0, default aura), harmful (1, red aura), helpful (2, blue aura). A value of 3 will cancel the currently active targeting cursor. New syntax: myChar/mySock.CustomTarget( targetID, txtToSay, cursorType ) // supported cursorTypes: 0 = neutral, 1 = harmful, 2 = helpful, 3 = cancel current target cursor Various target cursors triggered by code (like hard-coded spells, some pet commands) also make use of these cursorTypes
2021-08-08 01:57:25 +08:00
{
ScriptError( cx, oldstrutil::format( "Invalid Skill ID, must be between 0 and 57" ).c_str() );
08/08/2021 - Xuri (0.99.4w) Added support for new Skills DFN tag: SKILLDELAY=# // Delay in seconds before another skill can be used after using this skill. Overrides global delay from UOX.INI Updated skill cSkills::SkillUse() to use skill-specific skill delays if set for a given skill, or global delay from ini if not. Also added a check to see if skill delay timer has been modified by onSkill JS event before attempting to set a default timer Updated skill delays to better match ~pub15 era: Reduced global SKILLDELAY setting in UOX.INI from 2 to 1 second Detecting Hidden skill now has a default skill delay of 10 seconds Herding skill now has a default skill delay of 10 seconds Hiding skill now has a default skill delay of 10 seconds, with shorter delays (global skill delay) for trying to hide while in combat or for successfully hiding Meditation skill now has a default skill delay of 10 seconds, with shorter delays (global skill delay) for failing due to hands being occupied or already being at max mana Peacemaking skill now has a default skill delay of 10 seconds for failed skill checks, and 5 seconds delay for successful ones Poisoning skill now has a default skill delay of 10 seconds Provocation skill now has a default skill delay of 10 seconds Remove Trap skill now has a default skill delay of 10 seconds Stealing skill now has a default skill delay of 10 seconds Stealth skill now has a default skill delay of 10 seconds Tracking skill now has a default skill delay of 10 seconds Veterinary skill now has a default skill delay of 10 seconds Fixed an issue with global JS Timer object that would reference the wrong timerIDs Extended global JS timer object to include timers from socket as well (marked with SOCK_ prefix): .SOCK_SKILLDELAY // Delay before the next time player can use another skill .SOCK_OBJDELAY // Delay before next time player can use another object .SOCK_SPIRITSPEAK // Timer that tracks remaining duration of player's Spirit Speak .SOCK_TRACKING // Timer that tracks remaining duration for player's Tracking skill .SOCK_FISHING // Timer that tracks remaining duration for player's Fishing skill .SOCK_MUTETIME // Timer that tracks remaining duration a player remains muted .SOCK_TRACKINGDISPLAY // Timer that tracks interval between each time tracking display is updated Updated various JS scripts to use the new Timer.TIMERNAME with .GetTimer()/.SetTimer() JS Methods for Characters and Sockets Updated Persecution ability for player ghosts to use the skill delay of the Spirit Speak skill, if set Updated Persecution ability to base mana damage primarily on player's Spirit Speak skill rather than their Intelligence In order to cut down on the amount of messages sent from server to players trying to spam-use objects/skills, UOX3 now only sends a maximum of one message for object use delay and one message for skill use delay while the delay timers for these are in effect. This resets on the next successful use of an object or skill. This is tracked via bools in cSocket class: bool objDelayMsgShown bool skillDelayMsgShown Converted DELAY tag in spells.dfn to use seconds (with decimals) instead of tenths of a second, which was not precise enough. This controls the cast time of spells. What would previously say DELAY=10 (10/10ths of a second) now says DELAY=1.0 (1 second) Added support for new Spells DFN tag to control delay until damage takes place after casting a spell, replacing UOX.INI setting COMBATEXPLODEDELAY, which is no longer used: DAMAGEDELAY=# // Delay in seconds (decimal) until a direct damage spell deals its damage Added support for a new Spells DFN tag to control cast recovery time, during which additional spells cannot be cast: RECOVERYDELAY=# // Delay in seconds (decimal) until player can cast another spell Added new setting in UOX.INI to control whether player spellcasting gets interrupted upon equipping/picking up items: ITEMSINTERRUPTCASTING=1 // If enabled, spellcasting gets interrupted by equipping/picking up items. Defaults to enabled. All direct damage spells by default have a 1.0s delay before damage (and VFX) is applied, except Explosion which has a 2.5s delay All spells by default have a cast recovery duration of 1.0s; from the moment a spellcast is completed/moment targeting cursor appears, the player will be unable to cast any other spell for the duration of the cast recovery Reagent checks and skill-check now take place AFTER the spellcast animation, not before! Spell cast times now follow this formula, though values set per spell and can be modified: 0.25 + ( spellCircle * 0.25 ) Overhauled spell sound FX and VFX for for all spells Players can no longer cast spells while holding items on the cursor Fixed Magic Trap, Magic Untrap, Magic Lock and Magic Unlock not being usable on containers in one's own backpack Fixed an issue that caused Magic Trap to deal between 50 to 100 damage to the player. New damage: 5 to 10, depending on Magery skill Fixed an issue where Magic Untrap spell would completely remove traps from spawn containers instead of disable them Fixed an issue where Telekinesis spell would not set off traps on containers properly Added additional FX for Teleport spell played at player's original location before the teleport took place Fixed a bug where creatures summoned with the Summon Creature spell were not dispellable Fixed an issue where the Reveal spell would not reveal players hidden using the Hiding skill Dispel and Mass Dispel spells are no longer guaranteed to succeed at dispelling summoned creatures. Instead, the chance to dispel is based on the following simple formula, with dispelChance capped at 95% to always leave some chance for a creature to resist a dispel: dispelChance = ( 50 - ( targetResistSkill - casterMagerySkill )) / 1.5 The targetResistSkill is based on the highest value of the summoned creature's spell resistance skill and the spell resistance skill of its summoner Fixed an issue where the Create Food spell attempted to create an invalid item Fixed issue where code that checked for valid drop locations for items didn't allow negative z values (Dragon Slayer) Fixed issue where players could drop items on blocking map tiles like water or mountains (Dragon Slayer) Fixed issue where some JS functions like CheckStaticFlag, CheckDynamicFlag, DoesStaticBlock, DoesDynamicBlock and DoesMapBlock would not work correctly when passed negative Z values Fixed issue where context menu were listing skills to train from NPCs based on effective skill rather than base skill Fixed issue where NPCs would offer skills for training even if those skills were not above the minimum 60 skillpoints Updated clilocID used for Gump JS Method AddToolTip - as well as for some item/character tooltip data - from 1050045 to 1042971 for improved client compatibility Human/Elf/Gargoyle NPCs with spellcasting capabilities will now play a casting animation and briefly stop moving when they cast spells Updated NPC spellcasting code to help NPCs make a bit better choices of what spells to cast during combat. Now they take their own health percentage into account, and cast more offensive spells when at near full health vs more defensive spells as their health drops Fixed an issue where Hirelings wouldn't always immediately start following their new owners Fixed a bug where the Earthquake spell could incorrectly add NPC characters marked for deletion to the refresh queue Updated skills and stats of all implemented human NPCs (including vendors) to better match the state of those NPCs around the time of Pub15 Fixed SPATTACK values for a couple of NPCs that were still using values based on spell bitmask instead of spell circle value Updated stats of Jukan and Meer NPCs (dfndata/npc/lbrraces.dfn) to match stats from official LBR guide Added support for an optional third parameter for Character/Socket JS Method .CustomTarget() to allow highlighting targeting cursors as neutral (0, default aura), harmful (1, red aura), helpful (2, blue aura). A value of 3 will cancel the currently active targeting cursor. New syntax: myChar/mySock.CustomTarget( targetID, txtToSay, cursorType ) // supported cursorTypes: 0 = neutral, 1 = harmful, 2 = helpful, 3 = cancel current target cursor Various target cursors triggered by code (like hard-coded spells, some pet commands) also make use of these cursorTypes
2021-08-08 01:57:25 +08:00
*vp = JSVAL_NULL;
return JS_FALSE;
}
CWorldMain::Skill_st *mySkill = &cwmWorldState->skill[skillId];
08/08/2021 - Xuri (0.99.4w) Added support for new Skills DFN tag: SKILLDELAY=# // Delay in seconds before another skill can be used after using this skill. Overrides global delay from UOX.INI Updated skill cSkills::SkillUse() to use skill-specific skill delays if set for a given skill, or global delay from ini if not. Also added a check to see if skill delay timer has been modified by onSkill JS event before attempting to set a default timer Updated skill delays to better match ~pub15 era: Reduced global SKILLDELAY setting in UOX.INI from 2 to 1 second Detecting Hidden skill now has a default skill delay of 10 seconds Herding skill now has a default skill delay of 10 seconds Hiding skill now has a default skill delay of 10 seconds, with shorter delays (global skill delay) for trying to hide while in combat or for successfully hiding Meditation skill now has a default skill delay of 10 seconds, with shorter delays (global skill delay) for failing due to hands being occupied or already being at max mana Peacemaking skill now has a default skill delay of 10 seconds for failed skill checks, and 5 seconds delay for successful ones Poisoning skill now has a default skill delay of 10 seconds Provocation skill now has a default skill delay of 10 seconds Remove Trap skill now has a default skill delay of 10 seconds Stealing skill now has a default skill delay of 10 seconds Stealth skill now has a default skill delay of 10 seconds Tracking skill now has a default skill delay of 10 seconds Veterinary skill now has a default skill delay of 10 seconds Fixed an issue with global JS Timer object that would reference the wrong timerIDs Extended global JS timer object to include timers from socket as well (marked with SOCK_ prefix): .SOCK_SKILLDELAY // Delay before the next time player can use another skill .SOCK_OBJDELAY // Delay before next time player can use another object .SOCK_SPIRITSPEAK // Timer that tracks remaining duration of player's Spirit Speak .SOCK_TRACKING // Timer that tracks remaining duration for player's Tracking skill .SOCK_FISHING // Timer that tracks remaining duration for player's Fishing skill .SOCK_MUTETIME // Timer that tracks remaining duration a player remains muted .SOCK_TRACKINGDISPLAY // Timer that tracks interval between each time tracking display is updated Updated various JS scripts to use the new Timer.TIMERNAME with .GetTimer()/.SetTimer() JS Methods for Characters and Sockets Updated Persecution ability for player ghosts to use the skill delay of the Spirit Speak skill, if set Updated Persecution ability to base mana damage primarily on player's Spirit Speak skill rather than their Intelligence In order to cut down on the amount of messages sent from server to players trying to spam-use objects/skills, UOX3 now only sends a maximum of one message for object use delay and one message for skill use delay while the delay timers for these are in effect. This resets on the next successful use of an object or skill. This is tracked via bools in cSocket class: bool objDelayMsgShown bool skillDelayMsgShown Converted DELAY tag in spells.dfn to use seconds (with decimals) instead of tenths of a second, which was not precise enough. This controls the cast time of spells. What would previously say DELAY=10 (10/10ths of a second) now says DELAY=1.0 (1 second) Added support for new Spells DFN tag to control delay until damage takes place after casting a spell, replacing UOX.INI setting COMBATEXPLODEDELAY, which is no longer used: DAMAGEDELAY=# // Delay in seconds (decimal) until a direct damage spell deals its damage Added support for a new Spells DFN tag to control cast recovery time, during which additional spells cannot be cast: RECOVERYDELAY=# // Delay in seconds (decimal) until player can cast another spell Added new setting in UOX.INI to control whether player spellcasting gets interrupted upon equipping/picking up items: ITEMSINTERRUPTCASTING=1 // If enabled, spellcasting gets interrupted by equipping/picking up items. Defaults to enabled. All direct damage spells by default have a 1.0s delay before damage (and VFX) is applied, except Explosion which has a 2.5s delay All spells by default have a cast recovery duration of 1.0s; from the moment a spellcast is completed/moment targeting cursor appears, the player will be unable to cast any other spell for the duration of the cast recovery Reagent checks and skill-check now take place AFTER the spellcast animation, not before! Spell cast times now follow this formula, though values set per spell and can be modified: 0.25 + ( spellCircle * 0.25 ) Overhauled spell sound FX and VFX for for all spells Players can no longer cast spells while holding items on the cursor Fixed Magic Trap, Magic Untrap, Magic Lock and Magic Unlock not being usable on containers in one's own backpack Fixed an issue that caused Magic Trap to deal between 50 to 100 damage to the player. New damage: 5 to 10, depending on Magery skill Fixed an issue where Magic Untrap spell would completely remove traps from spawn containers instead of disable them Fixed an issue where Telekinesis spell would not set off traps on containers properly Added additional FX for Teleport spell played at player's original location before the teleport took place Fixed a bug where creatures summoned with the Summon Creature spell were not dispellable Fixed an issue where the Reveal spell would not reveal players hidden using the Hiding skill Dispel and Mass Dispel spells are no longer guaranteed to succeed at dispelling summoned creatures. Instead, the chance to dispel is based on the following simple formula, with dispelChance capped at 95% to always leave some chance for a creature to resist a dispel: dispelChance = ( 50 - ( targetResistSkill - casterMagerySkill )) / 1.5 The targetResistSkill is based on the highest value of the summoned creature's spell resistance skill and the spell resistance skill of its summoner Fixed an issue where the Create Food spell attempted to create an invalid item Fixed issue where code that checked for valid drop locations for items didn't allow negative z values (Dragon Slayer) Fixed issue where players could drop items on blocking map tiles like water or mountains (Dragon Slayer) Fixed issue where some JS functions like CheckStaticFlag, CheckDynamicFlag, DoesStaticBlock, DoesDynamicBlock and DoesMapBlock would not work correctly when passed negative Z values Fixed issue where context menu were listing skills to train from NPCs based on effective skill rather than base skill Fixed issue where NPCs would offer skills for training even if those skills were not above the minimum 60 skillpoints Updated clilocID used for Gump JS Method AddToolTip - as well as for some item/character tooltip data - from 1050045 to 1042971 for improved client compatibility Human/Elf/Gargoyle NPCs with spellcasting capabilities will now play a casting animation and briefly stop moving when they cast spells Updated NPC spellcasting code to help NPCs make a bit better choices of what spells to cast during combat. Now they take their own health percentage into account, and cast more offensive spells when at near full health vs more defensive spells as their health drops Fixed an issue where Hirelings wouldn't always immediately start following their new owners Fixed a bug where the Earthquake spell could incorrectly add NPC characters marked for deletion to the refresh queue Updated skills and stats of all implemented human NPCs (including vendors) to better match the state of those NPCs around the time of Pub15 Fixed SPATTACK values for a couple of NPCs that were still using values based on spell bitmask instead of spell circle value Updated stats of Jukan and Meer NPCs (dfndata/npc/lbrraces.dfn) to match stats from official LBR guide Added support for an optional third parameter for Character/Socket JS Method .CustomTarget() to allow highlighting targeting cursors as neutral (0, default aura), harmful (1, red aura), helpful (2, blue aura). A value of 3 will cancel the currently active targeting cursor. New syntax: myChar/mySock.CustomTarget( targetID, txtToSay, cursorType ) // supported cursorTypes: 0 = neutral, 1 = harmful, 2 = helpful, 3 = cancel current target cursor Various target cursors triggered by code (like hard-coded spells, some pet commands) also make use of these cursorTypes
2021-08-08 01:57:25 +08:00
if( mySkill == nullptr )
{
ScriptError( cx, oldstrutil::format( "Invalid Skill" ).c_str() );
08/08/2021 - Xuri (0.99.4w) Added support for new Skills DFN tag: SKILLDELAY=# // Delay in seconds before another skill can be used after using this skill. Overrides global delay from UOX.INI Updated skill cSkills::SkillUse() to use skill-specific skill delays if set for a given skill, or global delay from ini if not. Also added a check to see if skill delay timer has been modified by onSkill JS event before attempting to set a default timer Updated skill delays to better match ~pub15 era: Reduced global SKILLDELAY setting in UOX.INI from 2 to 1 second Detecting Hidden skill now has a default skill delay of 10 seconds Herding skill now has a default skill delay of 10 seconds Hiding skill now has a default skill delay of 10 seconds, with shorter delays (global skill delay) for trying to hide while in combat or for successfully hiding Meditation skill now has a default skill delay of 10 seconds, with shorter delays (global skill delay) for failing due to hands being occupied or already being at max mana Peacemaking skill now has a default skill delay of 10 seconds for failed skill checks, and 5 seconds delay for successful ones Poisoning skill now has a default skill delay of 10 seconds Provocation skill now has a default skill delay of 10 seconds Remove Trap skill now has a default skill delay of 10 seconds Stealing skill now has a default skill delay of 10 seconds Stealth skill now has a default skill delay of 10 seconds Tracking skill now has a default skill delay of 10 seconds Veterinary skill now has a default skill delay of 10 seconds Fixed an issue with global JS Timer object that would reference the wrong timerIDs Extended global JS timer object to include timers from socket as well (marked with SOCK_ prefix): .SOCK_SKILLDELAY // Delay before the next time player can use another skill .SOCK_OBJDELAY // Delay before next time player can use another object .SOCK_SPIRITSPEAK // Timer that tracks remaining duration of player's Spirit Speak .SOCK_TRACKING // Timer that tracks remaining duration for player's Tracking skill .SOCK_FISHING // Timer that tracks remaining duration for player's Fishing skill .SOCK_MUTETIME // Timer that tracks remaining duration a player remains muted .SOCK_TRACKINGDISPLAY // Timer that tracks interval between each time tracking display is updated Updated various JS scripts to use the new Timer.TIMERNAME with .GetTimer()/.SetTimer() JS Methods for Characters and Sockets Updated Persecution ability for player ghosts to use the skill delay of the Spirit Speak skill, if set Updated Persecution ability to base mana damage primarily on player's Spirit Speak skill rather than their Intelligence In order to cut down on the amount of messages sent from server to players trying to spam-use objects/skills, UOX3 now only sends a maximum of one message for object use delay and one message for skill use delay while the delay timers for these are in effect. This resets on the next successful use of an object or skill. This is tracked via bools in cSocket class: bool objDelayMsgShown bool skillDelayMsgShown Converted DELAY tag in spells.dfn to use seconds (with decimals) instead of tenths of a second, which was not precise enough. This controls the cast time of spells. What would previously say DELAY=10 (10/10ths of a second) now says DELAY=1.0 (1 second) Added support for new Spells DFN tag to control delay until damage takes place after casting a spell, replacing UOX.INI setting COMBATEXPLODEDELAY, which is no longer used: DAMAGEDELAY=# // Delay in seconds (decimal) until a direct damage spell deals its damage Added support for a new Spells DFN tag to control cast recovery time, during which additional spells cannot be cast: RECOVERYDELAY=# // Delay in seconds (decimal) until player can cast another spell Added new setting in UOX.INI to control whether player spellcasting gets interrupted upon equipping/picking up items: ITEMSINTERRUPTCASTING=1 // If enabled, spellcasting gets interrupted by equipping/picking up items. Defaults to enabled. All direct damage spells by default have a 1.0s delay before damage (and VFX) is applied, except Explosion which has a 2.5s delay All spells by default have a cast recovery duration of 1.0s; from the moment a spellcast is completed/moment targeting cursor appears, the player will be unable to cast any other spell for the duration of the cast recovery Reagent checks and skill-check now take place AFTER the spellcast animation, not before! Spell cast times now follow this formula, though values set per spell and can be modified: 0.25 + ( spellCircle * 0.25 ) Overhauled spell sound FX and VFX for for all spells Players can no longer cast spells while holding items on the cursor Fixed Magic Trap, Magic Untrap, Magic Lock and Magic Unlock not being usable on containers in one's own backpack Fixed an issue that caused Magic Trap to deal between 50 to 100 damage to the player. New damage: 5 to 10, depending on Magery skill Fixed an issue where Magic Untrap spell would completely remove traps from spawn containers instead of disable them Fixed an issue where Telekinesis spell would not set off traps on containers properly Added additional FX for Teleport spell played at player's original location before the teleport took place Fixed a bug where creatures summoned with the Summon Creature spell were not dispellable Fixed an issue where the Reveal spell would not reveal players hidden using the Hiding skill Dispel and Mass Dispel spells are no longer guaranteed to succeed at dispelling summoned creatures. Instead, the chance to dispel is based on the following simple formula, with dispelChance capped at 95% to always leave some chance for a creature to resist a dispel: dispelChance = ( 50 - ( targetResistSkill - casterMagerySkill )) / 1.5 The targetResistSkill is based on the highest value of the summoned creature's spell resistance skill and the spell resistance skill of its summoner Fixed an issue where the Create Food spell attempted to create an invalid item Fixed issue where code that checked for valid drop locations for items didn't allow negative z values (Dragon Slayer) Fixed issue where players could drop items on blocking map tiles like water or mountains (Dragon Slayer) Fixed issue where some JS functions like CheckStaticFlag, CheckDynamicFlag, DoesStaticBlock, DoesDynamicBlock and DoesMapBlock would not work correctly when passed negative Z values Fixed issue where context menu were listing skills to train from NPCs based on effective skill rather than base skill Fixed issue where NPCs would offer skills for training even if those skills were not above the minimum 60 skillpoints Updated clilocID used for Gump JS Method AddToolTip - as well as for some item/character tooltip data - from 1050045 to 1042971 for improved client compatibility Human/Elf/Gargoyle NPCs with spellcasting capabilities will now play a casting animation and briefly stop moving when they cast spells Updated NPC spellcasting code to help NPCs make a bit better choices of what spells to cast during combat. Now they take their own health percentage into account, and cast more offensive spells when at near full health vs more defensive spells as their health drops Fixed an issue where Hirelings wouldn't always immediately start following their new owners Fixed a bug where the Earthquake spell could incorrectly add NPC characters marked for deletion to the refresh queue Updated skills and stats of all implemented human NPCs (including vendors) to better match the state of those NPCs around the time of Pub15 Fixed SPATTACK values for a couple of NPCs that were still using values based on spell bitmask instead of spell circle value Updated stats of Jukan and Meer NPCs (dfndata/npc/lbrraces.dfn) to match stats from official LBR guide Added support for an optional third parameter for Character/Socket JS Method .CustomTarget() to allow highlighting targeting cursors as neutral (0, default aura), harmful (1, red aura), helpful (2, blue aura). A value of 3 will cancel the currently active targeting cursor. New syntax: myChar/mySock.CustomTarget( targetID, txtToSay, cursorType ) // supported cursorTypes: 0 = neutral, 1 = harmful, 2 = helpful, 3 = cancel current target cursor Various target cursors triggered by code (like hard-coded spells, some pet commands) also make use of these cursorTypes
2021-08-08 01:57:25 +08:00
*vp = JSVAL_NULL;
return JS_FALSE;
}
JSObject *jsSkill = JS_NewObject( cx, &UOXGlobalSkill_class, nullptr, obj );
JS_DefineProperties( cx, jsSkill, CGlobalSkillProperties );
JS_SetPrivate( cx, jsSkill, mySkill );
*vp = OBJECT_TO_JSVAL( jsSkill );
return JS_TRUE;
}
2025-03-28 13:23:59 +10:00
JSBool CGlobalSkillProps_setProperty( JSContext* cx, JSObject* obj, jsid id, JSBool strict, jsval* vp )
08/08/2021 - Xuri (0.99.4w) Added support for new Skills DFN tag: SKILLDELAY=# // Delay in seconds before another skill can be used after using this skill. Overrides global delay from UOX.INI Updated skill cSkills::SkillUse() to use skill-specific skill delays if set for a given skill, or global delay from ini if not. Also added a check to see if skill delay timer has been modified by onSkill JS event before attempting to set a default timer Updated skill delays to better match ~pub15 era: Reduced global SKILLDELAY setting in UOX.INI from 2 to 1 second Detecting Hidden skill now has a default skill delay of 10 seconds Herding skill now has a default skill delay of 10 seconds Hiding skill now has a default skill delay of 10 seconds, with shorter delays (global skill delay) for trying to hide while in combat or for successfully hiding Meditation skill now has a default skill delay of 10 seconds, with shorter delays (global skill delay) for failing due to hands being occupied or already being at max mana Peacemaking skill now has a default skill delay of 10 seconds for failed skill checks, and 5 seconds delay for successful ones Poisoning skill now has a default skill delay of 10 seconds Provocation skill now has a default skill delay of 10 seconds Remove Trap skill now has a default skill delay of 10 seconds Stealing skill now has a default skill delay of 10 seconds Stealth skill now has a default skill delay of 10 seconds Tracking skill now has a default skill delay of 10 seconds Veterinary skill now has a default skill delay of 10 seconds Fixed an issue with global JS Timer object that would reference the wrong timerIDs Extended global JS timer object to include timers from socket as well (marked with SOCK_ prefix): .SOCK_SKILLDELAY // Delay before the next time player can use another skill .SOCK_OBJDELAY // Delay before next time player can use another object .SOCK_SPIRITSPEAK // Timer that tracks remaining duration of player's Spirit Speak .SOCK_TRACKING // Timer that tracks remaining duration for player's Tracking skill .SOCK_FISHING // Timer that tracks remaining duration for player's Fishing skill .SOCK_MUTETIME // Timer that tracks remaining duration a player remains muted .SOCK_TRACKINGDISPLAY // Timer that tracks interval between each time tracking display is updated Updated various JS scripts to use the new Timer.TIMERNAME with .GetTimer()/.SetTimer() JS Methods for Characters and Sockets Updated Persecution ability for player ghosts to use the skill delay of the Spirit Speak skill, if set Updated Persecution ability to base mana damage primarily on player's Spirit Speak skill rather than their Intelligence In order to cut down on the amount of messages sent from server to players trying to spam-use objects/skills, UOX3 now only sends a maximum of one message for object use delay and one message for skill use delay while the delay timers for these are in effect. This resets on the next successful use of an object or skill. This is tracked via bools in cSocket class: bool objDelayMsgShown bool skillDelayMsgShown Converted DELAY tag in spells.dfn to use seconds (with decimals) instead of tenths of a second, which was not precise enough. This controls the cast time of spells. What would previously say DELAY=10 (10/10ths of a second) now says DELAY=1.0 (1 second) Added support for new Spells DFN tag to control delay until damage takes place after casting a spell, replacing UOX.INI setting COMBATEXPLODEDELAY, which is no longer used: DAMAGEDELAY=# // Delay in seconds (decimal) until a direct damage spell deals its damage Added support for a new Spells DFN tag to control cast recovery time, during which additional spells cannot be cast: RECOVERYDELAY=# // Delay in seconds (decimal) until player can cast another spell Added new setting in UOX.INI to control whether player spellcasting gets interrupted upon equipping/picking up items: ITEMSINTERRUPTCASTING=1 // If enabled, spellcasting gets interrupted by equipping/picking up items. Defaults to enabled. All direct damage spells by default have a 1.0s delay before damage (and VFX) is applied, except Explosion which has a 2.5s delay All spells by default have a cast recovery duration of 1.0s; from the moment a spellcast is completed/moment targeting cursor appears, the player will be unable to cast any other spell for the duration of the cast recovery Reagent checks and skill-check now take place AFTER the spellcast animation, not before! Spell cast times now follow this formula, though values set per spell and can be modified: 0.25 + ( spellCircle * 0.25 ) Overhauled spell sound FX and VFX for for all spells Players can no longer cast spells while holding items on the cursor Fixed Magic Trap, Magic Untrap, Magic Lock and Magic Unlock not being usable on containers in one's own backpack Fixed an issue that caused Magic Trap to deal between 50 to 100 damage to the player. New damage: 5 to 10, depending on Magery skill Fixed an issue where Magic Untrap spell would completely remove traps from spawn containers instead of disable them Fixed an issue where Telekinesis spell would not set off traps on containers properly Added additional FX for Teleport spell played at player's original location before the teleport took place Fixed a bug where creatures summoned with the Summon Creature spell were not dispellable Fixed an issue where the Reveal spell would not reveal players hidden using the Hiding skill Dispel and Mass Dispel spells are no longer guaranteed to succeed at dispelling summoned creatures. Instead, the chance to dispel is based on the following simple formula, with dispelChance capped at 95% to always leave some chance for a creature to resist a dispel: dispelChance = ( 50 - ( targetResistSkill - casterMagerySkill )) / 1.5 The targetResistSkill is based on the highest value of the summoned creature's spell resistance skill and the spell resistance skill of its summoner Fixed an issue where the Create Food spell attempted to create an invalid item Fixed issue where code that checked for valid drop locations for items didn't allow negative z values (Dragon Slayer) Fixed issue where players could drop items on blocking map tiles like water or mountains (Dragon Slayer) Fixed issue where some JS functions like CheckStaticFlag, CheckDynamicFlag, DoesStaticBlock, DoesDynamicBlock and DoesMapBlock would not work correctly when passed negative Z values Fixed issue where context menu were listing skills to train from NPCs based on effective skill rather than base skill Fixed issue where NPCs would offer skills for training even if those skills were not above the minimum 60 skillpoints Updated clilocID used for Gump JS Method AddToolTip - as well as for some item/character tooltip data - from 1050045 to 1042971 for improved client compatibility Human/Elf/Gargoyle NPCs with spellcasting capabilities will now play a casting animation and briefly stop moving when they cast spells Updated NPC spellcasting code to help NPCs make a bit better choices of what spells to cast during combat. Now they take their own health percentage into account, and cast more offensive spells when at near full health vs more defensive spells as their health drops Fixed an issue where Hirelings wouldn't always immediately start following their new owners Fixed a bug where the Earthquake spell could incorrectly add NPC characters marked for deletion to the refresh queue Updated skills and stats of all implemented human NPCs (including vendors) to better match the state of those NPCs around the time of Pub15 Fixed SPATTACK values for a couple of NPCs that were still using values based on spell bitmask instead of spell circle value Updated stats of Jukan and Meer NPCs (dfndata/npc/lbrraces.dfn) to match stats from official LBR guide Added support for an optional third parameter for Character/Socket JS Method .CustomTarget() to allow highlighting targeting cursors as neutral (0, default aura), harmful (1, red aura), helpful (2, blue aura). A value of 3 will cancel the currently active targeting cursor. New syntax: myChar/mySock.CustomTarget( targetID, txtToSay, cursorType ) // supported cursorTypes: 0 = neutral, 1 = harmful, 2 = helpful, 3 = cancel current target cursor Various target cursors triggered by code (like hard-coded spells, some pet commands) also make use of these cursorTypes
2021-08-08 01:57:25 +08:00
{
return JS_TRUE;
}
2025-03-28 13:23:59 +10:00
JSBool CGlobalSkillProps_getProperty( JSContext *cx, JSObject *obj, jsid id, jsval *vp )
08/08/2021 - Xuri (0.99.4w) Added support for new Skills DFN tag: SKILLDELAY=# // Delay in seconds before another skill can be used after using this skill. Overrides global delay from UOX.INI Updated skill cSkills::SkillUse() to use skill-specific skill delays if set for a given skill, or global delay from ini if not. Also added a check to see if skill delay timer has been modified by onSkill JS event before attempting to set a default timer Updated skill delays to better match ~pub15 era: Reduced global SKILLDELAY setting in UOX.INI from 2 to 1 second Detecting Hidden skill now has a default skill delay of 10 seconds Herding skill now has a default skill delay of 10 seconds Hiding skill now has a default skill delay of 10 seconds, with shorter delays (global skill delay) for trying to hide while in combat or for successfully hiding Meditation skill now has a default skill delay of 10 seconds, with shorter delays (global skill delay) for failing due to hands being occupied or already being at max mana Peacemaking skill now has a default skill delay of 10 seconds for failed skill checks, and 5 seconds delay for successful ones Poisoning skill now has a default skill delay of 10 seconds Provocation skill now has a default skill delay of 10 seconds Remove Trap skill now has a default skill delay of 10 seconds Stealing skill now has a default skill delay of 10 seconds Stealth skill now has a default skill delay of 10 seconds Tracking skill now has a default skill delay of 10 seconds Veterinary skill now has a default skill delay of 10 seconds Fixed an issue with global JS Timer object that would reference the wrong timerIDs Extended global JS timer object to include timers from socket as well (marked with SOCK_ prefix): .SOCK_SKILLDELAY // Delay before the next time player can use another skill .SOCK_OBJDELAY // Delay before next time player can use another object .SOCK_SPIRITSPEAK // Timer that tracks remaining duration of player's Spirit Speak .SOCK_TRACKING // Timer that tracks remaining duration for player's Tracking skill .SOCK_FISHING // Timer that tracks remaining duration for player's Fishing skill .SOCK_MUTETIME // Timer that tracks remaining duration a player remains muted .SOCK_TRACKINGDISPLAY // Timer that tracks interval between each time tracking display is updated Updated various JS scripts to use the new Timer.TIMERNAME with .GetTimer()/.SetTimer() JS Methods for Characters and Sockets Updated Persecution ability for player ghosts to use the skill delay of the Spirit Speak skill, if set Updated Persecution ability to base mana damage primarily on player's Spirit Speak skill rather than their Intelligence In order to cut down on the amount of messages sent from server to players trying to spam-use objects/skills, UOX3 now only sends a maximum of one message for object use delay and one message for skill use delay while the delay timers for these are in effect. This resets on the next successful use of an object or skill. This is tracked via bools in cSocket class: bool objDelayMsgShown bool skillDelayMsgShown Converted DELAY tag in spells.dfn to use seconds (with decimals) instead of tenths of a second, which was not precise enough. This controls the cast time of spells. What would previously say DELAY=10 (10/10ths of a second) now says DELAY=1.0 (1 second) Added support for new Spells DFN tag to control delay until damage takes place after casting a spell, replacing UOX.INI setting COMBATEXPLODEDELAY, which is no longer used: DAMAGEDELAY=# // Delay in seconds (decimal) until a direct damage spell deals its damage Added support for a new Spells DFN tag to control cast recovery time, during which additional spells cannot be cast: RECOVERYDELAY=# // Delay in seconds (decimal) until player can cast another spell Added new setting in UOX.INI to control whether player spellcasting gets interrupted upon equipping/picking up items: ITEMSINTERRUPTCASTING=1 // If enabled, spellcasting gets interrupted by equipping/picking up items. Defaults to enabled. All direct damage spells by default have a 1.0s delay before damage (and VFX) is applied, except Explosion which has a 2.5s delay All spells by default have a cast recovery duration of 1.0s; from the moment a spellcast is completed/moment targeting cursor appears, the player will be unable to cast any other spell for the duration of the cast recovery Reagent checks and skill-check now take place AFTER the spellcast animation, not before! Spell cast times now follow this formula, though values set per spell and can be modified: 0.25 + ( spellCircle * 0.25 ) Overhauled spell sound FX and VFX for for all spells Players can no longer cast spells while holding items on the cursor Fixed Magic Trap, Magic Untrap, Magic Lock and Magic Unlock not being usable on containers in one's own backpack Fixed an issue that caused Magic Trap to deal between 50 to 100 damage to the player. New damage: 5 to 10, depending on Magery skill Fixed an issue where Magic Untrap spell would completely remove traps from spawn containers instead of disable them Fixed an issue where Telekinesis spell would not set off traps on containers properly Added additional FX for Teleport spell played at player's original location before the teleport took place Fixed a bug where creatures summoned with the Summon Creature spell were not dispellable Fixed an issue where the Reveal spell would not reveal players hidden using the Hiding skill Dispel and Mass Dispel spells are no longer guaranteed to succeed at dispelling summoned creatures. Instead, the chance to dispel is based on the following simple formula, with dispelChance capped at 95% to always leave some chance for a creature to resist a dispel: dispelChance = ( 50 - ( targetResistSkill - casterMagerySkill )) / 1.5 The targetResistSkill is based on the highest value of the summoned creature's spell resistance skill and the spell resistance skill of its summoner Fixed an issue where the Create Food spell attempted to create an invalid item Fixed issue where code that checked for valid drop locations for items didn't allow negative z values (Dragon Slayer) Fixed issue where players could drop items on blocking map tiles like water or mountains (Dragon Slayer) Fixed issue where some JS functions like CheckStaticFlag, CheckDynamicFlag, DoesStaticBlock, DoesDynamicBlock and DoesMapBlock would not work correctly when passed negative Z values Fixed issue where context menu were listing skills to train from NPCs based on effective skill rather than base skill Fixed issue where NPCs would offer skills for training even if those skills were not above the minimum 60 skillpoints Updated clilocID used for Gump JS Method AddToolTip - as well as for some item/character tooltip data - from 1050045 to 1042971 for improved client compatibility Human/Elf/Gargoyle NPCs with spellcasting capabilities will now play a casting animation and briefly stop moving when they cast spells Updated NPC spellcasting code to help NPCs make a bit better choices of what spells to cast during combat. Now they take their own health percentage into account, and cast more offensive spells when at near full health vs more defensive spells as their health drops Fixed an issue where Hirelings wouldn't always immediately start following their new owners Fixed a bug where the Earthquake spell could incorrectly add NPC characters marked for deletion to the refresh queue Updated skills and stats of all implemented human NPCs (including vendors) to better match the state of those NPCs around the time of Pub15 Fixed SPATTACK values for a couple of NPCs that were still using values based on spell bitmask instead of spell circle value Updated stats of Jukan and Meer NPCs (dfndata/npc/lbrraces.dfn) to match stats from official LBR guide Added support for an optional third parameter for Character/Socket JS Method .CustomTarget() to allow highlighting targeting cursors as neutral (0, default aura), harmful (1, red aura), helpful (2, blue aura). A value of 3 will cancel the currently active targeting cursor. New syntax: myChar/mySock.CustomTarget( targetID, txtToSay, cursorType ) // supported cursorTypes: 0 = neutral, 1 = harmful, 2 = helpful, 3 = cancel current target cursor Various target cursors triggered by code (like hard-coded spells, some pet commands) also make use of these cursorTypes
2021-08-08 01:57:25 +08:00
{
CWorldMain::Skill_st *gPriv = static_cast<CWorldMain::Skill_st*>( JS_GetPrivate( cx, obj ));
08/08/2021 - Xuri (0.99.4w) Added support for new Skills DFN tag: SKILLDELAY=# // Delay in seconds before another skill can be used after using this skill. Overrides global delay from UOX.INI Updated skill cSkills::SkillUse() to use skill-specific skill delays if set for a given skill, or global delay from ini if not. Also added a check to see if skill delay timer has been modified by onSkill JS event before attempting to set a default timer Updated skill delays to better match ~pub15 era: Reduced global SKILLDELAY setting in UOX.INI from 2 to 1 second Detecting Hidden skill now has a default skill delay of 10 seconds Herding skill now has a default skill delay of 10 seconds Hiding skill now has a default skill delay of 10 seconds, with shorter delays (global skill delay) for trying to hide while in combat or for successfully hiding Meditation skill now has a default skill delay of 10 seconds, with shorter delays (global skill delay) for failing due to hands being occupied or already being at max mana Peacemaking skill now has a default skill delay of 10 seconds for failed skill checks, and 5 seconds delay for successful ones Poisoning skill now has a default skill delay of 10 seconds Provocation skill now has a default skill delay of 10 seconds Remove Trap skill now has a default skill delay of 10 seconds Stealing skill now has a default skill delay of 10 seconds Stealth skill now has a default skill delay of 10 seconds Tracking skill now has a default skill delay of 10 seconds Veterinary skill now has a default skill delay of 10 seconds Fixed an issue with global JS Timer object that would reference the wrong timerIDs Extended global JS timer object to include timers from socket as well (marked with SOCK_ prefix): .SOCK_SKILLDELAY // Delay before the next time player can use another skill .SOCK_OBJDELAY // Delay before next time player can use another object .SOCK_SPIRITSPEAK // Timer that tracks remaining duration of player's Spirit Speak .SOCK_TRACKING // Timer that tracks remaining duration for player's Tracking skill .SOCK_FISHING // Timer that tracks remaining duration for player's Fishing skill .SOCK_MUTETIME // Timer that tracks remaining duration a player remains muted .SOCK_TRACKINGDISPLAY // Timer that tracks interval between each time tracking display is updated Updated various JS scripts to use the new Timer.TIMERNAME with .GetTimer()/.SetTimer() JS Methods for Characters and Sockets Updated Persecution ability for player ghosts to use the skill delay of the Spirit Speak skill, if set Updated Persecution ability to base mana damage primarily on player's Spirit Speak skill rather than their Intelligence In order to cut down on the amount of messages sent from server to players trying to spam-use objects/skills, UOX3 now only sends a maximum of one message for object use delay and one message for skill use delay while the delay timers for these are in effect. This resets on the next successful use of an object or skill. This is tracked via bools in cSocket class: bool objDelayMsgShown bool skillDelayMsgShown Converted DELAY tag in spells.dfn to use seconds (with decimals) instead of tenths of a second, which was not precise enough. This controls the cast time of spells. What would previously say DELAY=10 (10/10ths of a second) now says DELAY=1.0 (1 second) Added support for new Spells DFN tag to control delay until damage takes place after casting a spell, replacing UOX.INI setting COMBATEXPLODEDELAY, which is no longer used: DAMAGEDELAY=# // Delay in seconds (decimal) until a direct damage spell deals its damage Added support for a new Spells DFN tag to control cast recovery time, during which additional spells cannot be cast: RECOVERYDELAY=# // Delay in seconds (decimal) until player can cast another spell Added new setting in UOX.INI to control whether player spellcasting gets interrupted upon equipping/picking up items: ITEMSINTERRUPTCASTING=1 // If enabled, spellcasting gets interrupted by equipping/picking up items. Defaults to enabled. All direct damage spells by default have a 1.0s delay before damage (and VFX) is applied, except Explosion which has a 2.5s delay All spells by default have a cast recovery duration of 1.0s; from the moment a spellcast is completed/moment targeting cursor appears, the player will be unable to cast any other spell for the duration of the cast recovery Reagent checks and skill-check now take place AFTER the spellcast animation, not before! Spell cast times now follow this formula, though values set per spell and can be modified: 0.25 + ( spellCircle * 0.25 ) Overhauled spell sound FX and VFX for for all spells Players can no longer cast spells while holding items on the cursor Fixed Magic Trap, Magic Untrap, Magic Lock and Magic Unlock not being usable on containers in one's own backpack Fixed an issue that caused Magic Trap to deal between 50 to 100 damage to the player. New damage: 5 to 10, depending on Magery skill Fixed an issue where Magic Untrap spell would completely remove traps from spawn containers instead of disable them Fixed an issue where Telekinesis spell would not set off traps on containers properly Added additional FX for Teleport spell played at player's original location before the teleport took place Fixed a bug where creatures summoned with the Summon Creature spell were not dispellable Fixed an issue where the Reveal spell would not reveal players hidden using the Hiding skill Dispel and Mass Dispel spells are no longer guaranteed to succeed at dispelling summoned creatures. Instead, the chance to dispel is based on the following simple formula, with dispelChance capped at 95% to always leave some chance for a creature to resist a dispel: dispelChance = ( 50 - ( targetResistSkill - casterMagerySkill )) / 1.5 The targetResistSkill is based on the highest value of the summoned creature's spell resistance skill and the spell resistance skill of its summoner Fixed an issue where the Create Food spell attempted to create an invalid item Fixed issue where code that checked for valid drop locations for items didn't allow negative z values (Dragon Slayer) Fixed issue where players could drop items on blocking map tiles like water or mountains (Dragon Slayer) Fixed issue where some JS functions like CheckStaticFlag, CheckDynamicFlag, DoesStaticBlock, DoesDynamicBlock and DoesMapBlock would not work correctly when passed negative Z values Fixed issue where context menu were listing skills to train from NPCs based on effective skill rather than base skill Fixed issue where NPCs would offer skills for training even if those skills were not above the minimum 60 skillpoints Updated clilocID used for Gump JS Method AddToolTip - as well as for some item/character tooltip data - from 1050045 to 1042971 for improved client compatibility Human/Elf/Gargoyle NPCs with spellcasting capabilities will now play a casting animation and briefly stop moving when they cast spells Updated NPC spellcasting code to help NPCs make a bit better choices of what spells to cast during combat. Now they take their own health percentage into account, and cast more offensive spells when at near full health vs more defensive spells as their health drops Fixed an issue where Hirelings wouldn't always immediately start following their new owners Fixed a bug where the Earthquake spell could incorrectly add NPC characters marked for deletion to the refresh queue Updated skills and stats of all implemented human NPCs (including vendors) to better match the state of those NPCs around the time of Pub15 Fixed SPATTACK values for a couple of NPCs that were still using values based on spell bitmask instead of spell circle value Updated stats of Jukan and Meer NPCs (dfndata/npc/lbrraces.dfn) to match stats from official LBR guide Added support for an optional third parameter for Character/Socket JS Method .CustomTarget() to allow highlighting targeting cursors as neutral (0, default aura), harmful (1, red aura), helpful (2, blue aura). A value of 3 will cancel the currently active targeting cursor. New syntax: myChar/mySock.CustomTarget( targetID, txtToSay, cursorType ) // supported cursorTypes: 0 = neutral, 1 = harmful, 2 = helpful, 3 = cancel current target cursor Various target cursors triggered by code (like hard-coded spells, some pet commands) also make use of these cursorTypes
2021-08-08 01:57:25 +08:00
if( gPriv == nullptr )
return JS_FALSE;
08/08/2021 - Xuri (0.99.4w) Added support for new Skills DFN tag: SKILLDELAY=# // Delay in seconds before another skill can be used after using this skill. Overrides global delay from UOX.INI Updated skill cSkills::SkillUse() to use skill-specific skill delays if set for a given skill, or global delay from ini if not. Also added a check to see if skill delay timer has been modified by onSkill JS event before attempting to set a default timer Updated skill delays to better match ~pub15 era: Reduced global SKILLDELAY setting in UOX.INI from 2 to 1 second Detecting Hidden skill now has a default skill delay of 10 seconds Herding skill now has a default skill delay of 10 seconds Hiding skill now has a default skill delay of 10 seconds, with shorter delays (global skill delay) for trying to hide while in combat or for successfully hiding Meditation skill now has a default skill delay of 10 seconds, with shorter delays (global skill delay) for failing due to hands being occupied or already being at max mana Peacemaking skill now has a default skill delay of 10 seconds for failed skill checks, and 5 seconds delay for successful ones Poisoning skill now has a default skill delay of 10 seconds Provocation skill now has a default skill delay of 10 seconds Remove Trap skill now has a default skill delay of 10 seconds Stealing skill now has a default skill delay of 10 seconds Stealth skill now has a default skill delay of 10 seconds Tracking skill now has a default skill delay of 10 seconds Veterinary skill now has a default skill delay of 10 seconds Fixed an issue with global JS Timer object that would reference the wrong timerIDs Extended global JS timer object to include timers from socket as well (marked with SOCK_ prefix): .SOCK_SKILLDELAY // Delay before the next time player can use another skill .SOCK_OBJDELAY // Delay before next time player can use another object .SOCK_SPIRITSPEAK // Timer that tracks remaining duration of player's Spirit Speak .SOCK_TRACKING // Timer that tracks remaining duration for player's Tracking skill .SOCK_FISHING // Timer that tracks remaining duration for player's Fishing skill .SOCK_MUTETIME // Timer that tracks remaining duration a player remains muted .SOCK_TRACKINGDISPLAY // Timer that tracks interval between each time tracking display is updated Updated various JS scripts to use the new Timer.TIMERNAME with .GetTimer()/.SetTimer() JS Methods for Characters and Sockets Updated Persecution ability for player ghosts to use the skill delay of the Spirit Speak skill, if set Updated Persecution ability to base mana damage primarily on player's Spirit Speak skill rather than their Intelligence In order to cut down on the amount of messages sent from server to players trying to spam-use objects/skills, UOX3 now only sends a maximum of one message for object use delay and one message for skill use delay while the delay timers for these are in effect. This resets on the next successful use of an object or skill. This is tracked via bools in cSocket class: bool objDelayMsgShown bool skillDelayMsgShown Converted DELAY tag in spells.dfn to use seconds (with decimals) instead of tenths of a second, which was not precise enough. This controls the cast time of spells. What would previously say DELAY=10 (10/10ths of a second) now says DELAY=1.0 (1 second) Added support for new Spells DFN tag to control delay until damage takes place after casting a spell, replacing UOX.INI setting COMBATEXPLODEDELAY, which is no longer used: DAMAGEDELAY=# // Delay in seconds (decimal) until a direct damage spell deals its damage Added support for a new Spells DFN tag to control cast recovery time, during which additional spells cannot be cast: RECOVERYDELAY=# // Delay in seconds (decimal) until player can cast another spell Added new setting in UOX.INI to control whether player spellcasting gets interrupted upon equipping/picking up items: ITEMSINTERRUPTCASTING=1 // If enabled, spellcasting gets interrupted by equipping/picking up items. Defaults to enabled. All direct damage spells by default have a 1.0s delay before damage (and VFX) is applied, except Explosion which has a 2.5s delay All spells by default have a cast recovery duration of 1.0s; from the moment a spellcast is completed/moment targeting cursor appears, the player will be unable to cast any other spell for the duration of the cast recovery Reagent checks and skill-check now take place AFTER the spellcast animation, not before! Spell cast times now follow this formula, though values set per spell and can be modified: 0.25 + ( spellCircle * 0.25 ) Overhauled spell sound FX and VFX for for all spells Players can no longer cast spells while holding items on the cursor Fixed Magic Trap, Magic Untrap, Magic Lock and Magic Unlock not being usable on containers in one's own backpack Fixed an issue that caused Magic Trap to deal between 50 to 100 damage to the player. New damage: 5 to 10, depending on Magery skill Fixed an issue where Magic Untrap spell would completely remove traps from spawn containers instead of disable them Fixed an issue where Telekinesis spell would not set off traps on containers properly Added additional FX for Teleport spell played at player's original location before the teleport took place Fixed a bug where creatures summoned with the Summon Creature spell were not dispellable Fixed an issue where the Reveal spell would not reveal players hidden using the Hiding skill Dispel and Mass Dispel spells are no longer guaranteed to succeed at dispelling summoned creatures. Instead, the chance to dispel is based on the following simple formula, with dispelChance capped at 95% to always leave some chance for a creature to resist a dispel: dispelChance = ( 50 - ( targetResistSkill - casterMagerySkill )) / 1.5 The targetResistSkill is based on the highest value of the summoned creature's spell resistance skill and the spell resistance skill of its summoner Fixed an issue where the Create Food spell attempted to create an invalid item Fixed issue where code that checked for valid drop locations for items didn't allow negative z values (Dragon Slayer) Fixed issue where players could drop items on blocking map tiles like water or mountains (Dragon Slayer) Fixed issue where some JS functions like CheckStaticFlag, CheckDynamicFlag, DoesStaticBlock, DoesDynamicBlock and DoesMapBlock would not work correctly when passed negative Z values Fixed issue where context menu were listing skills to train from NPCs based on effective skill rather than base skill Fixed issue where NPCs would offer skills for training even if those skills were not above the minimum 60 skillpoints Updated clilocID used for Gump JS Method AddToolTip - as well as for some item/character tooltip data - from 1050045 to 1042971 for improved client compatibility Human/Elf/Gargoyle NPCs with spellcasting capabilities will now play a casting animation and briefly stop moving when they cast spells Updated NPC spellcasting code to help NPCs make a bit better choices of what spells to cast during combat. Now they take their own health percentage into account, and cast more offensive spells when at near full health vs more defensive spells as their health drops Fixed an issue where Hirelings wouldn't always immediately start following their new owners Fixed a bug where the Earthquake spell could incorrectly add NPC characters marked for deletion to the refresh queue Updated skills and stats of all implemented human NPCs (including vendors) to better match the state of those NPCs around the time of Pub15 Fixed SPATTACK values for a couple of NPCs that were still using values based on spell bitmask instead of spell circle value Updated stats of Jukan and Meer NPCs (dfndata/npc/lbrraces.dfn) to match stats from official LBR guide Added support for an optional third parameter for Character/Socket JS Method .CustomTarget() to allow highlighting targeting cursors as neutral (0, default aura), harmful (1, red aura), helpful (2, blue aura). A value of 3 will cancel the currently active targeting cursor. New syntax: myChar/mySock.CustomTarget( targetID, txtToSay, cursorType ) // supported cursorTypes: 0 = neutral, 1 = harmful, 2 = helpful, 3 = cancel current target cursor Various target cursors triggered by code (like hard-coded spells, some pet commands) also make use of these cursorTypes
2021-08-08 01:57:25 +08:00
std::string skillName = "";
if( JSID_IS_INT( id ))
08/08/2021 - Xuri (0.99.4w) Added support for new Skills DFN tag: SKILLDELAY=# // Delay in seconds before another skill can be used after using this skill. Overrides global delay from UOX.INI Updated skill cSkills::SkillUse() to use skill-specific skill delays if set for a given skill, or global delay from ini if not. Also added a check to see if skill delay timer has been modified by onSkill JS event before attempting to set a default timer Updated skill delays to better match ~pub15 era: Reduced global SKILLDELAY setting in UOX.INI from 2 to 1 second Detecting Hidden skill now has a default skill delay of 10 seconds Herding skill now has a default skill delay of 10 seconds Hiding skill now has a default skill delay of 10 seconds, with shorter delays (global skill delay) for trying to hide while in combat or for successfully hiding Meditation skill now has a default skill delay of 10 seconds, with shorter delays (global skill delay) for failing due to hands being occupied or already being at max mana Peacemaking skill now has a default skill delay of 10 seconds for failed skill checks, and 5 seconds delay for successful ones Poisoning skill now has a default skill delay of 10 seconds Provocation skill now has a default skill delay of 10 seconds Remove Trap skill now has a default skill delay of 10 seconds Stealing skill now has a default skill delay of 10 seconds Stealth skill now has a default skill delay of 10 seconds Tracking skill now has a default skill delay of 10 seconds Veterinary skill now has a default skill delay of 10 seconds Fixed an issue with global JS Timer object that would reference the wrong timerIDs Extended global JS timer object to include timers from socket as well (marked with SOCK_ prefix): .SOCK_SKILLDELAY // Delay before the next time player can use another skill .SOCK_OBJDELAY // Delay before next time player can use another object .SOCK_SPIRITSPEAK // Timer that tracks remaining duration of player's Spirit Speak .SOCK_TRACKING // Timer that tracks remaining duration for player's Tracking skill .SOCK_FISHING // Timer that tracks remaining duration for player's Fishing skill .SOCK_MUTETIME // Timer that tracks remaining duration a player remains muted .SOCK_TRACKINGDISPLAY // Timer that tracks interval between each time tracking display is updated Updated various JS scripts to use the new Timer.TIMERNAME with .GetTimer()/.SetTimer() JS Methods for Characters and Sockets Updated Persecution ability for player ghosts to use the skill delay of the Spirit Speak skill, if set Updated Persecution ability to base mana damage primarily on player's Spirit Speak skill rather than their Intelligence In order to cut down on the amount of messages sent from server to players trying to spam-use objects/skills, UOX3 now only sends a maximum of one message for object use delay and one message for skill use delay while the delay timers for these are in effect. This resets on the next successful use of an object or skill. This is tracked via bools in cSocket class: bool objDelayMsgShown bool skillDelayMsgShown Converted DELAY tag in spells.dfn to use seconds (with decimals) instead of tenths of a second, which was not precise enough. This controls the cast time of spells. What would previously say DELAY=10 (10/10ths of a second) now says DELAY=1.0 (1 second) Added support for new Spells DFN tag to control delay until damage takes place after casting a spell, replacing UOX.INI setting COMBATEXPLODEDELAY, which is no longer used: DAMAGEDELAY=# // Delay in seconds (decimal) until a direct damage spell deals its damage Added support for a new Spells DFN tag to control cast recovery time, during which additional spells cannot be cast: RECOVERYDELAY=# // Delay in seconds (decimal) until player can cast another spell Added new setting in UOX.INI to control whether player spellcasting gets interrupted upon equipping/picking up items: ITEMSINTERRUPTCASTING=1 // If enabled, spellcasting gets interrupted by equipping/picking up items. Defaults to enabled. All direct damage spells by default have a 1.0s delay before damage (and VFX) is applied, except Explosion which has a 2.5s delay All spells by default have a cast recovery duration of 1.0s; from the moment a spellcast is completed/moment targeting cursor appears, the player will be unable to cast any other spell for the duration of the cast recovery Reagent checks and skill-check now take place AFTER the spellcast animation, not before! Spell cast times now follow this formula, though values set per spell and can be modified: 0.25 + ( spellCircle * 0.25 ) Overhauled spell sound FX and VFX for for all spells Players can no longer cast spells while holding items on the cursor Fixed Magic Trap, Magic Untrap, Magic Lock and Magic Unlock not being usable on containers in one's own backpack Fixed an issue that caused Magic Trap to deal between 50 to 100 damage to the player. New damage: 5 to 10, depending on Magery skill Fixed an issue where Magic Untrap spell would completely remove traps from spawn containers instead of disable them Fixed an issue where Telekinesis spell would not set off traps on containers properly Added additional FX for Teleport spell played at player's original location before the teleport took place Fixed a bug where creatures summoned with the Summon Creature spell were not dispellable Fixed an issue where the Reveal spell would not reveal players hidden using the Hiding skill Dispel and Mass Dispel spells are no longer guaranteed to succeed at dispelling summoned creatures. Instead, the chance to dispel is based on the following simple formula, with dispelChance capped at 95% to always leave some chance for a creature to resist a dispel: dispelChance = ( 50 - ( targetResistSkill - casterMagerySkill )) / 1.5 The targetResistSkill is based on the highest value of the summoned creature's spell resistance skill and the spell resistance skill of its summoner Fixed an issue where the Create Food spell attempted to create an invalid item Fixed issue where code that checked for valid drop locations for items didn't allow negative z values (Dragon Slayer) Fixed issue where players could drop items on blocking map tiles like water or mountains (Dragon Slayer) Fixed issue where some JS functions like CheckStaticFlag, CheckDynamicFlag, DoesStaticBlock, DoesDynamicBlock and DoesMapBlock would not work correctly when passed negative Z values Fixed issue where context menu were listing skills to train from NPCs based on effective skill rather than base skill Fixed issue where NPCs would offer skills for training even if those skills were not above the minimum 60 skillpoints Updated clilocID used for Gump JS Method AddToolTip - as well as for some item/character tooltip data - from 1050045 to 1042971 for improved client compatibility Human/Elf/Gargoyle NPCs with spellcasting capabilities will now play a casting animation and briefly stop moving when they cast spells Updated NPC spellcasting code to help NPCs make a bit better choices of what spells to cast during combat. Now they take their own health percentage into account, and cast more offensive spells when at near full health vs more defensive spells as their health drops Fixed an issue where Hirelings wouldn't always immediately start following their new owners Fixed a bug where the Earthquake spell could incorrectly add NPC characters marked for deletion to the refresh queue Updated skills and stats of all implemented human NPCs (including vendors) to better match the state of those NPCs around the time of Pub15 Fixed SPATTACK values for a couple of NPCs that were still using values based on spell bitmask instead of spell circle value Updated stats of Jukan and Meer NPCs (dfndata/npc/lbrraces.dfn) to match stats from official LBR guide Added support for an optional third parameter for Character/Socket JS Method .CustomTarget() to allow highlighting targeting cursors as neutral (0, default aura), harmful (1, red aura), helpful (2, blue aura). A value of 3 will cancel the currently active targeting cursor. New syntax: myChar/mySock.CustomTarget( targetID, txtToSay, cursorType ) // supported cursorTypes: 0 = neutral, 1 = harmful, 2 = helpful, 3 = cancel current target cursor Various target cursors triggered by code (like hard-coded spells, some pet commands) also make use of these cursorTypes
2021-08-08 01:57:25 +08:00
{
JSString *tString = nullptr;
switch( JSID_TO_INT( id ))
08/08/2021 - Xuri (0.99.4w) Added support for new Skills DFN tag: SKILLDELAY=# // Delay in seconds before another skill can be used after using this skill. Overrides global delay from UOX.INI Updated skill cSkills::SkillUse() to use skill-specific skill delays if set for a given skill, or global delay from ini if not. Also added a check to see if skill delay timer has been modified by onSkill JS event before attempting to set a default timer Updated skill delays to better match ~pub15 era: Reduced global SKILLDELAY setting in UOX.INI from 2 to 1 second Detecting Hidden skill now has a default skill delay of 10 seconds Herding skill now has a default skill delay of 10 seconds Hiding skill now has a default skill delay of 10 seconds, with shorter delays (global skill delay) for trying to hide while in combat or for successfully hiding Meditation skill now has a default skill delay of 10 seconds, with shorter delays (global skill delay) for failing due to hands being occupied or already being at max mana Peacemaking skill now has a default skill delay of 10 seconds for failed skill checks, and 5 seconds delay for successful ones Poisoning skill now has a default skill delay of 10 seconds Provocation skill now has a default skill delay of 10 seconds Remove Trap skill now has a default skill delay of 10 seconds Stealing skill now has a default skill delay of 10 seconds Stealth skill now has a default skill delay of 10 seconds Tracking skill now has a default skill delay of 10 seconds Veterinary skill now has a default skill delay of 10 seconds Fixed an issue with global JS Timer object that would reference the wrong timerIDs Extended global JS timer object to include timers from socket as well (marked with SOCK_ prefix): .SOCK_SKILLDELAY // Delay before the next time player can use another skill .SOCK_OBJDELAY // Delay before next time player can use another object .SOCK_SPIRITSPEAK // Timer that tracks remaining duration of player's Spirit Speak .SOCK_TRACKING // Timer that tracks remaining duration for player's Tracking skill .SOCK_FISHING // Timer that tracks remaining duration for player's Fishing skill .SOCK_MUTETIME // Timer that tracks remaining duration a player remains muted .SOCK_TRACKINGDISPLAY // Timer that tracks interval between each time tracking display is updated Updated various JS scripts to use the new Timer.TIMERNAME with .GetTimer()/.SetTimer() JS Methods for Characters and Sockets Updated Persecution ability for player ghosts to use the skill delay of the Spirit Speak skill, if set Updated Persecution ability to base mana damage primarily on player's Spirit Speak skill rather than their Intelligence In order to cut down on the amount of messages sent from server to players trying to spam-use objects/skills, UOX3 now only sends a maximum of one message for object use delay and one message for skill use delay while the delay timers for these are in effect. This resets on the next successful use of an object or skill. This is tracked via bools in cSocket class: bool objDelayMsgShown bool skillDelayMsgShown Converted DELAY tag in spells.dfn to use seconds (with decimals) instead of tenths of a second, which was not precise enough. This controls the cast time of spells. What would previously say DELAY=10 (10/10ths of a second) now says DELAY=1.0 (1 second) Added support for new Spells DFN tag to control delay until damage takes place after casting a spell, replacing UOX.INI setting COMBATEXPLODEDELAY, which is no longer used: DAMAGEDELAY=# // Delay in seconds (decimal) until a direct damage spell deals its damage Added support for a new Spells DFN tag to control cast recovery time, during which additional spells cannot be cast: RECOVERYDELAY=# // Delay in seconds (decimal) until player can cast another spell Added new setting in UOX.INI to control whether player spellcasting gets interrupted upon equipping/picking up items: ITEMSINTERRUPTCASTING=1 // If enabled, spellcasting gets interrupted by equipping/picking up items. Defaults to enabled. All direct damage spells by default have a 1.0s delay before damage (and VFX) is applied, except Explosion which has a 2.5s delay All spells by default have a cast recovery duration of 1.0s; from the moment a spellcast is completed/moment targeting cursor appears, the player will be unable to cast any other spell for the duration of the cast recovery Reagent checks and skill-check now take place AFTER the spellcast animation, not before! Spell cast times now follow this formula, though values set per spell and can be modified: 0.25 + ( spellCircle * 0.25 ) Overhauled spell sound FX and VFX for for all spells Players can no longer cast spells while holding items on the cursor Fixed Magic Trap, Magic Untrap, Magic Lock and Magic Unlock not being usable on containers in one's own backpack Fixed an issue that caused Magic Trap to deal between 50 to 100 damage to the player. New damage: 5 to 10, depending on Magery skill Fixed an issue where Magic Untrap spell would completely remove traps from spawn containers instead of disable them Fixed an issue where Telekinesis spell would not set off traps on containers properly Added additional FX for Teleport spell played at player's original location before the teleport took place Fixed a bug where creatures summoned with the Summon Creature spell were not dispellable Fixed an issue where the Reveal spell would not reveal players hidden using the Hiding skill Dispel and Mass Dispel spells are no longer guaranteed to succeed at dispelling summoned creatures. Instead, the chance to dispel is based on the following simple formula, with dispelChance capped at 95% to always leave some chance for a creature to resist a dispel: dispelChance = ( 50 - ( targetResistSkill - casterMagerySkill )) / 1.5 The targetResistSkill is based on the highest value of the summoned creature's spell resistance skill and the spell resistance skill of its summoner Fixed an issue where the Create Food spell attempted to create an invalid item Fixed issue where code that checked for valid drop locations for items didn't allow negative z values (Dragon Slayer) Fixed issue where players could drop items on blocking map tiles like water or mountains (Dragon Slayer) Fixed issue where some JS functions like CheckStaticFlag, CheckDynamicFlag, DoesStaticBlock, DoesDynamicBlock and DoesMapBlock would not work correctly when passed negative Z values Fixed issue where context menu were listing skills to train from NPCs based on effective skill rather than base skill Fixed issue where NPCs would offer skills for training even if those skills were not above the minimum 60 skillpoints Updated clilocID used for Gump JS Method AddToolTip - as well as for some item/character tooltip data - from 1050045 to 1042971 for improved client compatibility Human/Elf/Gargoyle NPCs with spellcasting capabilities will now play a casting animation and briefly stop moving when they cast spells Updated NPC spellcasting code to help NPCs make a bit better choices of what spells to cast during combat. Now they take their own health percentage into account, and cast more offensive spells when at near full health vs more defensive spells as their health drops Fixed an issue where Hirelings wouldn't always immediately start following their new owners Fixed a bug where the Earthquake spell could incorrectly add NPC characters marked for deletion to the refresh queue Updated skills and stats of all implemented human NPCs (including vendors) to better match the state of those NPCs around the time of Pub15 Fixed SPATTACK values for a couple of NPCs that were still using values based on spell bitmask instead of spell circle value Updated stats of Jukan and Meer NPCs (dfndata/npc/lbrraces.dfn) to match stats from official LBR guide Added support for an optional third parameter for Character/Socket JS Method .CustomTarget() to allow highlighting targeting cursors as neutral (0, default aura), harmful (1, red aura), helpful (2, blue aura). A value of 3 will cancel the currently active targeting cursor. New syntax: myChar/mySock.CustomTarget( targetID, txtToSay, cursorType ) // supported cursorTypes: 0 = neutral, 1 = harmful, 2 = helpful, 3 = cancel current target cursor Various target cursors triggered by code (like hard-coded spells, some pet commands) also make use of these cursorTypes
2021-08-08 01:57:25 +08:00
{
case CGSKILL_NAME:
08/08/2021 - Xuri (0.99.4w) Added support for new Skills DFN tag: SKILLDELAY=# // Delay in seconds before another skill can be used after using this skill. Overrides global delay from UOX.INI Updated skill cSkills::SkillUse() to use skill-specific skill delays if set for a given skill, or global delay from ini if not. Also added a check to see if skill delay timer has been modified by onSkill JS event before attempting to set a default timer Updated skill delays to better match ~pub15 era: Reduced global SKILLDELAY setting in UOX.INI from 2 to 1 second Detecting Hidden skill now has a default skill delay of 10 seconds Herding skill now has a default skill delay of 10 seconds Hiding skill now has a default skill delay of 10 seconds, with shorter delays (global skill delay) for trying to hide while in combat or for successfully hiding Meditation skill now has a default skill delay of 10 seconds, with shorter delays (global skill delay) for failing due to hands being occupied or already being at max mana Peacemaking skill now has a default skill delay of 10 seconds for failed skill checks, and 5 seconds delay for successful ones Poisoning skill now has a default skill delay of 10 seconds Provocation skill now has a default skill delay of 10 seconds Remove Trap skill now has a default skill delay of 10 seconds Stealing skill now has a default skill delay of 10 seconds Stealth skill now has a default skill delay of 10 seconds Tracking skill now has a default skill delay of 10 seconds Veterinary skill now has a default skill delay of 10 seconds Fixed an issue with global JS Timer object that would reference the wrong timerIDs Extended global JS timer object to include timers from socket as well (marked with SOCK_ prefix): .SOCK_SKILLDELAY // Delay before the next time player can use another skill .SOCK_OBJDELAY // Delay before next time player can use another object .SOCK_SPIRITSPEAK // Timer that tracks remaining duration of player's Spirit Speak .SOCK_TRACKING // Timer that tracks remaining duration for player's Tracking skill .SOCK_FISHING // Timer that tracks remaining duration for player's Fishing skill .SOCK_MUTETIME // Timer that tracks remaining duration a player remains muted .SOCK_TRACKINGDISPLAY // Timer that tracks interval between each time tracking display is updated Updated various JS scripts to use the new Timer.TIMERNAME with .GetTimer()/.SetTimer() JS Methods for Characters and Sockets Updated Persecution ability for player ghosts to use the skill delay of the Spirit Speak skill, if set Updated Persecution ability to base mana damage primarily on player's Spirit Speak skill rather than their Intelligence In order to cut down on the amount of messages sent from server to players trying to spam-use objects/skills, UOX3 now only sends a maximum of one message for object use delay and one message for skill use delay while the delay timers for these are in effect. This resets on the next successful use of an object or skill. This is tracked via bools in cSocket class: bool objDelayMsgShown bool skillDelayMsgShown Converted DELAY tag in spells.dfn to use seconds (with decimals) instead of tenths of a second, which was not precise enough. This controls the cast time of spells. What would previously say DELAY=10 (10/10ths of a second) now says DELAY=1.0 (1 second) Added support for new Spells DFN tag to control delay until damage takes place after casting a spell, replacing UOX.INI setting COMBATEXPLODEDELAY, which is no longer used: DAMAGEDELAY=# // Delay in seconds (decimal) until a direct damage spell deals its damage Added support for a new Spells DFN tag to control cast recovery time, during which additional spells cannot be cast: RECOVERYDELAY=# // Delay in seconds (decimal) until player can cast another spell Added new setting in UOX.INI to control whether player spellcasting gets interrupted upon equipping/picking up items: ITEMSINTERRUPTCASTING=1 // If enabled, spellcasting gets interrupted by equipping/picking up items. Defaults to enabled. All direct damage spells by default have a 1.0s delay before damage (and VFX) is applied, except Explosion which has a 2.5s delay All spells by default have a cast recovery duration of 1.0s; from the moment a spellcast is completed/moment targeting cursor appears, the player will be unable to cast any other spell for the duration of the cast recovery Reagent checks and skill-check now take place AFTER the spellcast animation, not before! Spell cast times now follow this formula, though values set per spell and can be modified: 0.25 + ( spellCircle * 0.25 ) Overhauled spell sound FX and VFX for for all spells Players can no longer cast spells while holding items on the cursor Fixed Magic Trap, Magic Untrap, Magic Lock and Magic Unlock not being usable on containers in one's own backpack Fixed an issue that caused Magic Trap to deal between 50 to 100 damage to the player. New damage: 5 to 10, depending on Magery skill Fixed an issue where Magic Untrap spell would completely remove traps from spawn containers instead of disable them Fixed an issue where Telekinesis spell would not set off traps on containers properly Added additional FX for Teleport spell played at player's original location before the teleport took place Fixed a bug where creatures summoned with the Summon Creature spell were not dispellable Fixed an issue where the Reveal spell would not reveal players hidden using the Hiding skill Dispel and Mass Dispel spells are no longer guaranteed to succeed at dispelling summoned creatures. Instead, the chance to dispel is based on the following simple formula, with dispelChance capped at 95% to always leave some chance for a creature to resist a dispel: dispelChance = ( 50 - ( targetResistSkill - casterMagerySkill )) / 1.5 The targetResistSkill is based on the highest value of the summoned creature's spell resistance skill and the spell resistance skill of its summoner Fixed an issue where the Create Food spell attempted to create an invalid item Fixed issue where code that checked for valid drop locations for items didn't allow negative z values (Dragon Slayer) Fixed issue where players could drop items on blocking map tiles like water or mountains (Dragon Slayer) Fixed issue where some JS functions like CheckStaticFlag, CheckDynamicFlag, DoesStaticBlock, DoesDynamicBlock and DoesMapBlock would not work correctly when passed negative Z values Fixed issue where context menu were listing skills to train from NPCs based on effective skill rather than base skill Fixed issue where NPCs would offer skills for training even if those skills were not above the minimum 60 skillpoints Updated clilocID used for Gump JS Method AddToolTip - as well as for some item/character tooltip data - from 1050045 to 1042971 for improved client compatibility Human/Elf/Gargoyle NPCs with spellcasting capabilities will now play a casting animation and briefly stop moving when they cast spells Updated NPC spellcasting code to help NPCs make a bit better choices of what spells to cast during combat. Now they take their own health percentage into account, and cast more offensive spells when at near full health vs more defensive spells as their health drops Fixed an issue where Hirelings wouldn't always immediately start following their new owners Fixed a bug where the Earthquake spell could incorrectly add NPC characters marked for deletion to the refresh queue Updated skills and stats of all implemented human NPCs (including vendors) to better match the state of those NPCs around the time of Pub15 Fixed SPATTACK values for a couple of NPCs that were still using values based on spell bitmask instead of spell circle value Updated stats of Jukan and Meer NPCs (dfndata/npc/lbrraces.dfn) to match stats from official LBR guide Added support for an optional third parameter for Character/Socket JS Method .CustomTarget() to allow highlighting targeting cursors as neutral (0, default aura), harmful (1, red aura), helpful (2, blue aura). A value of 3 will cancel the currently active targeting cursor. New syntax: myChar/mySock.CustomTarget( targetID, txtToSay, cursorType ) // supported cursorTypes: 0 = neutral, 1 = harmful, 2 = helpful, 3 = cancel current target cursor Various target cursors triggered by code (like hard-coded spells, some pet commands) also make use of these cursorTypes
2021-08-08 01:57:25 +08:00
tString = JS_NewStringCopyZ( cx, gPriv->name.c_str() );
*vp = STRING_TO_JSVAL( tString );
break;
case CGSKILL_MADEWORD:
tString = JS_NewStringCopyZ( cx, gPriv->madeWord.c_str() );
08/08/2021 - Xuri (0.99.4w) Added support for new Skills DFN tag: SKILLDELAY=# // Delay in seconds before another skill can be used after using this skill. Overrides global delay from UOX.INI Updated skill cSkills::SkillUse() to use skill-specific skill delays if set for a given skill, or global delay from ini if not. Also added a check to see if skill delay timer has been modified by onSkill JS event before attempting to set a default timer Updated skill delays to better match ~pub15 era: Reduced global SKILLDELAY setting in UOX.INI from 2 to 1 second Detecting Hidden skill now has a default skill delay of 10 seconds Herding skill now has a default skill delay of 10 seconds Hiding skill now has a default skill delay of 10 seconds, with shorter delays (global skill delay) for trying to hide while in combat or for successfully hiding Meditation skill now has a default skill delay of 10 seconds, with shorter delays (global skill delay) for failing due to hands being occupied or already being at max mana Peacemaking skill now has a default skill delay of 10 seconds for failed skill checks, and 5 seconds delay for successful ones Poisoning skill now has a default skill delay of 10 seconds Provocation skill now has a default skill delay of 10 seconds Remove Trap skill now has a default skill delay of 10 seconds Stealing skill now has a default skill delay of 10 seconds Stealth skill now has a default skill delay of 10 seconds Tracking skill now has a default skill delay of 10 seconds Veterinary skill now has a default skill delay of 10 seconds Fixed an issue with global JS Timer object that would reference the wrong timerIDs Extended global JS timer object to include timers from socket as well (marked with SOCK_ prefix): .SOCK_SKILLDELAY // Delay before the next time player can use another skill .SOCK_OBJDELAY // Delay before next time player can use another object .SOCK_SPIRITSPEAK // Timer that tracks remaining duration of player's Spirit Speak .SOCK_TRACKING // Timer that tracks remaining duration for player's Tracking skill .SOCK_FISHING // Timer that tracks remaining duration for player's Fishing skill .SOCK_MUTETIME // Timer that tracks remaining duration a player remains muted .SOCK_TRACKINGDISPLAY // Timer that tracks interval between each time tracking display is updated Updated various JS scripts to use the new Timer.TIMERNAME with .GetTimer()/.SetTimer() JS Methods for Characters and Sockets Updated Persecution ability for player ghosts to use the skill delay of the Spirit Speak skill, if set Updated Persecution ability to base mana damage primarily on player's Spirit Speak skill rather than their Intelligence In order to cut down on the amount of messages sent from server to players trying to spam-use objects/skills, UOX3 now only sends a maximum of one message for object use delay and one message for skill use delay while the delay timers for these are in effect. This resets on the next successful use of an object or skill. This is tracked via bools in cSocket class: bool objDelayMsgShown bool skillDelayMsgShown Converted DELAY tag in spells.dfn to use seconds (with decimals) instead of tenths of a second, which was not precise enough. This controls the cast time of spells. What would previously say DELAY=10 (10/10ths of a second) now says DELAY=1.0 (1 second) Added support for new Spells DFN tag to control delay until damage takes place after casting a spell, replacing UOX.INI setting COMBATEXPLODEDELAY, which is no longer used: DAMAGEDELAY=# // Delay in seconds (decimal) until a direct damage spell deals its damage Added support for a new Spells DFN tag to control cast recovery time, during which additional spells cannot be cast: RECOVERYDELAY=# // Delay in seconds (decimal) until player can cast another spell Added new setting in UOX.INI to control whether player spellcasting gets interrupted upon equipping/picking up items: ITEMSINTERRUPTCASTING=1 // If enabled, spellcasting gets interrupted by equipping/picking up items. Defaults to enabled. All direct damage spells by default have a 1.0s delay before damage (and VFX) is applied, except Explosion which has a 2.5s delay All spells by default have a cast recovery duration of 1.0s; from the moment a spellcast is completed/moment targeting cursor appears, the player will be unable to cast any other spell for the duration of the cast recovery Reagent checks and skill-check now take place AFTER the spellcast animation, not before! Spell cast times now follow this formula, though values set per spell and can be modified: 0.25 + ( spellCircle * 0.25 ) Overhauled spell sound FX and VFX for for all spells Players can no longer cast spells while holding items on the cursor Fixed Magic Trap, Magic Untrap, Magic Lock and Magic Unlock not being usable on containers in one's own backpack Fixed an issue that caused Magic Trap to deal between 50 to 100 damage to the player. New damage: 5 to 10, depending on Magery skill Fixed an issue where Magic Untrap spell would completely remove traps from spawn containers instead of disable them Fixed an issue where Telekinesis spell would not set off traps on containers properly Added additional FX for Teleport spell played at player's original location before the teleport took place Fixed a bug where creatures summoned with the Summon Creature spell were not dispellable Fixed an issue where the Reveal spell would not reveal players hidden using the Hiding skill Dispel and Mass Dispel spells are no longer guaranteed to succeed at dispelling summoned creatures. Instead, the chance to dispel is based on the following simple formula, with dispelChance capped at 95% to always leave some chance for a creature to resist a dispel: dispelChance = ( 50 - ( targetResistSkill - casterMagerySkill )) / 1.5 The targetResistSkill is based on the highest value of the summoned creature's spell resistance skill and the spell resistance skill of its summoner Fixed an issue where the Create Food spell attempted to create an invalid item Fixed issue where code that checked for valid drop locations for items didn't allow negative z values (Dragon Slayer) Fixed issue where players could drop items on blocking map tiles like water or mountains (Dragon Slayer) Fixed issue where some JS functions like CheckStaticFlag, CheckDynamicFlag, DoesStaticBlock, DoesDynamicBlock and DoesMapBlock would not work correctly when passed negative Z values Fixed issue where context menu were listing skills to train from NPCs based on effective skill rather than base skill Fixed issue where NPCs would offer skills for training even if those skills were not above the minimum 60 skillpoints Updated clilocID used for Gump JS Method AddToolTip - as well as for some item/character tooltip data - from 1050045 to 1042971 for improved client compatibility Human/Elf/Gargoyle NPCs with spellcasting capabilities will now play a casting animation and briefly stop moving when they cast spells Updated NPC spellcasting code to help NPCs make a bit better choices of what spells to cast during combat. Now they take their own health percentage into account, and cast more offensive spells when at near full health vs more defensive spells as their health drops Fixed an issue where Hirelings wouldn't always immediately start following their new owners Fixed a bug where the Earthquake spell could incorrectly add NPC characters marked for deletion to the refresh queue Updated skills and stats of all implemented human NPCs (including vendors) to better match the state of those NPCs around the time of Pub15 Fixed SPATTACK values for a couple of NPCs that were still using values based on spell bitmask instead of spell circle value Updated stats of Jukan and Meer NPCs (dfndata/npc/lbrraces.dfn) to match stats from official LBR guide Added support for an optional third parameter for Character/Socket JS Method .CustomTarget() to allow highlighting targeting cursors as neutral (0, default aura), harmful (1, red aura), helpful (2, blue aura). A value of 3 will cancel the currently active targeting cursor. New syntax: myChar/mySock.CustomTarget( targetID, txtToSay, cursorType ) // supported cursorTypes: 0 = neutral, 1 = harmful, 2 = helpful, 3 = cancel current target cursor Various target cursors triggered by code (like hard-coded spells, some pet commands) also make use of these cursorTypes
2021-08-08 01:57:25 +08:00
*vp = STRING_TO_JSVAL( tString );
break;
case CGSKILL_STRENGTH: *vp = INT_TO_JSVAL( gPriv->strength ); break;
case CGSKILL_DEXTERITY: *vp = INT_TO_JSVAL( gPriv->dexterity ); break;
case CGSKILL_INTELLIGENCE: *vp = INT_TO_JSVAL( gPriv->intelligence ); break;
case CGSKILL_SKILLDELAY: *vp = INT_TO_JSVAL( gPriv->skillDelay ); break;
case CGSKILL_SCRIPTID: *vp = INT_TO_JSVAL( gPriv->jsScript ); break;
default: break;
}
}
return JS_TRUE;
}
2025-03-28 13:23:59 +10:00
JSBool CTimerProps_getProperty( JSContext *cx, JSObject *obj, jsid id, jsval *vp )
0.99.4v Added JS command to reload dictionaries 'reloaddictionaries Fixed a server crash related to casting of spells Fixed some issues with Line-of-Sight checks related to items under/above ground, LoS checks between different floors of buildings, etc. Updated handling of skill-training keywords to be based on language-independent keyword IDs rather than trying to match player-input text to specific skill-names Updated animal-trainer/stablemasterscript (js/npc/ai/stablemaster.js) with several changes: Fixed an issue where the same pet would be stabled in all available slots if payment was taken from player's bank account instead of their backpack Fixed an issue where stablemaster would not pause walking for a while when a player interacts with them Converted all system messages and text messages in stablemaster script to dictionary entries Added new NPC AI type to source - AI_STABLEMASTER (9) - and assigned this to animal trainers. This is used to identify this type of NPCs for the purpose of displaying relevant context menus Reworked banker AI script (js/npc/ai/banker.js) to use triggerwords from client instead of hard-defined strings, to work better with multiple languages (and work with all relevant triggerwords) Fixed a bug with banker AI script (js/npc/ai/banker.js) that prevented players from using the "withdraw" command Re-added NPC AI 8 to banker NPCs (dfndata/npc/male_vendors.dfn and female_vendors.dfn) so code can check for presence of this AI when handling context menus Removed remaining hard-coded banking functionality - all handled by script anyway Added new context menu option for NPC bankers - Open Bankbox Updated code handling of context menus to only show context menus when relevant: Open Paperdoll - Shows for all characters with a paperdoll Open Backpack - Shows for player's character, pack animals and hirelings Open Bankbox - Shows for banker NPCs (if within 8 tiles) Buy/Sell - Shows for vendor NPCs (if within 8 tiles, and if they have anything for sale/are buying anything) Added new context menu entries for pets, which can be used if player is within 12 tiles of pet: Command: Kill Command: Stop Command: Follow Command: Stay Command: Guard Add Friend Remove Friend Transfer Release Added new context menu entries for stablemasters/animal trainers: Claim All Pets Stable Pet Added new context menu entries for Escort Quest NPCs Ask Destination (if within 3 tiles) Accept Escort (if within 3 tiles) Abandon Escort Added new context menus for NPCs that can teach skills to players (limited to max 10 per NPC) Train [skillName] Added new AI script for NPC hirelings (3204=js/npc/ai/hireling.js), who can be hired to follow the player around for a limited amount of time, and function the same way as pets. In addition to the regular pet commands, these speech commands are supported: hire // The hireling will respond with the cost to hire them dismiss // Replaces the "release" command for pets; will dismiss the hireling patrol // The hireling will patrol between it's current location and a second targeted location nearby move // The hireling will try to shuffle out of the way fetch // The hireling will try to fetch a targeted item drop // The hireling will drop to the ground all loot they're currently carrying report // The hireling will report on the remaining time they're hired for Added new NPC DFN tag used by code to detect hireling NPCs for the purpose of displaying context menus: HIRELING // No additional value/data needed for tag Added new context menu entries for Hireling NPCs, in addition to the ones for regular pets: Hire // Can be used within 3 steps of the hireling, who will respond with cost to hire them Dismiss // Replaces the "release" command for pets, will dismiss the hireling Added HIRELING tag and SCRIPT=3204 to and updated stats of various NPCs that will be hireable: m_fighter, f_fighter, m_beggar, f_beggar, m_peasant, f_peasant, m_sailor, f_sailor, m_pirate, f_pirate Added new hireling NPC: m_paladin, f_paladin Added new UOX ini setting to enable/disable context menus CONTEXTMENUS=1/0 (defaults to 1) Added new Item JS Method to check if an item's ID is on a specified food list .IsOnFoodList( foodList ) // Returns true/false if item's ID is on specified foodList Added new OMNIVORE food list and assigned it to [basehuman] DFN section Added new Character JS Properties .isGuarded // Gets/Sets whether character is guarded by a pet/hireling .guarding // Gets/Sets the object (if any) being guarded by a pet/hireling Fixed multiple issues with health bars, flagging and character highlighting Added some crash protection for invalid data used with CUSTOMINTTAG and CUSTOMSTRINGTAG DFN tags for Items, NPCs and Multis Fixed an issue which prevented hard-coded checks from running when using items Added new global js object (Timer) to make the use of character timers in JS more robust, with properties matching timer names from enum in source. Properties: .TIMEOUT // Time until next attack can be done in combat .INVIS // Time until invisible character becomes visible .HUNGER // Time until character grows more hungry .THIRST // Time until character grows more thirsty .POISONTIME // Time until next tick of poison damage .POISONTEXT // Time until next message about suffering from poison .POISONWEAROFF // Time until poison wears off .SPELLTIME // Time until spell cast is completed. Can be set to 0 to interrupt .ANTISPAM // Time until next speech message can be sent (for anti spam purposes) .CRIMFLAG // Time until criminal flag runs out .MURDERRATE // Time until next murder count decay .PEACETIMER // Time until character can re-enter combat after being affected by peacemaking .FLYINGTOGGLE // Time until next time flying ability can be toggled for gargoyles .MOVETIME // Time until NPC can move again .SPATIMER // Time until next time NPC can cast a spell .SUMMONTIME // Time until a summoned NPC will vanish .EVADETIME // Time until an NPC will exit evade state .LOGOUT // Time it takes for a player char to vanish after logout Examples of use: var hungerTimer = myChar.GetTimer( Timer.HUNGER ) myChar.SetTimer( Timer.HUNGER, 15000 ) Added new Character JS Methods to add, remove and list friends of a pet/hireling: .AddFriend( playerToAdd ) // Adds player to friend list .RemoveFriend( playerToRemove ) // Removes player from friend list .GetFriendList() // Gets list of friends .ClearFriendList() // Clears list of friends Added new Character JS Method to fetch a player character's list of pets/followers .GetPetList() // Gets list of pets/followers Added new persistent NPC property to keep track of a pet's previous owners, whether those tamed the pet or had it transferred to them. Every time a pet is tamed, or is transferred to a new owner, this list is updated: GenericList< CChar * > petOwnerList Added new Character JS Method to check if a player is on a pet's owner list as a previous owner: .HasBeenOwner( mChar ) Previous owners of a pet can re-tame it with guaranteed chance of success Updated JS Method Refresh() to be usable with both items or characters, to send updated state of object to nearby players Added character tooltip [Guarded] for characters being guarded by a pet/hireling Pets/hirelings that are transferred will now immediately start following their new master instead of wandering freely Pets/hirelings can no longer be transferred between players as long as either party is flagged as a criminal Pets/hirelings can no longer be transferred to dead players Pets/hirelings can no longer be transferred to NPCs Summoned creatures can no longer be transferred to other players Summoned creatures can no longer have friends Friend lists of pets/hirelings are now cleared when the pet/hireling is transferred to another player Added new UOX.INI settings to control how many pets players can have active: MAXCONTROLSLOTS=0 // Maximum number of pet control slots available to player. Disabled if 0 MAXFOLLOWERS=5 // Maximum pets/followers a player can have active at the same time. Used if control slots are disabled MAXPETOWNERS=5 // Maximum number of different owners a pet can have over its lifetime before it becomes impossible to retame Added new NPC property and NPC DFN tag that keeps track of how many pet control slots an NPC would take up if owned by a player: UI08 controlSlots // source property CONTROLSLOTS=# // DFN tag Added new Character JS properties: .ownerCount // Get the total number of owners a pet/hireling has had, based on NPC's petOwnerList .controlSlots // Get/Set number of pet control slots an NPC will occupy .controlSlotsUsed // Get/Set the number of control slots used by a player Updated get (js/commands/targeting/get.js) and set (js/commands/targeting/set.js) commands to support getting/setting the following character properties: deaths ownerCount (read only) controlSlots controlSlotsUsed Updated NPC DFNs with default CONTROLSLOT=# tags Increased the max distance from player that onSpeech JS event will trigger from 7 to 12 Updated how "all attack" and "all follow" commands for pets are handled. Now loops through all pets owned by character and executes command for each eligible pet Fixed an issue where NPCs could follow characters in different worlds/instances than them selves Updated default max amount of items that can be sold to NPC vendors from 5 to 250 Guards can no longer train players in skills Updated equipment itemlists (dfndata/items/itemlists/itemlists.dfn) with blank entries to introduce some more variety in the type of clothes NPCs wear in general Added new NPCs to DFNs (dfndata/npc/undead.dfn) and added them to undead npclist: [skeletalmage] // variation of [bonemage] [skeletalknight] // variation of [boneknight] Updated Titles (dfndata/titles/titles.dfn) with up-to-date titles for skills around Pub 15, and added titles for skills added after that. Also added "Elder" and "Legendary" titles for 110 and 120 skillpoints Updated EQUIPITEM tag in newbie.dfn (dfndata/newbie/newbie.dfn) to support an optional hue parameter (EQUIPITEM=id,hue) Updated starting equipment for new characters (dfndata/newbie/newbie.dfn), with commented out practice weapons. Uncomment to use Added item definitions for practice weapons (dfndata/items/gear/weapons/practice_weapons.dfn): practice_skinning_knife practice_hatchet practice_axe practice_mace practice_longsword practice_spear practice_bow practice_club practice_crook practice_gnarled_staff Updated mount statues DFN (dfndata/items/misc/mount-statues.dfn) and JS (js/npc/pets/*.js) files to include pet control slot related stuff Pets now inherit the karma of their owners, but revert to their original karma upon release Pets and hirelings will no longer follow the ghosts of their dead owners, but stay to guard their corpse Added optional 9th parameter for JS Function CreateDFNItem to specify a color for item created. This comes before the other optional parameters - worldNumber and instanceID (which are only used if character is NULL): CreateDFNItem( mSock, mChar, sectionName, inPack, iAmount, itemType, iColor, worldNumber, instanceID ) Added ID of Giant Beetle to various pack animal checks Pack animals will now drop any newbie/blessed items stored in their packs upon death Added new NPC properties to track pet loyalty, and exposed these as Character JS properties, and NPC DFN tags: JS Properties .maxLoyalty // Defaults to 100 .loyalty // Starts at 25 DFN Tags MAXLOYALTY=# // Defaults to 100 LOYALTY=# // Starts at 25 Updated TriggerEvent JS function to support return values (int, bool, string, object) from called script Updated various JS scripts to make use of new TriggerEvent functionality and reduce reliance on custom tags: js/item/archerybutte.js js/item/trainingdummy.js js/server/data/combatanims.js js/server/data/weapontypes.js Updated archerybutte script to use dictionary for system and text messages Updated archerybutte script to support increased range, distance penalty and dex/str bonuses when calculating score Added new UOX.INI settings under [pets and hirelings] section related to pet control and loyalty: CHECKPETCONTROLDIFFICULTY=1 // Enable/Disable pet control difficulty system PETLOYALTYGAINONSUCCESS=1 // Amount of pet loyalty gained on successful pet command use PETLOYALTYLOSSONFAILURE=3 // Amount of pet loyalty lost on failed pet command use PETLOYALTYRATE=900 // Amount of seconds between each time pet loyalty is automatically reduced by 1. Takes 25 hours to deplete completely from max Added new persistent NPC property that keeps track of the difficulty of taming and controlling a pet, and exposed it as a Character JS property: .orneriness Every time a tamed pet is released or goes wild, its "orneriness" increases, making it more difficult for other players to tame, and more difficult for anyone to control. Updated CBasePetResponse::canControlPet() function to use pet control difficulty system if enabled, which checks player's animal taming/animal lore skill vs a pet's "orneriness" to determine chance of pet accepting a given pet command On successful use of pet command, increases pet loyalty by value defined in PETLOYALTYGAINONSUCCESS ini setting On failed use of pet command, decreases pet loyalty by value defined in PETLOYALTYLOSSONFAILURE ini setting Added new Character JS Method to calculate chance of a player successfully controlling the pet: .CalculateControlChance( mChar ) // Returns value between 0 and 1000 indicating chance of success Feeding a pet will now restore its loyalty to maximum Pets will now lose loyalty on hunger checks when at maximum hunger Pets that are maximum hungry will now only have a chance to go wild if loyalty has dropped to zero Added new DFN tag for creatures.dfn - TYPE - which contains a string describing the type of creature Added secure pet trading. Players who trade pets will now see a pet transfer deed appear in a secure trade window with the name and type of creature, and upon completion of the trade the associated pet will be instantly transferred to the other player Updated resource JS scripts (js/server/resource/*) to use dictionaries for all system messages Updated skill JS scripts (js/skill/*) to use dictionaries for all system messages Updated housing JS scripts (js/server/house/*) to use dictionaries for all system messages Updated item JS scripts (js/item/*) to use dictionaries for all system messages Updated magic JS scripts (js/magic/*) to use dictionaries for all system messages Updated NPC AI JS scripts (js/npc/ai/*) to use dictionaries for all system messages Updated command JS scripts (js/commands/*) to use dictionaries for all system messages, gump tooltips, etc Updated code to use dictionaries for all system messages Fixed incorrect spelling for UOX.INI setting HIDEW(H)ILEMOUNTED and updated hiding skill (js/skill/hiding.js) to actually allow/disallow hiding while mounted based on this setting Added new Character JS Method to make it easier to make one NPC initiate combat with another: .InitiateCombat( targetChar ) // Character attempts to initiate combat with target character Updated parrying portion of combat code to be in line with Pub15/pre-AoS parrying mechanics. High AR shields now absorb more damage on a successful parry, while low AR shields have a higher chance of parrying. Shields are also now more effective against archery attacks (full absorption potential) than melee attacks (half absorption potential). Updated combat damage calculations to be in line with Pub15/pre-AoS damage calculations Adjusted default value of COMBATNPCDAMAGERATE ini setting (damage divisor when target is a player) from 2 to 1 to account for these changes. Removed dictionary.UNK, and made dictionary.ZRO the default dictionary used for all unsupported languages Added dictionary support for additional languages: Portuguese, Italian, Czech Updated default dictionaries for the following languages: English, French Added default dictionaries for the following languages: German, Spanish, Portuguese, Italian, Czech (note that translations have been provided by automatic services and will contain inaccuracies!) Added new UOX.INI setting to allow specifying a default dictionary language for server, which if set will force that language for all dictionary messages, regardless of client settings: SERVERLANGUAGE=0 // Set default server dictionary language. Supported languages: 0 - None/language used by each client, 1 - English, 2 - German, 3 - Spanish, 5 - French, 6 - Portuguese, 7 - Italian, 8 - Czech Added new function in combat.cpp - AdjustArmorClassDamage() - which adjusts the damage dealt in combat based on whether armour class (AC DFN tag or .ac JS property) of weapon and armour equipped on hit location of target match up. A weapon with armour class 1 would essentially be doubly effective against armour of armour class 1. Allows setting up things like piercing weapons being better against some armor types than mace weapons, etc. Added new UOX.INI setting under [combat] to enable/disable double damage from armour class bonuses: ARMORCLASSDAMAGEBONUS=0/1 //defaults to 0)
2021-07-28 16:02:56 +08:00
{
if( JSID_IS_INT( id ))
0.99.4v Added JS command to reload dictionaries 'reloaddictionaries Fixed a server crash related to casting of spells Fixed some issues with Line-of-Sight checks related to items under/above ground, LoS checks between different floors of buildings, etc. Updated handling of skill-training keywords to be based on language-independent keyword IDs rather than trying to match player-input text to specific skill-names Updated animal-trainer/stablemasterscript (js/npc/ai/stablemaster.js) with several changes: Fixed an issue where the same pet would be stabled in all available slots if payment was taken from player's bank account instead of their backpack Fixed an issue where stablemaster would not pause walking for a while when a player interacts with them Converted all system messages and text messages in stablemaster script to dictionary entries Added new NPC AI type to source - AI_STABLEMASTER (9) - and assigned this to animal trainers. This is used to identify this type of NPCs for the purpose of displaying relevant context menus Reworked banker AI script (js/npc/ai/banker.js) to use triggerwords from client instead of hard-defined strings, to work better with multiple languages (and work with all relevant triggerwords) Fixed a bug with banker AI script (js/npc/ai/banker.js) that prevented players from using the "withdraw" command Re-added NPC AI 8 to banker NPCs (dfndata/npc/male_vendors.dfn and female_vendors.dfn) so code can check for presence of this AI when handling context menus Removed remaining hard-coded banking functionality - all handled by script anyway Added new context menu option for NPC bankers - Open Bankbox Updated code handling of context menus to only show context menus when relevant: Open Paperdoll - Shows for all characters with a paperdoll Open Backpack - Shows for player's character, pack animals and hirelings Open Bankbox - Shows for banker NPCs (if within 8 tiles) Buy/Sell - Shows for vendor NPCs (if within 8 tiles, and if they have anything for sale/are buying anything) Added new context menu entries for pets, which can be used if player is within 12 tiles of pet: Command: Kill Command: Stop Command: Follow Command: Stay Command: Guard Add Friend Remove Friend Transfer Release Added new context menu entries for stablemasters/animal trainers: Claim All Pets Stable Pet Added new context menu entries for Escort Quest NPCs Ask Destination (if within 3 tiles) Accept Escort (if within 3 tiles) Abandon Escort Added new context menus for NPCs that can teach skills to players (limited to max 10 per NPC) Train [skillName] Added new AI script for NPC hirelings (3204=js/npc/ai/hireling.js), who can be hired to follow the player around for a limited amount of time, and function the same way as pets. In addition to the regular pet commands, these speech commands are supported: hire // The hireling will respond with the cost to hire them dismiss // Replaces the "release" command for pets; will dismiss the hireling patrol // The hireling will patrol between it's current location and a second targeted location nearby move // The hireling will try to shuffle out of the way fetch // The hireling will try to fetch a targeted item drop // The hireling will drop to the ground all loot they're currently carrying report // The hireling will report on the remaining time they're hired for Added new NPC DFN tag used by code to detect hireling NPCs for the purpose of displaying context menus: HIRELING // No additional value/data needed for tag Added new context menu entries for Hireling NPCs, in addition to the ones for regular pets: Hire // Can be used within 3 steps of the hireling, who will respond with cost to hire them Dismiss // Replaces the "release" command for pets, will dismiss the hireling Added HIRELING tag and SCRIPT=3204 to and updated stats of various NPCs that will be hireable: m_fighter, f_fighter, m_beggar, f_beggar, m_peasant, f_peasant, m_sailor, f_sailor, m_pirate, f_pirate Added new hireling NPC: m_paladin, f_paladin Added new UOX ini setting to enable/disable context menus CONTEXTMENUS=1/0 (defaults to 1) Added new Item JS Method to check if an item's ID is on a specified food list .IsOnFoodList( foodList ) // Returns true/false if item's ID is on specified foodList Added new OMNIVORE food list and assigned it to [basehuman] DFN section Added new Character JS Properties .isGuarded // Gets/Sets whether character is guarded by a pet/hireling .guarding // Gets/Sets the object (if any) being guarded by a pet/hireling Fixed multiple issues with health bars, flagging and character highlighting Added some crash protection for invalid data used with CUSTOMINTTAG and CUSTOMSTRINGTAG DFN tags for Items, NPCs and Multis Fixed an issue which prevented hard-coded checks from running when using items Added new global js object (Timer) to make the use of character timers in JS more robust, with properties matching timer names from enum in source. Properties: .TIMEOUT // Time until next attack can be done in combat .INVIS // Time until invisible character becomes visible .HUNGER // Time until character grows more hungry .THIRST // Time until character grows more thirsty .POISONTIME // Time until next tick of poison damage .POISONTEXT // Time until next message about suffering from poison .POISONWEAROFF // Time until poison wears off .SPELLTIME // Time until spell cast is completed. Can be set to 0 to interrupt .ANTISPAM // Time until next speech message can be sent (for anti spam purposes) .CRIMFLAG // Time until criminal flag runs out .MURDERRATE // Time until next murder count decay .PEACETIMER // Time until character can re-enter combat after being affected by peacemaking .FLYINGTOGGLE // Time until next time flying ability can be toggled for gargoyles .MOVETIME // Time until NPC can move again .SPATIMER // Time until next time NPC can cast a spell .SUMMONTIME // Time until a summoned NPC will vanish .EVADETIME // Time until an NPC will exit evade state .LOGOUT // Time it takes for a player char to vanish after logout Examples of use: var hungerTimer = myChar.GetTimer( Timer.HUNGER ) myChar.SetTimer( Timer.HUNGER, 15000 ) Added new Character JS Methods to add, remove and list friends of a pet/hireling: .AddFriend( playerToAdd ) // Adds player to friend list .RemoveFriend( playerToRemove ) // Removes player from friend list .GetFriendList() // Gets list of friends .ClearFriendList() // Clears list of friends Added new Character JS Method to fetch a player character's list of pets/followers .GetPetList() // Gets list of pets/followers Added new persistent NPC property to keep track of a pet's previous owners, whether those tamed the pet or had it transferred to them. Every time a pet is tamed, or is transferred to a new owner, this list is updated: GenericList< CChar * > petOwnerList Added new Character JS Method to check if a player is on a pet's owner list as a previous owner: .HasBeenOwner( mChar ) Previous owners of a pet can re-tame it with guaranteed chance of success Updated JS Method Refresh() to be usable with both items or characters, to send updated state of object to nearby players Added character tooltip [Guarded] for characters being guarded by a pet/hireling Pets/hirelings that are transferred will now immediately start following their new master instead of wandering freely Pets/hirelings can no longer be transferred between players as long as either party is flagged as a criminal Pets/hirelings can no longer be transferred to dead players Pets/hirelings can no longer be transferred to NPCs Summoned creatures can no longer be transferred to other players Summoned creatures can no longer have friends Friend lists of pets/hirelings are now cleared when the pet/hireling is transferred to another player Added new UOX.INI settings to control how many pets players can have active: MAXCONTROLSLOTS=0 // Maximum number of pet control slots available to player. Disabled if 0 MAXFOLLOWERS=5 // Maximum pets/followers a player can have active at the same time. Used if control slots are disabled MAXPETOWNERS=5 // Maximum number of different owners a pet can have over its lifetime before it becomes impossible to retame Added new NPC property and NPC DFN tag that keeps track of how many pet control slots an NPC would take up if owned by a player: UI08 controlSlots // source property CONTROLSLOTS=# // DFN tag Added new Character JS properties: .ownerCount // Get the total number of owners a pet/hireling has had, based on NPC's petOwnerList .controlSlots // Get/Set number of pet control slots an NPC will occupy .controlSlotsUsed // Get/Set the number of control slots used by a player Updated get (js/commands/targeting/get.js) and set (js/commands/targeting/set.js) commands to support getting/setting the following character properties: deaths ownerCount (read only) controlSlots controlSlotsUsed Updated NPC DFNs with default CONTROLSLOT=# tags Increased the max distance from player that onSpeech JS event will trigger from 7 to 12 Updated how "all attack" and "all follow" commands for pets are handled. Now loops through all pets owned by character and executes command for each eligible pet Fixed an issue where NPCs could follow characters in different worlds/instances than them selves Updated default max amount of items that can be sold to NPC vendors from 5 to 250 Guards can no longer train players in skills Updated equipment itemlists (dfndata/items/itemlists/itemlists.dfn) with blank entries to introduce some more variety in the type of clothes NPCs wear in general Added new NPCs to DFNs (dfndata/npc/undead.dfn) and added them to undead npclist: [skeletalmage] // variation of [bonemage] [skeletalknight] // variation of [boneknight] Updated Titles (dfndata/titles/titles.dfn) with up-to-date titles for skills around Pub 15, and added titles for skills added after that. Also added "Elder" and "Legendary" titles for 110 and 120 skillpoints Updated EQUIPITEM tag in newbie.dfn (dfndata/newbie/newbie.dfn) to support an optional hue parameter (EQUIPITEM=id,hue) Updated starting equipment for new characters (dfndata/newbie/newbie.dfn), with commented out practice weapons. Uncomment to use Added item definitions for practice weapons (dfndata/items/gear/weapons/practice_weapons.dfn): practice_skinning_knife practice_hatchet practice_axe practice_mace practice_longsword practice_spear practice_bow practice_club practice_crook practice_gnarled_staff Updated mount statues DFN (dfndata/items/misc/mount-statues.dfn) and JS (js/npc/pets/*.js) files to include pet control slot related stuff Pets now inherit the karma of their owners, but revert to their original karma upon release Pets and hirelings will no longer follow the ghosts of their dead owners, but stay to guard their corpse Added optional 9th parameter for JS Function CreateDFNItem to specify a color for item created. This comes before the other optional parameters - worldNumber and instanceID (which are only used if character is NULL): CreateDFNItem( mSock, mChar, sectionName, inPack, iAmount, itemType, iColor, worldNumber, instanceID ) Added ID of Giant Beetle to various pack animal checks Pack animals will now drop any newbie/blessed items stored in their packs upon death Added new NPC properties to track pet loyalty, and exposed these as Character JS properties, and NPC DFN tags: JS Properties .maxLoyalty // Defaults to 100 .loyalty // Starts at 25 DFN Tags MAXLOYALTY=# // Defaults to 100 LOYALTY=# // Starts at 25 Updated TriggerEvent JS function to support return values (int, bool, string, object) from called script Updated various JS scripts to make use of new TriggerEvent functionality and reduce reliance on custom tags: js/item/archerybutte.js js/item/trainingdummy.js js/server/data/combatanims.js js/server/data/weapontypes.js Updated archerybutte script to use dictionary for system and text messages Updated archerybutte script to support increased range, distance penalty and dex/str bonuses when calculating score Added new UOX.INI settings under [pets and hirelings] section related to pet control and loyalty: CHECKPETCONTROLDIFFICULTY=1 // Enable/Disable pet control difficulty system PETLOYALTYGAINONSUCCESS=1 // Amount of pet loyalty gained on successful pet command use PETLOYALTYLOSSONFAILURE=3 // Amount of pet loyalty lost on failed pet command use PETLOYALTYRATE=900 // Amount of seconds between each time pet loyalty is automatically reduced by 1. Takes 25 hours to deplete completely from max Added new persistent NPC property that keeps track of the difficulty of taming and controlling a pet, and exposed it as a Character JS property: .orneriness Every time a tamed pet is released or goes wild, its "orneriness" increases, making it more difficult for other players to tame, and more difficult for anyone to control. Updated CBasePetResponse::canControlPet() function to use pet control difficulty system if enabled, which checks player's animal taming/animal lore skill vs a pet's "orneriness" to determine chance of pet accepting a given pet command On successful use of pet command, increases pet loyalty by value defined in PETLOYALTYGAINONSUCCESS ini setting On failed use of pet command, decreases pet loyalty by value defined in PETLOYALTYLOSSONFAILURE ini setting Added new Character JS Method to calculate chance of a player successfully controlling the pet: .CalculateControlChance( mChar ) // Returns value between 0 and 1000 indicating chance of success Feeding a pet will now restore its loyalty to maximum Pets will now lose loyalty on hunger checks when at maximum hunger Pets that are maximum hungry will now only have a chance to go wild if loyalty has dropped to zero Added new DFN tag for creatures.dfn - TYPE - which contains a string describing the type of creature Added secure pet trading. Players who trade pets will now see a pet transfer deed appear in a secure trade window with the name and type of creature, and upon completion of the trade the associated pet will be instantly transferred to the other player Updated resource JS scripts (js/server/resource/*) to use dictionaries for all system messages Updated skill JS scripts (js/skill/*) to use dictionaries for all system messages Updated housing JS scripts (js/server/house/*) to use dictionaries for all system messages Updated item JS scripts (js/item/*) to use dictionaries for all system messages Updated magic JS scripts (js/magic/*) to use dictionaries for all system messages Updated NPC AI JS scripts (js/npc/ai/*) to use dictionaries for all system messages Updated command JS scripts (js/commands/*) to use dictionaries for all system messages, gump tooltips, etc Updated code to use dictionaries for all system messages Fixed incorrect spelling for UOX.INI setting HIDEW(H)ILEMOUNTED and updated hiding skill (js/skill/hiding.js) to actually allow/disallow hiding while mounted based on this setting Added new Character JS Method to make it easier to make one NPC initiate combat with another: .InitiateCombat( targetChar ) // Character attempts to initiate combat with target character Updated parrying portion of combat code to be in line with Pub15/pre-AoS parrying mechanics. High AR shields now absorb more damage on a successful parry, while low AR shields have a higher chance of parrying. Shields are also now more effective against archery attacks (full absorption potential) than melee attacks (half absorption potential). Updated combat damage calculations to be in line with Pub15/pre-AoS damage calculations Adjusted default value of COMBATNPCDAMAGERATE ini setting (damage divisor when target is a player) from 2 to 1 to account for these changes. Removed dictionary.UNK, and made dictionary.ZRO the default dictionary used for all unsupported languages Added dictionary support for additional languages: Portuguese, Italian, Czech Updated default dictionaries for the following languages: English, French Added default dictionaries for the following languages: German, Spanish, Portuguese, Italian, Czech (note that translations have been provided by automatic services and will contain inaccuracies!) Added new UOX.INI setting to allow specifying a default dictionary language for server, which if set will force that language for all dictionary messages, regardless of client settings: SERVERLANGUAGE=0 // Set default server dictionary language. Supported languages: 0 - None/language used by each client, 1 - English, 2 - German, 3 - Spanish, 5 - French, 6 - Portuguese, 7 - Italian, 8 - Czech Added new function in combat.cpp - AdjustArmorClassDamage() - which adjusts the damage dealt in combat based on whether armour class (AC DFN tag or .ac JS property) of weapon and armour equipped on hit location of target match up. A weapon with armour class 1 would essentially be doubly effective against armour of armour class 1. Allows setting up things like piercing weapons being better against some armor types than mace weapons, etc. Added new UOX.INI setting under [combat] to enable/disable double damage from armour class bonuses: ARMORCLASSDAMAGEBONUS=0/1 //defaults to 0)
2021-07-28 16:02:56 +08:00
{
switch( JSID_TO_INT( id ))
0.99.4v Added JS command to reload dictionaries 'reloaddictionaries Fixed a server crash related to casting of spells Fixed some issues with Line-of-Sight checks related to items under/above ground, LoS checks between different floors of buildings, etc. Updated handling of skill-training keywords to be based on language-independent keyword IDs rather than trying to match player-input text to specific skill-names Updated animal-trainer/stablemasterscript (js/npc/ai/stablemaster.js) with several changes: Fixed an issue where the same pet would be stabled in all available slots if payment was taken from player's bank account instead of their backpack Fixed an issue where stablemaster would not pause walking for a while when a player interacts with them Converted all system messages and text messages in stablemaster script to dictionary entries Added new NPC AI type to source - AI_STABLEMASTER (9) - and assigned this to animal trainers. This is used to identify this type of NPCs for the purpose of displaying relevant context menus Reworked banker AI script (js/npc/ai/banker.js) to use triggerwords from client instead of hard-defined strings, to work better with multiple languages (and work with all relevant triggerwords) Fixed a bug with banker AI script (js/npc/ai/banker.js) that prevented players from using the "withdraw" command Re-added NPC AI 8 to banker NPCs (dfndata/npc/male_vendors.dfn and female_vendors.dfn) so code can check for presence of this AI when handling context menus Removed remaining hard-coded banking functionality - all handled by script anyway Added new context menu option for NPC bankers - Open Bankbox Updated code handling of context menus to only show context menus when relevant: Open Paperdoll - Shows for all characters with a paperdoll Open Backpack - Shows for player's character, pack animals and hirelings Open Bankbox - Shows for banker NPCs (if within 8 tiles) Buy/Sell - Shows for vendor NPCs (if within 8 tiles, and if they have anything for sale/are buying anything) Added new context menu entries for pets, which can be used if player is within 12 tiles of pet: Command: Kill Command: Stop Command: Follow Command: Stay Command: Guard Add Friend Remove Friend Transfer Release Added new context menu entries for stablemasters/animal trainers: Claim All Pets Stable Pet Added new context menu entries for Escort Quest NPCs Ask Destination (if within 3 tiles) Accept Escort (if within 3 tiles) Abandon Escort Added new context menus for NPCs that can teach skills to players (limited to max 10 per NPC) Train [skillName] Added new AI script for NPC hirelings (3204=js/npc/ai/hireling.js), who can be hired to follow the player around for a limited amount of time, and function the same way as pets. In addition to the regular pet commands, these speech commands are supported: hire // The hireling will respond with the cost to hire them dismiss // Replaces the "release" command for pets; will dismiss the hireling patrol // The hireling will patrol between it's current location and a second targeted location nearby move // The hireling will try to shuffle out of the way fetch // The hireling will try to fetch a targeted item drop // The hireling will drop to the ground all loot they're currently carrying report // The hireling will report on the remaining time they're hired for Added new NPC DFN tag used by code to detect hireling NPCs for the purpose of displaying context menus: HIRELING // No additional value/data needed for tag Added new context menu entries for Hireling NPCs, in addition to the ones for regular pets: Hire // Can be used within 3 steps of the hireling, who will respond with cost to hire them Dismiss // Replaces the "release" command for pets, will dismiss the hireling Added HIRELING tag and SCRIPT=3204 to and updated stats of various NPCs that will be hireable: m_fighter, f_fighter, m_beggar, f_beggar, m_peasant, f_peasant, m_sailor, f_sailor, m_pirate, f_pirate Added new hireling NPC: m_paladin, f_paladin Added new UOX ini setting to enable/disable context menus CONTEXTMENUS=1/0 (defaults to 1) Added new Item JS Method to check if an item's ID is on a specified food list .IsOnFoodList( foodList ) // Returns true/false if item's ID is on specified foodList Added new OMNIVORE food list and assigned it to [basehuman] DFN section Added new Character JS Properties .isGuarded // Gets/Sets whether character is guarded by a pet/hireling .guarding // Gets/Sets the object (if any) being guarded by a pet/hireling Fixed multiple issues with health bars, flagging and character highlighting Added some crash protection for invalid data used with CUSTOMINTTAG and CUSTOMSTRINGTAG DFN tags for Items, NPCs and Multis Fixed an issue which prevented hard-coded checks from running when using items Added new global js object (Timer) to make the use of character timers in JS more robust, with properties matching timer names from enum in source. Properties: .TIMEOUT // Time until next attack can be done in combat .INVIS // Time until invisible character becomes visible .HUNGER // Time until character grows more hungry .THIRST // Time until character grows more thirsty .POISONTIME // Time until next tick of poison damage .POISONTEXT // Time until next message about suffering from poison .POISONWEAROFF // Time until poison wears off .SPELLTIME // Time until spell cast is completed. Can be set to 0 to interrupt .ANTISPAM // Time until next speech message can be sent (for anti spam purposes) .CRIMFLAG // Time until criminal flag runs out .MURDERRATE // Time until next murder count decay .PEACETIMER // Time until character can re-enter combat after being affected by peacemaking .FLYINGTOGGLE // Time until next time flying ability can be toggled for gargoyles .MOVETIME // Time until NPC can move again .SPATIMER // Time until next time NPC can cast a spell .SUMMONTIME // Time until a summoned NPC will vanish .EVADETIME // Time until an NPC will exit evade state .LOGOUT // Time it takes for a player char to vanish after logout Examples of use: var hungerTimer = myChar.GetTimer( Timer.HUNGER ) myChar.SetTimer( Timer.HUNGER, 15000 ) Added new Character JS Methods to add, remove and list friends of a pet/hireling: .AddFriend( playerToAdd ) // Adds player to friend list .RemoveFriend( playerToRemove ) // Removes player from friend list .GetFriendList() // Gets list of friends .ClearFriendList() // Clears list of friends Added new Character JS Method to fetch a player character's list of pets/followers .GetPetList() // Gets list of pets/followers Added new persistent NPC property to keep track of a pet's previous owners, whether those tamed the pet or had it transferred to them. Every time a pet is tamed, or is transferred to a new owner, this list is updated: GenericList< CChar * > petOwnerList Added new Character JS Method to check if a player is on a pet's owner list as a previous owner: .HasBeenOwner( mChar ) Previous owners of a pet can re-tame it with guaranteed chance of success Updated JS Method Refresh() to be usable with both items or characters, to send updated state of object to nearby players Added character tooltip [Guarded] for characters being guarded by a pet/hireling Pets/hirelings that are transferred will now immediately start following their new master instead of wandering freely Pets/hirelings can no longer be transferred between players as long as either party is flagged as a criminal Pets/hirelings can no longer be transferred to dead players Pets/hirelings can no longer be transferred to NPCs Summoned creatures can no longer be transferred to other players Summoned creatures can no longer have friends Friend lists of pets/hirelings are now cleared when the pet/hireling is transferred to another player Added new UOX.INI settings to control how many pets players can have active: MAXCONTROLSLOTS=0 // Maximum number of pet control slots available to player. Disabled if 0 MAXFOLLOWERS=5 // Maximum pets/followers a player can have active at the same time. Used if control slots are disabled MAXPETOWNERS=5 // Maximum number of different owners a pet can have over its lifetime before it becomes impossible to retame Added new NPC property and NPC DFN tag that keeps track of how many pet control slots an NPC would take up if owned by a player: UI08 controlSlots // source property CONTROLSLOTS=# // DFN tag Added new Character JS properties: .ownerCount // Get the total number of owners a pet/hireling has had, based on NPC's petOwnerList .controlSlots // Get/Set number of pet control slots an NPC will occupy .controlSlotsUsed // Get/Set the number of control slots used by a player Updated get (js/commands/targeting/get.js) and set (js/commands/targeting/set.js) commands to support getting/setting the following character properties: deaths ownerCount (read only) controlSlots controlSlotsUsed Updated NPC DFNs with default CONTROLSLOT=# tags Increased the max distance from player that onSpeech JS event will trigger from 7 to 12 Updated how "all attack" and "all follow" commands for pets are handled. Now loops through all pets owned by character and executes command for each eligible pet Fixed an issue where NPCs could follow characters in different worlds/instances than them selves Updated default max amount of items that can be sold to NPC vendors from 5 to 250 Guards can no longer train players in skills Updated equipment itemlists (dfndata/items/itemlists/itemlists.dfn) with blank entries to introduce some more variety in the type of clothes NPCs wear in general Added new NPCs to DFNs (dfndata/npc/undead.dfn) and added them to undead npclist: [skeletalmage] // variation of [bonemage] [skeletalknight] // variation of [boneknight] Updated Titles (dfndata/titles/titles.dfn) with up-to-date titles for skills around Pub 15, and added titles for skills added after that. Also added "Elder" and "Legendary" titles for 110 and 120 skillpoints Updated EQUIPITEM tag in newbie.dfn (dfndata/newbie/newbie.dfn) to support an optional hue parameter (EQUIPITEM=id,hue) Updated starting equipment for new characters (dfndata/newbie/newbie.dfn), with commented out practice weapons. Uncomment to use Added item definitions for practice weapons (dfndata/items/gear/weapons/practice_weapons.dfn): practice_skinning_knife practice_hatchet practice_axe practice_mace practice_longsword practice_spear practice_bow practice_club practice_crook practice_gnarled_staff Updated mount statues DFN (dfndata/items/misc/mount-statues.dfn) and JS (js/npc/pets/*.js) files to include pet control slot related stuff Pets now inherit the karma of their owners, but revert to their original karma upon release Pets and hirelings will no longer follow the ghosts of their dead owners, but stay to guard their corpse Added optional 9th parameter for JS Function CreateDFNItem to specify a color for item created. This comes before the other optional parameters - worldNumber and instanceID (which are only used if character is NULL): CreateDFNItem( mSock, mChar, sectionName, inPack, iAmount, itemType, iColor, worldNumber, instanceID ) Added ID of Giant Beetle to various pack animal checks Pack animals will now drop any newbie/blessed items stored in their packs upon death Added new NPC properties to track pet loyalty, and exposed these as Character JS properties, and NPC DFN tags: JS Properties .maxLoyalty // Defaults to 100 .loyalty // Starts at 25 DFN Tags MAXLOYALTY=# // Defaults to 100 LOYALTY=# // Starts at 25 Updated TriggerEvent JS function to support return values (int, bool, string, object) from called script Updated various JS scripts to make use of new TriggerEvent functionality and reduce reliance on custom tags: js/item/archerybutte.js js/item/trainingdummy.js js/server/data/combatanims.js js/server/data/weapontypes.js Updated archerybutte script to use dictionary for system and text messages Updated archerybutte script to support increased range, distance penalty and dex/str bonuses when calculating score Added new UOX.INI settings under [pets and hirelings] section related to pet control and loyalty: CHECKPETCONTROLDIFFICULTY=1 // Enable/Disable pet control difficulty system PETLOYALTYGAINONSUCCESS=1 // Amount of pet loyalty gained on successful pet command use PETLOYALTYLOSSONFAILURE=3 // Amount of pet loyalty lost on failed pet command use PETLOYALTYRATE=900 // Amount of seconds between each time pet loyalty is automatically reduced by 1. Takes 25 hours to deplete completely from max Added new persistent NPC property that keeps track of the difficulty of taming and controlling a pet, and exposed it as a Character JS property: .orneriness Every time a tamed pet is released or goes wild, its "orneriness" increases, making it more difficult for other players to tame, and more difficult for anyone to control. Updated CBasePetResponse::canControlPet() function to use pet control difficulty system if enabled, which checks player's animal taming/animal lore skill vs a pet's "orneriness" to determine chance of pet accepting a given pet command On successful use of pet command, increases pet loyalty by value defined in PETLOYALTYGAINONSUCCESS ini setting On failed use of pet command, decreases pet loyalty by value defined in PETLOYALTYLOSSONFAILURE ini setting Added new Character JS Method to calculate chance of a player successfully controlling the pet: .CalculateControlChance( mChar ) // Returns value between 0 and 1000 indicating chance of success Feeding a pet will now restore its loyalty to maximum Pets will now lose loyalty on hunger checks when at maximum hunger Pets that are maximum hungry will now only have a chance to go wild if loyalty has dropped to zero Added new DFN tag for creatures.dfn - TYPE - which contains a string describing the type of creature Added secure pet trading. Players who trade pets will now see a pet transfer deed appear in a secure trade window with the name and type of creature, and upon completion of the trade the associated pet will be instantly transferred to the other player Updated resource JS scripts (js/server/resource/*) to use dictionaries for all system messages Updated skill JS scripts (js/skill/*) to use dictionaries for all system messages Updated housing JS scripts (js/server/house/*) to use dictionaries for all system messages Updated item JS scripts (js/item/*) to use dictionaries for all system messages Updated magic JS scripts (js/magic/*) to use dictionaries for all system messages Updated NPC AI JS scripts (js/npc/ai/*) to use dictionaries for all system messages Updated command JS scripts (js/commands/*) to use dictionaries for all system messages, gump tooltips, etc Updated code to use dictionaries for all system messages Fixed incorrect spelling for UOX.INI setting HIDEW(H)ILEMOUNTED and updated hiding skill (js/skill/hiding.js) to actually allow/disallow hiding while mounted based on this setting Added new Character JS Method to make it easier to make one NPC initiate combat with another: .InitiateCombat( targetChar ) // Character attempts to initiate combat with target character Updated parrying portion of combat code to be in line with Pub15/pre-AoS parrying mechanics. High AR shields now absorb more damage on a successful parry, while low AR shields have a higher chance of parrying. Shields are also now more effective against archery attacks (full absorption potential) than melee attacks (half absorption potential). Updated combat damage calculations to be in line with Pub15/pre-AoS damage calculations Adjusted default value of COMBATNPCDAMAGERATE ini setting (damage divisor when target is a player) from 2 to 1 to account for these changes. Removed dictionary.UNK, and made dictionary.ZRO the default dictionary used for all unsupported languages Added dictionary support for additional languages: Portuguese, Italian, Czech Updated default dictionaries for the following languages: English, French Added default dictionaries for the following languages: German, Spanish, Portuguese, Italian, Czech (note that translations have been provided by automatic services and will contain inaccuracies!) Added new UOX.INI setting to allow specifying a default dictionary language for server, which if set will force that language for all dictionary messages, regardless of client settings: SERVERLANGUAGE=0 // Set default server dictionary language. Supported languages: 0 - None/language used by each client, 1 - English, 2 - German, 3 - Spanish, 5 - French, 6 - Portuguese, 7 - Italian, 8 - Czech Added new function in combat.cpp - AdjustArmorClassDamage() - which adjusts the damage dealt in combat based on whether armour class (AC DFN tag or .ac JS property) of weapon and armour equipped on hit location of target match up. A weapon with armour class 1 would essentially be doubly effective against armour of armour class 1. Allows setting up things like piercing weapons being better against some armor types than mace weapons, etc. Added new UOX.INI setting under [combat] to enable/disable double damage from armour class bonuses: ARMORCLASSDAMAGEBONUS=0/1 //defaults to 0)
2021-07-28 16:02:56 +08:00
{
08/08/2021 - Xuri (0.99.4w) Added support for new Skills DFN tag: SKILLDELAY=# // Delay in seconds before another skill can be used after using this skill. Overrides global delay from UOX.INI Updated skill cSkills::SkillUse() to use skill-specific skill delays if set for a given skill, or global delay from ini if not. Also added a check to see if skill delay timer has been modified by onSkill JS event before attempting to set a default timer Updated skill delays to better match ~pub15 era: Reduced global SKILLDELAY setting in UOX.INI from 2 to 1 second Detecting Hidden skill now has a default skill delay of 10 seconds Herding skill now has a default skill delay of 10 seconds Hiding skill now has a default skill delay of 10 seconds, with shorter delays (global skill delay) for trying to hide while in combat or for successfully hiding Meditation skill now has a default skill delay of 10 seconds, with shorter delays (global skill delay) for failing due to hands being occupied or already being at max mana Peacemaking skill now has a default skill delay of 10 seconds for failed skill checks, and 5 seconds delay for successful ones Poisoning skill now has a default skill delay of 10 seconds Provocation skill now has a default skill delay of 10 seconds Remove Trap skill now has a default skill delay of 10 seconds Stealing skill now has a default skill delay of 10 seconds Stealth skill now has a default skill delay of 10 seconds Tracking skill now has a default skill delay of 10 seconds Veterinary skill now has a default skill delay of 10 seconds Fixed an issue with global JS Timer object that would reference the wrong timerIDs Extended global JS timer object to include timers from socket as well (marked with SOCK_ prefix): .SOCK_SKILLDELAY // Delay before the next time player can use another skill .SOCK_OBJDELAY // Delay before next time player can use another object .SOCK_SPIRITSPEAK // Timer that tracks remaining duration of player's Spirit Speak .SOCK_TRACKING // Timer that tracks remaining duration for player's Tracking skill .SOCK_FISHING // Timer that tracks remaining duration for player's Fishing skill .SOCK_MUTETIME // Timer that tracks remaining duration a player remains muted .SOCK_TRACKINGDISPLAY // Timer that tracks interval between each time tracking display is updated Updated various JS scripts to use the new Timer.TIMERNAME with .GetTimer()/.SetTimer() JS Methods for Characters and Sockets Updated Persecution ability for player ghosts to use the skill delay of the Spirit Speak skill, if set Updated Persecution ability to base mana damage primarily on player's Spirit Speak skill rather than their Intelligence In order to cut down on the amount of messages sent from server to players trying to spam-use objects/skills, UOX3 now only sends a maximum of one message for object use delay and one message for skill use delay while the delay timers for these are in effect. This resets on the next successful use of an object or skill. This is tracked via bools in cSocket class: bool objDelayMsgShown bool skillDelayMsgShown Converted DELAY tag in spells.dfn to use seconds (with decimals) instead of tenths of a second, which was not precise enough. This controls the cast time of spells. What would previously say DELAY=10 (10/10ths of a second) now says DELAY=1.0 (1 second) Added support for new Spells DFN tag to control delay until damage takes place after casting a spell, replacing UOX.INI setting COMBATEXPLODEDELAY, which is no longer used: DAMAGEDELAY=# // Delay in seconds (decimal) until a direct damage spell deals its damage Added support for a new Spells DFN tag to control cast recovery time, during which additional spells cannot be cast: RECOVERYDELAY=# // Delay in seconds (decimal) until player can cast another spell Added new setting in UOX.INI to control whether player spellcasting gets interrupted upon equipping/picking up items: ITEMSINTERRUPTCASTING=1 // If enabled, spellcasting gets interrupted by equipping/picking up items. Defaults to enabled. All direct damage spells by default have a 1.0s delay before damage (and VFX) is applied, except Explosion which has a 2.5s delay All spells by default have a cast recovery duration of 1.0s; from the moment a spellcast is completed/moment targeting cursor appears, the player will be unable to cast any other spell for the duration of the cast recovery Reagent checks and skill-check now take place AFTER the spellcast animation, not before! Spell cast times now follow this formula, though values set per spell and can be modified: 0.25 + ( spellCircle * 0.25 ) Overhauled spell sound FX and VFX for for all spells Players can no longer cast spells while holding items on the cursor Fixed Magic Trap, Magic Untrap, Magic Lock and Magic Unlock not being usable on containers in one's own backpack Fixed an issue that caused Magic Trap to deal between 50 to 100 damage to the player. New damage: 5 to 10, depending on Magery skill Fixed an issue where Magic Untrap spell would completely remove traps from spawn containers instead of disable them Fixed an issue where Telekinesis spell would not set off traps on containers properly Added additional FX for Teleport spell played at player's original location before the teleport took place Fixed a bug where creatures summoned with the Summon Creature spell were not dispellable Fixed an issue where the Reveal spell would not reveal players hidden using the Hiding skill Dispel and Mass Dispel spells are no longer guaranteed to succeed at dispelling summoned creatures. Instead, the chance to dispel is based on the following simple formula, with dispelChance capped at 95% to always leave some chance for a creature to resist a dispel: dispelChance = ( 50 - ( targetResistSkill - casterMagerySkill )) / 1.5 The targetResistSkill is based on the highest value of the summoned creature's spell resistance skill and the spell resistance skill of its summoner Fixed an issue where the Create Food spell attempted to create an invalid item Fixed issue where code that checked for valid drop locations for items didn't allow negative z values (Dragon Slayer) Fixed issue where players could drop items on blocking map tiles like water or mountains (Dragon Slayer) Fixed issue where some JS functions like CheckStaticFlag, CheckDynamicFlag, DoesStaticBlock, DoesDynamicBlock and DoesMapBlock would not work correctly when passed negative Z values Fixed issue where context menu were listing skills to train from NPCs based on effective skill rather than base skill Fixed issue where NPCs would offer skills for training even if those skills were not above the minimum 60 skillpoints Updated clilocID used for Gump JS Method AddToolTip - as well as for some item/character tooltip data - from 1050045 to 1042971 for improved client compatibility Human/Elf/Gargoyle NPCs with spellcasting capabilities will now play a casting animation and briefly stop moving when they cast spells Updated NPC spellcasting code to help NPCs make a bit better choices of what spells to cast during combat. Now they take their own health percentage into account, and cast more offensive spells when at near full health vs more defensive spells as their health drops Fixed an issue where Hirelings wouldn't always immediately start following their new owners Fixed a bug where the Earthquake spell could incorrectly add NPC characters marked for deletion to the refresh queue Updated skills and stats of all implemented human NPCs (including vendors) to better match the state of those NPCs around the time of Pub15 Fixed SPATTACK values for a couple of NPCs that were still using values based on spell bitmask instead of spell circle value Updated stats of Jukan and Meer NPCs (dfndata/npc/lbrraces.dfn) to match stats from official LBR guide Added support for an optional third parameter for Character/Socket JS Method .CustomTarget() to allow highlighting targeting cursors as neutral (0, default aura), harmful (1, red aura), helpful (2, blue aura). A value of 3 will cancel the currently active targeting cursor. New syntax: myChar/mySock.CustomTarget( targetID, txtToSay, cursorType ) // supported cursorTypes: 0 = neutral, 1 = harmful, 2 = helpful, 3 = cancel current target cursor Various target cursors triggered by code (like hard-coded spells, some pet commands) also make use of these cursorTypes
2021-08-08 01:57:25 +08:00
// Character timers (PC and NPC)
0.99.4v Added JS command to reload dictionaries 'reloaddictionaries Fixed a server crash related to casting of spells Fixed some issues with Line-of-Sight checks related to items under/above ground, LoS checks between different floors of buildings, etc. Updated handling of skill-training keywords to be based on language-independent keyword IDs rather than trying to match player-input text to specific skill-names Updated animal-trainer/stablemasterscript (js/npc/ai/stablemaster.js) with several changes: Fixed an issue where the same pet would be stabled in all available slots if payment was taken from player's bank account instead of their backpack Fixed an issue where stablemaster would not pause walking for a while when a player interacts with them Converted all system messages and text messages in stablemaster script to dictionary entries Added new NPC AI type to source - AI_STABLEMASTER (9) - and assigned this to animal trainers. This is used to identify this type of NPCs for the purpose of displaying relevant context menus Reworked banker AI script (js/npc/ai/banker.js) to use triggerwords from client instead of hard-defined strings, to work better with multiple languages (and work with all relevant triggerwords) Fixed a bug with banker AI script (js/npc/ai/banker.js) that prevented players from using the "withdraw" command Re-added NPC AI 8 to banker NPCs (dfndata/npc/male_vendors.dfn and female_vendors.dfn) so code can check for presence of this AI when handling context menus Removed remaining hard-coded banking functionality - all handled by script anyway Added new context menu option for NPC bankers - Open Bankbox Updated code handling of context menus to only show context menus when relevant: Open Paperdoll - Shows for all characters with a paperdoll Open Backpack - Shows for player's character, pack animals and hirelings Open Bankbox - Shows for banker NPCs (if within 8 tiles) Buy/Sell - Shows for vendor NPCs (if within 8 tiles, and if they have anything for sale/are buying anything) Added new context menu entries for pets, which can be used if player is within 12 tiles of pet: Command: Kill Command: Stop Command: Follow Command: Stay Command: Guard Add Friend Remove Friend Transfer Release Added new context menu entries for stablemasters/animal trainers: Claim All Pets Stable Pet Added new context menu entries for Escort Quest NPCs Ask Destination (if within 3 tiles) Accept Escort (if within 3 tiles) Abandon Escort Added new context menus for NPCs that can teach skills to players (limited to max 10 per NPC) Train [skillName] Added new AI script for NPC hirelings (3204=js/npc/ai/hireling.js), who can be hired to follow the player around for a limited amount of time, and function the same way as pets. In addition to the regular pet commands, these speech commands are supported: hire // The hireling will respond with the cost to hire them dismiss // Replaces the "release" command for pets; will dismiss the hireling patrol // The hireling will patrol between it's current location and a second targeted location nearby move // The hireling will try to shuffle out of the way fetch // The hireling will try to fetch a targeted item drop // The hireling will drop to the ground all loot they're currently carrying report // The hireling will report on the remaining time they're hired for Added new NPC DFN tag used by code to detect hireling NPCs for the purpose of displaying context menus: HIRELING // No additional value/data needed for tag Added new context menu entries for Hireling NPCs, in addition to the ones for regular pets: Hire // Can be used within 3 steps of the hireling, who will respond with cost to hire them Dismiss // Replaces the "release" command for pets, will dismiss the hireling Added HIRELING tag and SCRIPT=3204 to and updated stats of various NPCs that will be hireable: m_fighter, f_fighter, m_beggar, f_beggar, m_peasant, f_peasant, m_sailor, f_sailor, m_pirate, f_pirate Added new hireling NPC: m_paladin, f_paladin Added new UOX ini setting to enable/disable context menus CONTEXTMENUS=1/0 (defaults to 1) Added new Item JS Method to check if an item's ID is on a specified food list .IsOnFoodList( foodList ) // Returns true/false if item's ID is on specified foodList Added new OMNIVORE food list and assigned it to [basehuman] DFN section Added new Character JS Properties .isGuarded // Gets/Sets whether character is guarded by a pet/hireling .guarding // Gets/Sets the object (if any) being guarded by a pet/hireling Fixed multiple issues with health bars, flagging and character highlighting Added some crash protection for invalid data used with CUSTOMINTTAG and CUSTOMSTRINGTAG DFN tags for Items, NPCs and Multis Fixed an issue which prevented hard-coded checks from running when using items Added new global js object (Timer) to make the use of character timers in JS more robust, with properties matching timer names from enum in source. Properties: .TIMEOUT // Time until next attack can be done in combat .INVIS // Time until invisible character becomes visible .HUNGER // Time until character grows more hungry .THIRST // Time until character grows more thirsty .POISONTIME // Time until next tick of poison damage .POISONTEXT // Time until next message about suffering from poison .POISONWEAROFF // Time until poison wears off .SPELLTIME // Time until spell cast is completed. Can be set to 0 to interrupt .ANTISPAM // Time until next speech message can be sent (for anti spam purposes) .CRIMFLAG // Time until criminal flag runs out .MURDERRATE // Time until next murder count decay .PEACETIMER // Time until character can re-enter combat after being affected by peacemaking .FLYINGTOGGLE // Time until next time flying ability can be toggled for gargoyles .MOVETIME // Time until NPC can move again .SPATIMER // Time until next time NPC can cast a spell .SUMMONTIME // Time until a summoned NPC will vanish .EVADETIME // Time until an NPC will exit evade state .LOGOUT // Time it takes for a player char to vanish after logout Examples of use: var hungerTimer = myChar.GetTimer( Timer.HUNGER ) myChar.SetTimer( Timer.HUNGER, 15000 ) Added new Character JS Methods to add, remove and list friends of a pet/hireling: .AddFriend( playerToAdd ) // Adds player to friend list .RemoveFriend( playerToRemove ) // Removes player from friend list .GetFriendList() // Gets list of friends .ClearFriendList() // Clears list of friends Added new Character JS Method to fetch a player character's list of pets/followers .GetPetList() // Gets list of pets/followers Added new persistent NPC property to keep track of a pet's previous owners, whether those tamed the pet or had it transferred to them. Every time a pet is tamed, or is transferred to a new owner, this list is updated: GenericList< CChar * > petOwnerList Added new Character JS Method to check if a player is on a pet's owner list as a previous owner: .HasBeenOwner( mChar ) Previous owners of a pet can re-tame it with guaranteed chance of success Updated JS Method Refresh() to be usable with both items or characters, to send updated state of object to nearby players Added character tooltip [Guarded] for characters being guarded by a pet/hireling Pets/hirelings that are transferred will now immediately start following their new master instead of wandering freely Pets/hirelings can no longer be transferred between players as long as either party is flagged as a criminal Pets/hirelings can no longer be transferred to dead players Pets/hirelings can no longer be transferred to NPCs Summoned creatures can no longer be transferred to other players Summoned creatures can no longer have friends Friend lists of pets/hirelings are now cleared when the pet/hireling is transferred to another player Added new UOX.INI settings to control how many pets players can have active: MAXCONTROLSLOTS=0 // Maximum number of pet control slots available to player. Disabled if 0 MAXFOLLOWERS=5 // Maximum pets/followers a player can have active at the same time. Used if control slots are disabled MAXPETOWNERS=5 // Maximum number of different owners a pet can have over its lifetime before it becomes impossible to retame Added new NPC property and NPC DFN tag that keeps track of how many pet control slots an NPC would take up if owned by a player: UI08 controlSlots // source property CONTROLSLOTS=# // DFN tag Added new Character JS properties: .ownerCount // Get the total number of owners a pet/hireling has had, based on NPC's petOwnerList .controlSlots // Get/Set number of pet control slots an NPC will occupy .controlSlotsUsed // Get/Set the number of control slots used by a player Updated get (js/commands/targeting/get.js) and set (js/commands/targeting/set.js) commands to support getting/setting the following character properties: deaths ownerCount (read only) controlSlots controlSlotsUsed Updated NPC DFNs with default CONTROLSLOT=# tags Increased the max distance from player that onSpeech JS event will trigger from 7 to 12 Updated how "all attack" and "all follow" commands for pets are handled. Now loops through all pets owned by character and executes command for each eligible pet Fixed an issue where NPCs could follow characters in different worlds/instances than them selves Updated default max amount of items that can be sold to NPC vendors from 5 to 250 Guards can no longer train players in skills Updated equipment itemlists (dfndata/items/itemlists/itemlists.dfn) with blank entries to introduce some more variety in the type of clothes NPCs wear in general Added new NPCs to DFNs (dfndata/npc/undead.dfn) and added them to undead npclist: [skeletalmage] // variation of [bonemage] [skeletalknight] // variation of [boneknight] Updated Titles (dfndata/titles/titles.dfn) with up-to-date titles for skills around Pub 15, and added titles for skills added after that. Also added "Elder" and "Legendary" titles for 110 and 120 skillpoints Updated EQUIPITEM tag in newbie.dfn (dfndata/newbie/newbie.dfn) to support an optional hue parameter (EQUIPITEM=id,hue) Updated starting equipment for new characters (dfndata/newbie/newbie.dfn), with commented out practice weapons. Uncomment to use Added item definitions for practice weapons (dfndata/items/gear/weapons/practice_weapons.dfn): practice_skinning_knife practice_hatchet practice_axe practice_mace practice_longsword practice_spear practice_bow practice_club practice_crook practice_gnarled_staff Updated mount statues DFN (dfndata/items/misc/mount-statues.dfn) and JS (js/npc/pets/*.js) files to include pet control slot related stuff Pets now inherit the karma of their owners, but revert to their original karma upon release Pets and hirelings will no longer follow the ghosts of their dead owners, but stay to guard their corpse Added optional 9th parameter for JS Function CreateDFNItem to specify a color for item created. This comes before the other optional parameters - worldNumber and instanceID (which are only used if character is NULL): CreateDFNItem( mSock, mChar, sectionName, inPack, iAmount, itemType, iColor, worldNumber, instanceID ) Added ID of Giant Beetle to various pack animal checks Pack animals will now drop any newbie/blessed items stored in their packs upon death Added new NPC properties to track pet loyalty, and exposed these as Character JS properties, and NPC DFN tags: JS Properties .maxLoyalty // Defaults to 100 .loyalty // Starts at 25 DFN Tags MAXLOYALTY=# // Defaults to 100 LOYALTY=# // Starts at 25 Updated TriggerEvent JS function to support return values (int, bool, string, object) from called script Updated various JS scripts to make use of new TriggerEvent functionality and reduce reliance on custom tags: js/item/archerybutte.js js/item/trainingdummy.js js/server/data/combatanims.js js/server/data/weapontypes.js Updated archerybutte script to use dictionary for system and text messages Updated archerybutte script to support increased range, distance penalty and dex/str bonuses when calculating score Added new UOX.INI settings under [pets and hirelings] section related to pet control and loyalty: CHECKPETCONTROLDIFFICULTY=1 // Enable/Disable pet control difficulty system PETLOYALTYGAINONSUCCESS=1 // Amount of pet loyalty gained on successful pet command use PETLOYALTYLOSSONFAILURE=3 // Amount of pet loyalty lost on failed pet command use PETLOYALTYRATE=900 // Amount of seconds between each time pet loyalty is automatically reduced by 1. Takes 25 hours to deplete completely from max Added new persistent NPC property that keeps track of the difficulty of taming and controlling a pet, and exposed it as a Character JS property: .orneriness Every time a tamed pet is released or goes wild, its "orneriness" increases, making it more difficult for other players to tame, and more difficult for anyone to control. Updated CBasePetResponse::canControlPet() function to use pet control difficulty system if enabled, which checks player's animal taming/animal lore skill vs a pet's "orneriness" to determine chance of pet accepting a given pet command On successful use of pet command, increases pet loyalty by value defined in PETLOYALTYGAINONSUCCESS ini setting On failed use of pet command, decreases pet loyalty by value defined in PETLOYALTYLOSSONFAILURE ini setting Added new Character JS Method to calculate chance of a player successfully controlling the pet: .CalculateControlChance( mChar ) // Returns value between 0 and 1000 indicating chance of success Feeding a pet will now restore its loyalty to maximum Pets will now lose loyalty on hunger checks when at maximum hunger Pets that are maximum hungry will now only have a chance to go wild if loyalty has dropped to zero Added new DFN tag for creatures.dfn - TYPE - which contains a string describing the type of creature Added secure pet trading. Players who trade pets will now see a pet transfer deed appear in a secure trade window with the name and type of creature, and upon completion of the trade the associated pet will be instantly transferred to the other player Updated resource JS scripts (js/server/resource/*) to use dictionaries for all system messages Updated skill JS scripts (js/skill/*) to use dictionaries for all system messages Updated housing JS scripts (js/server/house/*) to use dictionaries for all system messages Updated item JS scripts (js/item/*) to use dictionaries for all system messages Updated magic JS scripts (js/magic/*) to use dictionaries for all system messages Updated NPC AI JS scripts (js/npc/ai/*) to use dictionaries for all system messages Updated command JS scripts (js/commands/*) to use dictionaries for all system messages, gump tooltips, etc Updated code to use dictionaries for all system messages Fixed incorrect spelling for UOX.INI setting HIDEW(H)ILEMOUNTED and updated hiding skill (js/skill/hiding.js) to actually allow/disallow hiding while mounted based on this setting Added new Character JS Method to make it easier to make one NPC initiate combat with another: .InitiateCombat( targetChar ) // Character attempts to initiate combat with target character Updated parrying portion of combat code to be in line with Pub15/pre-AoS parrying mechanics. High AR shields now absorb more damage on a successful parry, while low AR shields have a higher chance of parrying. Shields are also now more effective against archery attacks (full absorption potential) than melee attacks (half absorption potential). Updated combat damage calculations to be in line with Pub15/pre-AoS damage calculations Adjusted default value of COMBATNPCDAMAGERATE ini setting (damage divisor when target is a player) from 2 to 1 to account for these changes. Removed dictionary.UNK, and made dictionary.ZRO the default dictionary used for all unsupported languages Added dictionary support for additional languages: Portuguese, Italian, Czech Updated default dictionaries for the following languages: English, French Added default dictionaries for the following languages: German, Spanish, Portuguese, Italian, Czech (note that translations have been provided by automatic services and will contain inaccuracies!) Added new UOX.INI setting to allow specifying a default dictionary language for server, which if set will force that language for all dictionary messages, regardless of client settings: SERVERLANGUAGE=0 // Set default server dictionary language. Supported languages: 0 - None/language used by each client, 1 - English, 2 - German, 3 - Spanish, 5 - French, 6 - Portuguese, 7 - Italian, 8 - Czech Added new function in combat.cpp - AdjustArmorClassDamage() - which adjusts the damage dealt in combat based on whether armour class (AC DFN tag or .ac JS property) of weapon and armour equipped on hit location of target match up. A weapon with armour class 1 would essentially be doubly effective against armour of armour class 1. Allows setting up things like piercing weapons being better against some armor types than mace weapons, etc. Added new UOX.INI setting under [combat] to enable/disable double damage from armour class bonuses: ARMORCLASSDAMAGEBONUS=0/1 //defaults to 0)
2021-07-28 16:02:56 +08:00
case TIMER_TIMEOUT: *vp = INT_TO_JSVAL( tCHAR_TIMEOUT ); break;
08/08/2021 - Xuri (0.99.4w) Added support for new Skills DFN tag: SKILLDELAY=# // Delay in seconds before another skill can be used after using this skill. Overrides global delay from UOX.INI Updated skill cSkills::SkillUse() to use skill-specific skill delays if set for a given skill, or global delay from ini if not. Also added a check to see if skill delay timer has been modified by onSkill JS event before attempting to set a default timer Updated skill delays to better match ~pub15 era: Reduced global SKILLDELAY setting in UOX.INI from 2 to 1 second Detecting Hidden skill now has a default skill delay of 10 seconds Herding skill now has a default skill delay of 10 seconds Hiding skill now has a default skill delay of 10 seconds, with shorter delays (global skill delay) for trying to hide while in combat or for successfully hiding Meditation skill now has a default skill delay of 10 seconds, with shorter delays (global skill delay) for failing due to hands being occupied or already being at max mana Peacemaking skill now has a default skill delay of 10 seconds for failed skill checks, and 5 seconds delay for successful ones Poisoning skill now has a default skill delay of 10 seconds Provocation skill now has a default skill delay of 10 seconds Remove Trap skill now has a default skill delay of 10 seconds Stealing skill now has a default skill delay of 10 seconds Stealth skill now has a default skill delay of 10 seconds Tracking skill now has a default skill delay of 10 seconds Veterinary skill now has a default skill delay of 10 seconds Fixed an issue with global JS Timer object that would reference the wrong timerIDs Extended global JS timer object to include timers from socket as well (marked with SOCK_ prefix): .SOCK_SKILLDELAY // Delay before the next time player can use another skill .SOCK_OBJDELAY // Delay before next time player can use another object .SOCK_SPIRITSPEAK // Timer that tracks remaining duration of player's Spirit Speak .SOCK_TRACKING // Timer that tracks remaining duration for player's Tracking skill .SOCK_FISHING // Timer that tracks remaining duration for player's Fishing skill .SOCK_MUTETIME // Timer that tracks remaining duration a player remains muted .SOCK_TRACKINGDISPLAY // Timer that tracks interval between each time tracking display is updated Updated various JS scripts to use the new Timer.TIMERNAME with .GetTimer()/.SetTimer() JS Methods for Characters and Sockets Updated Persecution ability for player ghosts to use the skill delay of the Spirit Speak skill, if set Updated Persecution ability to base mana damage primarily on player's Spirit Speak skill rather than their Intelligence In order to cut down on the amount of messages sent from server to players trying to spam-use objects/skills, UOX3 now only sends a maximum of one message for object use delay and one message for skill use delay while the delay timers for these are in effect. This resets on the next successful use of an object or skill. This is tracked via bools in cSocket class: bool objDelayMsgShown bool skillDelayMsgShown Converted DELAY tag in spells.dfn to use seconds (with decimals) instead of tenths of a second, which was not precise enough. This controls the cast time of spells. What would previously say DELAY=10 (10/10ths of a second) now says DELAY=1.0 (1 second) Added support for new Spells DFN tag to control delay until damage takes place after casting a spell, replacing UOX.INI setting COMBATEXPLODEDELAY, which is no longer used: DAMAGEDELAY=# // Delay in seconds (decimal) until a direct damage spell deals its damage Added support for a new Spells DFN tag to control cast recovery time, during which additional spells cannot be cast: RECOVERYDELAY=# // Delay in seconds (decimal) until player can cast another spell Added new setting in UOX.INI to control whether player spellcasting gets interrupted upon equipping/picking up items: ITEMSINTERRUPTCASTING=1 // If enabled, spellcasting gets interrupted by equipping/picking up items. Defaults to enabled. All direct damage spells by default have a 1.0s delay before damage (and VFX) is applied, except Explosion which has a 2.5s delay All spells by default have a cast recovery duration of 1.0s; from the moment a spellcast is completed/moment targeting cursor appears, the player will be unable to cast any other spell for the duration of the cast recovery Reagent checks and skill-check now take place AFTER the spellcast animation, not before! Spell cast times now follow this formula, though values set per spell and can be modified: 0.25 + ( spellCircle * 0.25 ) Overhauled spell sound FX and VFX for for all spells Players can no longer cast spells while holding items on the cursor Fixed Magic Trap, Magic Untrap, Magic Lock and Magic Unlock not being usable on containers in one's own backpack Fixed an issue that caused Magic Trap to deal between 50 to 100 damage to the player. New damage: 5 to 10, depending on Magery skill Fixed an issue where Magic Untrap spell would completely remove traps from spawn containers instead of disable them Fixed an issue where Telekinesis spell would not set off traps on containers properly Added additional FX for Teleport spell played at player's original location before the teleport took place Fixed a bug where creatures summoned with the Summon Creature spell were not dispellable Fixed an issue where the Reveal spell would not reveal players hidden using the Hiding skill Dispel and Mass Dispel spells are no longer guaranteed to succeed at dispelling summoned creatures. Instead, the chance to dispel is based on the following simple formula, with dispelChance capped at 95% to always leave some chance for a creature to resist a dispel: dispelChance = ( 50 - ( targetResistSkill - casterMagerySkill )) / 1.5 The targetResistSkill is based on the highest value of the summoned creature's spell resistance skill and the spell resistance skill of its summoner Fixed an issue where the Create Food spell attempted to create an invalid item Fixed issue where code that checked for valid drop locations for items didn't allow negative z values (Dragon Slayer) Fixed issue where players could drop items on blocking map tiles like water or mountains (Dragon Slayer) Fixed issue where some JS functions like CheckStaticFlag, CheckDynamicFlag, DoesStaticBlock, DoesDynamicBlock and DoesMapBlock would not work correctly when passed negative Z values Fixed issue where context menu were listing skills to train from NPCs based on effective skill rather than base skill Fixed issue where NPCs would offer skills for training even if those skills were not above the minimum 60 skillpoints Updated clilocID used for Gump JS Method AddToolTip - as well as for some item/character tooltip data - from 1050045 to 1042971 for improved client compatibility Human/Elf/Gargoyle NPCs with spellcasting capabilities will now play a casting animation and briefly stop moving when they cast spells Updated NPC spellcasting code to help NPCs make a bit better choices of what spells to cast during combat. Now they take their own health percentage into account, and cast more offensive spells when at near full health vs more defensive spells as their health drops Fixed an issue where Hirelings wouldn't always immediately start following their new owners Fixed a bug where the Earthquake spell could incorrectly add NPC characters marked for deletion to the refresh queue Updated skills and stats of all implemented human NPCs (including vendors) to better match the state of those NPCs around the time of Pub15 Fixed SPATTACK values for a couple of NPCs that were still using values based on spell bitmask instead of spell circle value Updated stats of Jukan and Meer NPCs (dfndata/npc/lbrraces.dfn) to match stats from official LBR guide Added support for an optional third parameter for Character/Socket JS Method .CustomTarget() to allow highlighting targeting cursors as neutral (0, default aura), harmful (1, red aura), helpful (2, blue aura). A value of 3 will cancel the currently active targeting cursor. New syntax: myChar/mySock.CustomTarget( targetID, txtToSay, cursorType ) // supported cursorTypes: 0 = neutral, 1 = harmful, 2 = helpful, 3 = cancel current target cursor Various target cursors triggered by code (like hard-coded spells, some pet commands) also make use of these cursorTypes
2021-08-08 01:57:25 +08:00
case TIMER_INVIS: *vp = INT_TO_JSVAL( tCHAR_INVIS ); break;
case TIMER_HUNGER: *vp = INT_TO_JSVAL( tCHAR_HUNGER ); break;
case TIMER_THIRST: *vp = INT_TO_JSVAL( tCHAR_THIRST ); break;
case TIMER_POISONTIME: *vp = INT_TO_JSVAL( tCHAR_POISONTIME ); break;
case TIMER_POISONTEXT: *vp = INT_TO_JSVAL( tCHAR_POISONTEXT ); break;
case TIMER_POISONWEAROFF: *vp = INT_TO_JSVAL( tCHAR_POISONWEAROFF ); break;
case TIMER_SPELLTIME: *vp = INT_TO_JSVAL( tCHAR_SPELLTIME ); break;
case TIMER_SPELLRECOVERYTIME: *vp = INT_TO_JSVAL( tCHAR_SPELLRECOVERYTIME ); break;
case TIMER_ANTISPAM: *vp = INT_TO_JSVAL( tCHAR_ANTISPAM ); break;
case TIMER_CRIMFLAG: *vp = INT_TO_JSVAL( tCHAR_CRIMFLAG ); break;
case TIMER_MURDERRATE: *vp = INT_TO_JSVAL( tCHAR_MURDERRATE ); break;
case TIMER_PEACETIMER: *vp = INT_TO_JSVAL( tCHAR_PEACETIMER ); break;
case TIMER_FLYINGTOGGLE: *vp = INT_TO_JSVAL( tCHAR_FLYINGTOGGLE ); break;
case TIMER_FIREFIELDTICK: *vp = INT_TO_JSVAL( tCHAR_FIREFIELDTICK ); break;
case TIMER_POISONFIELDTICK: *vp = INT_TO_JSVAL( tCHAR_POISONFIELDTICK );break;
case TIMER_PARAFIELDTICK: *vp = INT_TO_JSVAL( tCHAR_PARAFIELDTICK ); break;
UOX3 0.99.6-RC6 Removed arbitrary and hidden restrictions on refreshing list of online players shown with 'wholist command Fixed an issue where player ghosts that get teleported would not see themselves get updated to new location Fixed a server crash from clients disconnecting while running server in debug mode Improved how container updates are sent to players; now only sends to clients that have actually opened the container, and who are still within range Added more information about UO data files being loaded during server startup Enhanced the GM 'add menu to allow clicking directly on images of items/npcs to add them, and adjusted size of menus to accommodate this Fixed an issue with fleeing NPCs that could cause them to attempt to flee across time and space, regardless of distance to target/attacker in combat Added NPC AI that runs away from players if they get too close (even outside combat). Applied to hind, rabbits, squirrels, ferrets and various birds by default: AI_ANIMAL_SCARED (aitype 12) Fixed issues with NPCs fleeing forever, or getting stuck in flee/don't flee loop, by introducing max fleeing distance (50 tiles) and cooldown (30 sec) on fleeing Updated onNameRequest JS Event to include third parameter with origin of name request, so script responses can be tailored appropriately: onNameRequest( myObj, requestedBy, requestSource ) Potential values for requestSource: 0 - Speech/System Messages 1 - Guild Menus 2 - Stat Window (self) 3 - Stat Window (other) 4 - Tooltip 5 - Paperdoll Journal 6 - Paperdoll 7 - Single Click / All-Names 8 - System 9 - Secure Trade Window Added Adaptive Performance System (APS) that dynamically adjust how often NPC AI/movement is checked based on overall shard performance. If performance drops below defined threshold, UOX3 gradually slows down checks for NPC AI/movement to prioritize player movement/speech/command responsiveness. If performance climbs back up above threshold, slowdowns are gradually removed. The following UOX.INI options have been added under [system] category to support this system: APSPERFTHRESHOLD=50 // Performance threshold (measured in simulation cycles/sec) below which the APS kicks in APSINTERVAL=100 // How often (in milliseconds) the APS checks performance and makes adjustments (if needed) to balance out shard performance APSDELAYSTEP=50 // How much the delay timer is modified by (in milliseconds) each time APS makes adjustments APSDELAYMAXCAP=2000 // Max amount of of delay APS can introduce for NPC AI/movement handling when attempting to restore shard performance Added new JS Methods for Region objects: .GetOrePrefs( oreType ) // Get ore preference data for ore type found in town region. Returned as an array containing the following data: orePrefData -> [ oreName, // name of ore color, // color of ore minskill, // min skill to mine ore ingotName, // name of ingot created from ore makemenu, // makemenu entry for crafting something from ingot oreChance, // default global chance of finding this ore type scriptID // script attached to mined ore ], orePrefChance // Chance of finding this ore type in given town region .GetOreChance() // Get base chance of finding any ore in town region Moved Mining skill plus gravedigging feature from hard code to scripts (js/skill/mining.js) to make it easier to maintain and/or customize, and removed hard coded variants Gravedigging now relies on the ore resource system behind the scenes to restrict how often graves in a given area can be dug up Fixed some incorrect references to .worldNumber Character property in misc scripts (should be .worldnumber) Made some "hard-scripted" system messages in misc scripts use dictionary system instead Added spawn region for banker NPCs in Serpent's Hold (dfndata/spawn/felucca/spawn_town_serpents_hold.dfn, dfndata/spawn/trammel/spawn_town_serpents_hold.dfn) Fixed region definition of Ocllo to actually cover the entire town (dfndata/regions/regions.dfn) Added numerous additional locations accessible with 'goplace # command, for key locations in Ilshenar, Malas, Tokuno Islands and Ter Mur (dfndata/location/location.dfn) Revised travel-menu portion of GM menu (shortcut: 'travel) to include more travel options based on new locations (dfndata/items/travelmenu.dfn and travelmenu.bulk.dfn) Fixed an issue where NPCs could attempt to attack targets in other worlds/instances Added new JS Event that triggers for characters who are about to deal damage in combat. Complimentary to onDamage, which triggers for chars receiving damage: onDamageDeal( dmgDealer, dmgReceiver, damageValue, damageType ) Added new JS Event that can trigger in global script upon creation of new player chars. Note that this will trigger in place of onCreateDFN event for player characters: onCreatePlayer( pChar ) Added new JS Event that triggers for characters selecting a target with a spell. Complimentary to onSpellTarget, which triggers for targets selected with a spell: onSpellTargetSelect( caster, target, spellNum ) Updated onCombatStart and onCombatEnd JS Events to also trigger for the other party in combat Updated onPickup JS Event to include a third parameter - the potential container item was picked up from. Event now also triggers event in scripts attached to said containers: onPickup( iPickedUp, pChar, iCont ) Added tracking of total playtime per individual character, and per account across all characters, and exposed these properties to JS engine: .totalPlayTime // Account property, total playtime across all chars .playTime // Character property, total playtime on given character only Added new player-accessible command ('playtime) to spit out the playtime of current character/account as a whole (js/commands/playtime.js) Implemented first version of Young Player System: Replaced the UNUSED9 account flag with YOUNG, to be used by Young/New Player System Added new JS Account property that gets/sets whether player account is considered Young: .isYoung Added new Char timers: TIMER_YOUNGHEAL // Restricts how often Young players are healed by NPC healers TIMER_YOUNGMESSAGE // Restricts how often Young players are warned about dangerous looking monsters in overworld Updated GM commands 'get and 'set to get/set .isYoung property of player's account (js/commands/targeting/get.js and set.js) Added new UOX.INI setting to enable/disable Young Player System (enabled by default): YOUNGPLAYERSYSTEM=1 If Young Player System is enabled, all newly created player accounts are automatically marked with Young flag Added new script to handle various restrictions and functions related to Young characters (js/player/young_player.js): Young characters will have [Young] displayed over their head Young characters will have their Young status checked and verified on every login + every stat/skill gain, to revoke the Young status if any of the following is true: Account has a total playtime of more than 40 hours Any character has more than 350 total (base) skill points Any character has more than 70 skill points in a single skill Any character has more than 150 total stat points Any character has more than 80 stat points in a single stat Young characters can renounce their Young status manually by saying the words "I renounce my young player status" Young characters get two additional items upon creation: a new player ticket (can be combined with any other players new player ticket for both players to get a reward) a sextant (shows Young players directions to nearest moongate/bank regardless of where they are, as long as outdoors) Young characters cannot target other player characters with hostile spells or skills Young characters cannot be the target of other player characters' hostile spells or skills Young characters can only cast beneficial spells upon themselves or other Young characters Young characters can only be the target of beneficial spells from other Young players Young players (and their pets/followers) cannot attack or harm any other players (or their pets/followers), nor themselves be attacked or harmed by any other players (or their pets/followers), whether from combat, spells, skills or items Young players don't lose any of their items on death, and are teleported to the nearest healer upon death with all their items intact Young players receive a warning upon entering dungeons that monsters there will be hostile Updated global script (js/server/global.js) to: Check/Verify Young status of players upon login Attach young player script on login/creation for players on Young accounts Give specific items to Young players upon creation Added new script (js/item/corpse.js) that is assigned to all freshly created corpses. This script handles restrictions related to Young players interactions with corpses, and the interactions of other players with corpses of Young players Updated JS Method .Carve() to return true/false depending on whether carving a corpse was successful Updated Healer AI in code to heal nearby injured Young players Updated Evil AI and Evil Caster AI in code to avoid selecting Young players as targets in combat outside of dungeons Added a new section to UOX.INI - [young player starting locations] - that can be used to define starting locations for Young players. If only one such location is provided, all players start there. Otherwise, it matches the same starting location setup as the regular one - with one entry per town in Britannia. Restricted transferring and/or friending of pets (code) and hirelings (hirelings.js) between Young and non-Young players Restricted Young players from recalling or gating to Felucca facet Young players can instantly logout from anywhere, at any time
2023-07-01 20:02:40 +08:00
case TIMER_YOUNGHEAL: *vp = INT_TO_JSVAL( tCHAR_YOUNGHEAL ); break;
case TIMER_YOUNGMESSAGE: *vp = INT_TO_JSVAL( tCHAR_YOUNGMESSAGE ); break;
08/08/2021 - Xuri (0.99.4w) Added support for new Skills DFN tag: SKILLDELAY=# // Delay in seconds before another skill can be used after using this skill. Overrides global delay from UOX.INI Updated skill cSkills::SkillUse() to use skill-specific skill delays if set for a given skill, or global delay from ini if not. Also added a check to see if skill delay timer has been modified by onSkill JS event before attempting to set a default timer Updated skill delays to better match ~pub15 era: Reduced global SKILLDELAY setting in UOX.INI from 2 to 1 second Detecting Hidden skill now has a default skill delay of 10 seconds Herding skill now has a default skill delay of 10 seconds Hiding skill now has a default skill delay of 10 seconds, with shorter delays (global skill delay) for trying to hide while in combat or for successfully hiding Meditation skill now has a default skill delay of 10 seconds, with shorter delays (global skill delay) for failing due to hands being occupied or already being at max mana Peacemaking skill now has a default skill delay of 10 seconds for failed skill checks, and 5 seconds delay for successful ones Poisoning skill now has a default skill delay of 10 seconds Provocation skill now has a default skill delay of 10 seconds Remove Trap skill now has a default skill delay of 10 seconds Stealing skill now has a default skill delay of 10 seconds Stealth skill now has a default skill delay of 10 seconds Tracking skill now has a default skill delay of 10 seconds Veterinary skill now has a default skill delay of 10 seconds Fixed an issue with global JS Timer object that would reference the wrong timerIDs Extended global JS timer object to include timers from socket as well (marked with SOCK_ prefix): .SOCK_SKILLDELAY // Delay before the next time player can use another skill .SOCK_OBJDELAY // Delay before next time player can use another object .SOCK_SPIRITSPEAK // Timer that tracks remaining duration of player's Spirit Speak .SOCK_TRACKING // Timer that tracks remaining duration for player's Tracking skill .SOCK_FISHING // Timer that tracks remaining duration for player's Fishing skill .SOCK_MUTETIME // Timer that tracks remaining duration a player remains muted .SOCK_TRACKINGDISPLAY // Timer that tracks interval between each time tracking display is updated Updated various JS scripts to use the new Timer.TIMERNAME with .GetTimer()/.SetTimer() JS Methods for Characters and Sockets Updated Persecution ability for player ghosts to use the skill delay of the Spirit Speak skill, if set Updated Persecution ability to base mana damage primarily on player's Spirit Speak skill rather than their Intelligence In order to cut down on the amount of messages sent from server to players trying to spam-use objects/skills, UOX3 now only sends a maximum of one message for object use delay and one message for skill use delay while the delay timers for these are in effect. This resets on the next successful use of an object or skill. This is tracked via bools in cSocket class: bool objDelayMsgShown bool skillDelayMsgShown Converted DELAY tag in spells.dfn to use seconds (with decimals) instead of tenths of a second, which was not precise enough. This controls the cast time of spells. What would previously say DELAY=10 (10/10ths of a second) now says DELAY=1.0 (1 second) Added support for new Spells DFN tag to control delay until damage takes place after casting a spell, replacing UOX.INI setting COMBATEXPLODEDELAY, which is no longer used: DAMAGEDELAY=# // Delay in seconds (decimal) until a direct damage spell deals its damage Added support for a new Spells DFN tag to control cast recovery time, during which additional spells cannot be cast: RECOVERYDELAY=# // Delay in seconds (decimal) until player can cast another spell Added new setting in UOX.INI to control whether player spellcasting gets interrupted upon equipping/picking up items: ITEMSINTERRUPTCASTING=1 // If enabled, spellcasting gets interrupted by equipping/picking up items. Defaults to enabled. All direct damage spells by default have a 1.0s delay before damage (and VFX) is applied, except Explosion which has a 2.5s delay All spells by default have a cast recovery duration of 1.0s; from the moment a spellcast is completed/moment targeting cursor appears, the player will be unable to cast any other spell for the duration of the cast recovery Reagent checks and skill-check now take place AFTER the spellcast animation, not before! Spell cast times now follow this formula, though values set per spell and can be modified: 0.25 + ( spellCircle * 0.25 ) Overhauled spell sound FX and VFX for for all spells Players can no longer cast spells while holding items on the cursor Fixed Magic Trap, Magic Untrap, Magic Lock and Magic Unlock not being usable on containers in one's own backpack Fixed an issue that caused Magic Trap to deal between 50 to 100 damage to the player. New damage: 5 to 10, depending on Magery skill Fixed an issue where Magic Untrap spell would completely remove traps from spawn containers instead of disable them Fixed an issue where Telekinesis spell would not set off traps on containers properly Added additional FX for Teleport spell played at player's original location before the teleport took place Fixed a bug where creatures summoned with the Summon Creature spell were not dispellable Fixed an issue where the Reveal spell would not reveal players hidden using the Hiding skill Dispel and Mass Dispel spells are no longer guaranteed to succeed at dispelling summoned creatures. Instead, the chance to dispel is based on the following simple formula, with dispelChance capped at 95% to always leave some chance for a creature to resist a dispel: dispelChance = ( 50 - ( targetResistSkill - casterMagerySkill )) / 1.5 The targetResistSkill is based on the highest value of the summoned creature's spell resistance skill and the spell resistance skill of its summoner Fixed an issue where the Create Food spell attempted to create an invalid item Fixed issue where code that checked for valid drop locations for items didn't allow negative z values (Dragon Slayer) Fixed issue where players could drop items on blocking map tiles like water or mountains (Dragon Slayer) Fixed issue where some JS functions like CheckStaticFlag, CheckDynamicFlag, DoesStaticBlock, DoesDynamicBlock and DoesMapBlock would not work correctly when passed negative Z values Fixed issue where context menu were listing skills to train from NPCs based on effective skill rather than base skill Fixed issue where NPCs would offer skills for training even if those skills were not above the minimum 60 skillpoints Updated clilocID used for Gump JS Method AddToolTip - as well as for some item/character tooltip data - from 1050045 to 1042971 for improved client compatibility Human/Elf/Gargoyle NPCs with spellcasting capabilities will now play a casting animation and briefly stop moving when they cast spells Updated NPC spellcasting code to help NPCs make a bit better choices of what spells to cast during combat. Now they take their own health percentage into account, and cast more offensive spells when at near full health vs more defensive spells as their health drops Fixed an issue where Hirelings wouldn't always immediately start following their new owners Fixed a bug where the Earthquake spell could incorrectly add NPC characters marked for deletion to the refresh queue Updated skills and stats of all implemented human NPCs (including vendors) to better match the state of those NPCs around the time of Pub15 Fixed SPATTACK values for a couple of NPCs that were still using values based on spell bitmask instead of spell circle value Updated stats of Jukan and Meer NPCs (dfndata/npc/lbrraces.dfn) to match stats from official LBR guide Added support for an optional third parameter for Character/Socket JS Method .CustomTarget() to allow highlighting targeting cursors as neutral (0, default aura), harmful (1, red aura), helpful (2, blue aura). A value of 3 will cancel the currently active targeting cursor. New syntax: myChar/mySock.CustomTarget( targetID, txtToSay, cursorType ) // supported cursorTypes: 0 = neutral, 1 = harmful, 2 = helpful, 3 = cancel current target cursor Various target cursors triggered by code (like hard-coded spells, some pet commands) also make use of these cursorTypes
2021-08-08 01:57:25 +08:00
case TIMER_MOVETIME: *vp = INT_TO_JSVAL( tNPC_MOVETIME ); break;
case TIMER_SPATIMER: *vp = INT_TO_JSVAL( tNPC_SPATIMER ); break;
case TIMER_SUMMONTIME: *vp = INT_TO_JSVAL( tNPC_SUMMONTIME ); break;
case TIMER_EVADETIME: *vp = INT_TO_JSVAL( tNPC_EVADETIME ); break;
case TIMER_LOYALTYTIME: *vp = INT_TO_JSVAL( tNPC_LOYALTYTIME ); break;
case TIMER_IDLEANIMTIME: *vp = INT_TO_JSVAL( tNPC_IDLEANIMTIME ); break;
08/08/2021 - Xuri (0.99.4w) Added support for new Skills DFN tag: SKILLDELAY=# // Delay in seconds before another skill can be used after using this skill. Overrides global delay from UOX.INI Updated skill cSkills::SkillUse() to use skill-specific skill delays if set for a given skill, or global delay from ini if not. Also added a check to see if skill delay timer has been modified by onSkill JS event before attempting to set a default timer Updated skill delays to better match ~pub15 era: Reduced global SKILLDELAY setting in UOX.INI from 2 to 1 second Detecting Hidden skill now has a default skill delay of 10 seconds Herding skill now has a default skill delay of 10 seconds Hiding skill now has a default skill delay of 10 seconds, with shorter delays (global skill delay) for trying to hide while in combat or for successfully hiding Meditation skill now has a default skill delay of 10 seconds, with shorter delays (global skill delay) for failing due to hands being occupied or already being at max mana Peacemaking skill now has a default skill delay of 10 seconds for failed skill checks, and 5 seconds delay for successful ones Poisoning skill now has a default skill delay of 10 seconds Provocation skill now has a default skill delay of 10 seconds Remove Trap skill now has a default skill delay of 10 seconds Stealing skill now has a default skill delay of 10 seconds Stealth skill now has a default skill delay of 10 seconds Tracking skill now has a default skill delay of 10 seconds Veterinary skill now has a default skill delay of 10 seconds Fixed an issue with global JS Timer object that would reference the wrong timerIDs Extended global JS timer object to include timers from socket as well (marked with SOCK_ prefix): .SOCK_SKILLDELAY // Delay before the next time player can use another skill .SOCK_OBJDELAY // Delay before next time player can use another object .SOCK_SPIRITSPEAK // Timer that tracks remaining duration of player's Spirit Speak .SOCK_TRACKING // Timer that tracks remaining duration for player's Tracking skill .SOCK_FISHING // Timer that tracks remaining duration for player's Fishing skill .SOCK_MUTETIME // Timer that tracks remaining duration a player remains muted .SOCK_TRACKINGDISPLAY // Timer that tracks interval between each time tracking display is updated Updated various JS scripts to use the new Timer.TIMERNAME with .GetTimer()/.SetTimer() JS Methods for Characters and Sockets Updated Persecution ability for player ghosts to use the skill delay of the Spirit Speak skill, if set Updated Persecution ability to base mana damage primarily on player's Spirit Speak skill rather than their Intelligence In order to cut down on the amount of messages sent from server to players trying to spam-use objects/skills, UOX3 now only sends a maximum of one message for object use delay and one message for skill use delay while the delay timers for these are in effect. This resets on the next successful use of an object or skill. This is tracked via bools in cSocket class: bool objDelayMsgShown bool skillDelayMsgShown Converted DELAY tag in spells.dfn to use seconds (with decimals) instead of tenths of a second, which was not precise enough. This controls the cast time of spells. What would previously say DELAY=10 (10/10ths of a second) now says DELAY=1.0 (1 second) Added support for new Spells DFN tag to control delay until damage takes place after casting a spell, replacing UOX.INI setting COMBATEXPLODEDELAY, which is no longer used: DAMAGEDELAY=# // Delay in seconds (decimal) until a direct damage spell deals its damage Added support for a new Spells DFN tag to control cast recovery time, during which additional spells cannot be cast: RECOVERYDELAY=# // Delay in seconds (decimal) until player can cast another spell Added new setting in UOX.INI to control whether player spellcasting gets interrupted upon equipping/picking up items: ITEMSINTERRUPTCASTING=1 // If enabled, spellcasting gets interrupted by equipping/picking up items. Defaults to enabled. All direct damage spells by default have a 1.0s delay before damage (and VFX) is applied, except Explosion which has a 2.5s delay All spells by default have a cast recovery duration of 1.0s; from the moment a spellcast is completed/moment targeting cursor appears, the player will be unable to cast any other spell for the duration of the cast recovery Reagent checks and skill-check now take place AFTER the spellcast animation, not before! Spell cast times now follow this formula, though values set per spell and can be modified: 0.25 + ( spellCircle * 0.25 ) Overhauled spell sound FX and VFX for for all spells Players can no longer cast spells while holding items on the cursor Fixed Magic Trap, Magic Untrap, Magic Lock and Magic Unlock not being usable on containers in one's own backpack Fixed an issue that caused Magic Trap to deal between 50 to 100 damage to the player. New damage: 5 to 10, depending on Magery skill Fixed an issue where Magic Untrap spell would completely remove traps from spawn containers instead of disable them Fixed an issue where Telekinesis spell would not set off traps on containers properly Added additional FX for Teleport spell played at player's original location before the teleport took place Fixed a bug where creatures summoned with the Summon Creature spell were not dispellable Fixed an issue where the Reveal spell would not reveal players hidden using the Hiding skill Dispel and Mass Dispel spells are no longer guaranteed to succeed at dispelling summoned creatures. Instead, the chance to dispel is based on the following simple formula, with dispelChance capped at 95% to always leave some chance for a creature to resist a dispel: dispelChance = ( 50 - ( targetResistSkill - casterMagerySkill )) / 1.5 The targetResistSkill is based on the highest value of the summoned creature's spell resistance skill and the spell resistance skill of its summoner Fixed an issue where the Create Food spell attempted to create an invalid item Fixed issue where code that checked for valid drop locations for items didn't allow negative z values (Dragon Slayer) Fixed issue where players could drop items on blocking map tiles like water or mountains (Dragon Slayer) Fixed issue where some JS functions like CheckStaticFlag, CheckDynamicFlag, DoesStaticBlock, DoesDynamicBlock and DoesMapBlock would not work correctly when passed negative Z values Fixed issue where context menu were listing skills to train from NPCs based on effective skill rather than base skill Fixed issue where NPCs would offer skills for training even if those skills were not above the minimum 60 skillpoints Updated clilocID used for Gump JS Method AddToolTip - as well as for some item/character tooltip data - from 1050045 to 1042971 for improved client compatibility Human/Elf/Gargoyle NPCs with spellcasting capabilities will now play a casting animation and briefly stop moving when they cast spells Updated NPC spellcasting code to help NPCs make a bit better choices of what spells to cast during combat. Now they take their own health percentage into account, and cast more offensive spells when at near full health vs more defensive spells as their health drops Fixed an issue where Hirelings wouldn't always immediately start following their new owners Fixed a bug where the Earthquake spell could incorrectly add NPC characters marked for deletion to the refresh queue Updated skills and stats of all implemented human NPCs (including vendors) to better match the state of those NPCs around the time of Pub15 Fixed SPATTACK values for a couple of NPCs that were still using values based on spell bitmask instead of spell circle value Updated stats of Jukan and Meer NPCs (dfndata/npc/lbrraces.dfn) to match stats from official LBR guide Added support for an optional third parameter for Character/Socket JS Method .CustomTarget() to allow highlighting targeting cursors as neutral (0, default aura), harmful (1, red aura), helpful (2, blue aura). A value of 3 will cancel the currently active targeting cursor. New syntax: myChar/mySock.CustomTarget( targetID, txtToSay, cursorType ) // supported cursorTypes: 0 = neutral, 1 = harmful, 2 = helpful, 3 = cancel current target cursor Various target cursors triggered by code (like hard-coded spells, some pet commands) also make use of these cursorTypes
2021-08-08 01:57:25 +08:00
case TIMER_LOGOUT: *vp = INT_TO_JSVAL( tPC_LOGOUT ); break;
// Socket Timers (PC only)
case TIMER_SOCK_SKILLDELAY: *vp = INT_TO_JSVAL( tPC_SKILLDELAY ); break;
case TIMER_SOCK_OBJDELAY: *vp = INT_TO_JSVAL( tPC_OBJDELAY ); break;
case TIMER_SOCK_SPIRITSPEAK: *vp = INT_TO_JSVAL( tPC_SPIRITSPEAK ); break;
case TIMER_SOCK_TRACKING: *vp = INT_TO_JSVAL( tPC_TRACKING ); break;
case TIMER_SOCK_FISHING: *vp = INT_TO_JSVAL( tPC_FISHING ); break;
case TIMER_SOCK_MUTETIME: *vp = INT_TO_JSVAL( tPC_MUTETIME ); break;
case TIMER_SOCK_TRACKINGDISPLAY: *vp = INT_TO_JSVAL( tPC_TRACKINGDISPLAY ); break;
Implementation of speedhack anti-cheat system - [ADD] Introduction of speedhack anti-cheat system which can detect when players are moving faster than intended and throttle them (default) while also allowing custom reactions via JS events. This system is governed by the following new settings in [anticheat] section of uox.ini: - SPEEDHACKDETECTION=1 // Enables/disables speedhack detection system - SPEEDHACKTHROTTLEPENALTY=2000 // Movement throttle penalty (in ms) applied when speedhack is detected - SPEEDHACKMAXDEBT=350 // Max movement debt (in ms) player can accumulate before throttling occurs - SPEEDHACKMAXDEBTAVG=0.5 // Max (moving) average debt as a factor of SPEEDHACKMAXDEBT player can accumulate before triggering logging for suspicious activity - SPEEDHACKMAXCREDIT=-75 // Movement credit (in ms) that acts as buffer for regular players against jitter, lag, etc - SPEEDHACKGRACETHRESHOLD=2000 // Grace threshold to handle large server/network lag spikes. - [ADD] Added new JS Events that allow reactions to detection/suspicion of speedhacking: - onSpeedHackDetection( pChar, deltaTime ) // Triggers when a player has crossed max threshold for speedhack detection - onSpeedHackSuspicion( pChar, rawMoveDebt, deltaTime ) // Triggers when a player has consistently crossed threshold for speedhack suspicion - [ADD] New JS Socket Properties: - .moveDebt // Accumulated time debt in ms indicating whether player's movement packets arrive early (potential speeding) or late (lag) - .moveDebtAvg // Accumulated time debt in ms, on average over at least 100 samples - .moveBurstAllowance // Number of upcoming movement steps that will be processed without incurring debt or penalty - .nextMoveTime // Timestamp in ms for when next valid movement packet is expected to arrive - [ADD] Added new system timers for Sockets and exposed to JS: - TIMER.SPEEDHACKPENALTY // Time until next time player is allowed to move after getting throttled by anti-cheat - TIMER.SPEEDHACKLOGGED // Time until next time suspicious speed-hack related behavior is logged - [FIX] Fixed a 20+ year old movement desynch bug that would cause players to start rubberbanding after taking ~255 steps - [UPD] Updated UOX3 and JS documentation with entries related to the new anti-cheat system, - [UPD] Updated dictionary files with new system message for anticheat, and addressed some duplicate ID issues
2025-12-13 01:31:17 +08:00
case TIMER_SOCK_TRAFFICWARDEN: *vp = INT_TO_JSVAL( tPC_TRAFFICWARDEN ); break;
case TIMER_SOCK_SPEEDHACKPENALTY: *vp = INT_TO_JSVAL( tPC_SPEEDHACKPENALTY ); break;
case TIMER_SOCK_SPEEDHACKLOGGED: *vp = INT_TO_JSVAL( tPC_SPEEDHACKLOGGED ); break;
0.99.4v Added JS command to reload dictionaries 'reloaddictionaries Fixed a server crash related to casting of spells Fixed some issues with Line-of-Sight checks related to items under/above ground, LoS checks between different floors of buildings, etc. Updated handling of skill-training keywords to be based on language-independent keyword IDs rather than trying to match player-input text to specific skill-names Updated animal-trainer/stablemasterscript (js/npc/ai/stablemaster.js) with several changes: Fixed an issue where the same pet would be stabled in all available slots if payment was taken from player's bank account instead of their backpack Fixed an issue where stablemaster would not pause walking for a while when a player interacts with them Converted all system messages and text messages in stablemaster script to dictionary entries Added new NPC AI type to source - AI_STABLEMASTER (9) - and assigned this to animal trainers. This is used to identify this type of NPCs for the purpose of displaying relevant context menus Reworked banker AI script (js/npc/ai/banker.js) to use triggerwords from client instead of hard-defined strings, to work better with multiple languages (and work with all relevant triggerwords) Fixed a bug with banker AI script (js/npc/ai/banker.js) that prevented players from using the "withdraw" command Re-added NPC AI 8 to banker NPCs (dfndata/npc/male_vendors.dfn and female_vendors.dfn) so code can check for presence of this AI when handling context menus Removed remaining hard-coded banking functionality - all handled by script anyway Added new context menu option for NPC bankers - Open Bankbox Updated code handling of context menus to only show context menus when relevant: Open Paperdoll - Shows for all characters with a paperdoll Open Backpack - Shows for player's character, pack animals and hirelings Open Bankbox - Shows for banker NPCs (if within 8 tiles) Buy/Sell - Shows for vendor NPCs (if within 8 tiles, and if they have anything for sale/are buying anything) Added new context menu entries for pets, which can be used if player is within 12 tiles of pet: Command: Kill Command: Stop Command: Follow Command: Stay Command: Guard Add Friend Remove Friend Transfer Release Added new context menu entries for stablemasters/animal trainers: Claim All Pets Stable Pet Added new context menu entries for Escort Quest NPCs Ask Destination (if within 3 tiles) Accept Escort (if within 3 tiles) Abandon Escort Added new context menus for NPCs that can teach skills to players (limited to max 10 per NPC) Train [skillName] Added new AI script for NPC hirelings (3204=js/npc/ai/hireling.js), who can be hired to follow the player around for a limited amount of time, and function the same way as pets. In addition to the regular pet commands, these speech commands are supported: hire // The hireling will respond with the cost to hire them dismiss // Replaces the "release" command for pets; will dismiss the hireling patrol // The hireling will patrol between it's current location and a second targeted location nearby move // The hireling will try to shuffle out of the way fetch // The hireling will try to fetch a targeted item drop // The hireling will drop to the ground all loot they're currently carrying report // The hireling will report on the remaining time they're hired for Added new NPC DFN tag used by code to detect hireling NPCs for the purpose of displaying context menus: HIRELING // No additional value/data needed for tag Added new context menu entries for Hireling NPCs, in addition to the ones for regular pets: Hire // Can be used within 3 steps of the hireling, who will respond with cost to hire them Dismiss // Replaces the "release" command for pets, will dismiss the hireling Added HIRELING tag and SCRIPT=3204 to and updated stats of various NPCs that will be hireable: m_fighter, f_fighter, m_beggar, f_beggar, m_peasant, f_peasant, m_sailor, f_sailor, m_pirate, f_pirate Added new hireling NPC: m_paladin, f_paladin Added new UOX ini setting to enable/disable context menus CONTEXTMENUS=1/0 (defaults to 1) Added new Item JS Method to check if an item's ID is on a specified food list .IsOnFoodList( foodList ) // Returns true/false if item's ID is on specified foodList Added new OMNIVORE food list and assigned it to [basehuman] DFN section Added new Character JS Properties .isGuarded // Gets/Sets whether character is guarded by a pet/hireling .guarding // Gets/Sets the object (if any) being guarded by a pet/hireling Fixed multiple issues with health bars, flagging and character highlighting Added some crash protection for invalid data used with CUSTOMINTTAG and CUSTOMSTRINGTAG DFN tags for Items, NPCs and Multis Fixed an issue which prevented hard-coded checks from running when using items Added new global js object (Timer) to make the use of character timers in JS more robust, with properties matching timer names from enum in source. Properties: .TIMEOUT // Time until next attack can be done in combat .INVIS // Time until invisible character becomes visible .HUNGER // Time until character grows more hungry .THIRST // Time until character grows more thirsty .POISONTIME // Time until next tick of poison damage .POISONTEXT // Time until next message about suffering from poison .POISONWEAROFF // Time until poison wears off .SPELLTIME // Time until spell cast is completed. Can be set to 0 to interrupt .ANTISPAM // Time until next speech message can be sent (for anti spam purposes) .CRIMFLAG // Time until criminal flag runs out .MURDERRATE // Time until next murder count decay .PEACETIMER // Time until character can re-enter combat after being affected by peacemaking .FLYINGTOGGLE // Time until next time flying ability can be toggled for gargoyles .MOVETIME // Time until NPC can move again .SPATIMER // Time until next time NPC can cast a spell .SUMMONTIME // Time until a summoned NPC will vanish .EVADETIME // Time until an NPC will exit evade state .LOGOUT // Time it takes for a player char to vanish after logout Examples of use: var hungerTimer = myChar.GetTimer( Timer.HUNGER ) myChar.SetTimer( Timer.HUNGER, 15000 ) Added new Character JS Methods to add, remove and list friends of a pet/hireling: .AddFriend( playerToAdd ) // Adds player to friend list .RemoveFriend( playerToRemove ) // Removes player from friend list .GetFriendList() // Gets list of friends .ClearFriendList() // Clears list of friends Added new Character JS Method to fetch a player character's list of pets/followers .GetPetList() // Gets list of pets/followers Added new persistent NPC property to keep track of a pet's previous owners, whether those tamed the pet or had it transferred to them. Every time a pet is tamed, or is transferred to a new owner, this list is updated: GenericList< CChar * > petOwnerList Added new Character JS Method to check if a player is on a pet's owner list as a previous owner: .HasBeenOwner( mChar ) Previous owners of a pet can re-tame it with guaranteed chance of success Updated JS Method Refresh() to be usable with both items or characters, to send updated state of object to nearby players Added character tooltip [Guarded] for characters being guarded by a pet/hireling Pets/hirelings that are transferred will now immediately start following their new master instead of wandering freely Pets/hirelings can no longer be transferred between players as long as either party is flagged as a criminal Pets/hirelings can no longer be transferred to dead players Pets/hirelings can no longer be transferred to NPCs Summoned creatures can no longer be transferred to other players Summoned creatures can no longer have friends Friend lists of pets/hirelings are now cleared when the pet/hireling is transferred to another player Added new UOX.INI settings to control how many pets players can have active: MAXCONTROLSLOTS=0 // Maximum number of pet control slots available to player. Disabled if 0 MAXFOLLOWERS=5 // Maximum pets/followers a player can have active at the same time. Used if control slots are disabled MAXPETOWNERS=5 // Maximum number of different owners a pet can have over its lifetime before it becomes impossible to retame Added new NPC property and NPC DFN tag that keeps track of how many pet control slots an NPC would take up if owned by a player: UI08 controlSlots // source property CONTROLSLOTS=# // DFN tag Added new Character JS properties: .ownerCount // Get the total number of owners a pet/hireling has had, based on NPC's petOwnerList .controlSlots // Get/Set number of pet control slots an NPC will occupy .controlSlotsUsed // Get/Set the number of control slots used by a player Updated get (js/commands/targeting/get.js) and set (js/commands/targeting/set.js) commands to support getting/setting the following character properties: deaths ownerCount (read only) controlSlots controlSlotsUsed Updated NPC DFNs with default CONTROLSLOT=# tags Increased the max distance from player that onSpeech JS event will trigger from 7 to 12 Updated how "all attack" and "all follow" commands for pets are handled. Now loops through all pets owned by character and executes command for each eligible pet Fixed an issue where NPCs could follow characters in different worlds/instances than them selves Updated default max amount of items that can be sold to NPC vendors from 5 to 250 Guards can no longer train players in skills Updated equipment itemlists (dfndata/items/itemlists/itemlists.dfn) with blank entries to introduce some more variety in the type of clothes NPCs wear in general Added new NPCs to DFNs (dfndata/npc/undead.dfn) and added them to undead npclist: [skeletalmage] // variation of [bonemage] [skeletalknight] // variation of [boneknight] Updated Titles (dfndata/titles/titles.dfn) with up-to-date titles for skills around Pub 15, and added titles for skills added after that. Also added "Elder" and "Legendary" titles for 110 and 120 skillpoints Updated EQUIPITEM tag in newbie.dfn (dfndata/newbie/newbie.dfn) to support an optional hue parameter (EQUIPITEM=id,hue) Updated starting equipment for new characters (dfndata/newbie/newbie.dfn), with commented out practice weapons. Uncomment to use Added item definitions for practice weapons (dfndata/items/gear/weapons/practice_weapons.dfn): practice_skinning_knife practice_hatchet practice_axe practice_mace practice_longsword practice_spear practice_bow practice_club practice_crook practice_gnarled_staff Updated mount statues DFN (dfndata/items/misc/mount-statues.dfn) and JS (js/npc/pets/*.js) files to include pet control slot related stuff Pets now inherit the karma of their owners, but revert to their original karma upon release Pets and hirelings will no longer follow the ghosts of their dead owners, but stay to guard their corpse Added optional 9th parameter for JS Function CreateDFNItem to specify a color for item created. This comes before the other optional parameters - worldNumber and instanceID (which are only used if character is NULL): CreateDFNItem( mSock, mChar, sectionName, inPack, iAmount, itemType, iColor, worldNumber, instanceID ) Added ID of Giant Beetle to various pack animal checks Pack animals will now drop any newbie/blessed items stored in their packs upon death Added new NPC properties to track pet loyalty, and exposed these as Character JS properties, and NPC DFN tags: JS Properties .maxLoyalty // Defaults to 100 .loyalty // Starts at 25 DFN Tags MAXLOYALTY=# // Defaults to 100 LOYALTY=# // Starts at 25 Updated TriggerEvent JS function to support return values (int, bool, string, object) from called script Updated various JS scripts to make use of new TriggerEvent functionality and reduce reliance on custom tags: js/item/archerybutte.js js/item/trainingdummy.js js/server/data/combatanims.js js/server/data/weapontypes.js Updated archerybutte script to use dictionary for system and text messages Updated archerybutte script to support increased range, distance penalty and dex/str bonuses when calculating score Added new UOX.INI settings under [pets and hirelings] section related to pet control and loyalty: CHECKPETCONTROLDIFFICULTY=1 // Enable/Disable pet control difficulty system PETLOYALTYGAINONSUCCESS=1 // Amount of pet loyalty gained on successful pet command use PETLOYALTYLOSSONFAILURE=3 // Amount of pet loyalty lost on failed pet command use PETLOYALTYRATE=900 // Amount of seconds between each time pet loyalty is automatically reduced by 1. Takes 25 hours to deplete completely from max Added new persistent NPC property that keeps track of the difficulty of taming and controlling a pet, and exposed it as a Character JS property: .orneriness Every time a tamed pet is released or goes wild, its "orneriness" increases, making it more difficult for other players to tame, and more difficult for anyone to control. Updated CBasePetResponse::canControlPet() function to use pet control difficulty system if enabled, which checks player's animal taming/animal lore skill vs a pet's "orneriness" to determine chance of pet accepting a given pet command On successful use of pet command, increases pet loyalty by value defined in PETLOYALTYGAINONSUCCESS ini setting On failed use of pet command, decreases pet loyalty by value defined in PETLOYALTYLOSSONFAILURE ini setting Added new Character JS Method to calculate chance of a player successfully controlling the pet: .CalculateControlChance( mChar ) // Returns value between 0 and 1000 indicating chance of success Feeding a pet will now restore its loyalty to maximum Pets will now lose loyalty on hunger checks when at maximum hunger Pets that are maximum hungry will now only have a chance to go wild if loyalty has dropped to zero Added new DFN tag for creatures.dfn - TYPE - which contains a string describing the type of creature Added secure pet trading. Players who trade pets will now see a pet transfer deed appear in a secure trade window with the name and type of creature, and upon completion of the trade the associated pet will be instantly transferred to the other player Updated resource JS scripts (js/server/resource/*) to use dictionaries for all system messages Updated skill JS scripts (js/skill/*) to use dictionaries for all system messages Updated housing JS scripts (js/server/house/*) to use dictionaries for all system messages Updated item JS scripts (js/item/*) to use dictionaries for all system messages Updated magic JS scripts (js/magic/*) to use dictionaries for all system messages Updated NPC AI JS scripts (js/npc/ai/*) to use dictionaries for all system messages Updated command JS scripts (js/commands/*) to use dictionaries for all system messages, gump tooltips, etc Updated code to use dictionaries for all system messages Fixed incorrect spelling for UOX.INI setting HIDEW(H)ILEMOUNTED and updated hiding skill (js/skill/hiding.js) to actually allow/disallow hiding while mounted based on this setting Added new Character JS Method to make it easier to make one NPC initiate combat with another: .InitiateCombat( targetChar ) // Character attempts to initiate combat with target character Updated parrying portion of combat code to be in line with Pub15/pre-AoS parrying mechanics. High AR shields now absorb more damage on a successful parry, while low AR shields have a higher chance of parrying. Shields are also now more effective against archery attacks (full absorption potential) than melee attacks (half absorption potential). Updated combat damage calculations to be in line with Pub15/pre-AoS damage calculations Adjusted default value of COMBATNPCDAMAGERATE ini setting (damage divisor when target is a player) from 2 to 1 to account for these changes. Removed dictionary.UNK, and made dictionary.ZRO the default dictionary used for all unsupported languages Added dictionary support for additional languages: Portuguese, Italian, Czech Updated default dictionaries for the following languages: English, French Added default dictionaries for the following languages: German, Spanish, Portuguese, Italian, Czech (note that translations have been provided by automatic services and will contain inaccuracies!) Added new UOX.INI setting to allow specifying a default dictionary language for server, which if set will force that language for all dictionary messages, regardless of client settings: SERVERLANGUAGE=0 // Set default server dictionary language. Supported languages: 0 - None/language used by each client, 1 - English, 2 - German, 3 - Spanish, 5 - French, 6 - Portuguese, 7 - Italian, 8 - Czech Added new function in combat.cpp - AdjustArmorClassDamage() - which adjusts the damage dealt in combat based on whether armour class (AC DFN tag or .ac JS property) of weapon and armour equipped on hit location of target match up. A weapon with armour class 1 would essentially be doubly effective against armour of armour class 1. Allows setting up things like piercing weapons being better against some armor types than mace weapons, etc. Added new UOX.INI setting under [combat] to enable/disable double damage from armour class bonuses: ARMORCLASSDAMAGEBONUS=0/1 //defaults to 0)
2021-07-28 16:02:56 +08:00
default:
break;
}
}
return JS_TRUE;
}
2025-03-28 13:23:59 +10:00
JSBool CCreateEntriesProps_getProperty( JSContext *cx, JSObject *obj, jsid id, jsval *vp )
Exposed crafting entries from create DFNs to JS engine Exposed crafting entries to JS engine, along with associated properties from the crafting DFNs: New JS Object types CreateEntries // Global JS object containing all item entries loaded from create DFNs CreateEntry // A specific create entry retrieved from global object. Example: var createEntry = CreateEntries[7] // Fetches item entry #7 from create DFNs New CreateEntry JS Properties id // itemID of item to craft name // name of item entry from create DFNs addItem // section header of item to craft from item DFNs colour // colour of crafted item sound // sound played when crafting item minRank // minimum rank value used by rank system to provide variable stats to crafted items maxRank // maximum rank value used by rank system to provide variable stats to crafted items delay // delay in milliseconds for crafting to finish spell // spell ID primarily used when inscribing magic scrolls resources // list of resources needed to craft item. resources[n][0] // amount of resource needed resources[n][1] // resource colour required resources[n][2] // list of IDs accepted as resource material skills // list of skills requirements to craft item skills[n][0] // skillNumber of skill required to craft item skills[n][1] // minimum skill at which player will always fail to craft item skills[n][2] // maximum skill at which player will always succeed to craft item avgMinSkill // average minimum skill required to smelt item avgMaxSkill // average maximum skill required to smelt item Fixed a bug with tracking menu that could cause UOX3 to crash when cancelling/closing the menu
2021-06-30 00:00:48 +08:00
{
UI16 createEntryId = static_cast<UI16>( JSID_TO_INT( id ));
Exposed crafting entries from create DFNs to JS engine Exposed crafting entries to JS engine, along with associated properties from the crafting DFNs: New JS Object types CreateEntries // Global JS object containing all item entries loaded from create DFNs CreateEntry // A specific create entry retrieved from global object. Example: var createEntry = CreateEntries[7] // Fetches item entry #7 from create DFNs New CreateEntry JS Properties id // itemID of item to craft name // name of item entry from create DFNs addItem // section header of item to craft from item DFNs colour // colour of crafted item sound // sound played when crafting item minRank // minimum rank value used by rank system to provide variable stats to crafted items maxRank // maximum rank value used by rank system to provide variable stats to crafted items delay // delay in milliseconds for crafting to finish spell // spell ID primarily used when inscribing magic scrolls resources // list of resources needed to craft item. resources[n][0] // amount of resource needed resources[n][1] // resource colour required resources[n][2] // list of IDs accepted as resource material skills // list of skills requirements to craft item skills[n][0] // skillNumber of skill required to craft item skills[n][1] // minimum skill at which player will always fail to craft item skills[n][2] // maximum skill at which player will always succeed to craft item avgMinSkill // average minimum skill required to smelt item avgMaxSkill // average maximum skill required to smelt item Fixed a bug with tracking menu that could cause UOX3 to crash when cancelling/closing the menu
2021-06-30 00:00:48 +08:00
CreateEntry_st *myCreateEntry = Skills->FindItem( createEntryId );
Exposed crafting entries from create DFNs to JS engine Exposed crafting entries to JS engine, along with associated properties from the crafting DFNs: New JS Object types CreateEntries // Global JS object containing all item entries loaded from create DFNs CreateEntry // A specific create entry retrieved from global object. Example: var createEntry = CreateEntries[7] // Fetches item entry #7 from create DFNs New CreateEntry JS Properties id // itemID of item to craft name // name of item entry from create DFNs addItem // section header of item to craft from item DFNs colour // colour of crafted item sound // sound played when crafting item minRank // minimum rank value used by rank system to provide variable stats to crafted items maxRank // maximum rank value used by rank system to provide variable stats to crafted items delay // delay in milliseconds for crafting to finish spell // spell ID primarily used when inscribing magic scrolls resources // list of resources needed to craft item. resources[n][0] // amount of resource needed resources[n][1] // resource colour required resources[n][2] // list of IDs accepted as resource material skills // list of skills requirements to craft item skills[n][0] // skillNumber of skill required to craft item skills[n][1] // minimum skill at which player will always fail to craft item skills[n][2] // maximum skill at which player will always succeed to craft item avgMinSkill // average minimum skill required to smelt item avgMaxSkill // average maximum skill required to smelt item Fixed a bug with tracking menu that could cause UOX3 to crash when cancelling/closing the menu
2021-06-30 00:00:48 +08:00
if( myCreateEntry == nullptr )
{
ScriptError( cx, oldstrutil::format( "Invalid create entry ID (%i)", createEntryId ).c_str() );
Exposed crafting entries from create DFNs to JS engine Exposed crafting entries to JS engine, along with associated properties from the crafting DFNs: New JS Object types CreateEntries // Global JS object containing all item entries loaded from create DFNs CreateEntry // A specific create entry retrieved from global object. Example: var createEntry = CreateEntries[7] // Fetches item entry #7 from create DFNs New CreateEntry JS Properties id // itemID of item to craft name // name of item entry from create DFNs addItem // section header of item to craft from item DFNs colour // colour of crafted item sound // sound played when crafting item minRank // minimum rank value used by rank system to provide variable stats to crafted items maxRank // maximum rank value used by rank system to provide variable stats to crafted items delay // delay in milliseconds for crafting to finish spell // spell ID primarily used when inscribing magic scrolls resources // list of resources needed to craft item. resources[n][0] // amount of resource needed resources[n][1] // resource colour required resources[n][2] // list of IDs accepted as resource material skills // list of skills requirements to craft item skills[n][0] // skillNumber of skill required to craft item skills[n][1] // minimum skill at which player will always fail to craft item skills[n][2] // maximum skill at which player will always succeed to craft item avgMinSkill // average minimum skill required to smelt item avgMaxSkill // average maximum skill required to smelt item Fixed a bug with tracking menu that could cause UOX3 to crash when cancelling/closing the menu
2021-06-30 00:00:48 +08:00
*vp = JSVAL_NULL;
return JS_FALSE;
}
JSObject *jsCreateEntry = JS_NewObject( cx, &UOXCreateEntry_class, nullptr, obj );
JS_DefineProperties( cx, jsCreateEntry, CCreateEntryProperties );
JS_SetPrivate( cx, jsCreateEntry, myCreateEntry );
*vp = OBJECT_TO_JSVAL( jsCreateEntry );
return JS_TRUE;
}
2025-03-28 13:23:59 +10:00
JSBool CCreateEntryProps_setProperty( JSContext* cx, JSObject* obj, jsid id, JSBool strict, jsval* vp )
Exposed crafting entries from create DFNs to JS engine Exposed crafting entries to JS engine, along with associated properties from the crafting DFNs: New JS Object types CreateEntries // Global JS object containing all item entries loaded from create DFNs CreateEntry // A specific create entry retrieved from global object. Example: var createEntry = CreateEntries[7] // Fetches item entry #7 from create DFNs New CreateEntry JS Properties id // itemID of item to craft name // name of item entry from create DFNs addItem // section header of item to craft from item DFNs colour // colour of crafted item sound // sound played when crafting item minRank // minimum rank value used by rank system to provide variable stats to crafted items maxRank // maximum rank value used by rank system to provide variable stats to crafted items delay // delay in milliseconds for crafting to finish spell // spell ID primarily used when inscribing magic scrolls resources // list of resources needed to craft item. resources[n][0] // amount of resource needed resources[n][1] // resource colour required resources[n][2] // list of IDs accepted as resource material skills // list of skills requirements to craft item skills[n][0] // skillNumber of skill required to craft item skills[n][1] // minimum skill at which player will always fail to craft item skills[n][2] // maximum skill at which player will always succeed to craft item avgMinSkill // average minimum skill required to smelt item avgMaxSkill // average maximum skill required to smelt item Fixed a bug with tracking menu that could cause UOX3 to crash when cancelling/closing the menu
2021-06-30 00:00:48 +08:00
{
return JS_TRUE;
}
2025-03-28 13:23:59 +10:00
JSBool CCreateEntryProps_getProperty( JSContext *cx, JSObject *obj, jsid id, jsval *vp )
Exposed crafting entries from create DFNs to JS engine Exposed crafting entries to JS engine, along with associated properties from the crafting DFNs: New JS Object types CreateEntries // Global JS object containing all item entries loaded from create DFNs CreateEntry // A specific create entry retrieved from global object. Example: var createEntry = CreateEntries[7] // Fetches item entry #7 from create DFNs New CreateEntry JS Properties id // itemID of item to craft name // name of item entry from create DFNs addItem // section header of item to craft from item DFNs colour // colour of crafted item sound // sound played when crafting item minRank // minimum rank value used by rank system to provide variable stats to crafted items maxRank // maximum rank value used by rank system to provide variable stats to crafted items delay // delay in milliseconds for crafting to finish spell // spell ID primarily used when inscribing magic scrolls resources // list of resources needed to craft item. resources[n][0] // amount of resource needed resources[n][1] // resource colour required resources[n][2] // list of IDs accepted as resource material skills // list of skills requirements to craft item skills[n][0] // skillNumber of skill required to craft item skills[n][1] // minimum skill at which player will always fail to craft item skills[n][2] // maximum skill at which player will always succeed to craft item avgMinSkill // average minimum skill required to smelt item avgMaxSkill // average maximum skill required to smelt item Fixed a bug with tracking menu that could cause UOX3 to crash when cancelling/closing the menu
2021-06-30 00:00:48 +08:00
{
CreateEntry_st *gPriv = static_cast<CreateEntry_st*>( JS_GetPrivate( cx, obj ));
Exposed crafting entries from create DFNs to JS engine Exposed crafting entries to JS engine, along with associated properties from the crafting DFNs: New JS Object types CreateEntries // Global JS object containing all item entries loaded from create DFNs CreateEntry // A specific create entry retrieved from global object. Example: var createEntry = CreateEntries[7] // Fetches item entry #7 from create DFNs New CreateEntry JS Properties id // itemID of item to craft name // name of item entry from create DFNs addItem // section header of item to craft from item DFNs colour // colour of crafted item sound // sound played when crafting item minRank // minimum rank value used by rank system to provide variable stats to crafted items maxRank // maximum rank value used by rank system to provide variable stats to crafted items delay // delay in milliseconds for crafting to finish spell // spell ID primarily used when inscribing magic scrolls resources // list of resources needed to craft item. resources[n][0] // amount of resource needed resources[n][1] // resource colour required resources[n][2] // list of IDs accepted as resource material skills // list of skills requirements to craft item skills[n][0] // skillNumber of skill required to craft item skills[n][1] // minimum skill at which player will always fail to craft item skills[n][2] // maximum skill at which player will always succeed to craft item avgMinSkill // average minimum skill required to smelt item avgMaxSkill // average maximum skill required to smelt item Fixed a bug with tracking menu that could cause UOX3 to crash when cancelling/closing the menu
2021-06-30 00:00:48 +08:00
if( gPriv == nullptr )
return JS_FALSE;
if( JSID_IS_INT( id ))
Exposed crafting entries from create DFNs to JS engine Exposed crafting entries to JS engine, along with associated properties from the crafting DFNs: New JS Object types CreateEntries // Global JS object containing all item entries loaded from create DFNs CreateEntry // A specific create entry retrieved from global object. Example: var createEntry = CreateEntries[7] // Fetches item entry #7 from create DFNs New CreateEntry JS Properties id // itemID of item to craft name // name of item entry from create DFNs addItem // section header of item to craft from item DFNs colour // colour of crafted item sound // sound played when crafting item minRank // minimum rank value used by rank system to provide variable stats to crafted items maxRank // maximum rank value used by rank system to provide variable stats to crafted items delay // delay in milliseconds for crafting to finish spell // spell ID primarily used when inscribing magic scrolls resources // list of resources needed to craft item. resources[n][0] // amount of resource needed resources[n][1] // resource colour required resources[n][2] // list of IDs accepted as resource material skills // list of skills requirements to craft item skills[n][0] // skillNumber of skill required to craft item skills[n][1] // minimum skill at which player will always fail to craft item skills[n][2] // maximum skill at which player will always succeed to craft item avgMinSkill // average minimum skill required to smelt item avgMaxSkill // average maximum skill required to smelt item Fixed a bug with tracking menu that could cause UOX3 to crash when cancelling/closing the menu
2021-06-30 00:00:48 +08:00
{
JSString *tString = nullptr;
switch( JSID_TO_INT( id ))
Exposed crafting entries from create DFNs to JS engine Exposed crafting entries to JS engine, along with associated properties from the crafting DFNs: New JS Object types CreateEntries // Global JS object containing all item entries loaded from create DFNs CreateEntry // A specific create entry retrieved from global object. Example: var createEntry = CreateEntries[7] // Fetches item entry #7 from create DFNs New CreateEntry JS Properties id // itemID of item to craft name // name of item entry from create DFNs addItem // section header of item to craft from item DFNs colour // colour of crafted item sound // sound played when crafting item minRank // minimum rank value used by rank system to provide variable stats to crafted items maxRank // maximum rank value used by rank system to provide variable stats to crafted items delay // delay in milliseconds for crafting to finish spell // spell ID primarily used when inscribing magic scrolls resources // list of resources needed to craft item. resources[n][0] // amount of resource needed resources[n][1] // resource colour required resources[n][2] // list of IDs accepted as resource material skills // list of skills requirements to craft item skills[n][0] // skillNumber of skill required to craft item skills[n][1] // minimum skill at which player will always fail to craft item skills[n][2] // maximum skill at which player will always succeed to craft item avgMinSkill // average minimum skill required to smelt item avgMaxSkill // average maximum skill required to smelt item Fixed a bug with tracking menu that could cause UOX3 to crash when cancelling/closing the menu
2021-06-30 00:00:48 +08:00
{
case CMAKE_ID:
*vp = INT_TO_JSVAL( gPriv->targId );
Exposed crafting entries from create DFNs to JS engine Exposed crafting entries to JS engine, along with associated properties from the crafting DFNs: New JS Object types CreateEntries // Global JS object containing all item entries loaded from create DFNs CreateEntry // A specific create entry retrieved from global object. Example: var createEntry = CreateEntries[7] // Fetches item entry #7 from create DFNs New CreateEntry JS Properties id // itemID of item to craft name // name of item entry from create DFNs addItem // section header of item to craft from item DFNs colour // colour of crafted item sound // sound played when crafting item minRank // minimum rank value used by rank system to provide variable stats to crafted items maxRank // maximum rank value used by rank system to provide variable stats to crafted items delay // delay in milliseconds for crafting to finish spell // spell ID primarily used when inscribing magic scrolls resources // list of resources needed to craft item. resources[n][0] // amount of resource needed resources[n][1] // resource colour required resources[n][2] // list of IDs accepted as resource material skills // list of skills requirements to craft item skills[n][0] // skillNumber of skill required to craft item skills[n][1] // minimum skill at which player will always fail to craft item skills[n][2] // maximum skill at which player will always succeed to craft item avgMinSkill // average minimum skill required to smelt item avgMaxSkill // average maximum skill required to smelt item Fixed a bug with tracking menu that could cause UOX3 to crash when cancelling/closing the menu
2021-06-30 00:00:48 +08:00
break;
case CMAKE_NAME:
{
std::string createName = gPriv->name;
tString = JS_NewStringCopyZ( cx, createName.c_str() );
*vp = STRING_TO_JSVAL( tString );
break;
}
case CMAKE_ADDITEM:
{
std::string addItem = gPriv->addItem;
tString = JS_NewStringCopyZ( cx, addItem.c_str() );
*vp = STRING_TO_JSVAL( tString );
break;
}
case CMAKE_COLOUR: *vp = INT_TO_JSVAL( gPriv->colour ); break;
case CMAKE_SOUND: *vp = INT_TO_JSVAL( gPriv->soundPlayed ); break;
case CMAKE_MINRANK: *vp = INT_TO_JSVAL( gPriv->minRank ); break;
case CMAKE_MAXRANK: *vp = INT_TO_JSVAL( gPriv->maxRank ); break;
case CMAKE_DELAY: *vp = INT_TO_JSVAL( gPriv->delay ); break;
case CMAKE_SPELL: *vp = INT_TO_JSVAL( gPriv->spell ); break;
case CMAKE_RESOURCES:
{
ResAmountPair_st resEntry;
std::vector<ResAmountPair_st> resourcesNeeded = gPriv->resourceNeeded;
Exposed crafting entries from create DFNs to JS engine Exposed crafting entries to JS engine, along with associated properties from the crafting DFNs: New JS Object types CreateEntries // Global JS object containing all item entries loaded from create DFNs CreateEntry // A specific create entry retrieved from global object. Example: var createEntry = CreateEntries[7] // Fetches item entry #7 from create DFNs New CreateEntry JS Properties id // itemID of item to craft name // name of item entry from create DFNs addItem // section header of item to craft from item DFNs colour // colour of crafted item sound // sound played when crafting item minRank // minimum rank value used by rank system to provide variable stats to crafted items maxRank // maximum rank value used by rank system to provide variable stats to crafted items delay // delay in milliseconds for crafting to finish spell // spell ID primarily used when inscribing magic scrolls resources // list of resources needed to craft item. resources[n][0] // amount of resource needed resources[n][1] // resource colour required resources[n][2] // list of IDs accepted as resource material skills // list of skills requirements to craft item skills[n][0] // skillNumber of skill required to craft item skills[n][1] // minimum skill at which player will always fail to craft item skills[n][2] // maximum skill at which player will always succeed to craft item avgMinSkill // average minimum skill required to smelt item avgMaxSkill // average maximum skill required to smelt item Fixed a bug with tracking menu that could cause UOX3 to crash when cancelling/closing the menu
2021-06-30 00:00:48 +08:00
// Loop through each resource required, and add them to a JSObject
jsval amountNeeded = 0;
jsval targColour = 0;
JSObject *resources = JS_NewArrayObject( cx, 0, nullptr );
for( auto i = 0; i < static_cast<int>( resourcesNeeded.size() ); i++ )
Exposed crafting entries from create DFNs to JS engine Exposed crafting entries to JS engine, along with associated properties from the crafting DFNs: New JS Object types CreateEntries // Global JS object containing all item entries loaded from create DFNs CreateEntry // A specific create entry retrieved from global object. Example: var createEntry = CreateEntries[7] // Fetches item entry #7 from create DFNs New CreateEntry JS Properties id // itemID of item to craft name // name of item entry from create DFNs addItem // section header of item to craft from item DFNs colour // colour of crafted item sound // sound played when crafting item minRank // minimum rank value used by rank system to provide variable stats to crafted items maxRank // maximum rank value used by rank system to provide variable stats to crafted items delay // delay in milliseconds for crafting to finish spell // spell ID primarily used when inscribing magic scrolls resources // list of resources needed to craft item. resources[n][0] // amount of resource needed resources[n][1] // resource colour required resources[n][2] // list of IDs accepted as resource material skills // list of skills requirements to craft item skills[n][0] // skillNumber of skill required to craft item skills[n][1] // minimum skill at which player will always fail to craft item skills[n][2] // maximum skill at which player will always succeed to craft item avgMinSkill // average minimum skill required to smelt item avgMaxSkill // average maximum skill required to smelt item Fixed a bug with tracking menu that could cause UOX3 to crash when cancelling/closing the menu
2021-06-30 00:00:48 +08:00
{
resEntry = resourcesNeeded[i];
amountNeeded = INT_TO_JSVAL( resEntry.amountNeeded );
targColour = INT_TO_JSVAL( resEntry.colour );
// Add each required resource as its own object
JSObject *resource = JS_NewArrayObject( cx, 0, nullptr );
JS_SetElement( cx, resource, 0, &amountNeeded );
JS_SetElement( cx, resource, 1, &targColour );
// Make a child object with all the supported resource IDs
JSObject *idList = JS_NewArrayObject( cx, 0, nullptr );
for( auto j = 0; j < static_cast<int>( resEntry.idList.size() ); j++ )
Exposed crafting entries from create DFNs to JS engine Exposed crafting entries to JS engine, along with associated properties from the crafting DFNs: New JS Object types CreateEntries // Global JS object containing all item entries loaded from create DFNs CreateEntry // A specific create entry retrieved from global object. Example: var createEntry = CreateEntries[7] // Fetches item entry #7 from create DFNs New CreateEntry JS Properties id // itemID of item to craft name // name of item entry from create DFNs addItem // section header of item to craft from item DFNs colour // colour of crafted item sound // sound played when crafting item minRank // minimum rank value used by rank system to provide variable stats to crafted items maxRank // maximum rank value used by rank system to provide variable stats to crafted items delay // delay in milliseconds for crafting to finish spell // spell ID primarily used when inscribing magic scrolls resources // list of resources needed to craft item. resources[n][0] // amount of resource needed resources[n][1] // resource colour required resources[n][2] // list of IDs accepted as resource material skills // list of skills requirements to craft item skills[n][0] // skillNumber of skill required to craft item skills[n][1] // minimum skill at which player will always fail to craft item skills[n][2] // maximum skill at which player will always succeed to craft item avgMinSkill // average minimum skill required to smelt item avgMaxSkill // average maximum skill required to smelt item Fixed a bug with tracking menu that could cause UOX3 to crash when cancelling/closing the menu
2021-06-30 00:00:48 +08:00
{
jsval targId = INT_TO_JSVAL( resEntry.idList[j] );
JS_SetElement( cx, idList, j, &targId );
Exposed crafting entries from create DFNs to JS engine Exposed crafting entries to JS engine, along with associated properties from the crafting DFNs: New JS Object types CreateEntries // Global JS object containing all item entries loaded from create DFNs CreateEntry // A specific create entry retrieved from global object. Example: var createEntry = CreateEntries[7] // Fetches item entry #7 from create DFNs New CreateEntry JS Properties id // itemID of item to craft name // name of item entry from create DFNs addItem // section header of item to craft from item DFNs colour // colour of crafted item sound // sound played when crafting item minRank // minimum rank value used by rank system to provide variable stats to crafted items maxRank // maximum rank value used by rank system to provide variable stats to crafted items delay // delay in milliseconds for crafting to finish spell // spell ID primarily used when inscribing magic scrolls resources // list of resources needed to craft item. resources[n][0] // amount of resource needed resources[n][1] // resource colour required resources[n][2] // list of IDs accepted as resource material skills // list of skills requirements to craft item skills[n][0] // skillNumber of skill required to craft item skills[n][1] // minimum skill at which player will always fail to craft item skills[n][2] // maximum skill at which player will always succeed to craft item avgMinSkill // average minimum skill required to smelt item avgMaxSkill // average maximum skill required to smelt item Fixed a bug with tracking menu that could cause UOX3 to crash when cancelling/closing the menu
2021-06-30 00:00:48 +08:00
}
jsval idListVal = OBJECT_TO_JSVAL( idList );
JS_SetElement( cx, resource, 2, &idListVal );
// Now stuff the resource object into the parent object
jsval resourceVal = OBJECT_TO_JSVAL( resource );
JS_SetElement( cx, resources, i, &resourceVal );
Exposed crafting entries from create DFNs to JS engine Exposed crafting entries to JS engine, along with associated properties from the crafting DFNs: New JS Object types CreateEntries // Global JS object containing all item entries loaded from create DFNs CreateEntry // A specific create entry retrieved from global object. Example: var createEntry = CreateEntries[7] // Fetches item entry #7 from create DFNs New CreateEntry JS Properties id // itemID of item to craft name // name of item entry from create DFNs addItem // section header of item to craft from item DFNs colour // colour of crafted item sound // sound played when crafting item minRank // minimum rank value used by rank system to provide variable stats to crafted items maxRank // maximum rank value used by rank system to provide variable stats to crafted items delay // delay in milliseconds for crafting to finish spell // spell ID primarily used when inscribing magic scrolls resources // list of resources needed to craft item. resources[n][0] // amount of resource needed resources[n][1] // resource colour required resources[n][2] // list of IDs accepted as resource material skills // list of skills requirements to craft item skills[n][0] // skillNumber of skill required to craft item skills[n][1] // minimum skill at which player will always fail to craft item skills[n][2] // maximum skill at which player will always succeed to craft item avgMinSkill // average minimum skill required to smelt item avgMaxSkill // average maximum skill required to smelt item Fixed a bug with tracking menu that could cause UOX3 to crash when cancelling/closing the menu
2021-06-30 00:00:48 +08:00
}
*vp = OBJECT_TO_JSVAL( resources );
break;
}
case CMAKE_SKILLS:
{
ResSkillReq_st resEntry;
std::vector<ResSkillReq_st> skillReqs = gPriv->skillReqs;
Exposed crafting entries from create DFNs to JS engine Exposed crafting entries to JS engine, along with associated properties from the crafting DFNs: New JS Object types CreateEntries // Global JS object containing all item entries loaded from create DFNs CreateEntry // A specific create entry retrieved from global object. Example: var createEntry = CreateEntries[7] // Fetches item entry #7 from create DFNs New CreateEntry JS Properties id // itemID of item to craft name // name of item entry from create DFNs addItem // section header of item to craft from item DFNs colour // colour of crafted item sound // sound played when crafting item minRank // minimum rank value used by rank system to provide variable stats to crafted items maxRank // maximum rank value used by rank system to provide variable stats to crafted items delay // delay in milliseconds for crafting to finish spell // spell ID primarily used when inscribing magic scrolls resources // list of resources needed to craft item. resources[n][0] // amount of resource needed resources[n][1] // resource colour required resources[n][2] // list of IDs accepted as resource material skills // list of skills requirements to craft item skills[n][0] // skillNumber of skill required to craft item skills[n][1] // minimum skill at which player will always fail to craft item skills[n][2] // maximum skill at which player will always succeed to craft item avgMinSkill // average minimum skill required to smelt item avgMaxSkill // average maximum skill required to smelt item Fixed a bug with tracking menu that could cause UOX3 to crash when cancelling/closing the menu
2021-06-30 00:00:48 +08:00
// Loop through each skill required, and add the details to a JSObject
jsval skillNumber = 0;
jsval minSkill = 0;
jsval maxSkill = 0;
JSObject *skills = JS_NewArrayObject( cx, 0, nullptr );
for( auto i = 0; i < static_cast<int>( skillReqs.size() ); i++ )
Exposed crafting entries from create DFNs to JS engine Exposed crafting entries to JS engine, along with associated properties from the crafting DFNs: New JS Object types CreateEntries // Global JS object containing all item entries loaded from create DFNs CreateEntry // A specific create entry retrieved from global object. Example: var createEntry = CreateEntries[7] // Fetches item entry #7 from create DFNs New CreateEntry JS Properties id // itemID of item to craft name // name of item entry from create DFNs addItem // section header of item to craft from item DFNs colour // colour of crafted item sound // sound played when crafting item minRank // minimum rank value used by rank system to provide variable stats to crafted items maxRank // maximum rank value used by rank system to provide variable stats to crafted items delay // delay in milliseconds for crafting to finish spell // spell ID primarily used when inscribing magic scrolls resources // list of resources needed to craft item. resources[n][0] // amount of resource needed resources[n][1] // resource colour required resources[n][2] // list of IDs accepted as resource material skills // list of skills requirements to craft item skills[n][0] // skillNumber of skill required to craft item skills[n][1] // minimum skill at which player will always fail to craft item skills[n][2] // maximum skill at which player will always succeed to craft item avgMinSkill // average minimum skill required to smelt item avgMaxSkill // average maximum skill required to smelt item Fixed a bug with tracking menu that could cause UOX3 to crash when cancelling/closing the menu
2021-06-30 00:00:48 +08:00
{
resEntry = skillReqs[i];
skillNumber = INT_TO_JSVAL( resEntry.skillNumber );
minSkill = INT_TO_JSVAL( resEntry.minSkill );
maxSkill = INT_TO_JSVAL( resEntry.maxSkill );
// Add each required skill as its own object
JSObject *skill = JS_NewArrayObject( cx, 0, nullptr );
JS_SetElement( cx, skill, 0, &skillNumber );
JS_SetElement( cx, skill, 1, &minSkill );
JS_SetElement( cx, skill, 2, &maxSkill );
// Now stuff the skill object into the parent object
jsval skillVal = OBJECT_TO_JSVAL( skill );
JS_SetElement( cx, skills, i, &skillVal );
Exposed crafting entries from create DFNs to JS engine Exposed crafting entries to JS engine, along with associated properties from the crafting DFNs: New JS Object types CreateEntries // Global JS object containing all item entries loaded from create DFNs CreateEntry // A specific create entry retrieved from global object. Example: var createEntry = CreateEntries[7] // Fetches item entry #7 from create DFNs New CreateEntry JS Properties id // itemID of item to craft name // name of item entry from create DFNs addItem // section header of item to craft from item DFNs colour // colour of crafted item sound // sound played when crafting item minRank // minimum rank value used by rank system to provide variable stats to crafted items maxRank // maximum rank value used by rank system to provide variable stats to crafted items delay // delay in milliseconds for crafting to finish spell // spell ID primarily used when inscribing magic scrolls resources // list of resources needed to craft item. resources[n][0] // amount of resource needed resources[n][1] // resource colour required resources[n][2] // list of IDs accepted as resource material skills // list of skills requirements to craft item skills[n][0] // skillNumber of skill required to craft item skills[n][1] // minimum skill at which player will always fail to craft item skills[n][2] // maximum skill at which player will always succeed to craft item avgMinSkill // average minimum skill required to smelt item avgMaxSkill // average maximum skill required to smelt item Fixed a bug with tracking menu that could cause UOX3 to crash when cancelling/closing the menu
2021-06-30 00:00:48 +08:00
}
*vp = OBJECT_TO_JSVAL( skills );
break;
}
case CMAKE_AVGMINSKILL: *vp = INT_TO_JSVAL( gPriv->AverageMinSkill() ); break;
case CMAKE_AVGMAXSKILL: *vp = INT_TO_JSVAL( gPriv->AverageMaxSkill() ); break;
}
}
return JS_TRUE;
}
2025-03-28 13:23:59 +10:00
JSBool CItemProps_getProperty( JSContext *cx, JSObject *obj, jsid id, jsval *vp )
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
{
CItem *gPriv = static_cast<CItem *>( JS_GetPrivate( cx, obj ));
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
SERIAL TempSerial = INVALIDSERIAL;
if( !ValidateObject( gPriv ))
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
return JS_FALSE;
UI16 propID = getScriptID( cx, id, JSP_ITEM );
if( propID != 0xFFFF )
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
{
2021-06-12 07:30:23 -04:00
JSString *tString = nullptr;
switch( propID )
2002-04-07 20:53:41 +00:00
{
case CIP_SECTIONID:
tString = JS_NewStringCopyZ( cx, gPriv->GetSectionId().c_str() );
*vp = STRING_TO_JSVAL( tString );
break;
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
case CIP_NAME:
tString = JS_NewStringCopyZ( cx, gPriv->GetName().c_str() );
*vp = STRING_TO_JSVAL( tString );
break;
case CIP_TITLE:
tString = JS_NewStringCopyZ( cx, gPriv->GetTitle().c_str() );
*vp = STRING_TO_JSVAL( tString );
break;
case CIP_X: *vp = INT_TO_JSVAL( gPriv->GetX() ); break;
case CIP_Y: *vp = INT_TO_JSVAL( gPriv->GetY() ); break;
case CIP_Z: *vp = INT_TO_JSVAL( gPriv->GetZ() ); break;
0.99.4e Added support for packet 0xE2 (New Character Animation, used to play animations in client v7.0.0.0+) via cEffects::PlayNewCharacterAnimation( CChar *mChar, UI16 actionID, UI16 subActionID, UI08 subSubActionID ) Added support for new animation packet in JS Character method DoAction() using a second parameter that specifies animation variation, which if present forces server to send new animation packet instead of old. This means the 'action/npcaction commands can now be used to play animations on gargoyles/humans in client v7.0.0.0+ using the following syntax: 'action [action subAction] Created new enums for character actions and sub-actions, and updated code to refer to these instead of using "magic" numbers Added new options in UOX.INI under [settings] section: FORCENEWANIMATIONPACKET=0/1 // If enabled (default), forces the use of the new animation packet for playing various character animations for both NPCs in general and for player characters connected with client v7.0.0.0+ Updated various actions performed by players and NPCs to use new animation packet (combat, spellcasting, mining) if connected with client v7.0.0.0+ and ini setting to force new animation packet is enabled Added basic support for gargoyle flying ability. Can now use flying ability itself to enter/exit flying state, and the state change will also get sent to nearby players. Flying players are treated the same way as mounted players; polymorph spells will auto-dismounts mounted/flying player, same rules for stealth applies to flying as riding, etc. Exposed Character property to JS engine: .isFlying // returns true if character is flying Moved Orc and Ratman races from RACE 1 and 2 to RACE 22 and 23 in dfndata/race/races.dfn to make room for two new player races, that are applied to new player characters during character creation: [RACE 1] - Elf [RACE 2] - Gargoyle Updated orcs and ratmen in dfndata/npc/humanoids.dfn with race IDs 22 and 23 respectively Added items in dfndata/items/skills/tools/cooking.dfn to item menu under Skills > Tools > Cooking Fixed an issue where moving items around within a container at max item capacity was not allowed The GM command 'set can now modify a character's current mana using 'set mana # Added JS command to get specific object property values (using same property names as 'set command): 'get [objectProperty] Exposed Item/Character properties to JS: .oldX // Previous X coordinate for object .oldY // Previous Y coordinate for object .oldZ // Previous Z coordinate for object Exposed Character properties to JS: .mana // Character's current amount of mana Updated version of Winsock requested by UOX3 from 2.0 to 2.2 Exposed timer for updating NPC flags to [timers] section of UOX.INI: NPCFLAGUPDATETIMER=5 // Interval in seconds between each time NPC flags are updated. Default adjusted down from 30 to 5 seconds Fixed an issue where UOX3 was trying to output some debug/warning messages to console using the wrong console method Made some small tweaks to NPC pathfinding to make NPCs more likely to pick a new target location when their old one is blocked Added HP DFN tag to guard NPCs to prevent them from spawning with half health Removed -lstdc++fs from Makefile and replaced with special instructions for users of gcc below v9.x Fixed a buffer overrun issue with tiledata item names Eliminated a bunch of compilation warnings in VS2017 Updated JS Method CreateDFNItem to allow creating items without referencing a socket/character. Syntax: var myItem = CreateDFNItem( null, null, itemSectionID, amount, "ITEM", false, worldNumber, instanceID ); Added functional chessboard that operates on standard chess rules. Pieces cannot be removed from the board, snap to the chessboard grid when dropped, are subject to movement restrictions per chesspiece, will capture opponent pieces if landing on their square. Board can be reset by dragging king-piece off to the side of the board (js/item/gameboards.js and js/item/chesspiece.js) Added functional checkerboard, with pieces that cannot be removed, can only move in diagonals, can jump across opponent pieces to capture them. Board can be reset by ??? (js/item/gameboards.js and js/item/checkerpiece.js) Using the 'go command without any additional parameters will now open the GM travel menu (js/commands/go.js)
2021-04-08 18:54:15 +08:00
case CIP_OLDX:
{
auto oldLocation = gPriv->GetOldLocation();
*vp = INT_TO_JSVAL( oldLocation.x );
break;
}
case CIP_OLDY:
{
auto oldLocation = gPriv->GetOldLocation();
*vp = INT_TO_JSVAL( oldLocation.y );
break;
}
case CIP_OLDZ:
{
auto oldLocation = gPriv->GetOldLocation();
*vp = INT_TO_JSVAL( oldLocation.z );
break;
}
case CIP_ID: *vp = INT_TO_JSVAL( gPriv->GetId() ); break;
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
case CIP_COLOUR: *vp = INT_TO_JSVAL( gPriv->GetColour() ); break;
case CIP_OWNER:
CChar *pOwner;
pOwner = gPriv->GetOwnerObj();
if( !ValidateObject( pOwner ))
{
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
*vp = JSVAL_NULL;
}
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
else
{
// Otherwise Acquire an object
JSObject *myObj = JSEngine->AcquireObject( IUE_CHAR, pOwner, JSEngine->FindActiveRuntime( JS_GetRuntime( cx )));
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
*vp = OBJECT_TO_JSVAL( myObj );
}
break;
case CIP_VISIBLE: *vp = INT_TO_JSVAL( static_cast<UI08>( gPriv->GetVisible() )); break;
Exposed various map and statics related functions to JS engine Updated JS item properties MORE, MOREX, MOREY, MOREZ and SERIAL, and character property SERIAL, to pass values to JS scripts using JS_NewNumberValue() instead of INT_TO_JSVAL if the property value cannot fit inside JSVAL (checked with INT_FITS_IN_JSVAL) Added support in CResponse.cpp for client trigger word for securing containers in houses - TW_HOUSESECURE Updated CMulHandler::CheckStaticFlag() to match with statics that cover/extend across the specified Z coordinate, not just ones that have the same base Z level Updated CMulHandler::DoesMapBlock() to not deem map tiles as blocking if they are more than 16 Z (height of a character) higher than the specified Z coordinate to check Exposed method for finding corners of a multi to JS engine: .GetMultiCorner( cornerID ) - Gets coordinates for specified corner of multi (0 = NW, 1 = NE, 2 = SW, 3 = SE) Exposed various functions related to map, statics and multis to JS engine: CalcMultiFromSer( serial ) - Find a multi from a provided serial GetMapElevation( x, y, z, world) - Returns the map elevation at specified coordinates IsInBuilding( x, y, z, world, instance, checkHeight ) - Returns true if the specified location is inside a static building (underneath static items), or if player is inside a multi. If the checkHeight argument is true, player is only deemed inside a multi if there are multi-items above the player's head. If player is in a courtyard/on a rooftop, they will be deemed to be NOT in the building. checkHeight is not used for the static part of the function. CheckStaticFlag( x, y, z, world, tileFlagID ) - Checks to see if any statics at given coordinates has specified tile flag DoesStaticBlock( x, y, z, world, checkWater ) - Checks if statics at/above given location blocks characters DoesDynamicBlock( x, y, z, world, instance, checkWater, waterWalk ) - Checks if dynamics at/above given location blocks characters DoesMapBlock( x, y, z, world, checkWater, waterWalk ) - Checks if map tile at/above given location blocks characters
2020-10-05 23:12:34 +08:00
case CIP_SERIAL:
{
2025-03-27 12:25:12 -05:00
int64_t serialVal = gPriv->GetSerial();
if( serialVal < INT_MIN || serialVal > INT_MAX )
Exposed various map and statics related functions to JS engine Updated JS item properties MORE, MOREX, MOREY, MOREZ and SERIAL, and character property SERIAL, to pass values to JS scripts using JS_NewNumberValue() instead of INT_TO_JSVAL if the property value cannot fit inside JSVAL (checked with INT_FITS_IN_JSVAL) Added support in CResponse.cpp for client trigger word for securing containers in houses - TW_HOUSESECURE Updated CMulHandler::CheckStaticFlag() to match with statics that cover/extend across the specified Z coordinate, not just ones that have the same base Z level Updated CMulHandler::DoesMapBlock() to not deem map tiles as blocking if they are more than 16 Z (height of a character) higher than the specified Z coordinate to check Exposed method for finding corners of a multi to JS engine: .GetMultiCorner( cornerID ) - Gets coordinates for specified corner of multi (0 = NW, 1 = NE, 2 = SW, 3 = SE) Exposed various functions related to map, statics and multis to JS engine: CalcMultiFromSer( serial ) - Find a multi from a provided serial GetMapElevation( x, y, z, world) - Returns the map elevation at specified coordinates IsInBuilding( x, y, z, world, instance, checkHeight ) - Returns true if the specified location is inside a static building (underneath static items), or if player is inside a multi. If the checkHeight argument is true, player is only deemed inside a multi if there are multi-items above the player's head. If player is in a courtyard/on a rooftop, they will be deemed to be NOT in the building. checkHeight is not used for the static part of the function. CheckStaticFlag( x, y, z, world, tileFlagID ) - Checks to see if any statics at given coordinates has specified tile flag DoesStaticBlock( x, y, z, world, checkWater ) - Checks if statics at/above given location blocks characters DoesDynamicBlock( x, y, z, world, instance, checkWater, waterWalk ) - Checks if dynamics at/above given location blocks characters DoesMapBlock( x, y, z, world, checkWater, waterWalk ) - Checks if map tile at/above given location blocks characters
2020-10-05 23:12:34 +08:00
{
JS_NewNumberValue( cx, gPriv->GetSerial(), vp );
}
else
{
*vp = INT_TO_JSVAL( gPriv->GetSerial() );
}
break;
}
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
case CIP_HEALTH: *vp = INT_TO_JSVAL( gPriv->GetHP() ); break;
Minor JS revamp - multiple scripts per object! Added TryParseJSVal() helper function in cScript.cpp, used to parse jsval values returned from script events. Provides results matching 0 (0, false), 1 (1, true) or any specific int value returned from script. JS events updated to use new TryParseJSVal helper function (no change in behaviour): onDecay, onResurrect, onCommand, onBuyFromVendor, onSellToVendor, onPickup, onCharDoubleClick, onSkillGump, onUseBandageMacro, onCombatStart, onCombatEnd, onDeathBlow, onBuy, onSell JS events with slight change of behaviour after update to use TryParseJSVal: onDrop, onDropItemOnItem, onDropItemOnNpc - previously, a blank or non-existent return value would be treated the same as a return true. This will now be treated as a return false. Update scripts accordingly! JS events updated to support return values from scripts: onCollide, onTalk, onSnooped, OnHungerChange Return false or nothing to prevent hard code from running Return true to allow hard code to run like normal onStolenFrom, onAISliver, onLightChange, onVirtueGumpPress, onQuestGump, onSpecialMove, onSwing, onClick, onHouseCommand, onSellToVendor, onSkillCheck, onSpellGain, onSpellLoss Return false to allow hard code and other scripts with event to run like normal Return true to prevent hard code and other scripts with event from running onSteal Return false or nothing to allow hard code and other scripts with event to run like normal Return true to prevent hard code and onStolenFrom event from running (theft failed?) Return 2 to prevent hard code, but allow onStolenFrom event to run (theft succeeded, but handled in script?) onLeaving, onEntrance, onEquip, onUnequip, onEnterEvadeState, onSoldToVendor, onBoughtFromVendor, onSpellSuccess, onSpellTarget, onFlagChange, onDeath Return false or nothing to allow other scripts with event to run like normal Return true to prevent other scripts with event from running Added new JS events that run prior to items being equipped/unequipped, with support for return values: onEquipAttempt( pEquipper, iEquipping ) onUnequipAttempt( pEquipper, iUnequipping ) Return false or nothing to reject attempt to equip/unequip item, and prevent hard-code or other scripts with event from running Return true to allow hard code to run like normal Added new JS event that runs prior to onSnooped event, for character doing the snooping: onSnoopAttempt( snooped, snooper ) Return false or nothing to prevent hard code and other snooping-related events from running Return true to allow hard code and other snooping-related events to run like normal Updated onSnooped JS event to accept return values: Return true when success state is true to prevent other scripts with event from running Return true when success state is false to prevent hard code and other scripts with event from running Updated onClick JS event to also run for characters with event attached (return 1 to prevent showing hard-coded name for whatever object is clicked) Updated onSteal JS event to include a third parameter, an object reference for the target of the theft Added support for assigning multiple JS scripts per object (item, multi, char, region). Any time a scriptID is added to an object, the list of such IDs for that object will be sorted from lowest to highest scriptID, which also determines the execution order for the scripts. Note that if the same JS event is present in several scripts assigned to an object, each of those events will trigger, unless the rules about return values for said event prevent this DFNs for Items, Multis, Characters and Regions can now contain multiple SCRIPT=scriptID tags per definition. Each such SCRIPT tag will be applied to the object in question, then sorted from lowest to highest scriptID by server. Added new JS property for Items, Multis, Characters and Regions: .scriptTriggers // If used to get property, will return array object with all script IDs assigned to object. If used to set property, will add script ID to existing list of script IDs for object. Modified JS property for Items, Multis, Characters and Regions, which for backwards compatibility functions similar to in older versions: .scripttrigger // If used to get property, will return last script ID in list of script IDs assigned to object. If used to set property, will clear list of script IDs and assign only the new ID Added new JS Methods for Items, Multis, Characters and Regions: .AddScriptTrigger( scriptID ) // Adds a new scriptID to list of scripts assigned to object .RemoveScriptTrigger( scriptID ) // Remove a specific scriptID from object (0 = remove all) Moved SETSCPTRIG command from code to JS (js/commands/targeting/scptrig.js), and supplemented it with some additional commands: GETSCPTRIG // List out all scriptIDs assigned to object SETSCPTRIG scriptID // Clears list of scriptIDs for object, then assigns the specified scriptID ADDSCPTRIG scriptID // Adds specified scriptID to list of scriptsIDs assigned to object REMOVESCPTRIG scriptID // Removes specified scriptID from list of scriptIDs assigned to object (0 = remove all)
2021-05-25 19:37:52 +08:00
case CIP_SCRIPTTRIGGER:
{
// For backwards compatibility, get last scripttrigger from vector
// For older worldfiles, this will be the only scripttrigger added to the vector after load
std::vector<UI16> scriptTriggers = gPriv->GetScriptTriggers();
UI16 lastScriptTrigger = 0;
auto numberOfTriggers = scriptTriggers.size();
if( numberOfTriggers > 0 )
{
lastScriptTrigger = scriptTriggers[numberOfTriggers-1];
}
Minor JS revamp - multiple scripts per object! Added TryParseJSVal() helper function in cScript.cpp, used to parse jsval values returned from script events. Provides results matching 0 (0, false), 1 (1, true) or any specific int value returned from script. JS events updated to use new TryParseJSVal helper function (no change in behaviour): onDecay, onResurrect, onCommand, onBuyFromVendor, onSellToVendor, onPickup, onCharDoubleClick, onSkillGump, onUseBandageMacro, onCombatStart, onCombatEnd, onDeathBlow, onBuy, onSell JS events with slight change of behaviour after update to use TryParseJSVal: onDrop, onDropItemOnItem, onDropItemOnNpc - previously, a blank or non-existent return value would be treated the same as a return true. This will now be treated as a return false. Update scripts accordingly! JS events updated to support return values from scripts: onCollide, onTalk, onSnooped, OnHungerChange Return false or nothing to prevent hard code from running Return true to allow hard code to run like normal onStolenFrom, onAISliver, onLightChange, onVirtueGumpPress, onQuestGump, onSpecialMove, onSwing, onClick, onHouseCommand, onSellToVendor, onSkillCheck, onSpellGain, onSpellLoss Return false to allow hard code and other scripts with event to run like normal Return true to prevent hard code and other scripts with event from running onSteal Return false or nothing to allow hard code and other scripts with event to run like normal Return true to prevent hard code and onStolenFrom event from running (theft failed?) Return 2 to prevent hard code, but allow onStolenFrom event to run (theft succeeded, but handled in script?) onLeaving, onEntrance, onEquip, onUnequip, onEnterEvadeState, onSoldToVendor, onBoughtFromVendor, onSpellSuccess, onSpellTarget, onFlagChange, onDeath Return false or nothing to allow other scripts with event to run like normal Return true to prevent other scripts with event from running Added new JS events that run prior to items being equipped/unequipped, with support for return values: onEquipAttempt( pEquipper, iEquipping ) onUnequipAttempt( pEquipper, iUnequipping ) Return false or nothing to reject attempt to equip/unequip item, and prevent hard-code or other scripts with event from running Return true to allow hard code to run like normal Added new JS event that runs prior to onSnooped event, for character doing the snooping: onSnoopAttempt( snooped, snooper ) Return false or nothing to prevent hard code and other snooping-related events from running Return true to allow hard code and other snooping-related events to run like normal Updated onSnooped JS event to accept return values: Return true when success state is true to prevent other scripts with event from running Return true when success state is false to prevent hard code and other scripts with event from running Updated onClick JS event to also run for characters with event attached (return 1 to prevent showing hard-coded name for whatever object is clicked) Updated onSteal JS event to include a third parameter, an object reference for the target of the theft Added support for assigning multiple JS scripts per object (item, multi, char, region). Any time a scriptID is added to an object, the list of such IDs for that object will be sorted from lowest to highest scriptID, which also determines the execution order for the scripts. Note that if the same JS event is present in several scripts assigned to an object, each of those events will trigger, unless the rules about return values for said event prevent this DFNs for Items, Multis, Characters and Regions can now contain multiple SCRIPT=scriptID tags per definition. Each such SCRIPT tag will be applied to the object in question, then sorted from lowest to highest scriptID by server. Added new JS property for Items, Multis, Characters and Regions: .scriptTriggers // If used to get property, will return array object with all script IDs assigned to object. If used to set property, will add script ID to existing list of script IDs for object. Modified JS property for Items, Multis, Characters and Regions, which for backwards compatibility functions similar to in older versions: .scripttrigger // If used to get property, will return last script ID in list of script IDs assigned to object. If used to set property, will clear list of script IDs and assign only the new ID Added new JS Methods for Items, Multis, Characters and Regions: .AddScriptTrigger( scriptID ) // Adds a new scriptID to list of scripts assigned to object .RemoveScriptTrigger( scriptID ) // Remove a specific scriptID from object (0 = remove all) Moved SETSCPTRIG command from code to JS (js/commands/targeting/scptrig.js), and supplemented it with some additional commands: GETSCPTRIG // List out all scriptIDs assigned to object SETSCPTRIG scriptID // Clears list of scriptIDs for object, then assigns the specified scriptID ADDSCPTRIG scriptID // Adds specified scriptID to list of scriptsIDs assigned to object REMOVESCPTRIG scriptID // Removes specified scriptID from list of scriptIDs assigned to object (0 = remove all)
2021-05-25 19:37:52 +08:00
*vp = INT_TO_JSVAL( lastScriptTrigger );
break;
Minor JS revamp - multiple scripts per object! Added TryParseJSVal() helper function in cScript.cpp, used to parse jsval values returned from script events. Provides results matching 0 (0, false), 1 (1, true) or any specific int value returned from script. JS events updated to use new TryParseJSVal helper function (no change in behaviour): onDecay, onResurrect, onCommand, onBuyFromVendor, onSellToVendor, onPickup, onCharDoubleClick, onSkillGump, onUseBandageMacro, onCombatStart, onCombatEnd, onDeathBlow, onBuy, onSell JS events with slight change of behaviour after update to use TryParseJSVal: onDrop, onDropItemOnItem, onDropItemOnNpc - previously, a blank or non-existent return value would be treated the same as a return true. This will now be treated as a return false. Update scripts accordingly! JS events updated to support return values from scripts: onCollide, onTalk, onSnooped, OnHungerChange Return false or nothing to prevent hard code from running Return true to allow hard code to run like normal onStolenFrom, onAISliver, onLightChange, onVirtueGumpPress, onQuestGump, onSpecialMove, onSwing, onClick, onHouseCommand, onSellToVendor, onSkillCheck, onSpellGain, onSpellLoss Return false to allow hard code and other scripts with event to run like normal Return true to prevent hard code and other scripts with event from running onSteal Return false or nothing to allow hard code and other scripts with event to run like normal Return true to prevent hard code and onStolenFrom event from running (theft failed?) Return 2 to prevent hard code, but allow onStolenFrom event to run (theft succeeded, but handled in script?) onLeaving, onEntrance, onEquip, onUnequip, onEnterEvadeState, onSoldToVendor, onBoughtFromVendor, onSpellSuccess, onSpellTarget, onFlagChange, onDeath Return false or nothing to allow other scripts with event to run like normal Return true to prevent other scripts with event from running Added new JS events that run prior to items being equipped/unequipped, with support for return values: onEquipAttempt( pEquipper, iEquipping ) onUnequipAttempt( pEquipper, iUnequipping ) Return false or nothing to reject attempt to equip/unequip item, and prevent hard-code or other scripts with event from running Return true to allow hard code to run like normal Added new JS event that runs prior to onSnooped event, for character doing the snooping: onSnoopAttempt( snooped, snooper ) Return false or nothing to prevent hard code and other snooping-related events from running Return true to allow hard code and other snooping-related events to run like normal Updated onSnooped JS event to accept return values: Return true when success state is true to prevent other scripts with event from running Return true when success state is false to prevent hard code and other scripts with event from running Updated onClick JS event to also run for characters with event attached (return 1 to prevent showing hard-coded name for whatever object is clicked) Updated onSteal JS event to include a third parameter, an object reference for the target of the theft Added support for assigning multiple JS scripts per object (item, multi, char, region). Any time a scriptID is added to an object, the list of such IDs for that object will be sorted from lowest to highest scriptID, which also determines the execution order for the scripts. Note that if the same JS event is present in several scripts assigned to an object, each of those events will trigger, unless the rules about return values for said event prevent this DFNs for Items, Multis, Characters and Regions can now contain multiple SCRIPT=scriptID tags per definition. Each such SCRIPT tag will be applied to the object in question, then sorted from lowest to highest scriptID by server. Added new JS property for Items, Multis, Characters and Regions: .scriptTriggers // If used to get property, will return array object with all script IDs assigned to object. If used to set property, will add script ID to existing list of script IDs for object. Modified JS property for Items, Multis, Characters and Regions, which for backwards compatibility functions similar to in older versions: .scripttrigger // If used to get property, will return last script ID in list of script IDs assigned to object. If used to set property, will clear list of script IDs and assign only the new ID Added new JS Methods for Items, Multis, Characters and Regions: .AddScriptTrigger( scriptID ) // Adds a new scriptID to list of scripts assigned to object .RemoveScriptTrigger( scriptID ) // Remove a specific scriptID from object (0 = remove all) Moved SETSCPTRIG command from code to JS (js/commands/targeting/scptrig.js), and supplemented it with some additional commands: GETSCPTRIG // List out all scriptIDs assigned to object SETSCPTRIG scriptID // Clears list of scriptIDs for object, then assigns the specified scriptID ADDSCPTRIG scriptID // Adds specified scriptID to list of scriptsIDs assigned to object REMOVESCPTRIG scriptID // Removes specified scriptID from list of scriptIDs assigned to object (0 = remove all)
2021-05-25 19:37:52 +08:00
}
case CIP_SCRIPTTRIGGERS:
{
jsval scriptId;
JSObject *scriptTriggersJS = JS_NewArrayObject( cx, 0, nullptr );
Minor JS revamp - multiple scripts per object! Added TryParseJSVal() helper function in cScript.cpp, used to parse jsval values returned from script events. Provides results matching 0 (0, false), 1 (1, true) or any specific int value returned from script. JS events updated to use new TryParseJSVal helper function (no change in behaviour): onDecay, onResurrect, onCommand, onBuyFromVendor, onSellToVendor, onPickup, onCharDoubleClick, onSkillGump, onUseBandageMacro, onCombatStart, onCombatEnd, onDeathBlow, onBuy, onSell JS events with slight change of behaviour after update to use TryParseJSVal: onDrop, onDropItemOnItem, onDropItemOnNpc - previously, a blank or non-existent return value would be treated the same as a return true. This will now be treated as a return false. Update scripts accordingly! JS events updated to support return values from scripts: onCollide, onTalk, onSnooped, OnHungerChange Return false or nothing to prevent hard code from running Return true to allow hard code to run like normal onStolenFrom, onAISliver, onLightChange, onVirtueGumpPress, onQuestGump, onSpecialMove, onSwing, onClick, onHouseCommand, onSellToVendor, onSkillCheck, onSpellGain, onSpellLoss Return false to allow hard code and other scripts with event to run like normal Return true to prevent hard code and other scripts with event from running onSteal Return false or nothing to allow hard code and other scripts with event to run like normal Return true to prevent hard code and onStolenFrom event from running (theft failed?) Return 2 to prevent hard code, but allow onStolenFrom event to run (theft succeeded, but handled in script?) onLeaving, onEntrance, onEquip, onUnequip, onEnterEvadeState, onSoldToVendor, onBoughtFromVendor, onSpellSuccess, onSpellTarget, onFlagChange, onDeath Return false or nothing to allow other scripts with event to run like normal Return true to prevent other scripts with event from running Added new JS events that run prior to items being equipped/unequipped, with support for return values: onEquipAttempt( pEquipper, iEquipping ) onUnequipAttempt( pEquipper, iUnequipping ) Return false or nothing to reject attempt to equip/unequip item, and prevent hard-code or other scripts with event from running Return true to allow hard code to run like normal Added new JS event that runs prior to onSnooped event, for character doing the snooping: onSnoopAttempt( snooped, snooper ) Return false or nothing to prevent hard code and other snooping-related events from running Return true to allow hard code and other snooping-related events to run like normal Updated onSnooped JS event to accept return values: Return true when success state is true to prevent other scripts with event from running Return true when success state is false to prevent hard code and other scripts with event from running Updated onClick JS event to also run for characters with event attached (return 1 to prevent showing hard-coded name for whatever object is clicked) Updated onSteal JS event to include a third parameter, an object reference for the target of the theft Added support for assigning multiple JS scripts per object (item, multi, char, region). Any time a scriptID is added to an object, the list of such IDs for that object will be sorted from lowest to highest scriptID, which also determines the execution order for the scripts. Note that if the same JS event is present in several scripts assigned to an object, each of those events will trigger, unless the rules about return values for said event prevent this DFNs for Items, Multis, Characters and Regions can now contain multiple SCRIPT=scriptID tags per definition. Each such SCRIPT tag will be applied to the object in question, then sorted from lowest to highest scriptID by server. Added new JS property for Items, Multis, Characters and Regions: .scriptTriggers // If used to get property, will return array object with all script IDs assigned to object. If used to set property, will add script ID to existing list of script IDs for object. Modified JS property for Items, Multis, Characters and Regions, which for backwards compatibility functions similar to in older versions: .scripttrigger // If used to get property, will return last script ID in list of script IDs assigned to object. If used to set property, will clear list of script IDs and assign only the new ID Added new JS Methods for Items, Multis, Characters and Regions: .AddScriptTrigger( scriptID ) // Adds a new scriptID to list of scripts assigned to object .RemoveScriptTrigger( scriptID ) // Remove a specific scriptID from object (0 = remove all) Moved SETSCPTRIG command from code to JS (js/commands/targeting/scptrig.js), and supplemented it with some additional commands: GETSCPTRIG // List out all scriptIDs assigned to object SETSCPTRIG scriptID // Clears list of scriptIDs for object, then assigns the specified scriptID ADDSCPTRIG scriptID // Adds specified scriptID to list of scriptsIDs assigned to object REMOVESCPTRIG scriptID // Removes specified scriptID from list of scriptIDs assigned to object (0 = remove all)
2021-05-25 19:37:52 +08:00
std::vector<UI16> scriptTriggers = gPriv->GetScriptTriggers();
for( auto i = 0; i < static_cast<int>( scriptTriggers.size() ); i++ )
Minor JS revamp - multiple scripts per object! Added TryParseJSVal() helper function in cScript.cpp, used to parse jsval values returned from script events. Provides results matching 0 (0, false), 1 (1, true) or any specific int value returned from script. JS events updated to use new TryParseJSVal helper function (no change in behaviour): onDecay, onResurrect, onCommand, onBuyFromVendor, onSellToVendor, onPickup, onCharDoubleClick, onSkillGump, onUseBandageMacro, onCombatStart, onCombatEnd, onDeathBlow, onBuy, onSell JS events with slight change of behaviour after update to use TryParseJSVal: onDrop, onDropItemOnItem, onDropItemOnNpc - previously, a blank or non-existent return value would be treated the same as a return true. This will now be treated as a return false. Update scripts accordingly! JS events updated to support return values from scripts: onCollide, onTalk, onSnooped, OnHungerChange Return false or nothing to prevent hard code from running Return true to allow hard code to run like normal onStolenFrom, onAISliver, onLightChange, onVirtueGumpPress, onQuestGump, onSpecialMove, onSwing, onClick, onHouseCommand, onSellToVendor, onSkillCheck, onSpellGain, onSpellLoss Return false to allow hard code and other scripts with event to run like normal Return true to prevent hard code and other scripts with event from running onSteal Return false or nothing to allow hard code and other scripts with event to run like normal Return true to prevent hard code and onStolenFrom event from running (theft failed?) Return 2 to prevent hard code, but allow onStolenFrom event to run (theft succeeded, but handled in script?) onLeaving, onEntrance, onEquip, onUnequip, onEnterEvadeState, onSoldToVendor, onBoughtFromVendor, onSpellSuccess, onSpellTarget, onFlagChange, onDeath Return false or nothing to allow other scripts with event to run like normal Return true to prevent other scripts with event from running Added new JS events that run prior to items being equipped/unequipped, with support for return values: onEquipAttempt( pEquipper, iEquipping ) onUnequipAttempt( pEquipper, iUnequipping ) Return false or nothing to reject attempt to equip/unequip item, and prevent hard-code or other scripts with event from running Return true to allow hard code to run like normal Added new JS event that runs prior to onSnooped event, for character doing the snooping: onSnoopAttempt( snooped, snooper ) Return false or nothing to prevent hard code and other snooping-related events from running Return true to allow hard code and other snooping-related events to run like normal Updated onSnooped JS event to accept return values: Return true when success state is true to prevent other scripts with event from running Return true when success state is false to prevent hard code and other scripts with event from running Updated onClick JS event to also run for characters with event attached (return 1 to prevent showing hard-coded name for whatever object is clicked) Updated onSteal JS event to include a third parameter, an object reference for the target of the theft Added support for assigning multiple JS scripts per object (item, multi, char, region). Any time a scriptID is added to an object, the list of such IDs for that object will be sorted from lowest to highest scriptID, which also determines the execution order for the scripts. Note that if the same JS event is present in several scripts assigned to an object, each of those events will trigger, unless the rules about return values for said event prevent this DFNs for Items, Multis, Characters and Regions can now contain multiple SCRIPT=scriptID tags per definition. Each such SCRIPT tag will be applied to the object in question, then sorted from lowest to highest scriptID by server. Added new JS property for Items, Multis, Characters and Regions: .scriptTriggers // If used to get property, will return array object with all script IDs assigned to object. If used to set property, will add script ID to existing list of script IDs for object. Modified JS property for Items, Multis, Characters and Regions, which for backwards compatibility functions similar to in older versions: .scripttrigger // If used to get property, will return last script ID in list of script IDs assigned to object. If used to set property, will clear list of script IDs and assign only the new ID Added new JS Methods for Items, Multis, Characters and Regions: .AddScriptTrigger( scriptID ) // Adds a new scriptID to list of scripts assigned to object .RemoveScriptTrigger( scriptID ) // Remove a specific scriptID from object (0 = remove all) Moved SETSCPTRIG command from code to JS (js/commands/targeting/scptrig.js), and supplemented it with some additional commands: GETSCPTRIG // List out all scriptIDs assigned to object SETSCPTRIG scriptID // Clears list of scriptIDs for object, then assigns the specified scriptID ADDSCPTRIG scriptID // Adds specified scriptID to list of scriptsIDs assigned to object REMOVESCPTRIG scriptID // Removes specified scriptID from list of scriptIDs assigned to object (0 = remove all)
2021-05-25 19:37:52 +08:00
{
scriptId = INT_TO_JSVAL( scriptTriggers[i] );
JS_SetElement( cx, scriptTriggersJS, i, &scriptId );
Minor JS revamp - multiple scripts per object! Added TryParseJSVal() helper function in cScript.cpp, used to parse jsval values returned from script events. Provides results matching 0 (0, false), 1 (1, true) or any specific int value returned from script. JS events updated to use new TryParseJSVal helper function (no change in behaviour): onDecay, onResurrect, onCommand, onBuyFromVendor, onSellToVendor, onPickup, onCharDoubleClick, onSkillGump, onUseBandageMacro, onCombatStart, onCombatEnd, onDeathBlow, onBuy, onSell JS events with slight change of behaviour after update to use TryParseJSVal: onDrop, onDropItemOnItem, onDropItemOnNpc - previously, a blank or non-existent return value would be treated the same as a return true. This will now be treated as a return false. Update scripts accordingly! JS events updated to support return values from scripts: onCollide, onTalk, onSnooped, OnHungerChange Return false or nothing to prevent hard code from running Return true to allow hard code to run like normal onStolenFrom, onAISliver, onLightChange, onVirtueGumpPress, onQuestGump, onSpecialMove, onSwing, onClick, onHouseCommand, onSellToVendor, onSkillCheck, onSpellGain, onSpellLoss Return false to allow hard code and other scripts with event to run like normal Return true to prevent hard code and other scripts with event from running onSteal Return false or nothing to allow hard code and other scripts with event to run like normal Return true to prevent hard code and onStolenFrom event from running (theft failed?) Return 2 to prevent hard code, but allow onStolenFrom event to run (theft succeeded, but handled in script?) onLeaving, onEntrance, onEquip, onUnequip, onEnterEvadeState, onSoldToVendor, onBoughtFromVendor, onSpellSuccess, onSpellTarget, onFlagChange, onDeath Return false or nothing to allow other scripts with event to run like normal Return true to prevent other scripts with event from running Added new JS events that run prior to items being equipped/unequipped, with support for return values: onEquipAttempt( pEquipper, iEquipping ) onUnequipAttempt( pEquipper, iUnequipping ) Return false or nothing to reject attempt to equip/unequip item, and prevent hard-code or other scripts with event from running Return true to allow hard code to run like normal Added new JS event that runs prior to onSnooped event, for character doing the snooping: onSnoopAttempt( snooped, snooper ) Return false or nothing to prevent hard code and other snooping-related events from running Return true to allow hard code and other snooping-related events to run like normal Updated onSnooped JS event to accept return values: Return true when success state is true to prevent other scripts with event from running Return true when success state is false to prevent hard code and other scripts with event from running Updated onClick JS event to also run for characters with event attached (return 1 to prevent showing hard-coded name for whatever object is clicked) Updated onSteal JS event to include a third parameter, an object reference for the target of the theft Added support for assigning multiple JS scripts per object (item, multi, char, region). Any time a scriptID is added to an object, the list of such IDs for that object will be sorted from lowest to highest scriptID, which also determines the execution order for the scripts. Note that if the same JS event is present in several scripts assigned to an object, each of those events will trigger, unless the rules about return values for said event prevent this DFNs for Items, Multis, Characters and Regions can now contain multiple SCRIPT=scriptID tags per definition. Each such SCRIPT tag will be applied to the object in question, then sorted from lowest to highest scriptID by server. Added new JS property for Items, Multis, Characters and Regions: .scriptTriggers // If used to get property, will return array object with all script IDs assigned to object. If used to set property, will add script ID to existing list of script IDs for object. Modified JS property for Items, Multis, Characters and Regions, which for backwards compatibility functions similar to in older versions: .scripttrigger // If used to get property, will return last script ID in list of script IDs assigned to object. If used to set property, will clear list of script IDs and assign only the new ID Added new JS Methods for Items, Multis, Characters and Regions: .AddScriptTrigger( scriptID ) // Adds a new scriptID to list of scripts assigned to object .RemoveScriptTrigger( scriptID ) // Remove a specific scriptID from object (0 = remove all) Moved SETSCPTRIG command from code to JS (js/commands/targeting/scptrig.js), and supplemented it with some additional commands: GETSCPTRIG // List out all scriptIDs assigned to object SETSCPTRIG scriptID // Clears list of scriptIDs for object, then assigns the specified scriptID ADDSCPTRIG scriptID // Adds specified scriptID to list of scriptsIDs assigned to object REMOVESCPTRIG scriptID // Removes specified scriptID from list of scriptIDs assigned to object (0 = remove all)
2021-05-25 19:37:52 +08:00
}
*vp = OBJECT_TO_JSVAL( scriptTriggersJS );
break;
}
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
case CIP_WORLDNUMBER: *vp = INT_TO_JSVAL( gPriv->WorldNumber() ); break;
case CIP_INSTANCEID: *vp = INT_TO_JSVAL( gPriv->GetInstanceId() ); break;
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
case CIP_AMOUNT: *vp = INT_TO_JSVAL( gPriv->GetAmount() ); break;
// We should Accquie an object here and return that, so you can do
// item.container.name
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
case CIP_CONTAINER:
TempSerial = gPriv->GetContSerial();
2002-04-07 20:53:41 +00:00
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
if( TempSerial == INVALIDSERIAL )
{
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
// Return a JS_NULL
*vp = JSVAL_NULL;
}
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
else
{
// Otherwise Acquire an object
if( TempSerial >= BASEITEMSERIAL ) // item's have serials of 0x40000000 and above, and we already know it's not INVALIDSERIAL
{
CItem *myCont = CalcItemObjFromSer( TempSerial );
if( ValidateObject( myCont ))
{
JSObject *myItem = JSEngine->AcquireObject( IUE_ITEM, myCont, JSEngine->FindActiveRuntime( JS_GetRuntime( cx )));
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
*vp = OBJECT_TO_JSVAL( myItem );
}
else
{
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
*vp = JSVAL_NULL;
}
}
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
else
{
CChar *chCont = CalcCharObjFromSer( TempSerial );
if( ValidateObject( chCont ))
{
JSObject *myChar = JSEngine->AcquireObject( IUE_CHAR, chCont, JSEngine->FindActiveRuntime( JS_GetRuntime( cx )));
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
*vp = OBJECT_TO_JSVAL( myChar );
}
else
{
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
*vp = JSVAL_NULL;
}
}
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
}
break;
case CIP_TYPE: *vp = INT_TO_JSVAL( static_cast<UI16>( gPriv->GetType() )); break;
Exposed various map and statics related functions to JS engine Updated JS item properties MORE, MOREX, MOREY, MOREZ and SERIAL, and character property SERIAL, to pass values to JS scripts using JS_NewNumberValue() instead of INT_TO_JSVAL if the property value cannot fit inside JSVAL (checked with INT_FITS_IN_JSVAL) Added support in CResponse.cpp for client trigger word for securing containers in houses - TW_HOUSESECURE Updated CMulHandler::CheckStaticFlag() to match with statics that cover/extend across the specified Z coordinate, not just ones that have the same base Z level Updated CMulHandler::DoesMapBlock() to not deem map tiles as blocking if they are more than 16 Z (height of a character) higher than the specified Z coordinate to check Exposed method for finding corners of a multi to JS engine: .GetMultiCorner( cornerID ) - Gets coordinates for specified corner of multi (0 = NW, 1 = NE, 2 = SW, 3 = SE) Exposed various functions related to map, statics and multis to JS engine: CalcMultiFromSer( serial ) - Find a multi from a provided serial GetMapElevation( x, y, z, world) - Returns the map elevation at specified coordinates IsInBuilding( x, y, z, world, instance, checkHeight ) - Returns true if the specified location is inside a static building (underneath static items), or if player is inside a multi. If the checkHeight argument is true, player is only deemed inside a multi if there are multi-items above the player's head. If player is in a courtyard/on a rooftop, they will be deemed to be NOT in the building. checkHeight is not used for the static part of the function. CheckStaticFlag( x, y, z, world, tileFlagID ) - Checks to see if any statics at given coordinates has specified tile flag DoesStaticBlock( x, y, z, world, checkWater ) - Checks if statics at/above given location blocks characters DoesDynamicBlock( x, y, z, world, instance, checkWater, waterWalk ) - Checks if dynamics at/above given location blocks characters DoesMapBlock( x, y, z, world, checkWater, waterWalk ) - Checks if map tile at/above given location blocks characters
2020-10-05 23:12:34 +08:00
case CIP_MORE:
{
2025-03-27 12:25:12 -05:00
int64_t moreVal = gPriv->GetTempVar( CITV_MORE );
if( moreVal < INT_MIN || moreVal > INT_MAX )
Exposed various map and statics related functions to JS engine Updated JS item properties MORE, MOREX, MOREY, MOREZ and SERIAL, and character property SERIAL, to pass values to JS scripts using JS_NewNumberValue() instead of INT_TO_JSVAL if the property value cannot fit inside JSVAL (checked with INT_FITS_IN_JSVAL) Added support in CResponse.cpp for client trigger word for securing containers in houses - TW_HOUSESECURE Updated CMulHandler::CheckStaticFlag() to match with statics that cover/extend across the specified Z coordinate, not just ones that have the same base Z level Updated CMulHandler::DoesMapBlock() to not deem map tiles as blocking if they are more than 16 Z (height of a character) higher than the specified Z coordinate to check Exposed method for finding corners of a multi to JS engine: .GetMultiCorner( cornerID ) - Gets coordinates for specified corner of multi (0 = NW, 1 = NE, 2 = SW, 3 = SE) Exposed various functions related to map, statics and multis to JS engine: CalcMultiFromSer( serial ) - Find a multi from a provided serial GetMapElevation( x, y, z, world) - Returns the map elevation at specified coordinates IsInBuilding( x, y, z, world, instance, checkHeight ) - Returns true if the specified location is inside a static building (underneath static items), or if player is inside a multi. If the checkHeight argument is true, player is only deemed inside a multi if there are multi-items above the player's head. If player is in a courtyard/on a rooftop, they will be deemed to be NOT in the building. checkHeight is not used for the static part of the function. CheckStaticFlag( x, y, z, world, tileFlagID ) - Checks to see if any statics at given coordinates has specified tile flag DoesStaticBlock( x, y, z, world, checkWater ) - Checks if statics at/above given location blocks characters DoesDynamicBlock( x, y, z, world, instance, checkWater, waterWalk ) - Checks if dynamics at/above given location blocks characters DoesMapBlock( x, y, z, world, checkWater, waterWalk ) - Checks if map tile at/above given location blocks characters
2020-10-05 23:12:34 +08:00
{
JS_NewNumberValue( cx, gPriv->GetTempVar( CITV_MORE ), vp );
}
else
{
*vp = INT_TO_JSVAL( gPriv->GetTempVar( CITV_MORE ));
Exposed various map and statics related functions to JS engine Updated JS item properties MORE, MOREX, MOREY, MOREZ and SERIAL, and character property SERIAL, to pass values to JS scripts using JS_NewNumberValue() instead of INT_TO_JSVAL if the property value cannot fit inside JSVAL (checked with INT_FITS_IN_JSVAL) Added support in CResponse.cpp for client trigger word for securing containers in houses - TW_HOUSESECURE Updated CMulHandler::CheckStaticFlag() to match with statics that cover/extend across the specified Z coordinate, not just ones that have the same base Z level Updated CMulHandler::DoesMapBlock() to not deem map tiles as blocking if they are more than 16 Z (height of a character) higher than the specified Z coordinate to check Exposed method for finding corners of a multi to JS engine: .GetMultiCorner( cornerID ) - Gets coordinates for specified corner of multi (0 = NW, 1 = NE, 2 = SW, 3 = SE) Exposed various functions related to map, statics and multis to JS engine: CalcMultiFromSer( serial ) - Find a multi from a provided serial GetMapElevation( x, y, z, world) - Returns the map elevation at specified coordinates IsInBuilding( x, y, z, world, instance, checkHeight ) - Returns true if the specified location is inside a static building (underneath static items), or if player is inside a multi. If the checkHeight argument is true, player is only deemed inside a multi if there are multi-items above the player's head. If player is in a courtyard/on a rooftop, they will be deemed to be NOT in the building. checkHeight is not used for the static part of the function. CheckStaticFlag( x, y, z, world, tileFlagID ) - Checks to see if any statics at given coordinates has specified tile flag DoesStaticBlock( x, y, z, world, checkWater ) - Checks if statics at/above given location blocks characters DoesDynamicBlock( x, y, z, world, instance, checkWater, waterWalk ) - Checks if dynamics at/above given location blocks characters DoesMapBlock( x, y, z, world, checkWater, waterWalk ) - Checks if map tile at/above given location blocks characters
2020-10-05 23:12:34 +08:00
}
break;
}
Thief Revamp - 0.99.6-RC5 Added script for NPC guildmasters (js/npc/ai/guildmaster.js). Only one NPC guild has been setup in the script so far (more can be easily added) - the Thieves Guild - which if joined grants players the ability to steal from other players and to buy disguise kits Added two new NPCs, which there will now spawn one of in a random location in each city in Britannia (felucca facet): m_thief_guildmaster (dfndata/npc/male_human.dfn) f_thief_guildmaster (dfndata/npc/female_Human.dfn) Added two new character properties to keep track of which NPC guild a player (or NPC) belongs to. These properties have been exposed as the following Character JS properties: .npcGuild // ID of NPC guild, as defined in script .npcGuildJoined // Timestamp for when player joined NPC guild Added script for Disguise Kits (js/item/disguisekit.js). These allow members of the Thieves Guild to disguise themselves from the prying eyes of other players. Added two new character properties: .isDisguised // true/false flag for character being disguised .origName // used to store character's original name before disguise went into effect Moved implementation of Stealing skill from code to script (js/skill/stealing.js) and revamped it completely in the process. Changes include: New features: Town rare stealing - any item marked as "special stealable" with new item property .stealable can be stolen, even if it's locked down by a GM on the ground, or inside a container When stealing from item piles, thief can potentially steal the amount of items that makes up the max weight limit for what they can steal, from those piles Chance to successfully steal is now affected by whether there are any characters (NPCs or Players) that witness the attempt. Depends on distance to character, and direction character is facing Players now become "permagrey" when successfully stealing from another player, regardless of whether it's witnessed Players now receive a "stealing" flag when stealing from another player, regardless of whether it's witnessed Stolen items cannot be removed from thief's backpack for 30 seconds following the theft of the item (AoS core shard era and above) Optional AoS feature to steal special consumable items from monsters Updated default stealing rules: Updated calculations to determine chance of success when stealing Players cannot steal while engaged in combat Players are revealed if hidden as soon as they use the stealing skill Players can no longer steal items in the secure trade window Players can no longer steal items from NPC shopkeepers Both hands must be free to steal Stealing now checks line of sight to target player/object Only members of Thieves Guild (NPC guild) can now steal from other players, unless they are guild enemies Players can no longer steal from NPC guards by default Players can no longer steal from the same NPC monster more than once Only gold and gems can be stolen from innocent players in dungeon/ll areas of Felucca, if core shard era is set to AoS or higher Players can no longer steal items held on cursor by other players Orcish masks now eplode if player steals from orcs while wearing it If core shard era is set to LBR or lower, player is marked as an aggressor if they steal from another player Guards can only be called on players that are flagged as criminals within the first 10 seconds of them being flagged Stealing script options: Allow stealing entire containers (off by default pre-AoS) Return stolen items on thief death (off by default) Temporarily make stolen items immovable in thief's backpack (on by default post-AoS) Temporarily protect traded items (on by default) Let dexterity affect chance for successful theft (off by default) Let light level affect chance for successful theft (off by default) Allow stealing from NPC Guards (off by default) Allow stealing special loot from monsters (on by default post-ml) Moved implementation of Snooping skill from code to script (js/skill/snooping.js), with some changes: Players cannot snoop pack animals from inside a house, if the animal is outside The deeper inside main backpack a container sits, the harder it becomes to snoop inside it Included an optional feature that lets targets of snooping gradually become more aware, increasing the difficulty of succeeding. This awareness fades over time. Players have a chance to stay hidden while snooping, based on their Hiding skill Karma is now lowered by snooping regardless of success or failure Added tracking system for "aggressors" in combat. A player attacking someone (regardless of flag status) will be marked as aggressor to that someone for 2 minutes Added tracking system for "permagrey" flags - these are stored on a per-target basis, so a player can be flagged visibly as permagrey to multiple other players. Persists until player dies. Player combat targets and war mode are now cleared on logout Players will now be unable to hide if within visual distance and in line of sight of their attacker or current target in combat Server leave-announcement now only happens after the logout timer has expired, instead of the exact moment the player presses the logout button Fixed an issue that could cause swimming NPCs to swim on land NPCs now have the ability to temporarily ignore unreachable targets in combat. If attacked by someone they are ignoring, they will enter evade state and try to move away from that someone. SpawnRegions now support NPCLISTS with weighted entries. Example of an NPCLIST with 75% chance of spawning some kind of orc, and 25% chance of spawning a ratman archer: [NPCLIST example] { 75|NPCLIST=allorc 25|ratman } Added 3 additional "all purpose" item properties (.more0, .more1 and .more2) and exposed those to JS engine. These work the same as more/morex/morey/morez Mark spell now stores a 4th property on recall runes - instanceID. This is stored in the rune's .more0 property. Recall and Gate spells now check the recall rune (or runebook)'s 4th location property - instanceID - to determine where the player ends up Fixed a server crash related to equipment being automatically unequipped if character is no longer strong enough to have it equipped Added new JS Function to check if any characters at specified location potentially block movement: DoesCharacterBlock( x, y, z, worldNum, instanceID ) // returns true if a character exists at given coordinate (within z +/- 4)
2023-06-20 02:21:16 +08:00
case CIP_MORE0:
{
2025-03-27 12:25:12 -05:00
int64_t more0Val = gPriv->GetTempVar( CITV_MORE0 );
if( more0Val < INT_MIN || more0Val > INT_MAX )
Thief Revamp - 0.99.6-RC5 Added script for NPC guildmasters (js/npc/ai/guildmaster.js). Only one NPC guild has been setup in the script so far (more can be easily added) - the Thieves Guild - which if joined grants players the ability to steal from other players and to buy disguise kits Added two new NPCs, which there will now spawn one of in a random location in each city in Britannia (felucca facet): m_thief_guildmaster (dfndata/npc/male_human.dfn) f_thief_guildmaster (dfndata/npc/female_Human.dfn) Added two new character properties to keep track of which NPC guild a player (or NPC) belongs to. These properties have been exposed as the following Character JS properties: .npcGuild // ID of NPC guild, as defined in script .npcGuildJoined // Timestamp for when player joined NPC guild Added script for Disguise Kits (js/item/disguisekit.js). These allow members of the Thieves Guild to disguise themselves from the prying eyes of other players. Added two new character properties: .isDisguised // true/false flag for character being disguised .origName // used to store character's original name before disguise went into effect Moved implementation of Stealing skill from code to script (js/skill/stealing.js) and revamped it completely in the process. Changes include: New features: Town rare stealing - any item marked as "special stealable" with new item property .stealable can be stolen, even if it's locked down by a GM on the ground, or inside a container When stealing from item piles, thief can potentially steal the amount of items that makes up the max weight limit for what they can steal, from those piles Chance to successfully steal is now affected by whether there are any characters (NPCs or Players) that witness the attempt. Depends on distance to character, and direction character is facing Players now become "permagrey" when successfully stealing from another player, regardless of whether it's witnessed Players now receive a "stealing" flag when stealing from another player, regardless of whether it's witnessed Stolen items cannot be removed from thief's backpack for 30 seconds following the theft of the item (AoS core shard era and above) Optional AoS feature to steal special consumable items from monsters Updated default stealing rules: Updated calculations to determine chance of success when stealing Players cannot steal while engaged in combat Players are revealed if hidden as soon as they use the stealing skill Players can no longer steal items in the secure trade window Players can no longer steal items from NPC shopkeepers Both hands must be free to steal Stealing now checks line of sight to target player/object Only members of Thieves Guild (NPC guild) can now steal from other players, unless they are guild enemies Players can no longer steal from NPC guards by default Players can no longer steal from the same NPC monster more than once Only gold and gems can be stolen from innocent players in dungeon/ll areas of Felucca, if core shard era is set to AoS or higher Players can no longer steal items held on cursor by other players Orcish masks now eplode if player steals from orcs while wearing it If core shard era is set to LBR or lower, player is marked as an aggressor if they steal from another player Guards can only be called on players that are flagged as criminals within the first 10 seconds of them being flagged Stealing script options: Allow stealing entire containers (off by default pre-AoS) Return stolen items on thief death (off by default) Temporarily make stolen items immovable in thief's backpack (on by default post-AoS) Temporarily protect traded items (on by default) Let dexterity affect chance for successful theft (off by default) Let light level affect chance for successful theft (off by default) Allow stealing from NPC Guards (off by default) Allow stealing special loot from monsters (on by default post-ml) Moved implementation of Snooping skill from code to script (js/skill/snooping.js), with some changes: Players cannot snoop pack animals from inside a house, if the animal is outside The deeper inside main backpack a container sits, the harder it becomes to snoop inside it Included an optional feature that lets targets of snooping gradually become more aware, increasing the difficulty of succeeding. This awareness fades over time. Players have a chance to stay hidden while snooping, based on their Hiding skill Karma is now lowered by snooping regardless of success or failure Added tracking system for "aggressors" in combat. A player attacking someone (regardless of flag status) will be marked as aggressor to that someone for 2 minutes Added tracking system for "permagrey" flags - these are stored on a per-target basis, so a player can be flagged visibly as permagrey to multiple other players. Persists until player dies. Player combat targets and war mode are now cleared on logout Players will now be unable to hide if within visual distance and in line of sight of their attacker or current target in combat Server leave-announcement now only happens after the logout timer has expired, instead of the exact moment the player presses the logout button Fixed an issue that could cause swimming NPCs to swim on land NPCs now have the ability to temporarily ignore unreachable targets in combat. If attacked by someone they are ignoring, they will enter evade state and try to move away from that someone. SpawnRegions now support NPCLISTS with weighted entries. Example of an NPCLIST with 75% chance of spawning some kind of orc, and 25% chance of spawning a ratman archer: [NPCLIST example] { 75|NPCLIST=allorc 25|ratman } Added 3 additional "all purpose" item properties (.more0, .more1 and .more2) and exposed those to JS engine. These work the same as more/morex/morey/morez Mark spell now stores a 4th property on recall runes - instanceID. This is stored in the rune's .more0 property. Recall and Gate spells now check the recall rune (or runebook)'s 4th location property - instanceID - to determine where the player ends up Fixed a server crash related to equipment being automatically unequipped if character is no longer strong enough to have it equipped Added new JS Function to check if any characters at specified location potentially block movement: DoesCharacterBlock( x, y, z, worldNum, instanceID ) // returns true if a character exists at given coordinate (within z +/- 4)
2023-06-20 02:21:16 +08:00
{
JS_NewNumberValue( cx, gPriv->GetTempVar( CITV_MORE0 ), vp );
}
else
{
*vp = INT_TO_JSVAL( gPriv->GetTempVar( CITV_MORE0 ));
}
break;
}
case CIP_MORE1:
{
2025-03-27 12:25:12 -05:00
int64_t more1Val = gPriv->GetTempVar( CITV_MORE1 );
if( more1Val < INT_MIN || more1Val > INT_MAX )
Thief Revamp - 0.99.6-RC5 Added script for NPC guildmasters (js/npc/ai/guildmaster.js). Only one NPC guild has been setup in the script so far (more can be easily added) - the Thieves Guild - which if joined grants players the ability to steal from other players and to buy disguise kits Added two new NPCs, which there will now spawn one of in a random location in each city in Britannia (felucca facet): m_thief_guildmaster (dfndata/npc/male_human.dfn) f_thief_guildmaster (dfndata/npc/female_Human.dfn) Added two new character properties to keep track of which NPC guild a player (or NPC) belongs to. These properties have been exposed as the following Character JS properties: .npcGuild // ID of NPC guild, as defined in script .npcGuildJoined // Timestamp for when player joined NPC guild Added script for Disguise Kits (js/item/disguisekit.js). These allow members of the Thieves Guild to disguise themselves from the prying eyes of other players. Added two new character properties: .isDisguised // true/false flag for character being disguised .origName // used to store character's original name before disguise went into effect Moved implementation of Stealing skill from code to script (js/skill/stealing.js) and revamped it completely in the process. Changes include: New features: Town rare stealing - any item marked as "special stealable" with new item property .stealable can be stolen, even if it's locked down by a GM on the ground, or inside a container When stealing from item piles, thief can potentially steal the amount of items that makes up the max weight limit for what they can steal, from those piles Chance to successfully steal is now affected by whether there are any characters (NPCs or Players) that witness the attempt. Depends on distance to character, and direction character is facing Players now become "permagrey" when successfully stealing from another player, regardless of whether it's witnessed Players now receive a "stealing" flag when stealing from another player, regardless of whether it's witnessed Stolen items cannot be removed from thief's backpack for 30 seconds following the theft of the item (AoS core shard era and above) Optional AoS feature to steal special consumable items from monsters Updated default stealing rules: Updated calculations to determine chance of success when stealing Players cannot steal while engaged in combat Players are revealed if hidden as soon as they use the stealing skill Players can no longer steal items in the secure trade window Players can no longer steal items from NPC shopkeepers Both hands must be free to steal Stealing now checks line of sight to target player/object Only members of Thieves Guild (NPC guild) can now steal from other players, unless they are guild enemies Players can no longer steal from NPC guards by default Players can no longer steal from the same NPC monster more than once Only gold and gems can be stolen from innocent players in dungeon/ll areas of Felucca, if core shard era is set to AoS or higher Players can no longer steal items held on cursor by other players Orcish masks now eplode if player steals from orcs while wearing it If core shard era is set to LBR or lower, player is marked as an aggressor if they steal from another player Guards can only be called on players that are flagged as criminals within the first 10 seconds of them being flagged Stealing script options: Allow stealing entire containers (off by default pre-AoS) Return stolen items on thief death (off by default) Temporarily make stolen items immovable in thief's backpack (on by default post-AoS) Temporarily protect traded items (on by default) Let dexterity affect chance for successful theft (off by default) Let light level affect chance for successful theft (off by default) Allow stealing from NPC Guards (off by default) Allow stealing special loot from monsters (on by default post-ml) Moved implementation of Snooping skill from code to script (js/skill/snooping.js), with some changes: Players cannot snoop pack animals from inside a house, if the animal is outside The deeper inside main backpack a container sits, the harder it becomes to snoop inside it Included an optional feature that lets targets of snooping gradually become more aware, increasing the difficulty of succeeding. This awareness fades over time. Players have a chance to stay hidden while snooping, based on their Hiding skill Karma is now lowered by snooping regardless of success or failure Added tracking system for "aggressors" in combat. A player attacking someone (regardless of flag status) will be marked as aggressor to that someone for 2 minutes Added tracking system for "permagrey" flags - these are stored on a per-target basis, so a player can be flagged visibly as permagrey to multiple other players. Persists until player dies. Player combat targets and war mode are now cleared on logout Players will now be unable to hide if within visual distance and in line of sight of their attacker or current target in combat Server leave-announcement now only happens after the logout timer has expired, instead of the exact moment the player presses the logout button Fixed an issue that could cause swimming NPCs to swim on land NPCs now have the ability to temporarily ignore unreachable targets in combat. If attacked by someone they are ignoring, they will enter evade state and try to move away from that someone. SpawnRegions now support NPCLISTS with weighted entries. Example of an NPCLIST with 75% chance of spawning some kind of orc, and 25% chance of spawning a ratman archer: [NPCLIST example] { 75|NPCLIST=allorc 25|ratman } Added 3 additional "all purpose" item properties (.more0, .more1 and .more2) and exposed those to JS engine. These work the same as more/morex/morey/morez Mark spell now stores a 4th property on recall runes - instanceID. This is stored in the rune's .more0 property. Recall and Gate spells now check the recall rune (or runebook)'s 4th location property - instanceID - to determine where the player ends up Fixed a server crash related to equipment being automatically unequipped if character is no longer strong enough to have it equipped Added new JS Function to check if any characters at specified location potentially block movement: DoesCharacterBlock( x, y, z, worldNum, instanceID ) // returns true if a character exists at given coordinate (within z +/- 4)
2023-06-20 02:21:16 +08:00
{
JS_NewNumberValue( cx, gPriv->GetTempVar( CITV_MORE1 ), vp );
}
else
{
*vp = INT_TO_JSVAL( gPriv->GetTempVar( CITV_MORE1 ));
}
break;
}
case CIP_MORE2:
{
2025-03-27 12:25:12 -05:00
int64_t more2Val = gPriv->GetTempVar( CITV_MORE2 );
if( more2Val < INT_MIN || more2Val > INT_MAX )
Thief Revamp - 0.99.6-RC5 Added script for NPC guildmasters (js/npc/ai/guildmaster.js). Only one NPC guild has been setup in the script so far (more can be easily added) - the Thieves Guild - which if joined grants players the ability to steal from other players and to buy disguise kits Added two new NPCs, which there will now spawn one of in a random location in each city in Britannia (felucca facet): m_thief_guildmaster (dfndata/npc/male_human.dfn) f_thief_guildmaster (dfndata/npc/female_Human.dfn) Added two new character properties to keep track of which NPC guild a player (or NPC) belongs to. These properties have been exposed as the following Character JS properties: .npcGuild // ID of NPC guild, as defined in script .npcGuildJoined // Timestamp for when player joined NPC guild Added script for Disguise Kits (js/item/disguisekit.js). These allow members of the Thieves Guild to disguise themselves from the prying eyes of other players. Added two new character properties: .isDisguised // true/false flag for character being disguised .origName // used to store character's original name before disguise went into effect Moved implementation of Stealing skill from code to script (js/skill/stealing.js) and revamped it completely in the process. Changes include: New features: Town rare stealing - any item marked as "special stealable" with new item property .stealable can be stolen, even if it's locked down by a GM on the ground, or inside a container When stealing from item piles, thief can potentially steal the amount of items that makes up the max weight limit for what they can steal, from those piles Chance to successfully steal is now affected by whether there are any characters (NPCs or Players) that witness the attempt. Depends on distance to character, and direction character is facing Players now become "permagrey" when successfully stealing from another player, regardless of whether it's witnessed Players now receive a "stealing" flag when stealing from another player, regardless of whether it's witnessed Stolen items cannot be removed from thief's backpack for 30 seconds following the theft of the item (AoS core shard era and above) Optional AoS feature to steal special consumable items from monsters Updated default stealing rules: Updated calculations to determine chance of success when stealing Players cannot steal while engaged in combat Players are revealed if hidden as soon as they use the stealing skill Players can no longer steal items in the secure trade window Players can no longer steal items from NPC shopkeepers Both hands must be free to steal Stealing now checks line of sight to target player/object Only members of Thieves Guild (NPC guild) can now steal from other players, unless they are guild enemies Players can no longer steal from NPC guards by default Players can no longer steal from the same NPC monster more than once Only gold and gems can be stolen from innocent players in dungeon/ll areas of Felucca, if core shard era is set to AoS or higher Players can no longer steal items held on cursor by other players Orcish masks now eplode if player steals from orcs while wearing it If core shard era is set to LBR or lower, player is marked as an aggressor if they steal from another player Guards can only be called on players that are flagged as criminals within the first 10 seconds of them being flagged Stealing script options: Allow stealing entire containers (off by default pre-AoS) Return stolen items on thief death (off by default) Temporarily make stolen items immovable in thief's backpack (on by default post-AoS) Temporarily protect traded items (on by default) Let dexterity affect chance for successful theft (off by default) Let light level affect chance for successful theft (off by default) Allow stealing from NPC Guards (off by default) Allow stealing special loot from monsters (on by default post-ml) Moved implementation of Snooping skill from code to script (js/skill/snooping.js), with some changes: Players cannot snoop pack animals from inside a house, if the animal is outside The deeper inside main backpack a container sits, the harder it becomes to snoop inside it Included an optional feature that lets targets of snooping gradually become more aware, increasing the difficulty of succeeding. This awareness fades over time. Players have a chance to stay hidden while snooping, based on their Hiding skill Karma is now lowered by snooping regardless of success or failure Added tracking system for "aggressors" in combat. A player attacking someone (regardless of flag status) will be marked as aggressor to that someone for 2 minutes Added tracking system for "permagrey" flags - these are stored on a per-target basis, so a player can be flagged visibly as permagrey to multiple other players. Persists until player dies. Player combat targets and war mode are now cleared on logout Players will now be unable to hide if within visual distance and in line of sight of their attacker or current target in combat Server leave-announcement now only happens after the logout timer has expired, instead of the exact moment the player presses the logout button Fixed an issue that could cause swimming NPCs to swim on land NPCs now have the ability to temporarily ignore unreachable targets in combat. If attacked by someone they are ignoring, they will enter evade state and try to move away from that someone. SpawnRegions now support NPCLISTS with weighted entries. Example of an NPCLIST with 75% chance of spawning some kind of orc, and 25% chance of spawning a ratman archer: [NPCLIST example] { 75|NPCLIST=allorc 25|ratman } Added 3 additional "all purpose" item properties (.more0, .more1 and .more2) and exposed those to JS engine. These work the same as more/morex/morey/morez Mark spell now stores a 4th property on recall runes - instanceID. This is stored in the rune's .more0 property. Recall and Gate spells now check the recall rune (or runebook)'s 4th location property - instanceID - to determine where the player ends up Fixed a server crash related to equipment being automatically unequipped if character is no longer strong enough to have it equipped Added new JS Function to check if any characters at specified location potentially block movement: DoesCharacterBlock( x, y, z, worldNum, instanceID ) // returns true if a character exists at given coordinate (within z +/- 4)
2023-06-20 02:21:16 +08:00
{
JS_NewNumberValue( cx, gPriv->GetTempVar( CITV_MORE2 ), vp );
}
else
{
*vp = INT_TO_JSVAL( gPriv->GetTempVar( CITV_MORE2 ));
}
break;
}
Exposed various map and statics related functions to JS engine Updated JS item properties MORE, MOREX, MOREY, MOREZ and SERIAL, and character property SERIAL, to pass values to JS scripts using JS_NewNumberValue() instead of INT_TO_JSVAL if the property value cannot fit inside JSVAL (checked with INT_FITS_IN_JSVAL) Added support in CResponse.cpp for client trigger word for securing containers in houses - TW_HOUSESECURE Updated CMulHandler::CheckStaticFlag() to match with statics that cover/extend across the specified Z coordinate, not just ones that have the same base Z level Updated CMulHandler::DoesMapBlock() to not deem map tiles as blocking if they are more than 16 Z (height of a character) higher than the specified Z coordinate to check Exposed method for finding corners of a multi to JS engine: .GetMultiCorner( cornerID ) - Gets coordinates for specified corner of multi (0 = NW, 1 = NE, 2 = SW, 3 = SE) Exposed various functions related to map, statics and multis to JS engine: CalcMultiFromSer( serial ) - Find a multi from a provided serial GetMapElevation( x, y, z, world) - Returns the map elevation at specified coordinates IsInBuilding( x, y, z, world, instance, checkHeight ) - Returns true if the specified location is inside a static building (underneath static items), or if player is inside a multi. If the checkHeight argument is true, player is only deemed inside a multi if there are multi-items above the player's head. If player is in a courtyard/on a rooftop, they will be deemed to be NOT in the building. checkHeight is not used for the static part of the function. CheckStaticFlag( x, y, z, world, tileFlagID ) - Checks to see if any statics at given coordinates has specified tile flag DoesStaticBlock( x, y, z, world, checkWater ) - Checks if statics at/above given location blocks characters DoesDynamicBlock( x, y, z, world, instance, checkWater, waterWalk ) - Checks if dynamics at/above given location blocks characters DoesMapBlock( x, y, z, world, checkWater, waterWalk ) - Checks if map tile at/above given location blocks characters
2020-10-05 23:12:34 +08:00
case CIP_MOREX:
{
2025-03-27 12:25:12 -05:00
int64_t morexVal = gPriv->GetTempVar( CITV_MOREX );
if( morexVal < INT_MIN || morexVal > INT_MAX )
Exposed various map and statics related functions to JS engine Updated JS item properties MORE, MOREX, MOREY, MOREZ and SERIAL, and character property SERIAL, to pass values to JS scripts using JS_NewNumberValue() instead of INT_TO_JSVAL if the property value cannot fit inside JSVAL (checked with INT_FITS_IN_JSVAL) Added support in CResponse.cpp for client trigger word for securing containers in houses - TW_HOUSESECURE Updated CMulHandler::CheckStaticFlag() to match with statics that cover/extend across the specified Z coordinate, not just ones that have the same base Z level Updated CMulHandler::DoesMapBlock() to not deem map tiles as blocking if they are more than 16 Z (height of a character) higher than the specified Z coordinate to check Exposed method for finding corners of a multi to JS engine: .GetMultiCorner( cornerID ) - Gets coordinates for specified corner of multi (0 = NW, 1 = NE, 2 = SW, 3 = SE) Exposed various functions related to map, statics and multis to JS engine: CalcMultiFromSer( serial ) - Find a multi from a provided serial GetMapElevation( x, y, z, world) - Returns the map elevation at specified coordinates IsInBuilding( x, y, z, world, instance, checkHeight ) - Returns true if the specified location is inside a static building (underneath static items), or if player is inside a multi. If the checkHeight argument is true, player is only deemed inside a multi if there are multi-items above the player's head. If player is in a courtyard/on a rooftop, they will be deemed to be NOT in the building. checkHeight is not used for the static part of the function. CheckStaticFlag( x, y, z, world, tileFlagID ) - Checks to see if any statics at given coordinates has specified tile flag DoesStaticBlock( x, y, z, world, checkWater ) - Checks if statics at/above given location blocks characters DoesDynamicBlock( x, y, z, world, instance, checkWater, waterWalk ) - Checks if dynamics at/above given location blocks characters DoesMapBlock( x, y, z, world, checkWater, waterWalk ) - Checks if map tile at/above given location blocks characters
2020-10-05 23:12:34 +08:00
{
JS_NewNumberValue( cx, gPriv->GetTempVar( CITV_MOREX ), vp );
}
else
{
*vp = INT_TO_JSVAL( gPriv->GetTempVar( CITV_MOREX ));
Exposed various map and statics related functions to JS engine Updated JS item properties MORE, MOREX, MOREY, MOREZ and SERIAL, and character property SERIAL, to pass values to JS scripts using JS_NewNumberValue() instead of INT_TO_JSVAL if the property value cannot fit inside JSVAL (checked with INT_FITS_IN_JSVAL) Added support in CResponse.cpp for client trigger word for securing containers in houses - TW_HOUSESECURE Updated CMulHandler::CheckStaticFlag() to match with statics that cover/extend across the specified Z coordinate, not just ones that have the same base Z level Updated CMulHandler::DoesMapBlock() to not deem map tiles as blocking if they are more than 16 Z (height of a character) higher than the specified Z coordinate to check Exposed method for finding corners of a multi to JS engine: .GetMultiCorner( cornerID ) - Gets coordinates for specified corner of multi (0 = NW, 1 = NE, 2 = SW, 3 = SE) Exposed various functions related to map, statics and multis to JS engine: CalcMultiFromSer( serial ) - Find a multi from a provided serial GetMapElevation( x, y, z, world) - Returns the map elevation at specified coordinates IsInBuilding( x, y, z, world, instance, checkHeight ) - Returns true if the specified location is inside a static building (underneath static items), or if player is inside a multi. If the checkHeight argument is true, player is only deemed inside a multi if there are multi-items above the player's head. If player is in a courtyard/on a rooftop, they will be deemed to be NOT in the building. checkHeight is not used for the static part of the function. CheckStaticFlag( x, y, z, world, tileFlagID ) - Checks to see if any statics at given coordinates has specified tile flag DoesStaticBlock( x, y, z, world, checkWater ) - Checks if statics at/above given location blocks characters DoesDynamicBlock( x, y, z, world, instance, checkWater, waterWalk ) - Checks if dynamics at/above given location blocks characters DoesMapBlock( x, y, z, world, checkWater, waterWalk ) - Checks if map tile at/above given location blocks characters
2020-10-05 23:12:34 +08:00
}
break;
}
case CIP_MOREY:
{
2025-03-27 12:25:12 -05:00
int64_t moreyVal = gPriv->GetTempVar( CITV_MOREY );
if( moreyVal < INT_MIN || moreyVal > INT_MAX )
Exposed various map and statics related functions to JS engine Updated JS item properties MORE, MOREX, MOREY, MOREZ and SERIAL, and character property SERIAL, to pass values to JS scripts using JS_NewNumberValue() instead of INT_TO_JSVAL if the property value cannot fit inside JSVAL (checked with INT_FITS_IN_JSVAL) Added support in CResponse.cpp for client trigger word for securing containers in houses - TW_HOUSESECURE Updated CMulHandler::CheckStaticFlag() to match with statics that cover/extend across the specified Z coordinate, not just ones that have the same base Z level Updated CMulHandler::DoesMapBlock() to not deem map tiles as blocking if they are more than 16 Z (height of a character) higher than the specified Z coordinate to check Exposed method for finding corners of a multi to JS engine: .GetMultiCorner( cornerID ) - Gets coordinates for specified corner of multi (0 = NW, 1 = NE, 2 = SW, 3 = SE) Exposed various functions related to map, statics and multis to JS engine: CalcMultiFromSer( serial ) - Find a multi from a provided serial GetMapElevation( x, y, z, world) - Returns the map elevation at specified coordinates IsInBuilding( x, y, z, world, instance, checkHeight ) - Returns true if the specified location is inside a static building (underneath static items), or if player is inside a multi. If the checkHeight argument is true, player is only deemed inside a multi if there are multi-items above the player's head. If player is in a courtyard/on a rooftop, they will be deemed to be NOT in the building. checkHeight is not used for the static part of the function. CheckStaticFlag( x, y, z, world, tileFlagID ) - Checks to see if any statics at given coordinates has specified tile flag DoesStaticBlock( x, y, z, world, checkWater ) - Checks if statics at/above given location blocks characters DoesDynamicBlock( x, y, z, world, instance, checkWater, waterWalk ) - Checks if dynamics at/above given location blocks characters DoesMapBlock( x, y, z, world, checkWater, waterWalk ) - Checks if map tile at/above given location blocks characters
2020-10-05 23:12:34 +08:00
{
JS_NewNumberValue( cx, gPriv->GetTempVar( CITV_MOREY ), vp );
}
else
{
*vp = INT_TO_JSVAL( gPriv->GetTempVar( CITV_MOREY ));
Exposed various map and statics related functions to JS engine Updated JS item properties MORE, MOREX, MOREY, MOREZ and SERIAL, and character property SERIAL, to pass values to JS scripts using JS_NewNumberValue() instead of INT_TO_JSVAL if the property value cannot fit inside JSVAL (checked with INT_FITS_IN_JSVAL) Added support in CResponse.cpp for client trigger word for securing containers in houses - TW_HOUSESECURE Updated CMulHandler::CheckStaticFlag() to match with statics that cover/extend across the specified Z coordinate, not just ones that have the same base Z level Updated CMulHandler::DoesMapBlock() to not deem map tiles as blocking if they are more than 16 Z (height of a character) higher than the specified Z coordinate to check Exposed method for finding corners of a multi to JS engine: .GetMultiCorner( cornerID ) - Gets coordinates for specified corner of multi (0 = NW, 1 = NE, 2 = SW, 3 = SE) Exposed various functions related to map, statics and multis to JS engine: CalcMultiFromSer( serial ) - Find a multi from a provided serial GetMapElevation( x, y, z, world) - Returns the map elevation at specified coordinates IsInBuilding( x, y, z, world, instance, checkHeight ) - Returns true if the specified location is inside a static building (underneath static items), or if player is inside a multi. If the checkHeight argument is true, player is only deemed inside a multi if there are multi-items above the player's head. If player is in a courtyard/on a rooftop, they will be deemed to be NOT in the building. checkHeight is not used for the static part of the function. CheckStaticFlag( x, y, z, world, tileFlagID ) - Checks to see if any statics at given coordinates has specified tile flag DoesStaticBlock( x, y, z, world, checkWater ) - Checks if statics at/above given location blocks characters DoesDynamicBlock( x, y, z, world, instance, checkWater, waterWalk ) - Checks if dynamics at/above given location blocks characters DoesMapBlock( x, y, z, world, checkWater, waterWalk ) - Checks if map tile at/above given location blocks characters
2020-10-05 23:12:34 +08:00
}
break;
}
case CIP_MOREZ:
{
2025-03-27 12:25:12 -05:00
int64_t morezVal = gPriv->GetTempVar( CITV_MOREZ );
if( morezVal < INT_MIN || morezVal > INT_MAX )
Exposed various map and statics related functions to JS engine Updated JS item properties MORE, MOREX, MOREY, MOREZ and SERIAL, and character property SERIAL, to pass values to JS scripts using JS_NewNumberValue() instead of INT_TO_JSVAL if the property value cannot fit inside JSVAL (checked with INT_FITS_IN_JSVAL) Added support in CResponse.cpp for client trigger word for securing containers in houses - TW_HOUSESECURE Updated CMulHandler::CheckStaticFlag() to match with statics that cover/extend across the specified Z coordinate, not just ones that have the same base Z level Updated CMulHandler::DoesMapBlock() to not deem map tiles as blocking if they are more than 16 Z (height of a character) higher than the specified Z coordinate to check Exposed method for finding corners of a multi to JS engine: .GetMultiCorner( cornerID ) - Gets coordinates for specified corner of multi (0 = NW, 1 = NE, 2 = SW, 3 = SE) Exposed various functions related to map, statics and multis to JS engine: CalcMultiFromSer( serial ) - Find a multi from a provided serial GetMapElevation( x, y, z, world) - Returns the map elevation at specified coordinates IsInBuilding( x, y, z, world, instance, checkHeight ) - Returns true if the specified location is inside a static building (underneath static items), or if player is inside a multi. If the checkHeight argument is true, player is only deemed inside a multi if there are multi-items above the player's head. If player is in a courtyard/on a rooftop, they will be deemed to be NOT in the building. checkHeight is not used for the static part of the function. CheckStaticFlag( x, y, z, world, tileFlagID ) - Checks to see if any statics at given coordinates has specified tile flag DoesStaticBlock( x, y, z, world, checkWater ) - Checks if statics at/above given location blocks characters DoesDynamicBlock( x, y, z, world, instance, checkWater, waterWalk ) - Checks if dynamics at/above given location blocks characters DoesMapBlock( x, y, z, world, checkWater, waterWalk ) - Checks if map tile at/above given location blocks characters
2020-10-05 23:12:34 +08:00
{
JS_NewNumberValue( cx, gPriv->GetTempVar( CITV_MOREZ ), vp );
}
else
{
*vp = INT_TO_JSVAL( gPriv->GetTempVar( CITV_MOREZ ));
Exposed various map and statics related functions to JS engine Updated JS item properties MORE, MOREX, MOREY, MOREZ and SERIAL, and character property SERIAL, to pass values to JS scripts using JS_NewNumberValue() instead of INT_TO_JSVAL if the property value cannot fit inside JSVAL (checked with INT_FITS_IN_JSVAL) Added support in CResponse.cpp for client trigger word for securing containers in houses - TW_HOUSESECURE Updated CMulHandler::CheckStaticFlag() to match with statics that cover/extend across the specified Z coordinate, not just ones that have the same base Z level Updated CMulHandler::DoesMapBlock() to not deem map tiles as blocking if they are more than 16 Z (height of a character) higher than the specified Z coordinate to check Exposed method for finding corners of a multi to JS engine: .GetMultiCorner( cornerID ) - Gets coordinates for specified corner of multi (0 = NW, 1 = NE, 2 = SW, 3 = SE) Exposed various functions related to map, statics and multis to JS engine: CalcMultiFromSer( serial ) - Find a multi from a provided serial GetMapElevation( x, y, z, world) - Returns the map elevation at specified coordinates IsInBuilding( x, y, z, world, instance, checkHeight ) - Returns true if the specified location is inside a static building (underneath static items), or if player is inside a multi. If the checkHeight argument is true, player is only deemed inside a multi if there are multi-items above the player's head. If player is in a courtyard/on a rooftop, they will be deemed to be NOT in the building. checkHeight is not used for the static part of the function. CheckStaticFlag( x, y, z, world, tileFlagID ) - Checks to see if any statics at given coordinates has specified tile flag DoesStaticBlock( x, y, z, world, checkWater ) - Checks if statics at/above given location blocks characters DoesDynamicBlock( x, y, z, world, instance, checkWater, waterWalk ) - Checks if dynamics at/above given location blocks characters DoesMapBlock( x, y, z, world, checkWater, waterWalk ) - Checks if map tile at/above given location blocks characters
2020-10-05 23:12:34 +08:00
}
break;
}
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
case CIP_MOVABLE: *vp = INT_TO_JSVAL( gPriv->GetMovable() ); break;
case CIP_ATT: *vp = INT_TO_JSVAL( RandomNum( gPriv->GetLoDamage(), gPriv->GetHiDamage() )); break;
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
case CIP_LAYER: *vp = INT_TO_JSVAL( gPriv->GetLayer() ); break;
Housing Revamp and more Updated JS SysMessage function to accept up to 10 extra, optional arguments, which can be used with dictionary messages that require additional parameters like %s or %i Added new type of house privilege in cMultiObj.cpp to keep track of friends of the multi - HOUSEPRIV_FRIEND - which is stored during worldsaves as one or more Friend=<player serial> tags in house.wsc Added new type of house privilege in cMultiObj.cpp to keep track of guests of the multi - HOUSEPRIV_GUEST - which is stored during worldsaves as one or more Guest=<player serial> tags in house.wsc When items are created for houses upon house placement, a reference to the multi's serial is now stored in the house sign's MORE property to allow easier tracking of which house a particular sign belongs to Added tracking of new, persistent properties for houses via cMultiObj.cpp/h: lockdowns, secure containers, vendors, guests, friends, owners, ban location, public status, number of visits, timestamps Added a multitude of new methods in cMultiObj.cpp/h to assist in improving the functionality of houses Added new tags for houses in house.dfn (default values applied if tag not specified): MAXSECURECONTAINERS=4 - Max amount of secure containers allowed in a multi MAXLOCKDOWNS=256 - Max amount of lockdowns allowed in a multi MAXVENDORS=10 - Max amount of vendors allowed in a multi MAXBANS=50 - Max amount of bans in a multi's ban list MAXFRIENDS=50 - Max amount of friends in a multi's friend list MAXGUESTS=50 - Max amount of guests in a multi's guest list MAXOWNERS=8 - Max amount of owners and co-owners in a multi's owner list MAXTRASHCONTAINERS=1 - Max amount of trash containers allowed in multi SCRIPT=<scriptID> - Assign a JS script-ID directly to a multi FRONTDOOR - indicates that a door is the front door of a house. Cannot be locked in public houses! INTERIORDOOR - indicates that a door is an interior door of a house. Can be locked in public houses. BANX - Location X offset for multi's ban location, if not used, will try to use SE corner of multi instead BANY - Location Y offset for multi's ban location, if not used, will try to use SE corner of multi instead Added JS Event: onHouseCommand( tSock, multiObj, cmdID ) - For handling spoken house commands via JS scripts attached to multi. Updated JS Events: onEntrance() - can now trigger both for multi being entered and/or object entering onLeaving() - can now trigger both for multi being left and/or object entering onSpeech() - can now also trigger for items (in addition to chars) with event & script attached, if UOX.INI setting ITEMSDETECTSPEECH is enabled Added JS Multi methods: .IsBoat() - Returns whether the item (or multi) is a boat .IsOwner( playerToCheck ) - Returns whether a player is the owner of a multi .IsOnOwnerList( playerToCheck ) - Returns whether a player is on the (co-)owner list of a multi .IsOnFriendList( playerToCheck ) - Returns whether a player is on the friend list of a multi .IsOnGuestList( playerToCheck ) - Returns whether a player is on the guest list of a multi .IsOnBanList( playerToCheck ) - Returns whether a player is on the ban list of a multi .AddToFriendList( playertoAdd ) - Adds player to the friend list of a multi .RemoveFromFriendList( playertoRemove ) - Removes player from the friend list of a multi .AddToGuestList( playertoAdd ) - Adds player to the guest list of a multi .RemoveFromGuestList( playertoRemove ) - Removes player from the guest list of a multi .ClearOwnerList() - Clears all entries from a multi's (co-)owner list .ClearFriendList() - Clears all entries from a multi's friend list .ClearGuestList() - Clears all entries from a multi's guest list .ClearBanList() - Clears all entries from a multi's ban list .SecureContainer( itemToSecure ) - Secures a container in a multi .UnsecureContainer( itemToUnsecure ) - Unsecures a container in a multi .IsSecureContainer( itemToCheck ) - Checks if specified item is a secure container in a multi .LockDownItem( itemToLockDown) - Locks down an item in a multi .ReleaseItem( itemToRelease ) - Releases a locked down item in a multi .KillKeys() - Deletes ALL keys associated with a multi .AddTrashCont( itemToAdd ) - Add trash container to multi's list of trash containers .RemoveTrashCont( itemToRemove ) - Remove trash container from multi's list of trash containers Added JS Item (Multi only) properties: .lockdowns - Get the number of lockdowns in a multi .maxLockdowns - Get/Set the max number of lockdowns allowed in a multi .secureContainers - Get the number of secure containers in a multi .maxSecureContainers - Get/Set the max number of secure containers allowed in a multi .trashContainers - Get the number of trash containers in a multi .maxTrashContainers - Get/Set the max number of trash containers allowed in a multi .friends - Get the number of friends in a multi's friend list .maxFriends - Get/Set the max number of friends allowed in a multi's friend list .guests - Get the number of guests in a multi's guest list .maxGuests - Get/Set the max number of guests allowed in a multi's guest list .owners - Get the number of owners in a multi's owner list .maxOwners - Get/Set the max number of owners allowed in a multi's owner list .bans - Get the number of banned players in a multi's ban list .maxBans - Get/Set the max number of banned players allowed in a multi's ban list .vendors - Get the number of player vendors in a multi .maxVendors - Get the max number of player vendors allowed in a multi .deed - Get the item sectionID for deed used to place multi .isPublic - Get/Set the private/public state of a multi .buildTimestamp - Get the timestamp for when the house was originally placed .tradeTimestamp - Get the timestamp for when the house was last traded to another player .banX - Get/Set the ban location X offset for the multi .banY - Get/Set the ban location Y offset for the multi Added JS Character properties: .multi = Get/Set the multi object the character is in .accountNum = Get the account number the character belongs to .housesOwned = Get a count of houses owned by the character .housesCoOwned = Get a count of houses co-owned by the character Updated JS cBaseObject Methods .FirstItem(), .NextItem() and .FinishedItems() to also support iterating through items in multis Updated JS multi Methods .FirstChar(), .NextChar() and .FinishedChars() to support an additional parameter to specify what kind of characters to loop through: "default" or no parameter - all characters inside the multi "owner" - players on multi's owner list "friend" - players on multi's friend list "guest" - players on multi's guest list "banned" - players on multi's ban list Added new INI tags to a new section of uox.ini called [houses] DECAYTIMERINHOUSE=3600 // Decay timer in seconds for non-locked down items inside houses PROTECTPRIVATEHOUSES=1 // Toggles whether private houses will automatically boot unauthorized visitors (1) or not (0) TRACKHOUSESPERACCOUNT=1 // Toggles whether to track (and restrict) house ownership per account (1) or per character (0) MAXHOUSESOWNABLE=1 // Specifies the max amount of houses a player can own per account/char, depending on how house ownership is tracked MAXHOUSESCOOWNABLE=10 // Specifies the max amount of houses a player can co-own per character CANOWNANDCOOWNHOUSES=1 // Toggles whether players can own and co-own houses at the same time COOWNHOUSESONSAMEACCOUNT=1 // Toggles whether characters on same account as house owner will be treated as co-owners Added new INI tags in [settings] section of uox.ini: ITEMSDETECTSPEECH=0 // If enabled, server will search for nearby items with onSpeech JS event running whenever a character speaks. Disabled by default. MAXPLAYERPACKITEMS=125 // Defines max item capacity for player (and NPC) backpacks. Defaults to 125. Moved most of the existing house functionality to JS and expanded upon it to reach feature parity with houses in regular UO around Publish 15/16, with various extras thrown in for good measure and all functionality being customizable: js/server/house/house.js (15000) - handles detection of house commands and characters entering/leaving houses js/server/house/houseSign.js (15001) - contains and handles all house-related gumps/menus and what is shown when players interact with house sign js/server/house/houseCommands.js (15002) - handles functionality of house commands and other functionality such as transfer of ownership, demolishing house, etc. js/server/house/houseDeed.js (15003) - handles initial rules that allow/disallow placement of additional houses for players All house-related menus now fully handled through JS All house commands and other functionality now fully handled through JS Removed redundant hard-coded house functionality Implemented Co-owners, friends, guests for houses, with access rules in place for entry, lockdowns, house commands, etc. Implemented Private and Public houses Implemented Secure Containers and Trash Barrels Definable max lockdowns, secure containers, player vendors, bans, friends, guests, owners, trash containers and more - per house type JS scripts can now be attached directly to houses Doors in houses can be marked as front doors or interior doors, and will be treated differently with regards to private and public houses Added new item to dfndata/items/containers/misc.dfn - [trashbarrel] Added new JS script (js/items/trashbarrel.js) with trash barrel functionality for houses. Trash barrels that are marked as secure containers are only accessible by owners, co-owners and friends of the house. Various options available at top of script. Updated js/items/axe.js to support chopping up trash barrels and house add-ons in houses owned by the player Fixed an issue with house doors being left behind after demolishing houses while their doors were open Fixed an issue where GMs could be banned from player houses Added Line of Sight checks to speech, to give players some privacy in their own homes Updated house placement code to more accurately check for other multis, dynamic and static objects when placing houses; now requires free space around each house that cannot be blocked by other houses or items that can block player movement, and disallows placement of houses on roads Updated house placement code to move characters blocking house placement to SE corner of the house Updated house placement code to disallow placing houses in guarded regions, or in dungeons Added new DFN tag for regions to enable/disable player houses in specific regions: HOUSING=0/1 Added new region (247) that covers path to Valley of Eodon in Felucca Added new region (248) that covers Valley of Eodon in Ter-Mur, with player housing disabled Added new region (249) that covers entire T2A lands, with player housing disabled Updated SPACEX and SPACEY values for all houses in dfndata/house/house.dfn to match updated house placement code Added new JS property to Regions that can be used to determine or change state of player housing in a region: .canPlaceHouse() Updated rules for usage of dye tubs to dye locked down items; now only house owners or co-owners may dye locked down items Updated rules for usage of the following locked down items in a house, which are now only usable by house owners and co-owners Dyes, Guildstone Deeds, Recall Runes (renaming), Rename Deeds, Townstone Deeds, House Deeds, Boat Models, Player Vendor Deeds, Ore, Hair Dye Updated rules for usage of the following locked down items in a house, which are now only usable by house owners, co-owners and friends: Keys, Dye Tubs, Magic Scrolls, Fireworks Wands, Magic Wands, Smithing Tools, Mining Tools, Fishing Poles Updated item lockdown rules to allow locking down (and releasing) items in a container as long as the container is locked down, and to only allow releasing a locked down container if it's empty of locked down items Updated item lockdown rules to only allow locking down movement-blocking items further than 2 tiles away from doors Updated rules for releasing items in houses - now the house owner can release any locked down items, co-owners can release items locked down by themselves or by friends, while friends can release only items locked down by themselves Added some feedback to player about why their attempted house placement failed Items added by GMs directly into multis will now decay based on the house-specific decay timer instead of the regular one Fixed an issue that could cause items to almost instantly decay after being released from lockdown in a house Placing house add-ons now properly takes into account SPACEX and SPACEY values when checking if they can fit in selected area of houses Re-added SPACEX and SPACEY values for Pentagram and Loom house add-ons House add-ons can now be converted back into house add-on deeds by chopping them with an axe Added new item type - IT_HOUSEADDON (201) - used by house add-ons placed in player houses Fixed a bug where keys would stop working after being added to a keyring, and would turn into blank keys upon release from the keyring Added visitor count for public player houses, which keeps track of how many visits a public house has received, with each player counted max 1 time every 24 hours Fixed an issue with FindPlayersInOldVisrange() where it didn't take into account that players could see buildings further away than the standard update range. This could cause players to see ghost images of buildings if they were at the "right" distance when the building was being demolished Added NODECAY tag to all signs and doors in dfndata/house/house.dfn Added FRONTDOOR or INTERIORDOOR (as appropriate) to all doors in dfndata/house/house.dfn Added BANX and BANY to specify ban location for some houses in dfndata/house/house.dfn instead of relying on finding SE corner automatically Implemented strongboxes (js/server/house/strongbox.js) for co-owners of a house, which can be placed with the house command "i wish to place a strongbox". Max capacity is 25 items Updated 'REMOVE command to take an optional parameter - itemID. If supplied, the command will remove all items with this itemID from a targeted container Fixed a bug when checking if dynamic items were blocking valid spawn locations for NPCs, some function arguments were in the wrong order! Improved code that finds valid spawn locations for items and NPCs spawned via spawn regions. As server gradually builds up lists of valid spawn locations per region over time, it will start using these lists more often, rather than always look for brand new spawn locations. Fixed a bug with CMulHandler::CheckStaticFlag() that prevented NPCs from spawning inside buildings with no static floors! Fixed an issue with repeating commands that prevented GMs from being able to cancel them when using the ClassicUO client Exposed character property .accountNum to JS engine Extended CDataList class to include a Clear() method for clearing lists Updated JS File method .Open() to support an optional, third argument - subFolderName - that defines in which sub-folder of UOX3/shared/ to store/look for a file. If no third argument is supplied, UOX3 will default to using the shared folder itself. Updated JS File method .Length() to return a value of -1 for files that don't exist Added new code function, exposed to JS engine with same parameters, which simply checks if a given tile ID has a specific flag bool CheckTileFlag( UI16 itemID, TILEFLAG flagToCheck ) Added JS function used to find the root container of an item (if any) FindRootContainer( itemSerial ) FindRootContainer( item ) Added new JS function that allows deleting files from UOX3/shared/ folder or subfolders of shared folder. If no subFolderName is provided, looks for file directly in shared folder itself. Restrictions on file- and folder-names apply. bool DeleteFile( fileName, subFolderName ) Added new JS functions for checking if a specific client or server feature is enabled. See documentation for full list of client/server features. GetClientFeature( bitNum ) // Returns true if specified client feature is enabled on server GetServerFeature( bitNum ) // Returns true if specified server feature is enabled on server Added new JS function for returning the value of almost any server setting from UOX.INI GetServerSetting( settingNameInDoubleQuotes ) Updated JS function DoesDynamicBlock() with two new parameters - checkOnlyMultis and checkOnlyNonMultis Updated JS function DoesMapBlock() with two new parameters - checkMultiPlacement and checkForRoad Fixed an issue where a LoS check would prevent players from accessing containers in their own backpack Added new functions in findfuncs.cpp to make it easier to find items near another object or location: findNearbyItems( object, distance ) findNearbyItems( x, y, worldNumber, instanceID, distance ) Added new Item property - maxItems - used by containers to determine their max item capacity Added new Item property - totalItemCount - used to get total item count in a container (including sub-containers) Added check for max item capacity when creating new items that are added to a character's backpack - items will be created below character's feet if backpack is full! Added new DFN tag for items, used by containers to determine item capacity for a given container: MAXITEMS=# // 125 is the default for all containers if not set Added new JS Item properties: .maxItems // gets/sets item capacity for a given container .totalItemCount // gets total item count in a container, including sub-containers Updated item tooltips for containers to show accurate total item count, as well as to display max item capacity Fixed a bug where picking up items from a non-locked down pile of items on the floor inside a multi could cause the remaining pile to be seen as no longer inside the multi, disallowing locking it back down and causing it to decay based on regular decay timer instead of house-specific one Updated JS command set to allow setting poison-level on items ('set poison #) and hunger-level on characters ('set hunger #) Fixed an issue with js/item/food.js that prevented poisoned food from poisoning characters when eaten Fixed an issue with js/skill/poisoning.js that prevented players from poisoning food! Updated various JS scripts and hardcoded targeting functions to disallow the targeting of locked down resources using skills and tools Updated JS Method TextMessage() to support three extra, optional parameters. Note that if one optional parameter is included, all preceding optional parameters are also required! speechTarget - What kind of target is this message intended for? 0 - Only visible for sender and receiver of message 1 - Visible to all players in range 2 - Visible to all NPCs and players in range 3 - Visible to all PCs everywhere + NPCs in range 4 - Visible to all PCs everywhere (broadcast) 5 - Only visible for the receiver of the message speechTargetSerial - The serial of the receiver of the message, used if speechTarget is 0 or 5 speechFontType - The type of font to display the text in. Defaults to normal. 0 - Bold 1 - Normal with shadow 2 - Bold with shadow 3 - Normal 4 - Gothic 5 - Italic 6 - Small, dark 7 - Colourful 8 - Runic (only works with CAPS) 9 - Small, light Added timestamp to worldsaves in console, to make it easier to see when a particular world-save was done Added info about compiler/environment displayed at the top of the UOX3 console during startup Updated dictionary files with new messages primarily related to housing
2020-11-04 02:00:37 +08:00
case CIP_ITEMSINSIDE: *vp = INT_TO_JSVAL( gPriv->GetContainsList()->Num() ); break;
case CIP_TOTALITEMCOUNT: *vp = INT_TO_JSVAL( GetTotalItemCount( gPriv )); break;
case CIP_DECAYABLE: *vp = BOOLEAN_TO_JSVAL( gPriv->IsDecayable() ); break;
UOX3 0.99.5b-6 Increased world load speed by almost 20% by reducing how often loading progress is written to the console Increased world save speed by almost 50% through the use of binary mode and buffer tweaks for ofstream combined with a cached newline char and std::to_string instead of static_cast Fixed a server crash involving killing NPCs of a specific spawn region using the 'spawnkill # command Fixed a server crash involving moving items from decaying corpses to the ground Fixed a server crash involving carving up human corpses Fixed a server crash related to AreaCharacterFunction JS function, which could trigger for any script that potentially kills any NPC this function iterates over (like explosion potions) Fixed a server crash related to GMs attempting to add items from add-menu while having no backpack Fixed a client crash issue caused by attempting to sell house deeds back to architect NPCs Fixed an issue where players would get incorrect amounts of gold for selling house deeds back to architect NPCs Fixed an issue with characters dying onboard boats which prevented players from packing up the boats later Added new item property in code (via bools bitset) that can be used to enable/disable maker's mark on crafted items. This property can be set to true for items crafted at exceptional quality by GM craftsmen Exposed the new item property to JS engine: .isMarkedByMaker // If true, maker's mark will be displayed Updated default item tooltip to display " of exceptional quality" for items crafted with exceptional quality Updated default item tooltip to display "[Crafted] by [Crafter's Name]" for exceptional quality items crafted by GM craftsmen. The [Crafted] text comes from the MADEWORD defined in dfndata/skills/skills.dfn for the primary skill used to craft the item Updated old-school single-click names for items (when AoS bit is disabled in client/server features) to display exceptional status and/or maker's mark for appropriate items Fixed an issue with the display of titles for NPCs that used dictionary lookups for their title Added new UOX.INI settings under the [settings] section: DISPLAYMAKERSMARK=1/0 // Controls if maker's marks on crafted items are shown on a global level SHOWNPCTITLESOVERHEAD=1/0 // Controls whether NPC titles are shown over their heads SHOWINVULNERABLETAGOVERHEAD=0/1 // Controls whether invulnerable tags are shown overhead GLOBALRESTOCKMULTIPLIER=1.0 // Global multiplier applied to RESTOCK property of items when loaded from DFNs Added new UOX.INI settings under the [combat] section: PETCOMBATTRAINING=1/0 // Controls whether pets can gain skills/stats from combat HIRELINGCOMBATTRAINING=1/0 // Controls whether hirelings can gain skills/stats from combat NPCCOMBATTRAINING=0/1 // Controls whether NPCs in general can gain skills/stats from combat Fixed an issue where a player meeting the exact minimum requirements for crafting an item would always fail Fixed a bug with teleporting off boats to valid nearby locations when double-clicking boat planks while standing on it Updated behaviour of planks on boats: Boat key can unlock plank, but won't automatically open it Boat key used on an open, unlocked plank will lock and automatically close the plank Boat key used on an open, locked plank will unlock the plank and leave it open Player using an unlocked plank now opens it Player using an open plank will disembark (if onboard) or embark (if not) the boat Player can always open a locked plank if they're on the boat, even with no key, to allow disembarking the boat. Planks that are open, but locked cannot be accessed from outside the boat, and will close automatically after five of seconds Updated behaviour of Magic Lock/Unlock spells: Magic Lock cannot be used on objects inside a multi Magic Lock applies difficulty to lock based on caster's Magery skill Magic Lock effect will last between 7 to 50 seconds (depending on caster's Magery skill) Any object that can be locked via Magic Lock spell can also be unlocked via Magic Unlock spell, if caster has high enough Magery skill Fixed a bug where certain JS Functions, Methods and Properties would occasionally pass incorrect values to scripts that called upon them. Scripts that rely on the GetCurrentClock() Function, the .GetTimer() Method, .decayTime, .logTime, .oreTime and .fishTime Properties might need to be updated to account for the fix, which causes larger values to be passed in than before. Fixed a bug related to GetCurrentClock() that caused decay and respawning of dungeon chests from working properly Fixed a bug related to GetCurrentClock() and .logTime/.fishTime that prevented consumption and regeneration of log/fish resources from working properly Added a new JS Function: GetStartTime() // Returns a timestamp for when server started up Fixed a bug related to GetCurrentClock() where server uptime stats in help menu was showing up incorrectly Fixed a bug related to GetCurrentClock() and purging of registrations of visitors in public houses so their visits can be counted again later Fixed a bug related to GetCurrentClock() that caused monster speech to not work properly Fixed a Z-related issue that sometimes prevented players from fishing when standing on the shoreline next to the sea Fixed an issue with Animal Lore skill that would always return a pet's loyalty level as "Wild" Increased max range pets can be from their owner in order to still be included in moongate/teleporter travel from 12 to 24 tiles Fixed an issue where the alchemy bonus damage for explosion potions was off by an order of magnitude Fixed an issue where food IDs from foodlists referenced by other foodlists was not detected as valid food for tamed pets or NPCs Fixed an issue where Alchemy crafting skill did not properly check for the existence of the crafting tool before proceeding with the crafting process Fixed an issue that prevented the Teleport spell from working as intended Fixed an issue where players would still get 1 gold even if STARTGOLD in uox.ini was set to 0 Fixed an issue with mount restrictions script that prevented players from mounting Unicorns, Ki-rins and Cu Sidhes Fixed an issue where aggressive creatures wouldn't stop attacking player after being tamed (js/skill/taming.js) Added a system message to inform the player when they've dropped out of stealth due to taking too many steps Fixed an issue where hunger level of NPCs instantly dropped upon spawning because hunger timer was not active yet Fixed a bug where character corpses would appear with a [unidentified] tag attached Fixed an issue where the [unidentified] tag did not show up for unidentified magic items Added ANIMAL tag to a small bunch of creature definitions (dfndata/creatures/creatures.dfn) Fixed an issue with Bowcraft skill where player could not gain enough skill from crafting bows to reach min requirement for crossbows, and similiarly could not reach min requirement for heavy crossbows from crossbows Updated default value of MURDERDECAYTIMER INI setting from 60 seconds to 28800 seconds (8 hours), to match the amount of time it would take for one (short term) murder count to decay on LBR-era OSI shards.
2022-08-25 02:13:00 +08:00
case CIP_DECAYTIME: JS_NewNumberValue( cx, gPriv->GetDecayTime(), vp ); break;
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
case CIP_LODAMAGE: *vp = INT_TO_JSVAL( gPriv->GetLoDamage() ); break;
case CIP_HIDAMAGE: *vp = INT_TO_JSVAL( gPriv->GetHiDamage() ); break;
0.99.4d Added new option in UOX.INI under [settings] section: MAPDIFFSENABLED=0/1 // If enabled, server will attempt to load diff files, and send "Enable Map-diff files" packet to client to also load these. Disabled by default. Server no longer loads map/statics diff files by default, nor does it send packet to client to request loading these files, as only client versions below 7.0.8.2 will actively load these files. Can be re-enabled with new UOX.INI setting mentioned above! Fixed incorrect ID for gargish dagger in CHandleCombat::getWeaponType() Added missing weapon entries in CHandleCombat::getWeaponType(): bladed whip, barbed whip, spiked whip, gargish talwar Fixed an issue that would show the end part of some tiledata names as garbled text instead of cutting off the text(!) at 20 characters Fixed an issue with advanced character creation template when using ClassicUO client, which sends a profession value of 255 instead of 0 when no profession template has been selected. Fixed an issue where clones of NPCs that can split in combat didn't get the NPC flag correctly set Guild titles are now removed for players who leave their guilds Enabled closing some hard-coded gump menus using right-click (howto, guild, towns, wholist, addmenu, craftmenu, info) Fixed an issue where adding base items using 'add [itemID] would sometimes get false positive hits from harditems.dfn, depending on the length of the itemID Fixed an issue where items added using 'add [itemID] would not get names applied properly from harditems.dfn Item/NPC DFN tag GET can now inherit a random parent by adding additional values separated by spaces. Syntax: GET=parent1 parent2 parent3 (etc) Fixed an issue where NPC backpacks would not have the max item capacity set properly Added new properties for CItem objects (also exposed as JS Item Properties): maxRange // max distance a ranged weapon can fire at (replaces ARCHERRANGE ini setting) baseRange // base distance throwing weapons (when implemented) can be used at Added support for new Item DFN tag that replaces global UOX.INI setting ARCHERRANGE: MAXRANGE=# // Specifies max range of ranged weapon Added support for new Item/NPC DFN tags to support randomizing elemental resistances: RESISTFIRE=#/# # // Set NPC's poison resistance; fixed or random value RESISTCOLD=#/# # // Set NPC's poison resistance; fixed or random value RESISTLIGHTNING=#/# # // Set NPC's poison resistance; fixed or random value RESISTPOISON=#/# # // Set NPC's poison resistance; fixed or random value Added support for two new DFN tags in dfndata/race/races.dfn that can be used to allow/ban lists of equipment for specific races ALLOWEQUIPLIST=# BANEQUIPLIST=# Added support for new section in dfndata/race/races.dfn - [EQUIPLIST #], which can be used to define lists of equipment that is whitelisted or banned for specific races. Fixed a bug that would report incorrect weight in tooltips for Item/NPC spawner objects ScriptSections are now reapplied for items bought by players from NPC vendors Fixed an issue where players could drop an item on the ground and other players would still see the item after it was picked up, because of a failed distance check vs old location coordinates (in pack) instead of vs current location on ground Fixed a bug with players being able to use last-target macro to target objects picked up and held by other players on their cursor Updated all references to "devinelock" to be "divinelock" instead - this includes the name of the JS Item property Fixed house commands triggering (useless) targeting cursors for players onboard boats Changed default statcap in UOX.INI from 325 to 225 Fixed a out-of-range error for players attempting to combine ore inside their own backpack Fixed various issues with distance checks and container checks when using/target objects Added optional 4th "hue" parameter to AddGump JS method Added JS Function to get total amount of accounts on server - GetAccountCount() Added JS Function to get total amount of players online - GetPlayerCount() onSwing JS Event can now trigger in scripts attached to items, not just items attached to characters Added some JS Functions to expose some hard-coded constants to JS scripts: BASEITEMSERIAL() // Base item serial INVALIDSERIAL() // Invalid serial INVALIDID() // Invalid ID INVALIDCOLOUR() // Invalid colour Fixed an issue where JS character property .colour would modify origSkin property instead of colour Fixed an issue where JS character property .guildTitle returned the name of the character instead of the guild title Character JS property .poison can now also be used to set a character's poisoned level, not just read it Exposed Item property to JS engine: .ac // armour class for item (0-128). Primarily used for setting race-restrictions for equippable items, i.e. race X cannot equip items of armour class Y. .def // defensive value of item (Physical resistance post-AoS, AR in older UO) // NOTE: The following properties don't actually do anything yet, but can still be used in custom JS scripts if desired .resistCold // Cold resistance of item 0-1000, where 1000 equals 100.0% .resistHeat // Heat/Fire resistance of item 0-1000, where 1000 equals 100.0% .resistLight // Light resistance of item 0-1000, where 1000 equals 100.0% .resistLightning // Energy/Lightning resistance of item 0-1000, where 1000 equals 100.0% .resistPoison // Poison resistance of item 0-1000, where 1000 equals 100.0% .resistRain // Rain resistance of item 0-1000, where 1000 equals 100.0% .resistSnow // Snow resistance of item 0-1000, where 1000 equals 100.0% .damageHeat // Weapon deals Heat/Fire elemental damage (true/false) .damageCold // Weapon deals Cold elemental damage (true/false) .damageLight // Weapon deals Light elemental damage (true/false) .damageLightning // Weapon deals Lightning elemental damage (true/false) .damagePoison // Weapon deals Poison elemental damage (true/false) .damageRain // Weapon deals Rain/Water elemental damage (true/false) .damageSnow // Weapon deals Snow/Ice elemental damage (true/false) Added new UOX.INI setting under [server] to enable/disable shard response to ConnectUO server polling (disabled by default) Sub-commands are no longer included when registering packets to be overloaded via RegisterPacket function, as that part was never fully implemented. Packet-hook scripts can be setup for specific packet IDs, but any sub-command checking will need to be done in the script itself JS Packet Method GetDWord() now uses JS_NewNumberValue instead of INT_TO_JSVAL to read from the socket buffer, to better handle large numbers, which could previously be returned with wrong values. JS Function CalcItemFromSer() now uses a JS_GetStringBytes() and str_value() combo instead of JSVAL_TO_INT() to read the data provided in the function argument. This allows JS scripts to provide item serials to the function directly without needing to split it into four parts first (though that still works) Fixed issue where JS properties for multis didn't always return correct values The 'set command can now be used to set the armour class of items ('set ac #) Reimplemented 'tweak command in JS engine (js/commands/targeting/tweak.js) - can be used to view and modify properties of characters, character skills, items, multis and regions (target ground) Added placeholder packet-hook script (js/server/network/0xf1_connectUoServerPoll.js) to handle responses to ConnectUO server polling. By default this script does nothing, but serves as a placeholder for drop-in replacement scripts generated specifically for each shard by the ConnectUO service. Updated some commands to support an alternate STATIC keyword (can also be ommitted) to add base items: 'add static itemID 'tile static itemID Updated some commands with support for randomization. Provided itemID will be randomized based on provided rndValue: /js/commands/targeting/add.js: 'add itemID rndValue cmdtable.cpp and targeting.cpp: 'tile itemID rndValue 'tile itemID x1 x2 y1 y2 z rndValue Updated js/commands/custom/repeatingcmds.js to support 'm delete as an alias for 'rremove Added 'props as an alias for the 'tweak command Added 'teleport as an alias for the 'tele command (js/commands/targeting/tele.js) Added 'shavehair and 'shavebeard as aliases for 'kill hair and 'kill beard (js/commands/targeting/kill.js) Added 'noinvul and 'mortal aliases for the 'invul false command (js/commands/custom/misc-cmds.js) Added 'immortal and 'invul (without parameter) as aliases for the 'invul true command Added 'bringtopack as an alias of 'movetobag command (js/commands/targeting/movetobag.js) Updated check for cancelling of target cursor in various JS scripts Minor updates to various JS scripts Fixed issue where some item definitions in dfndata/harditems/harditems.dfn and dfndata/items/building/lighting.dfn used comma instead of space as delimiter for the VALUE tag, which thus never got applied Updated all NPC definitions to let NPCs spawn facing in random directions
2021-03-22 05:59:20 +08:00
case CIP_AC: *vp = INT_TO_JSVAL( gPriv->GetArmourClass() ); break;
case CIP_DEF: *vp = INT_TO_JSVAL( gPriv->GetResist( PHYSICAL )); break;
Rework of passive stat regeneration Updated code calculating passive health, stamina and mana regeneration for characters, based on new UOX.INI settings and bonuses from characters/items/races Added three new Character/Item/Race DFN tags to grant bonus health/stamina/mana regeneration: HEALTHREGENBONUS=# // 10 bonus points equates to 0.01 extra hp regen per second, independent of era STAMINAREGENBONUS=# // 10 bonus points equates to 0.05 extra stamina regen per second MANAREGENBONUS=# // 10 bonus point equates to 0.1 extra mana regen per second ...also available as JS Properties: .healthRegenBonus .staminaRegenBonus .manaRegenBonus Updated get/set JS commands to allow getting/setting regen bonuses for health, stamina and mana Updated races.dfn to include default +2 health regen bonus for humans, and +2 mana regen bonus for gargoyles. Added new UOX.INI settings under [Skills and Stats] section: HEALTHREGENMODE=1 // 0 = no passive health regen, 1 = default passive health regen STAMINAREGENMODE=1 // 0 = no passive stamina regen, 1 = default passive stamina regen (LBR or below), 2 = AoS or beyond, 3 = SA and beyond MANAREGENMODE=1 // 0 = no passive mana regen, 1 = default passive mana regen (LBR or below), 2 = AoS (Pub17), 3 = AoS/SE (Pub18 and beyond), 4 = ML, 5 = KR, 6 = SA and beyond HEALTHREGENCAP=# // Max cap for Health Regeneration Bonus stat per character STAMINAREGENCAP=# // Max cap for Stamina Regeneration Bonus stat per character MANAREGENCAP=# // Max cap for Mana Regeneration Bonus stat per character Added new UOX.INI section ([default race bonuses]) with the following new settings for the 3 default playable races (only used if nothing else specified in races.dfn): HUMANHEALTHREGENBONUS=0 // default health regen bonus for human race (2 from ML expansion onwards) HUMANSTAMINAREGENBONUS=0 // default stamina regen bonus for human race HUMANMANAREGENBONUS=0 // default mana regen bonus for human race ELFHEALTHREGENBONUS=0 // default health regen bonus for elf race ELFSTAMINAREGENBONUS=0 // default stamina regen bonus for elf race ELFMANAREGENBONUS=0 // default mana regen bonus for elf race GARGOYLEHEALTHREGENBONUS=0 // default health regen bonus for gargoyle race GARGOYLESTAMINAREGENBONUS=0 // default stamina regen bonus for gargoyle race GARGOYLEMANAREGENBONUS=0 // default mana regen bonus for gargoyle race (2 from SA expansion onwards) Updated UOX3 Documentation with new feature section on Stat Regeneration with details on stat regeneration rules and recommended settings per UO era Added support for Medable armors (have no effect on meditation skill and/or passive regen of mana when worn) and Mage Armors (can turn non-medable armor into medable armor) These properties are defined per armor piece using the first and second bits of the MORE property: MORE=0x1 0x0 0x0 0x0 // Medable Armor MORE=0x0 0x1 0x0 0x0 // Mage Armor The following armor types have been marked as medable by default: leather armor, leather ninja armor, leather samurai armor, leaf armor, gargish cloth armor, gargish leather armor and all hats and masks Updated JS Method .Defense() to support optional fourth and fifth parameters - excludeMedableArmor (true/false) and includeShield (true/false) Updated CalfDef function to support including shields in the calculations, and updated mana regen code to include shields when checking for equipped armor Updated Meditation skill JS script to exclude medable armor from armor check, include shields, and apply different rules for active meditation depending on mana regen mode Updated stat window to include defensive rating of shields (based on Parrying skill) and/or elemental resistances (if enabled in ini) Added a new property to CRace class, which is automatically set and incremented as UOX3 loads in races from races.dfn: raceID Added new Getters/Setters for CRace class to retrieve ID of a specific Race object Updated JS property .id for Race JS Object to return new race ID instead of iterating through list of races to compare race object and return index Reloading DFNs now also reloads Races
2025-04-20 06:05:44 +08:00
case CIP_HEALTHREGENBONUS: *vp = INT_TO_JSVAL( gPriv->GetHealthRegenBonus() ); break;
case CIP_STAMINAREGENBONUS: *vp = INT_TO_JSVAL( gPriv->GetStaminaRegenBonus() ); break;
case CIP_MANAREGENBONUS: *vp = INT_TO_JSVAL( gPriv->GetManaRegenBonus() ); break;
case CIP_RESISTCOLD: *vp = INT_TO_JSVAL( gPriv->GetResist( COLD )); break;
case CIP_RESISTHEAT: *vp = INT_TO_JSVAL( gPriv->GetResist( HEAT )); break;
case CIP_RESISTLIGHT: *vp = INT_TO_JSVAL( gPriv->GetResist( LIGHT )); break;
case CIP_RESISTLIGHTNING: *vp = INT_TO_JSVAL( gPriv->GetResist( LIGHTNING ));break;
case CIP_RESISTPOISON: *vp = INT_TO_JSVAL( gPriv->GetResist( POISON )); break;
case CIP_RESISTRAIN: *vp = INT_TO_JSVAL( gPriv->GetResist( RAIN )); break;
case CIP_RESISTSNOW: *vp = INT_TO_JSVAL( gPriv->GetResist( SNOW )); break;
case CIP_DAMAGECOLD: *vp = BOOLEAN_TO_JSVAL( gPriv->GetWeatherDamage( COLD )); break;
case CIP_DAMAGEHEAT: *vp = BOOLEAN_TO_JSVAL( gPriv->GetWeatherDamage( HEAT )); break;
case CIP_DAMAGELIGHT: *vp = BOOLEAN_TO_JSVAL( gPriv->GetWeatherDamage( LIGHT )); break;
case CIP_DAMAGELIGHTNING: *vp = BOOLEAN_TO_JSVAL( gPriv->GetWeatherDamage( LIGHTNING )); break;
case CIP_DAMAGEPOISON: *vp = BOOLEAN_TO_JSVAL( gPriv->GetWeatherDamage( POISON )); break;
case CIP_DAMAGERAIN: *vp = BOOLEAN_TO_JSVAL( gPriv->GetWeatherDamage( RAIN )); break;
case CIP_DAMAGESNOW: *vp = BOOLEAN_TO_JSVAL( gPriv->GetWeatherDamage( SNOW )); break;
2025-01-14 22:16:11 -06:00
case CIP_SWINGSPEEDINCREASE: *vp = INT_TO_JSVAL( gPriv->GetSwingSpeedIncrease() ); break;
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
case CIP_SPEED: *vp = INT_TO_JSVAL( gPriv->GetSpeed() ); break;
2025-01-16 21:30:32 -06:00
case CIP_DURABILITYHPBONUS: *vp = INT_TO_JSVAL( gPriv->GetDurabilityHpBonus() ); break;
case CIP_LOWERSTATREQ: *vp = INT_TO_JSVAL( gPriv->GetLowerStatReq() ); break;
2024-06-18 18:28:50 -05:00
case CIP_HEALTHLEECH: *vp = INT_TO_JSVAL( gPriv->GetHealthLeech() ); break;
case CIP_STAMINALEECH: *vp = INT_TO_JSVAL( gPriv->GetStaminaLeech() ); break;
case CIP_MANALEECH: *vp = INT_TO_JSVAL( gPriv->GetManaLeech() ); break;
2024-06-14 14:38:03 -05:00
case CIP_HITCHANCE: *vp = INT_TO_JSVAL( gPriv->GetHitChance() ); break;
case CIP_DEFENSECHANCE: *vp = INT_TO_JSVAL( gPriv->GetDefenseChance() ); break;
case CIP_LUCK: *vp = INT_TO_JSVAL( gPriv->GetLuck() ); break;
2024-06-16 18:57:27 -05:00
case CIP_HEALTHBONUS: *vp = INT_TO_JSVAL( gPriv->GetHealthBonus() ); break;
case CIP_STAMINABONUS: *vp = INT_TO_JSVAL( gPriv->GetStaminaBonus() ); break;
case CIP_MANABONUS: *vp = INT_TO_JSVAL( gPriv->GetManaBonus() ); break;
case CIP_ARTIFACTRARITY: *vp = INT_TO_JSVAL( gPriv->GetArtifactRarity() ); break;
case CIP_DAMAGEINCREASE: *vp = INT_TO_JSVAL( gPriv->GetDamageIncrease() ); break;
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
case CIP_NAME2:
2022-06-15 19:19:40 -04:00
tString = JS_NewStringCopyZ( cx, gPriv->GetName2().c_str() );
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
*vp = STRING_TO_JSVAL( tString );
break;
case CIP_ISCHAR: *vp = JSVAL_FALSE; break;
case CIP_ISITEM: *vp = JSVAL_TRUE; break;
case CIP_ISSPAWNER: *vp = BOOLEAN_TO_JSVAL( gPriv->GetObjType() == OT_SPAWNER ); break;
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
case CIP_RACE:
{
2021-06-12 07:30:23 -04:00
CRace *TempRace = nullptr;
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
TempRace = Races->Race( gPriv->GetRace() );
2021-06-12 07:30:23 -04:00
if( TempRace == nullptr )
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
{
*vp = JSVAL_NULL;
}
else
{
// Otherwise Acquire an object
JSObject *myRace = JSEngine->AcquireObject( IUE_RACE, TempRace, JSEngine->FindActiveRuntime( JS_GetRuntime( cx )));
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
*vp = OBJECT_TO_JSVAL( myRace );
}
break;
2002-04-07 20:53:41 +00:00
}
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
case CIP_MAXHP: *vp = INT_TO_JSVAL( gPriv->GetMaxHP() ); break;
case CIP_MAXUSES: *vp = INT_TO_JSVAL( gPriv->GetMaxUses() ); break;
case CIP_USESLEFT: *vp = INT_TO_JSVAL( gPriv->GetUsesLeft() ); break;
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
case CIP_RANK: *vp = INT_TO_JSVAL( gPriv->GetRank() ); break;
0.99.4x Fixed an issue where the color of NPC corpse names would not always match up with the NPC's flag color Fixed a bug where the baseRange and maxRange properties of ranged weapons would not get saved to world files. These values are now saved in the format of RANGE=baseRange,maxRange Changed the way items are added to containers, to ensure that the order in which the items are displayed to the player always reflects the order in which they were added; now the most recent item added/moved in a container will always be rendered on top of older items. Made adjustments to how items are randomly added to containers; should use more of a given container gump's available area now Exposed Item property to JS engine, which contains serial of the creator of an item: .creator // contains serial of the creator of an item. If set, maker's marks will show up in the item's tooltip Fixed an issue where JS engine would lose track of script context if one script used CreateDFNItem() or SpawnNPC() functions and the new objects had events that triggered upon creation. UOX3 now restores the original script context at the tail end of these functions. Added new JS Event to allow inserting custom tooltip text for objects, which will be displayed in tooltips right after the object name. Any text returned from the event will be displayed, and the text can make use of the same HTML tags as gumps to make changes to color, font, etc. onTooltip( myObj ) // Triggers for objects right before the object's tooltip properties are sent to client Updated 'tweak and 'set commands to refresh item being modified if movable state of item changes, so the change is reflected in nearby clients Fixed an issue with NPC vendors and items bought from players not being properly removed from the vendor's "bought container" when players buy them again Ported Item Identification skill from code to JS (js/skill/itemid.js) and removed hard-coded version Implemented magic item generator in JS (js/item/magic_item.js). When this script is attached to an NPC, it has a chance to generate magic weapons, armors, wands/staffs and rings as loot on the NPC's corpse when slain. The chance of getting quality magical items increases with the fame level of the NPC in question. The types of magical items generated follows the pattern of such items as implemented in UO prior to the AoS expansion. Examples: exceedingly accurate war hammer of vanquishing substantial, accurate axe of power and Daemon's Breath silver long sword massive platemail arms of Protection metal shield of defense durable ringmail tunic of guarding All magic items have a chance to have spell effects attached (with rings/wands being guaranteed to have these), with a limited amount of charges available. For weapons, these effects activate on successful hits in combat, while for armors they activate on equip, and then periodically as long as the item is worn. Rings and wands/staffs have to be manually activated and targeted - with the exception of rings of invisibility, which activate the moment you equip them! Related scripts: js/item/magic_armor_equipeffects.js js/item/magic_weapon_accbonus.js js/item/magic_weapon_equip.js js/item/magic_weapon_spell_attack.js The magic item loot generation script has been attached to a number of different NPCs, all of which now have a chance to drop magic items as loot when defeated. A bonus magical item - the glacial staff - has also been implemented (js/item/magic_glacial_staff.js), and has a chance to drop as loot from Giant Ice Serpents! Fixed an issue with CustomTarget where the target message would not be displayed if the cursorType parameter was provided Fixed bug with 'rename command, which referenced a non-existing variable that caused a script crash Added additional object properties to 'get and 'set commands: .shouldSave // Determines if an item should be saved in worldfiles or not .baseRange // Determines the base range of a ranged weapon, less than which it becomes less effective .maxRange // Determines the max range of a ranged weapon, beyond which it cannot reach its target The feature that allows stats like Strength, Dexterity and Intelligence to provide bonuses to skill checks has been turned into a UOX.INI setting, which is disabled by default. The bonuses have also been nerfed; they will no longer contribute more to the success of a skill check than the actual skill being checked! STATSAFFECTSKILLCHECKS=0/1 // If enabled, stats can provide bonuses to skill checks based on the weighting for those stats as setup in dfndata/skills/skills.dfn Updated damage tracking code to include the type of damage that was dealt (PHYSICAl vs HEAT vs COLD, etc) Updated Character JS Method Damage() to include a new parameter that can specify the type of damage that was dealt to the character. The new parameter must always be included if other optional parameters are used. Note that updates might be required for scripts making use of this method.Updated syntax: .Damage( amount ) .Damage( amount, damageType ) .Damage( amount, damageType, attacker ) .Damage( amount, damageType, attacker, doRepsys ) Supported damageTypes: PHYSICAL = 1 LIGHT = 2 RAIN = 3 COLD = 4 HEAT = 5 LIGHTNING = 6 // magic damage POISON = 7 SNOW = 8 Updated JS Event OnDamage to include an additional parameter that describes the type of damage that was dealt. New syntax: onDamage( damaged, attacker, damageValue, damageType ) Updated JS Event OnSpellTarget to allow rejecting a spell being cast on a target by returning a value of 2 from the script Split the character priv flag for magic reflection into a temporary one (one-time magic reflection spell) and a permanent one (innate permanent reflection ability). The temporary effect is put in place by Magic Reflection spell, and is removed after a successful spell reflect. The permanent one is an innate ability of a character and is not removed even after a spell is reflected. Added new Character JS property to get/set state of a character's permanent magic reflect ability: .permanentMagicReflect // 0 = disable, 1 = enable Added special abilities/effects for the following NPCs: Acid Elementals now have a chance to damage the melee weapons of their attackers Dull Copper Elementals now explode on death Shadow Iron Elemental is immune to targeted spell damage Copper Elementals have permanent magic reflect, and reflect some physical damage back at their attacker Bronze Elementals deal passive area damage to nearby players every 5 to 10 seconds Valorite Elementals have permanent magic reflect, reflect some physical damage back at their attacker Snow/Ice Elementals deal passive area damage to nearby players every 5 to 10 seconds Lava Serpents deal passive area damage to nearby players every 5 to 10 seconds Phoenixes deal passive area damage to nearby players every 5 to 10 seconds Pixies have a chance to cast a random spell upon receiving a death blow: Bless (target) Curse (target) Explosion (target) Greater Poison (target) Greater Heal (self, prevents death) Ethereal Warriors will now resurrect dead players with positive karma Ethereal Warriors now have a chance to drain target's health, stamina or mana on hit Fire Breath special ability added to the following NPCs, with the random ability damage scaling with the NPCs current health: Hell Cat, 5 to 8 dmg at max health Fire Steed, 6 to 9 dmg at max health Hell Hounds, 8 to 11 dmg at max health Lava Lizard, 8 to 11 dmg at max health Predator Hell Cat, 9 to 14 dmg at max health Sea Serpent, 11 to 17 dmg at max health Swamp Dragon, 15 to 22 dmg at max health Armored Swamp Dragon, 15 to 22 dmg at max health Fire Gargoyle, 20 to 30 dmg at max health Deep Sea Serpent, 21 to 32 dmg at max health Serpentine Dragon, 22 to 32 dmg at max health Drake (Gray), 22 to 32 dmg at max health Drake (Red), 22 to 32 dmg at max health Nightmare, 26 to 39 dmg at max health Dark Steed, 26 to 39 dmg at max health Silver Steed, 26 to 39 dmg at max health Kraken, 39 to 59 dmg at max health Dragon (Red), 41 to 62 dmg at max health Dragon (Gray), 41 to 62 dmg at max health Shadow Wyrm, 50 to 75 dmg at max health Reptalon, 51 to 77 dmg at max health Skeletal Dragon, 52 to 77 dmg at max health Ancient Wyrm, 60 to 90 dmg at max health Update stats, skills and loot for all currently implemented NPCs Removed an ancient piece of code that prevented corpses from being generated for various elementals and blade spirits on death. This was originally put in place because these creatures had no corpses, and would replace it with a backpack instead, but these creatures now all have corpses in all client versions supported by UOX3 Updated potions script (js/item/potion.js) with updated formula for amount of hitpoints healed by healing potions, and added restrictions for using them when at full health and/or if poisoned (Dragon Slayer) Fixed a bug where creatures (and humans, if FORCENEWANIMATIONPACKET was disabled in uox.ini) would play animations with wrong frame count, causing the animations to either freeze for a few frames at the end, or get cut off a couple of frames early Implemented bonus hit chance for Archery skill, based on mention of such a bonus in Publish 5 patch notes and related UO House of Commons chat. This has been exposed as a UOX.INI setting where this bonus can be tweaked: ARCHERYHITBONUS=10 // Bonus hit chance for Archery skill added to regular hit chance in combat. Defaults to 10% Implemented optional extra delay between moving and being able to shoot with ranged weapons in combat (in addition to whatever delay is there due to speed of the ranged weapon). This is exposed as a UOX.INI setting: ARCHERYSHOOTDELAY=0.5 // Minimum delay in seconds from a player stops moving until they can start to fire their ranged weapon. Defaults to 0.5s Fixed a bug where players who never entered combat mode could fire ranged weapons while moving Updated Add-menu with some improvements for usability: Menu now directly on the Objects (previously "Shard") tab for quicker access, with a small welcome text and quick-link button for UOX3 docs Settings tab contains some (persistent, will be saved with character) options for how the Add-menu behaves, along with a few quick-access buttons to some useful commands. Available options: Option to add chosen item at specific location instead of in GM's backpack Option to add chosen item repeatedly until cancelled Option to automatically reopen Add-menu on last menu that was open when a selection is made Option to force decayable state of all added items to either off (doesn't decay), on (decays) or nothing (use item default) Option to force movable state of all added items to either off (not movable), on (movable) or nothing (use item default) Added a Home button at the bottom of the menu, that takes the user back to the front page of the Add-menu regardless of which menu page they're on Updated Character/Socket JS Method SysMessage() with an optional parameter to specify the color used to display the system message. Updated syntax: .SysMessage( "Text" ) // Display "Text" to user as a system message with default system message color from ini .SysMessage( "Text %s %s", txtArg1, txtArg2 ) // Display "Text" to player with string arguments injected into text .SysMessage( txtColor, "Text" ) // Display "Text" to user with a specified color .SysMessage( txtColor, "Text %s %s", txtArg1, txtArg2 ) // Combination of text color, text and string arguments Fixed a bug where hair/beard items could show up inside corpses Fixed a bug where items could sometimes vanish (visually) from containers when bouncing back because player was not able to pick them up Fixed a bug where players would be unable to pick up a freely movable item from a locked down container Updated handling of item bouncing on pickup to use UOX3 dictionary messages instead of hard-coded client messages Added support for new Dictionary language: dictionary.POL - Polish (SERVERLANGUAGE=8 in uox.ini, or client language 83 if SERVERLANGUAGE is set to 0) Added taming restrictions for Unicorn, Ki-Rin and Cu Sidhe (js/skill/taming.js) Added modification of some creatures stats after they've been tamed (js/skill/taming.js) Added restrictions for who can ride certain creatures (Unicorn, Ki-Rin, Cu Sidhe) Updated words of power for Meteor Swarm spell to follow the same logic as other spells using Kal (Summon): Kal Des Flam Ylem Added new Item/Character JS Methods to get/set temporary custom tags which don't persist across worldsaves (or across reconnects, for players): .GetTempTag( "tagName" ) .SetTempTag( "tagName", tagValue ) When applying HPMAX, STAMINAMAX AND MANAMAX DFN tags to new NPCs, their current HP, STAMINA and MANA properties will now be automatically updated to match Fixed a server crash caused by empty speech messages sent from certain clients Fixed a bug that prevented teleport locations in Felucca/Trammel from working properly Updated calculations in code for duration and damage of existing poison strengths (1 - Lesser, 2 - Normal, 3 - Greater, 4 - Deadly) to match with ~Publish 15 (LBR/pre-AoS), and added another poison strength for monster usage (5 - Lethal) The strength of the Poison and Poison Field spells is now based on the average of the caster's Magery and Poisoning skills, the distance from the target (Poison spell only) and the target's Resisting Spells skill. If caster is further away than 2 tiles from target, the poison strength always equals Lesser Poison, otherwise the following rules apply: If caster's combined skill is higher than 100.0, poison strength equals Greater Poison, with 5% chance of Deadly Poison (if Poison spell) or Deadly Poison (if Poison Field spell) If caster's combined skill is higher than 70.2, poison strength equals Greater Poison If caster's combined skill is higher than 30.2, poison strength equals Normal Poison If caster's combined skill is 30.2 or lower, poison strength equals Lesser Poison If target resists spell, poison strength is reduced by 1 level, unless it's already at the lowest level Fixed an issue that would would let players move faster than they should have been allowed to Fixed misc issues with Party System: Mana and Stamina should now update for Party Members when added to the party, when going in/out of range and when their stats update while in range Players who get disconnected or relog should now find themselves back in the same party they were in previously Added system messages to inform party members about updates to their party, and to let invited players know they've successfully joined a party (or rejoined, if relogging) World saves now operate on the principle of only saving changes done since the last world save. Combined with the fact that NPCs in UOX3 are only active if there are players in the same/neighbouring map regions, shard owners may expect to see a decrease in world save times ranging from ~11% to ~99%, depending on how active and how spread out their player base is. If no changes have taken place since last save, saves are virtually instantaneous!
2021-09-20 21:35:17 +08:00
case CIP_CREATOR: *vp = INT_TO_JSVAL( gPriv->GetCreator() ); break;
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
case CIP_POISON: *vp = INT_TO_JSVAL( gPriv->GetPoisoned() ); break;
case CIP_POISONEDBY: *vp = INT_TO_JSVAL( gPriv->GetPoisonedBy() ); break;
0.99.6d Cleaned up an issue with last commit where wrong npclists were used in some spawn regions Made a few additional adjustments to the new spawn regions in Lost Lands/New Haven Included more changes related to poison updates that should've been in previous commit (like the complete UOX.INI support for POISONCORROSIONSYSTEM setting) Adjusted region setup for New Haven to set the individual "building" regions within as a sub-region of the main town (regions.dfn) Fixed an issue where the displayed HP of an equipped item would not update correctly Further updates to convert timers 32-bit to 64-bit. This affects and addresses some potential issues with: Character creation/NPC guild-join timestamps, NPC movement, combat timers, idle timeouts, item decay, spellcasting Added support for new JS Events that can trigger from global script, and can be used to store persistent custom entries in players' paperdoll profiles: onProfileRequest( socket, profileOwnerChar ) - Triggers when client requests data for a paperdoll profile onProfileUpdate( socket, updatedText ) - Triggers when client sends updated data from paperdoll profile Added two new helper functions in code that allows faster (but very slightly less accurate) distance checks between two points: GetApproxDist( Point3_st a, Point3_st b ) GetApproxDist( CBaseObject *a, CBaseObject *b ) Improved pathfinding for NPCs attempting to follow another character, by adopting a system of weighted variables to help the NPC determine when to recalculate the path vs when to stick with the old, combined with faster distance checks via GetApproxDist(). The end result of this is faster, smarter and more responsive NPC followers and NPC opponents in combat. The variables influencing this include: how far the target has moved from last pathfind target location, whether NPC is heading in the overall right direction or not, time since last path calculation and some small randomization to avoid edge case jitters. Updated default command levels in commands.dfn, code and scripts to support the Seer role and make space for some custom roles. These are the new defaults as listed in commands.dfn, which should not be changed as they are linked to specific enums in code. Do take note that this might invalidate command levels for existing GMs/Seers/Counselors, who might need another round of 'make gm/seer/cns from an admin: ADMIN - command level 10 GM - command level 9 SEER - command level 7 CNS - command level 4 PLAYER - command level 0 Updated how UOX3 makes use of the account-level flags 0x2000 (Seer) and 0x4000 (Counselor). If either of these flags are set on an account, all new characters created on the accounts will automatically receive the relevant command privileges. Fixed an issue with 'wholist command that prevented admin characters from seeing characters with lower privilege levels in the list (js/commands/wholist.js) Fixed an issue with hiding/GM hide that prevented admin characters from seeing hidden characters with lower privilege levels in the world UOX3 now includes the cross-platform, header-only utf8cpp library found at https://github.com/nemtrif/utfcpp and freely available under Boost Software License v1.0. The immediate use-case for this is in code right now is to better handle strings related to custom paperdoll profiles, but will also look to make more heavy use of this in future updates
2025-06-28 22:37:42 +08:00
case CIP_POISONCHARGES: *vp = INT_TO_JSVAL( gPriv->GetPoisonCharges() ); break;
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
case CIP_DIR: *vp = INT_TO_JSVAL( gPriv->GetDir() ); break;
case CIP_WIPABLE: *vp = INT_TO_JSVAL( gPriv->IsWipeable() ); break;
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
case CIP_BUYVALUE: *vp = INT_TO_JSVAL( gPriv->GetBuyValue() ); break;
case CIP_SELLVALUE: *vp = INT_TO_JSVAL( gPriv->GetSellValue() ); break;
case CIP_VENDORPRICE: *vp = INT_TO_JSVAL( gPriv->GetVendorPrice() ); break;
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
case CIP_RESTOCK: *vp = INT_TO_JSVAL( gPriv->GetRestock() ); break;
2023-11-12 18:53:43 -07:00
case CIP_GOOD: *vp = INT_TO_JSVAL( gPriv->GetGood() ); break;
case CIP_DIVINELOCK: *vp = BOOLEAN_TO_JSVAL( gPriv->IsDivineLocked() ); break;
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
case CIP_WEIGHT: *vp = INT_TO_JSVAL( gPriv->GetWeight() ); break;
case CIP_WEIGHTMAX: *vp = INT_TO_JSVAL( gPriv->GetWeightMax() ); break;
case CIP_BASEWEIGHT: *vp = INT_TO_JSVAL( gPriv->GetBaseWeight() ); break;
Housing Revamp and more Updated JS SysMessage function to accept up to 10 extra, optional arguments, which can be used with dictionary messages that require additional parameters like %s or %i Added new type of house privilege in cMultiObj.cpp to keep track of friends of the multi - HOUSEPRIV_FRIEND - which is stored during worldsaves as one or more Friend=<player serial> tags in house.wsc Added new type of house privilege in cMultiObj.cpp to keep track of guests of the multi - HOUSEPRIV_GUEST - which is stored during worldsaves as one or more Guest=<player serial> tags in house.wsc When items are created for houses upon house placement, a reference to the multi's serial is now stored in the house sign's MORE property to allow easier tracking of which house a particular sign belongs to Added tracking of new, persistent properties for houses via cMultiObj.cpp/h: lockdowns, secure containers, vendors, guests, friends, owners, ban location, public status, number of visits, timestamps Added a multitude of new methods in cMultiObj.cpp/h to assist in improving the functionality of houses Added new tags for houses in house.dfn (default values applied if tag not specified): MAXSECURECONTAINERS=4 - Max amount of secure containers allowed in a multi MAXLOCKDOWNS=256 - Max amount of lockdowns allowed in a multi MAXVENDORS=10 - Max amount of vendors allowed in a multi MAXBANS=50 - Max amount of bans in a multi's ban list MAXFRIENDS=50 - Max amount of friends in a multi's friend list MAXGUESTS=50 - Max amount of guests in a multi's guest list MAXOWNERS=8 - Max amount of owners and co-owners in a multi's owner list MAXTRASHCONTAINERS=1 - Max amount of trash containers allowed in multi SCRIPT=<scriptID> - Assign a JS script-ID directly to a multi FRONTDOOR - indicates that a door is the front door of a house. Cannot be locked in public houses! INTERIORDOOR - indicates that a door is an interior door of a house. Can be locked in public houses. BANX - Location X offset for multi's ban location, if not used, will try to use SE corner of multi instead BANY - Location Y offset for multi's ban location, if not used, will try to use SE corner of multi instead Added JS Event: onHouseCommand( tSock, multiObj, cmdID ) - For handling spoken house commands via JS scripts attached to multi. Updated JS Events: onEntrance() - can now trigger both for multi being entered and/or object entering onLeaving() - can now trigger both for multi being left and/or object entering onSpeech() - can now also trigger for items (in addition to chars) with event & script attached, if UOX.INI setting ITEMSDETECTSPEECH is enabled Added JS Multi methods: .IsBoat() - Returns whether the item (or multi) is a boat .IsOwner( playerToCheck ) - Returns whether a player is the owner of a multi .IsOnOwnerList( playerToCheck ) - Returns whether a player is on the (co-)owner list of a multi .IsOnFriendList( playerToCheck ) - Returns whether a player is on the friend list of a multi .IsOnGuestList( playerToCheck ) - Returns whether a player is on the guest list of a multi .IsOnBanList( playerToCheck ) - Returns whether a player is on the ban list of a multi .AddToFriendList( playertoAdd ) - Adds player to the friend list of a multi .RemoveFromFriendList( playertoRemove ) - Removes player from the friend list of a multi .AddToGuestList( playertoAdd ) - Adds player to the guest list of a multi .RemoveFromGuestList( playertoRemove ) - Removes player from the guest list of a multi .ClearOwnerList() - Clears all entries from a multi's (co-)owner list .ClearFriendList() - Clears all entries from a multi's friend list .ClearGuestList() - Clears all entries from a multi's guest list .ClearBanList() - Clears all entries from a multi's ban list .SecureContainer( itemToSecure ) - Secures a container in a multi .UnsecureContainer( itemToUnsecure ) - Unsecures a container in a multi .IsSecureContainer( itemToCheck ) - Checks if specified item is a secure container in a multi .LockDownItem( itemToLockDown) - Locks down an item in a multi .ReleaseItem( itemToRelease ) - Releases a locked down item in a multi .KillKeys() - Deletes ALL keys associated with a multi .AddTrashCont( itemToAdd ) - Add trash container to multi's list of trash containers .RemoveTrashCont( itemToRemove ) - Remove trash container from multi's list of trash containers Added JS Item (Multi only) properties: .lockdowns - Get the number of lockdowns in a multi .maxLockdowns - Get/Set the max number of lockdowns allowed in a multi .secureContainers - Get the number of secure containers in a multi .maxSecureContainers - Get/Set the max number of secure containers allowed in a multi .trashContainers - Get the number of trash containers in a multi .maxTrashContainers - Get/Set the max number of trash containers allowed in a multi .friends - Get the number of friends in a multi's friend list .maxFriends - Get/Set the max number of friends allowed in a multi's friend list .guests - Get the number of guests in a multi's guest list .maxGuests - Get/Set the max number of guests allowed in a multi's guest list .owners - Get the number of owners in a multi's owner list .maxOwners - Get/Set the max number of owners allowed in a multi's owner list .bans - Get the number of banned players in a multi's ban list .maxBans - Get/Set the max number of banned players allowed in a multi's ban list .vendors - Get the number of player vendors in a multi .maxVendors - Get the max number of player vendors allowed in a multi .deed - Get the item sectionID for deed used to place multi .isPublic - Get/Set the private/public state of a multi .buildTimestamp - Get the timestamp for when the house was originally placed .tradeTimestamp - Get the timestamp for when the house was last traded to another player .banX - Get/Set the ban location X offset for the multi .banY - Get/Set the ban location Y offset for the multi Added JS Character properties: .multi = Get/Set the multi object the character is in .accountNum = Get the account number the character belongs to .housesOwned = Get a count of houses owned by the character .housesCoOwned = Get a count of houses co-owned by the character Updated JS cBaseObject Methods .FirstItem(), .NextItem() and .FinishedItems() to also support iterating through items in multis Updated JS multi Methods .FirstChar(), .NextChar() and .FinishedChars() to support an additional parameter to specify what kind of characters to loop through: "default" or no parameter - all characters inside the multi "owner" - players on multi's owner list "friend" - players on multi's friend list "guest" - players on multi's guest list "banned" - players on multi's ban list Added new INI tags to a new section of uox.ini called [houses] DECAYTIMERINHOUSE=3600 // Decay timer in seconds for non-locked down items inside houses PROTECTPRIVATEHOUSES=1 // Toggles whether private houses will automatically boot unauthorized visitors (1) or not (0) TRACKHOUSESPERACCOUNT=1 // Toggles whether to track (and restrict) house ownership per account (1) or per character (0) MAXHOUSESOWNABLE=1 // Specifies the max amount of houses a player can own per account/char, depending on how house ownership is tracked MAXHOUSESCOOWNABLE=10 // Specifies the max amount of houses a player can co-own per character CANOWNANDCOOWNHOUSES=1 // Toggles whether players can own and co-own houses at the same time COOWNHOUSESONSAMEACCOUNT=1 // Toggles whether characters on same account as house owner will be treated as co-owners Added new INI tags in [settings] section of uox.ini: ITEMSDETECTSPEECH=0 // If enabled, server will search for nearby items with onSpeech JS event running whenever a character speaks. Disabled by default. MAXPLAYERPACKITEMS=125 // Defines max item capacity for player (and NPC) backpacks. Defaults to 125. Moved most of the existing house functionality to JS and expanded upon it to reach feature parity with houses in regular UO around Publish 15/16, with various extras thrown in for good measure and all functionality being customizable: js/server/house/house.js (15000) - handles detection of house commands and characters entering/leaving houses js/server/house/houseSign.js (15001) - contains and handles all house-related gumps/menus and what is shown when players interact with house sign js/server/house/houseCommands.js (15002) - handles functionality of house commands and other functionality such as transfer of ownership, demolishing house, etc. js/server/house/houseDeed.js (15003) - handles initial rules that allow/disallow placement of additional houses for players All house-related menus now fully handled through JS All house commands and other functionality now fully handled through JS Removed redundant hard-coded house functionality Implemented Co-owners, friends, guests for houses, with access rules in place for entry, lockdowns, house commands, etc. Implemented Private and Public houses Implemented Secure Containers and Trash Barrels Definable max lockdowns, secure containers, player vendors, bans, friends, guests, owners, trash containers and more - per house type JS scripts can now be attached directly to houses Doors in houses can be marked as front doors or interior doors, and will be treated differently with regards to private and public houses Added new item to dfndata/items/containers/misc.dfn - [trashbarrel] Added new JS script (js/items/trashbarrel.js) with trash barrel functionality for houses. Trash barrels that are marked as secure containers are only accessible by owners, co-owners and friends of the house. Various options available at top of script. Updated js/items/axe.js to support chopping up trash barrels and house add-ons in houses owned by the player Fixed an issue with house doors being left behind after demolishing houses while their doors were open Fixed an issue where GMs could be banned from player houses Added Line of Sight checks to speech, to give players some privacy in their own homes Updated house placement code to more accurately check for other multis, dynamic and static objects when placing houses; now requires free space around each house that cannot be blocked by other houses or items that can block player movement, and disallows placement of houses on roads Updated house placement code to move characters blocking house placement to SE corner of the house Updated house placement code to disallow placing houses in guarded regions, or in dungeons Added new DFN tag for regions to enable/disable player houses in specific regions: HOUSING=0/1 Added new region (247) that covers path to Valley of Eodon in Felucca Added new region (248) that covers Valley of Eodon in Ter-Mur, with player housing disabled Added new region (249) that covers entire T2A lands, with player housing disabled Updated SPACEX and SPACEY values for all houses in dfndata/house/house.dfn to match updated house placement code Added new JS property to Regions that can be used to determine or change state of player housing in a region: .canPlaceHouse() Updated rules for usage of dye tubs to dye locked down items; now only house owners or co-owners may dye locked down items Updated rules for usage of the following locked down items in a house, which are now only usable by house owners and co-owners Dyes, Guildstone Deeds, Recall Runes (renaming), Rename Deeds, Townstone Deeds, House Deeds, Boat Models, Player Vendor Deeds, Ore, Hair Dye Updated rules for usage of the following locked down items in a house, which are now only usable by house owners, co-owners and friends: Keys, Dye Tubs, Magic Scrolls, Fireworks Wands, Magic Wands, Smithing Tools, Mining Tools, Fishing Poles Updated item lockdown rules to allow locking down (and releasing) items in a container as long as the container is locked down, and to only allow releasing a locked down container if it's empty of locked down items Updated item lockdown rules to only allow locking down movement-blocking items further than 2 tiles away from doors Updated rules for releasing items in houses - now the house owner can release any locked down items, co-owners can release items locked down by themselves or by friends, while friends can release only items locked down by themselves Added some feedback to player about why their attempted house placement failed Items added by GMs directly into multis will now decay based on the house-specific decay timer instead of the regular one Fixed an issue that could cause items to almost instantly decay after being released from lockdown in a house Placing house add-ons now properly takes into account SPACEX and SPACEY values when checking if they can fit in selected area of houses Re-added SPACEX and SPACEY values for Pentagram and Loom house add-ons House add-ons can now be converted back into house add-on deeds by chopping them with an axe Added new item type - IT_HOUSEADDON (201) - used by house add-ons placed in player houses Fixed a bug where keys would stop working after being added to a keyring, and would turn into blank keys upon release from the keyring Added visitor count for public player houses, which keeps track of how many visits a public house has received, with each player counted max 1 time every 24 hours Fixed an issue with FindPlayersInOldVisrange() where it didn't take into account that players could see buildings further away than the standard update range. This could cause players to see ghost images of buildings if they were at the "right" distance when the building was being demolished Added NODECAY tag to all signs and doors in dfndata/house/house.dfn Added FRONTDOOR or INTERIORDOOR (as appropriate) to all doors in dfndata/house/house.dfn Added BANX and BANY to specify ban location for some houses in dfndata/house/house.dfn instead of relying on finding SE corner automatically Implemented strongboxes (js/server/house/strongbox.js) for co-owners of a house, which can be placed with the house command "i wish to place a strongbox". Max capacity is 25 items Updated 'REMOVE command to take an optional parameter - itemID. If supplied, the command will remove all items with this itemID from a targeted container Fixed a bug when checking if dynamic items were blocking valid spawn locations for NPCs, some function arguments were in the wrong order! Improved code that finds valid spawn locations for items and NPCs spawned via spawn regions. As server gradually builds up lists of valid spawn locations per region over time, it will start using these lists more often, rather than always look for brand new spawn locations. Fixed a bug with CMulHandler::CheckStaticFlag() that prevented NPCs from spawning inside buildings with no static floors! Fixed an issue with repeating commands that prevented GMs from being able to cancel them when using the ClassicUO client Exposed character property .accountNum to JS engine Extended CDataList class to include a Clear() method for clearing lists Updated JS File method .Open() to support an optional, third argument - subFolderName - that defines in which sub-folder of UOX3/shared/ to store/look for a file. If no third argument is supplied, UOX3 will default to using the shared folder itself. Updated JS File method .Length() to return a value of -1 for files that don't exist Added new code function, exposed to JS engine with same parameters, which simply checks if a given tile ID has a specific flag bool CheckTileFlag( UI16 itemID, TILEFLAG flagToCheck ) Added JS function used to find the root container of an item (if any) FindRootContainer( itemSerial ) FindRootContainer( item ) Added new JS function that allows deleting files from UOX3/shared/ folder or subfolders of shared folder. If no subFolderName is provided, looks for file directly in shared folder itself. Restrictions on file- and folder-names apply. bool DeleteFile( fileName, subFolderName ) Added new JS functions for checking if a specific client or server feature is enabled. See documentation for full list of client/server features. GetClientFeature( bitNum ) // Returns true if specified client feature is enabled on server GetServerFeature( bitNum ) // Returns true if specified server feature is enabled on server Added new JS function for returning the value of almost any server setting from UOX.INI GetServerSetting( settingNameInDoubleQuotes ) Updated JS function DoesDynamicBlock() with two new parameters - checkOnlyMultis and checkOnlyNonMultis Updated JS function DoesMapBlock() with two new parameters - checkMultiPlacement and checkForRoad Fixed an issue where a LoS check would prevent players from accessing containers in their own backpack Added new functions in findfuncs.cpp to make it easier to find items near another object or location: findNearbyItems( object, distance ) findNearbyItems( x, y, worldNumber, instanceID, distance ) Added new Item property - maxItems - used by containers to determine their max item capacity Added new Item property - totalItemCount - used to get total item count in a container (including sub-containers) Added check for max item capacity when creating new items that are added to a character's backpack - items will be created below character's feet if backpack is full! Added new DFN tag for items, used by containers to determine item capacity for a given container: MAXITEMS=# // 125 is the default for all containers if not set Added new JS Item properties: .maxItems // gets/sets item capacity for a given container .totalItemCount // gets total item count in a container, including sub-containers Updated item tooltips for containers to show accurate total item count, as well as to display max item capacity Fixed a bug where picking up items from a non-locked down pile of items on the floor inside a multi could cause the remaining pile to be seen as no longer inside the multi, disallowing locking it back down and causing it to decay based on regular decay timer instead of house-specific one Updated JS command set to allow setting poison-level on items ('set poison #) and hunger-level on characters ('set hunger #) Fixed an issue with js/item/food.js that prevented poisoned food from poisoning characters when eaten Fixed an issue with js/skill/poisoning.js that prevented players from poisoning food! Updated various JS scripts and hardcoded targeting functions to disallow the targeting of locked down resources using skills and tools Updated JS Method TextMessage() to support three extra, optional parameters. Note that if one optional parameter is included, all preceding optional parameters are also required! speechTarget - What kind of target is this message intended for? 0 - Only visible for sender and receiver of message 1 - Visible to all players in range 2 - Visible to all NPCs and players in range 3 - Visible to all PCs everywhere + NPCs in range 4 - Visible to all PCs everywhere (broadcast) 5 - Only visible for the receiver of the message speechTargetSerial - The serial of the receiver of the message, used if speechTarget is 0 or 5 speechFontType - The type of font to display the text in. Defaults to normal. 0 - Bold 1 - Normal with shadow 2 - Bold with shadow 3 - Normal 4 - Gothic 5 - Italic 6 - Small, dark 7 - Colourful 8 - Runic (only works with CAPS) 9 - Small, light Added timestamp to worldsaves in console, to make it easier to see when a particular world-save was done Added info about compiler/environment displayed at the top of the UOX3 console during startup Updated dictionary files with new messages primarily related to housing
2020-11-04 02:00:37 +08:00
case CIP_MAXITEMS: *vp = INT_TO_JSVAL( gPriv->GetMaxItems() ); break;
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
case CIP_STRENGTH: *vp = INT_TO_JSVAL( gPriv->GetStrength() ); break;
case CIP_DEXTERITY: *vp = INT_TO_JSVAL( gPriv->GetDexterity() ); break;
case CIP_INTELLIGENCE: *vp = INT_TO_JSVAL( gPriv->GetIntelligence() ); break;
case CIP_CORPSE: *vp = BOOLEAN_TO_JSVAL( gPriv->IsCorpse() ); break;
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
case CIP_DESC:
tString = JS_NewStringCopyZ( cx, gPriv->GetDesc().c_str() );
*vp = STRING_TO_JSVAL( tString );
break;
0.99.4z+ Fixed incorrect non-combat music entry [MUSICLIST COMBAT] section of dfndata/regions/regions.dfn Added new music section to dfndata/regions/regions.dfn [MUSICLIST DEATH] // Plays music from this list for players who are in the realm of the dead Assigned different MOREZ value to each explosion potion (dfndata/item/magic/potions.dfn) to make distinguishing between them easier Updated item stacking code to disallow stacking items that have different more, morex, morey, morez, buyvalue or sellvalue Fixed issue where monsters would erroneously show context menu entries with skill training options Fixed issue where some iron ore in GM add menu was showing up and being added as a brazier instead Added baseRange and maxRange to 'tweak menu (js/command/targeting/tweak.js) Added new Item property that can be used to associate an item with a custom server event: DFN Tag: EVENT=eventName // Name of event in one word, with no spaces JS Property: .event Updated 'get, 'set, 'tweak and 'areacommand commands to support the new event property Extended 'decorate command with some additional features to support saving, loading and unloading event decorations (example: xmas, halloween, etc): 'decorate saveevent eventName // Save all items with event property matching eventName to event_[eventName].jsdata 'decorate loadevent eventName // Load all items from event_[eventName].jsdata and assign eventName to their event property 'decorate unloadevent eventName // Clear up all items associated with eventName Added some new house addons to house.dfn, and in the 'add menu, under Deeds > Houseaddon Deeds: loom (south) small forge anvil (south/east) spinning wheel (north/south/east/west) small bed 1 (south/east) small bed 2 (south/east) large bed 1 (south/east) large bed 2 (south/east) training dummy (east) training dummy (south) pickpocket dip 1 (east) pickpocket dip 2 (east) dresser (east) // Disabled, doesn't work as container after being turned into addon dresser (south) // Disabled, doesn't work as container after being turned into addon abattoir (stone pentagram) flour mill (east) flour mill (south) oven (east) oven (south) large forge (east) large forge (west) large forge (north) large forge (south) Updated some house addons (bear rugs, pentagram) to be added from top-left to bottom right, for more consistency when placing items Added a code-check when placing house-addons to see if there's space in multi to place addon at selected location, starting from coordinates of target location and checking tiles east and south of that location based on the addon's SPACEX and SPACEY settings in house.dfn Added new script (js/server/house/houseAddonUse.js) that will restore the double-click functionality of some house addons that would lose their regular functionality in the process of becoming house addons, as their item type changed. The same script also adds some extra functionality to a couple of other house addons (looms and spinning wheels), allowing players to choose between using the addons and then targeting materials like yarn or wool or using the materials and then targeting the addons Fixed an issue with the interior decorator tool that would allow using it outside one's house Updated dictionary files
2021-10-31 10:43:24 +08:00
case CIP_EVENT:
tString = JS_NewStringCopyZ( cx, gPriv->GetEvent().c_str() );
*vp = STRING_TO_JSVAL( tString );
break;
case CIP_TEMPLASTTRADED:
JS_NewNumberValue( cx, gPriv->GetTempLastTraded(), vp );
break;
case CIP_TEMPTIMER:
JS_NewNumberValue( cx, gPriv->GetTempTimer(), vp );
break;
0.99.4x Fixed an issue where the color of NPC corpse names would not always match up with the NPC's flag color Fixed a bug where the baseRange and maxRange properties of ranged weapons would not get saved to world files. These values are now saved in the format of RANGE=baseRange,maxRange Changed the way items are added to containers, to ensure that the order in which the items are displayed to the player always reflects the order in which they were added; now the most recent item added/moved in a container will always be rendered on top of older items. Made adjustments to how items are randomly added to containers; should use more of a given container gump's available area now Exposed Item property to JS engine, which contains serial of the creator of an item: .creator // contains serial of the creator of an item. If set, maker's marks will show up in the item's tooltip Fixed an issue where JS engine would lose track of script context if one script used CreateDFNItem() or SpawnNPC() functions and the new objects had events that triggered upon creation. UOX3 now restores the original script context at the tail end of these functions. Added new JS Event to allow inserting custom tooltip text for objects, which will be displayed in tooltips right after the object name. Any text returned from the event will be displayed, and the text can make use of the same HTML tags as gumps to make changes to color, font, etc. onTooltip( myObj ) // Triggers for objects right before the object's tooltip properties are sent to client Updated 'tweak and 'set commands to refresh item being modified if movable state of item changes, so the change is reflected in nearby clients Fixed an issue with NPC vendors and items bought from players not being properly removed from the vendor's "bought container" when players buy them again Ported Item Identification skill from code to JS (js/skill/itemid.js) and removed hard-coded version Implemented magic item generator in JS (js/item/magic_item.js). When this script is attached to an NPC, it has a chance to generate magic weapons, armors, wands/staffs and rings as loot on the NPC's corpse when slain. The chance of getting quality magical items increases with the fame level of the NPC in question. The types of magical items generated follows the pattern of such items as implemented in UO prior to the AoS expansion. Examples: exceedingly accurate war hammer of vanquishing substantial, accurate axe of power and Daemon's Breath silver long sword massive platemail arms of Protection metal shield of defense durable ringmail tunic of guarding All magic items have a chance to have spell effects attached (with rings/wands being guaranteed to have these), with a limited amount of charges available. For weapons, these effects activate on successful hits in combat, while for armors they activate on equip, and then periodically as long as the item is worn. Rings and wands/staffs have to be manually activated and targeted - with the exception of rings of invisibility, which activate the moment you equip them! Related scripts: js/item/magic_armor_equipeffects.js js/item/magic_weapon_accbonus.js js/item/magic_weapon_equip.js js/item/magic_weapon_spell_attack.js The magic item loot generation script has been attached to a number of different NPCs, all of which now have a chance to drop magic items as loot when defeated. A bonus magical item - the glacial staff - has also been implemented (js/item/magic_glacial_staff.js), and has a chance to drop as loot from Giant Ice Serpents! Fixed an issue with CustomTarget where the target message would not be displayed if the cursorType parameter was provided Fixed bug with 'rename command, which referenced a non-existing variable that caused a script crash Added additional object properties to 'get and 'set commands: .shouldSave // Determines if an item should be saved in worldfiles or not .baseRange // Determines the base range of a ranged weapon, less than which it becomes less effective .maxRange // Determines the max range of a ranged weapon, beyond which it cannot reach its target The feature that allows stats like Strength, Dexterity and Intelligence to provide bonuses to skill checks has been turned into a UOX.INI setting, which is disabled by default. The bonuses have also been nerfed; they will no longer contribute more to the success of a skill check than the actual skill being checked! STATSAFFECTSKILLCHECKS=0/1 // If enabled, stats can provide bonuses to skill checks based on the weighting for those stats as setup in dfndata/skills/skills.dfn Updated damage tracking code to include the type of damage that was dealt (PHYSICAl vs HEAT vs COLD, etc) Updated Character JS Method Damage() to include a new parameter that can specify the type of damage that was dealt to the character. The new parameter must always be included if other optional parameters are used. Note that updates might be required for scripts making use of this method.Updated syntax: .Damage( amount ) .Damage( amount, damageType ) .Damage( amount, damageType, attacker ) .Damage( amount, damageType, attacker, doRepsys ) Supported damageTypes: PHYSICAL = 1 LIGHT = 2 RAIN = 3 COLD = 4 HEAT = 5 LIGHTNING = 6 // magic damage POISON = 7 SNOW = 8 Updated JS Event OnDamage to include an additional parameter that describes the type of damage that was dealt. New syntax: onDamage( damaged, attacker, damageValue, damageType ) Updated JS Event OnSpellTarget to allow rejecting a spell being cast on a target by returning a value of 2 from the script Split the character priv flag for magic reflection into a temporary one (one-time magic reflection spell) and a permanent one (innate permanent reflection ability). The temporary effect is put in place by Magic Reflection spell, and is removed after a successful spell reflect. The permanent one is an innate ability of a character and is not removed even after a spell is reflected. Added new Character JS property to get/set state of a character's permanent magic reflect ability: .permanentMagicReflect // 0 = disable, 1 = enable Added special abilities/effects for the following NPCs: Acid Elementals now have a chance to damage the melee weapons of their attackers Dull Copper Elementals now explode on death Shadow Iron Elemental is immune to targeted spell damage Copper Elementals have permanent magic reflect, and reflect some physical damage back at their attacker Bronze Elementals deal passive area damage to nearby players every 5 to 10 seconds Valorite Elementals have permanent magic reflect, reflect some physical damage back at their attacker Snow/Ice Elementals deal passive area damage to nearby players every 5 to 10 seconds Lava Serpents deal passive area damage to nearby players every 5 to 10 seconds Phoenixes deal passive area damage to nearby players every 5 to 10 seconds Pixies have a chance to cast a random spell upon receiving a death blow: Bless (target) Curse (target) Explosion (target) Greater Poison (target) Greater Heal (self, prevents death) Ethereal Warriors will now resurrect dead players with positive karma Ethereal Warriors now have a chance to drain target's health, stamina or mana on hit Fire Breath special ability added to the following NPCs, with the random ability damage scaling with the NPCs current health: Hell Cat, 5 to 8 dmg at max health Fire Steed, 6 to 9 dmg at max health Hell Hounds, 8 to 11 dmg at max health Lava Lizard, 8 to 11 dmg at max health Predator Hell Cat, 9 to 14 dmg at max health Sea Serpent, 11 to 17 dmg at max health Swamp Dragon, 15 to 22 dmg at max health Armored Swamp Dragon, 15 to 22 dmg at max health Fire Gargoyle, 20 to 30 dmg at max health Deep Sea Serpent, 21 to 32 dmg at max health Serpentine Dragon, 22 to 32 dmg at max health Drake (Gray), 22 to 32 dmg at max health Drake (Red), 22 to 32 dmg at max health Nightmare, 26 to 39 dmg at max health Dark Steed, 26 to 39 dmg at max health Silver Steed, 26 to 39 dmg at max health Kraken, 39 to 59 dmg at max health Dragon (Red), 41 to 62 dmg at max health Dragon (Gray), 41 to 62 dmg at max health Shadow Wyrm, 50 to 75 dmg at max health Reptalon, 51 to 77 dmg at max health Skeletal Dragon, 52 to 77 dmg at max health Ancient Wyrm, 60 to 90 dmg at max health Update stats, skills and loot for all currently implemented NPCs Removed an ancient piece of code that prevented corpses from being generated for various elementals and blade spirits on death. This was originally put in place because these creatures had no corpses, and would replace it with a backpack instead, but these creatures now all have corpses in all client versions supported by UOX3 Updated potions script (js/item/potion.js) with updated formula for amount of hitpoints healed by healing potions, and added restrictions for using them when at full health and/or if poisoned (Dragon Slayer) Fixed a bug where creatures (and humans, if FORCENEWANIMATIONPACKET was disabled in uox.ini) would play animations with wrong frame count, causing the animations to either freeze for a few frames at the end, or get cut off a couple of frames early Implemented bonus hit chance for Archery skill, based on mention of such a bonus in Publish 5 patch notes and related UO House of Commons chat. This has been exposed as a UOX.INI setting where this bonus can be tweaked: ARCHERYHITBONUS=10 // Bonus hit chance for Archery skill added to regular hit chance in combat. Defaults to 10% Implemented optional extra delay between moving and being able to shoot with ranged weapons in combat (in addition to whatever delay is there due to speed of the ranged weapon). This is exposed as a UOX.INI setting: ARCHERYSHOOTDELAY=0.5 // Minimum delay in seconds from a player stops moving until they can start to fire their ranged weapon. Defaults to 0.5s Fixed a bug where players who never entered combat mode could fire ranged weapons while moving Updated Add-menu with some improvements for usability: Menu now directly on the Objects (previously "Shard") tab for quicker access, with a small welcome text and quick-link button for UOX3 docs Settings tab contains some (persistent, will be saved with character) options for how the Add-menu behaves, along with a few quick-access buttons to some useful commands. Available options: Option to add chosen item at specific location instead of in GM's backpack Option to add chosen item repeatedly until cancelled Option to automatically reopen Add-menu on last menu that was open when a selection is made Option to force decayable state of all added items to either off (doesn't decay), on (decays) or nothing (use item default) Option to force movable state of all added items to either off (not movable), on (movable) or nothing (use item default) Added a Home button at the bottom of the menu, that takes the user back to the front page of the Add-menu regardless of which menu page they're on Updated Character/Socket JS Method SysMessage() with an optional parameter to specify the color used to display the system message. Updated syntax: .SysMessage( "Text" ) // Display "Text" to user as a system message with default system message color from ini .SysMessage( "Text %s %s", txtArg1, txtArg2 ) // Display "Text" to player with string arguments injected into text .SysMessage( txtColor, "Text" ) // Display "Text" to user with a specified color .SysMessage( txtColor, "Text %s %s", txtArg1, txtArg2 ) // Combination of text color, text and string arguments Fixed a bug where hair/beard items could show up inside corpses Fixed a bug where items could sometimes vanish (visually) from containers when bouncing back because player was not able to pick them up Fixed a bug where players would be unable to pick up a freely movable item from a locked down container Updated handling of item bouncing on pickup to use UOX3 dictionary messages instead of hard-coded client messages Added support for new Dictionary language: dictionary.POL - Polish (SERVERLANGUAGE=8 in uox.ini, or client language 83 if SERVERLANGUAGE is set to 0) Added taming restrictions for Unicorn, Ki-Rin and Cu Sidhe (js/skill/taming.js) Added modification of some creatures stats after they've been tamed (js/skill/taming.js) Added restrictions for who can ride certain creatures (Unicorn, Ki-Rin, Cu Sidhe) Updated words of power for Meteor Swarm spell to follow the same logic as other spells using Kal (Summon): Kal Des Flam Ylem Added new Item/Character JS Methods to get/set temporary custom tags which don't persist across worldsaves (or across reconnects, for players): .GetTempTag( "tagName" ) .SetTempTag( "tagName", tagValue ) When applying HPMAX, STAMINAMAX AND MANAMAX DFN tags to new NPCs, their current HP, STAMINA and MANA properties will now be automatically updated to match Fixed a server crash caused by empty speech messages sent from certain clients Fixed a bug that prevented teleport locations in Felucca/Trammel from working properly Updated calculations in code for duration and damage of existing poison strengths (1 - Lesser, 2 - Normal, 3 - Greater, 4 - Deadly) to match with ~Publish 15 (LBR/pre-AoS), and added another poison strength for monster usage (5 - Lethal) The strength of the Poison and Poison Field spells is now based on the average of the caster's Magery and Poisoning skills, the distance from the target (Poison spell only) and the target's Resisting Spells skill. If caster is further away than 2 tiles from target, the poison strength always equals Lesser Poison, otherwise the following rules apply: If caster's combined skill is higher than 100.0, poison strength equals Greater Poison, with 5% chance of Deadly Poison (if Poison spell) or Deadly Poison (if Poison Field spell) If caster's combined skill is higher than 70.2, poison strength equals Greater Poison If caster's combined skill is higher than 30.2, poison strength equals Normal Poison If caster's combined skill is 30.2 or lower, poison strength equals Lesser Poison If target resists spell, poison strength is reduced by 1 level, unless it's already at the lowest level Fixed an issue that would would let players move faster than they should have been allowed to Fixed misc issues with Party System: Mana and Stamina should now update for Party Members when added to the party, when going in/out of range and when their stats update while in range Players who get disconnected or relog should now find themselves back in the same party they were in previously Added system messages to inform party members about updates to their party, and to let invited players know they've successfully joined a party (or rejoined, if relogging) World saves now operate on the principle of only saving changes done since the last world save. Combined with the fact that NPCs in UOX3 are only active if there are players in the same/neighbouring map regions, shard owners may expect to see a decrease in world save times ranging from ~11% to ~99%, depending on how active and how spread out their player base is. If no changes have taken place since last save, saves are virtually instantaneous!
2021-09-20 21:35:17 +08:00
case CIP_SHOULDSAVE: *vp = BOOLEAN_TO_JSVAL( gPriv->ShouldSave() ); break;
case CIP_ISNEWBIE: *vp = BOOLEAN_TO_JSVAL( gPriv->IsNewbie() ); break;
case CIP_ISDISPELLABLE: *vp = BOOLEAN_TO_JSVAL( gPriv->IsDispellable() ); break;
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
case CIP_MADEWITH: *vp = INT_TO_JSVAL( gPriv->GetMadeWith() ); break;
case CIP_ENTRYMADEFROM: *vp = INT_TO_JSVAL( gPriv->EntryMadeFrom() ); break;
case CIP_ISPILEABLE: *vp = BOOLEAN_TO_JSVAL( gPriv->IsPileable() ); break;
case CIP_ISMARKEDBYMAKER: *vp = BOOLEAN_TO_JSVAL( gPriv->IsMarkedByMaker() ); break;
case CIP_ISDYEABLE: *vp = BOOLEAN_TO_JSVAL( gPriv->IsDyeable() ); break;
case CIP_ISDAMAGEABLE: *vp = BOOLEAN_TO_JSVAL( gPriv->IsDamageable() ); break;
case CIP_ISWIPEABLE: *vp = BOOLEAN_TO_JSVAL( gPriv->IsWipeable() ); break;
case CIP_ISGUARDED: *vp = BOOLEAN_TO_JSVAL( gPriv->IsGuarded() ); break;
case CIP_ISDOOROPEN: *vp = BOOLEAN_TO_JSVAL( gPriv->IsDoorOpen() ); break;
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
case CIP_ISFIELDSPELL: *vp = BOOLEAN_TO_JSVAL( gPriv->IsFieldSpell() ); break;
case CIP_ISLOCKEDDOWN: *vp = BOOLEAN_TO_JSVAL( gPriv->IsLockedDown() ); break;
case CIP_ISSHIELDTYPE: *vp = BOOLEAN_TO_JSVAL( gPriv->IsShieldType() ); break;
case CIP_ISMETALTYPE: *vp = BOOLEAN_TO_JSVAL( gPriv->IsMetalType() ); break;
case CIP_ISLEATHERTYPE: *vp = BOOLEAN_TO_JSVAL( gPriv->IsLeatherType() ); break;
case CIP_CANBELOCKEDDOWN: *vp = BOOLEAN_TO_JSVAL( gPriv->CanBeLockedDown() ); break;
2025-03-08 21:10:37 -06:00
case CIP_TITHING: *vp = INT_TO_JSVAL( gPriv->GetTithing() ); break;
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
case CIP_ISCONTTYPE: *vp = BOOLEAN_TO_JSVAL( gPriv->IsContType() ); break;
case CIP_CARVESECTION: *vp = INT_TO_JSVAL( gPriv->GetCarve() ); break;
case CIP_AMMOID: *vp = INT_TO_JSVAL( gPriv->GetAmmoId() ); break;
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
case CIP_AMMOHUE: *vp = INT_TO_JSVAL( gPriv->GetAmmoHue() ); break;
case CIP_AMMOFX: *vp = INT_TO_JSVAL( gPriv->GetAmmoFX() ); break;
case CIP_AMMOFXHUE: *vp = INT_TO_JSVAL( gPriv->GetAmmoFXHue() ); break;
case CIP_AMMOFXRENDER: *vp = INT_TO_JSVAL( gPriv->GetAmmoFXRender() ); break;
0.99.4d Added new option in UOX.INI under [settings] section: MAPDIFFSENABLED=0/1 // If enabled, server will attempt to load diff files, and send "Enable Map-diff files" packet to client to also load these. Disabled by default. Server no longer loads map/statics diff files by default, nor does it send packet to client to request loading these files, as only client versions below 7.0.8.2 will actively load these files. Can be re-enabled with new UOX.INI setting mentioned above! Fixed incorrect ID for gargish dagger in CHandleCombat::getWeaponType() Added missing weapon entries in CHandleCombat::getWeaponType(): bladed whip, barbed whip, spiked whip, gargish talwar Fixed an issue that would show the end part of some tiledata names as garbled text instead of cutting off the text(!) at 20 characters Fixed an issue with advanced character creation template when using ClassicUO client, which sends a profession value of 255 instead of 0 when no profession template has been selected. Fixed an issue where clones of NPCs that can split in combat didn't get the NPC flag correctly set Guild titles are now removed for players who leave their guilds Enabled closing some hard-coded gump menus using right-click (howto, guild, towns, wholist, addmenu, craftmenu, info) Fixed an issue where adding base items using 'add [itemID] would sometimes get false positive hits from harditems.dfn, depending on the length of the itemID Fixed an issue where items added using 'add [itemID] would not get names applied properly from harditems.dfn Item/NPC DFN tag GET can now inherit a random parent by adding additional values separated by spaces. Syntax: GET=parent1 parent2 parent3 (etc) Fixed an issue where NPC backpacks would not have the max item capacity set properly Added new properties for CItem objects (also exposed as JS Item Properties): maxRange // max distance a ranged weapon can fire at (replaces ARCHERRANGE ini setting) baseRange // base distance throwing weapons (when implemented) can be used at Added support for new Item DFN tag that replaces global UOX.INI setting ARCHERRANGE: MAXRANGE=# // Specifies max range of ranged weapon Added support for new Item/NPC DFN tags to support randomizing elemental resistances: RESISTFIRE=#/# # // Set NPC's poison resistance; fixed or random value RESISTCOLD=#/# # // Set NPC's poison resistance; fixed or random value RESISTLIGHTNING=#/# # // Set NPC's poison resistance; fixed or random value RESISTPOISON=#/# # // Set NPC's poison resistance; fixed or random value Added support for two new DFN tags in dfndata/race/races.dfn that can be used to allow/ban lists of equipment for specific races ALLOWEQUIPLIST=# BANEQUIPLIST=# Added support for new section in dfndata/race/races.dfn - [EQUIPLIST #], which can be used to define lists of equipment that is whitelisted or banned for specific races. Fixed a bug that would report incorrect weight in tooltips for Item/NPC spawner objects ScriptSections are now reapplied for items bought by players from NPC vendors Fixed an issue where players could drop an item on the ground and other players would still see the item after it was picked up, because of a failed distance check vs old location coordinates (in pack) instead of vs current location on ground Fixed a bug with players being able to use last-target macro to target objects picked up and held by other players on their cursor Updated all references to "devinelock" to be "divinelock" instead - this includes the name of the JS Item property Fixed house commands triggering (useless) targeting cursors for players onboard boats Changed default statcap in UOX.INI from 325 to 225 Fixed a out-of-range error for players attempting to combine ore inside their own backpack Fixed various issues with distance checks and container checks when using/target objects Added optional 4th "hue" parameter to AddGump JS method Added JS Function to get total amount of accounts on server - GetAccountCount() Added JS Function to get total amount of players online - GetPlayerCount() onSwing JS Event can now trigger in scripts attached to items, not just items attached to characters Added some JS Functions to expose some hard-coded constants to JS scripts: BASEITEMSERIAL() // Base item serial INVALIDSERIAL() // Invalid serial INVALIDID() // Invalid ID INVALIDCOLOUR() // Invalid colour Fixed an issue where JS character property .colour would modify origSkin property instead of colour Fixed an issue where JS character property .guildTitle returned the name of the character instead of the guild title Character JS property .poison can now also be used to set a character's poisoned level, not just read it Exposed Item property to JS engine: .ac // armour class for item (0-128). Primarily used for setting race-restrictions for equippable items, i.e. race X cannot equip items of armour class Y. .def // defensive value of item (Physical resistance post-AoS, AR in older UO) // NOTE: The following properties don't actually do anything yet, but can still be used in custom JS scripts if desired .resistCold // Cold resistance of item 0-1000, where 1000 equals 100.0% .resistHeat // Heat/Fire resistance of item 0-1000, where 1000 equals 100.0% .resistLight // Light resistance of item 0-1000, where 1000 equals 100.0% .resistLightning // Energy/Lightning resistance of item 0-1000, where 1000 equals 100.0% .resistPoison // Poison resistance of item 0-1000, where 1000 equals 100.0% .resistRain // Rain resistance of item 0-1000, where 1000 equals 100.0% .resistSnow // Snow resistance of item 0-1000, where 1000 equals 100.0% .damageHeat // Weapon deals Heat/Fire elemental damage (true/false) .damageCold // Weapon deals Cold elemental damage (true/false) .damageLight // Weapon deals Light elemental damage (true/false) .damageLightning // Weapon deals Lightning elemental damage (true/false) .damagePoison // Weapon deals Poison elemental damage (true/false) .damageRain // Weapon deals Rain/Water elemental damage (true/false) .damageSnow // Weapon deals Snow/Ice elemental damage (true/false) Added new UOX.INI setting under [server] to enable/disable shard response to ConnectUO server polling (disabled by default) Sub-commands are no longer included when registering packets to be overloaded via RegisterPacket function, as that part was never fully implemented. Packet-hook scripts can be setup for specific packet IDs, but any sub-command checking will need to be done in the script itself JS Packet Method GetDWord() now uses JS_NewNumberValue instead of INT_TO_JSVAL to read from the socket buffer, to better handle large numbers, which could previously be returned with wrong values. JS Function CalcItemFromSer() now uses a JS_GetStringBytes() and str_value() combo instead of JSVAL_TO_INT() to read the data provided in the function argument. This allows JS scripts to provide item serials to the function directly without needing to split it into four parts first (though that still works) Fixed issue where JS properties for multis didn't always return correct values The 'set command can now be used to set the armour class of items ('set ac #) Reimplemented 'tweak command in JS engine (js/commands/targeting/tweak.js) - can be used to view and modify properties of characters, character skills, items, multis and regions (target ground) Added placeholder packet-hook script (js/server/network/0xf1_connectUoServerPoll.js) to handle responses to ConnectUO server polling. By default this script does nothing, but serves as a placeholder for drop-in replacement scripts generated specifically for each shard by the ConnectUO service. Updated some commands to support an alternate STATIC keyword (can also be ommitted) to add base items: 'add static itemID 'tile static itemID Updated some commands with support for randomization. Provided itemID will be randomized based on provided rndValue: /js/commands/targeting/add.js: 'add itemID rndValue cmdtable.cpp and targeting.cpp: 'tile itemID rndValue 'tile itemID x1 x2 y1 y2 z rndValue Updated js/commands/custom/repeatingcmds.js to support 'm delete as an alias for 'rremove Added 'props as an alias for the 'tweak command Added 'teleport as an alias for the 'tele command (js/commands/targeting/tele.js) Added 'shavehair and 'shavebeard as aliases for 'kill hair and 'kill beard (js/commands/targeting/kill.js) Added 'noinvul and 'mortal aliases for the 'invul false command (js/commands/custom/misc-cmds.js) Added 'immortal and 'invul (without parameter) as aliases for the 'invul true command Added 'bringtopack as an alias of 'movetobag command (js/commands/targeting/movetobag.js) Updated check for cancelling of target cursor in various JS scripts Minor updates to various JS scripts Fixed issue where some item definitions in dfndata/harditems/harditems.dfn and dfndata/items/building/lighting.dfn used comma instead of space as delimiter for the VALUE tag, which thus never got applied Updated all NPC definitions to let NPCs spawn facing in random directions
2021-03-22 05:59:20 +08:00
case CIP_MAXRANGE: *vp = INT_TO_JSVAL( gPriv->GetMaxRange() ); break;
case CIP_BASERANGE: *vp = INT_TO_JSVAL( gPriv->GetBaseRange() ); break;
UOX3 0.99.5b Fixed an issue where karma titles would inadvertently have the space behind the title trimmed before being displayed in paperdoll, resulting in erroneous display of title + name there Fixed an issue with a cooking script (js/skill/cooking/cooking.js) where sweet dough would not get consumed properly on cooking (Dragon Slayer) Updated C++ function calcRegionFromXY to work with CBaseObject instead of CChar, so it also works for Items Items now have current town region stored as an object property during runtime. This is calculated on load, when container property is updated, and when an item is picked up or dropped. The region is also accessible via the (read-only) JS Item property .region Added new JS Event to allow capturing button presses from the old-school gump displayed by client via packet 0x76, which was originally used by the old-school crafting menus in T2A. The requirement for this to work is that the gump in question must have a gumpID between 0x4000 and 0xffff (which can be set when manually creating a packet with this ID via JS), and the Event itself must be in the global script: onScrollingGumpPress( pSock, gumpID, buttonID ) Added new JS Event to allow better control over which names UOX3 sends to the client for characters: onNameRequest( myObj, requestedBy ) // return custom string, or return empty string/nothing/true/false to use default name Updated JS Events to also work for Items (previously only worked for Characters) onLightChange( myObj, lightLevel ) onTempChange( myObj, temp ) onWeatherChange( myObj, weatherType ) Adjusted default temperature for town regions with no weather systems defined from 0 to 20 degrees Celsius Updated some JS scripts (fishing.js, baking.js and cooking.js) to make use of GetTempTag/SetTempTag rather than GetTag/SetTag Added cancel-checks to targeting functions in command script for add-commands (js/commands/targeting/add.js) Updated get command script (js/commands/targeting/get.js) to allow retrieving region ID and name using 'get region Updated misc command script (js/commands/custom/misc-cmd.js) to add 'gettemptag and 'settemptag commands, used to retrieve/set temporary custom tags from/on objects Fixed a bug where Spirit Speak skill would be checked for race languages even if the race had LANGUAGEMIN defined as 0 (or not defined at all) Fixed an issue where players using regular UO client would get stuck in a black void after teleporting between worlds, by adding an additional character refresh after the teleport Fixed an issue where crafting tools for Blacksmithing and Carpentry would attempt to fetch the value of an incorrectly named INI setting to handle durability loss for the tools Added new setting under [settings] section of UOX.INI to control whether it should be possible to craft weapons from coloured ingots or not: CRAFTCOLOUREDWEAPONS=0/1 // If enabled(1), players can craft coloured weapons. Defaults to disabled(0) Fixed an issue where the correct ingots were not consumed when attempting to craft items using colored ingots Fixed a rogue debug message leftover in the scissor script
2022-02-13 22:49:37 +08:00
case CIP_REGION:
{
CTownRegion *myReg = gPriv->GetRegion();
if( myReg == nullptr )
{
UOX3 0.99.5b Fixed an issue where karma titles would inadvertently have the space behind the title trimmed before being displayed in paperdoll, resulting in erroneous display of title + name there Fixed an issue with a cooking script (js/skill/cooking/cooking.js) where sweet dough would not get consumed properly on cooking (Dragon Slayer) Updated C++ function calcRegionFromXY to work with CBaseObject instead of CChar, so it also works for Items Items now have current town region stored as an object property during runtime. This is calculated on load, when container property is updated, and when an item is picked up or dropped. The region is also accessible via the (read-only) JS Item property .region Added new JS Event to allow capturing button presses from the old-school gump displayed by client via packet 0x76, which was originally used by the old-school crafting menus in T2A. The requirement for this to work is that the gump in question must have a gumpID between 0x4000 and 0xffff (which can be set when manually creating a packet with this ID via JS), and the Event itself must be in the global script: onScrollingGumpPress( pSock, gumpID, buttonID ) Added new JS Event to allow better control over which names UOX3 sends to the client for characters: onNameRequest( myObj, requestedBy ) // return custom string, or return empty string/nothing/true/false to use default name Updated JS Events to also work for Items (previously only worked for Characters) onLightChange( myObj, lightLevel ) onTempChange( myObj, temp ) onWeatherChange( myObj, weatherType ) Adjusted default temperature for town regions with no weather systems defined from 0 to 20 degrees Celsius Updated some JS scripts (fishing.js, baking.js and cooking.js) to make use of GetTempTag/SetTempTag rather than GetTag/SetTag Added cancel-checks to targeting functions in command script for add-commands (js/commands/targeting/add.js) Updated get command script (js/commands/targeting/get.js) to allow retrieving region ID and name using 'get region Updated misc command script (js/commands/custom/misc-cmd.js) to add 'gettemptag and 'settemptag commands, used to retrieve/set temporary custom tags from/on objects Fixed a bug where Spirit Speak skill would be checked for race languages even if the race had LANGUAGEMIN defined as 0 (or not defined at all) Fixed an issue where players using regular UO client would get stuck in a black void after teleporting between worlds, by adding an additional character refresh after the teleport Fixed an issue where crafting tools for Blacksmithing and Carpentry would attempt to fetch the value of an incorrectly named INI setting to handle durability loss for the tools Added new setting under [settings] section of UOX.INI to control whether it should be possible to craft weapons from coloured ingots or not: CRAFTCOLOUREDWEAPONS=0/1 // If enabled(1), players can craft coloured weapons. Defaults to disabled(0) Fixed an issue where the correct ingots were not consumed when attempting to craft items using colored ingots Fixed a rogue debug message leftover in the scissor script
2022-02-13 22:49:37 +08:00
*vp = JSVAL_NULL;
}
UOX3 0.99.5b Fixed an issue where karma titles would inadvertently have the space behind the title trimmed before being displayed in paperdoll, resulting in erroneous display of title + name there Fixed an issue with a cooking script (js/skill/cooking/cooking.js) where sweet dough would not get consumed properly on cooking (Dragon Slayer) Updated C++ function calcRegionFromXY to work with CBaseObject instead of CChar, so it also works for Items Items now have current town region stored as an object property during runtime. This is calculated on load, when container property is updated, and when an item is picked up or dropped. The region is also accessible via the (read-only) JS Item property .region Added new JS Event to allow capturing button presses from the old-school gump displayed by client via packet 0x76, which was originally used by the old-school crafting menus in T2A. The requirement for this to work is that the gump in question must have a gumpID between 0x4000 and 0xffff (which can be set when manually creating a packet with this ID via JS), and the Event itself must be in the global script: onScrollingGumpPress( pSock, gumpID, buttonID ) Added new JS Event to allow better control over which names UOX3 sends to the client for characters: onNameRequest( myObj, requestedBy ) // return custom string, or return empty string/nothing/true/false to use default name Updated JS Events to also work for Items (previously only worked for Characters) onLightChange( myObj, lightLevel ) onTempChange( myObj, temp ) onWeatherChange( myObj, weatherType ) Adjusted default temperature for town regions with no weather systems defined from 0 to 20 degrees Celsius Updated some JS scripts (fishing.js, baking.js and cooking.js) to make use of GetTempTag/SetTempTag rather than GetTag/SetTag Added cancel-checks to targeting functions in command script for add-commands (js/commands/targeting/add.js) Updated get command script (js/commands/targeting/get.js) to allow retrieving region ID and name using 'get region Updated misc command script (js/commands/custom/misc-cmd.js) to add 'gettemptag and 'settemptag commands, used to retrieve/set temporary custom tags from/on objects Fixed a bug where Spirit Speak skill would be checked for race languages even if the race had LANGUAGEMIN defined as 0 (or not defined at all) Fixed an issue where players using regular UO client would get stuck in a black void after teleporting between worlds, by adding an additional character refresh after the teleport Fixed an issue where crafting tools for Blacksmithing and Carpentry would attempt to fetch the value of an incorrectly named INI setting to handle durability loss for the tools Added new setting under [settings] section of UOX.INI to control whether it should be possible to craft weapons from coloured ingots or not: CRAFTCOLOUREDWEAPONS=0/1 // If enabled(1), players can craft coloured weapons. Defaults to disabled(0) Fixed an issue where the correct ingots were not consumed when attempting to craft items using colored ingots Fixed a rogue debug message leftover in the scissor script
2022-02-13 22:49:37 +08:00
else
{
JSObject *myTown = JSEngine->AcquireObject( IUE_REGION, myReg, JSEngine->FindActiveRuntime( JS_GetRuntime( cx )));
UOX3 0.99.5b Fixed an issue where karma titles would inadvertently have the space behind the title trimmed before being displayed in paperdoll, resulting in erroneous display of title + name there Fixed an issue with a cooking script (js/skill/cooking/cooking.js) where sweet dough would not get consumed properly on cooking (Dragon Slayer) Updated C++ function calcRegionFromXY to work with CBaseObject instead of CChar, so it also works for Items Items now have current town region stored as an object property during runtime. This is calculated on load, when container property is updated, and when an item is picked up or dropped. The region is also accessible via the (read-only) JS Item property .region Added new JS Event to allow capturing button presses from the old-school gump displayed by client via packet 0x76, which was originally used by the old-school crafting menus in T2A. The requirement for this to work is that the gump in question must have a gumpID between 0x4000 and 0xffff (which can be set when manually creating a packet with this ID via JS), and the Event itself must be in the global script: onScrollingGumpPress( pSock, gumpID, buttonID ) Added new JS Event to allow better control over which names UOX3 sends to the client for characters: onNameRequest( myObj, requestedBy ) // return custom string, or return empty string/nothing/true/false to use default name Updated JS Events to also work for Items (previously only worked for Characters) onLightChange( myObj, lightLevel ) onTempChange( myObj, temp ) onWeatherChange( myObj, weatherType ) Adjusted default temperature for town regions with no weather systems defined from 0 to 20 degrees Celsius Updated some JS scripts (fishing.js, baking.js and cooking.js) to make use of GetTempTag/SetTempTag rather than GetTag/SetTag Added cancel-checks to targeting functions in command script for add-commands (js/commands/targeting/add.js) Updated get command script (js/commands/targeting/get.js) to allow retrieving region ID and name using 'get region Updated misc command script (js/commands/custom/misc-cmd.js) to add 'gettemptag and 'settemptag commands, used to retrieve/set temporary custom tags from/on objects Fixed a bug where Spirit Speak skill would be checked for race languages even if the race had LANGUAGEMIN defined as 0 (or not defined at all) Fixed an issue where players using regular UO client would get stuck in a black void after teleporting between worlds, by adding an additional character refresh after the teleport Fixed an issue where crafting tools for Blacksmithing and Carpentry would attempt to fetch the value of an incorrectly named INI setting to handle durability loss for the tools Added new setting under [settings] section of UOX.INI to control whether it should be possible to craft weapons from coloured ingots or not: CRAFTCOLOUREDWEAPONS=0/1 // If enabled(1), players can craft coloured weapons. Defaults to disabled(0) Fixed an issue where the correct ingots were not consumed when attempting to craft items using colored ingots Fixed a rogue debug message leftover in the scissor script
2022-02-13 22:49:37 +08:00
*vp = OBJECT_TO_JSVAL( myTown );
}
break;
}
Small update Fixed an issue with an internal movement check that prevented characters from moving in valid map areas in Felucca/Trammel from X 6144 to X 7168 Fixed an issue where .instanceID property was misspelled in 'xgo GM command script, causing characters to be teleported to an out of bounds area where they would no longer be saved (js/commands/targeting/x.js) Added some additional error-checking to .Teleport()/.SetLocation() JS Method to prevent script-accidents from sending characters out of bounds. Updated Poisoning skill to add poison-charges to weapons being poisoned. Charges are consumed when applying poison in combat (js/skill/poisoning.js) Updated combat code to consume poison-charges if a poisoned weapon is used to poison an opponent Updated shoplists for Blacksmiths and Weaponsmiths - they now buy/sell longswords (dfndata/items/shoplist.dfn) Updated MageShopping shoplist for mage vendors - they now buy/sell mass curse scrolls (dfndata/items/shoplist.dfn) Added new Spawn Region DFN tag that can specify which era or eras of UO (Multiple comma-separated entries supported) a given spawn region is valid for. Spawn region not valid for core shard era will be ignored. Syntax: ERAS=UO,T2A,UOR,LBR,AOS,SE,ML,SA,HS,TOL Added new Spawn Region DFN tag that allows using another spawn region as a "parent". All properties of this parent will be inherited except for these, which are ignored: ERAS, NPCLIST, ITEMLIST, NPC and ITEM. Syntax for new tag: GET=# // Inherit a specified spawn region Added spawn region for animal trainer vendor in Vesper stable Added spawn region for fur trader/tanner vendors in The Best Hides of Britain Added spawn region for spinner vendor in The Lord's Clothier's and The Right Fit shops in Britain Added spawn region for tanner NPC to Nujel'm Tannery (and fixed leatherworker spawn region for same area) Added spawn regions for banker NPCs in East Bank of Britain, First Bank of Moonglow, Jhelom Bank and Jeweler, Bank of Skara Brae Added spawn regions for stables, tailor and blacksmith inside Castle British Added spawn regions for mage shops, mage guilds and farm houses in Moonglow Added spawn regions for misc vendors and townfolk in multiple cities Added spawn regions for Fire Island Updated spawn regions for Dagger Isle/Ice Island Added spawn regions for forests and jungles in southern Britannia and on various islands including Bucc's Den, Moonglow, Serpent's Hold, and misc unpopulated islands Added spawn regions for area east of Skara Brae, around Hedge Maze and south of Britain Added spawn regions for wandering healers outside every dungeon entrance in Britannia and Lost Lands Re-integrated ocean spawn regions for ocean creatures (dolphin, walrus, water elemental, sea serpent) from the original community-based spawn file Added reagent spawns in overworld spawn regions in Britannia/Lost Lands Added special reagent spawns in swamp areas Added additional overworld spawn regions in Britannia/Lost Lands Added spawn regions for Khaldun dungeon that spawn some new and some old NPCs: Old: Zombies, skeletons, skeletal mages, skeletal knights, ancient liches New: Cursed (and named) NPCs, shadowfiends, zealots of khaldun (knights/summoners), tentacles of the harrower Updated size and positions of some existing overworld spawn regions Fixed incorrect spawn region size for small island south of Trinsic Added switch/door puzzle functionality in Khaldun dungeon using new switch/door combo script (js/item/dungeons/switch_door_combo.js) Added "smart objects" in Khaldun dungeon that activate when you come close enough (js/item/dungeons/smart_activate_item.js) Added teleport locations within Khaldun dungeon (js/teleport.scp) Added custom AIs to existing NPC spawning in Khaldun dungeon: Ancient Lich (summons other undead, and can turn into one of them for disguise) Added DFN entries for new NPCs spawning in Khaldun dungeon, some with custom AIs: [tentacles_of_the_harrower] -> Tentacles of the Harrower (life steal) [shadowfiend] -> Shadowfiends (seek out and reveal hidden players) [zealot_knight]/[zealot_summoner] -> Zealots of Khaldun (turn into undead on death, male/female variants) [cursed] -> Cursed (male/female variants) [spectralarmor] -> Spectral Armor Added DFN entries for new (named) NPCs spawning in Khaldun dungeon: [lysander_gathenwale] -> Lysander Gathenwale [grimmoch_drummel] -> Grimmoch Drummel [morg_bergen] -> Morg Bergen [tavara_sewel] -> Tavara Sewel Added new NPC DFN entries: [leatherworker] -> alias for male/female leatherworker vendors [mapmaker] -> alias for male/female mapmaker vendors Added new Race DFN entries: [RACE 29] -> Cursed (enemies of RACE 30) [RACE 30] -> Zealots (enemies of RACE 29) Added new book DFN entries for Khaldun journals of Lysander, Tavara and Grimmoch - available as loot from the respective NPCs (dfndata/misc/books.dfn and dfndata/items/misc/books.dfn) Added 25% chance for hit-animations and hit-SFX to play for targets in combat, instead of playing every time - can get very spammy Monsters with actual weapons equipped (like Ophidian Enforcer with Halberd/Bardiche) will now get appropriate combat SFX for hitting with that weapon Updated Healing skill to base cure/resurrection skill requirements on the calculated skill, rather than base skill (js/skill/healing.js) Fixed an issue where healing with bandages and dying in the process would not properly reset the healing-related tags and skills used Updated healing script to show a resurrection confirmation menu for players targeted with bandages for resurrect (js/skill/healing.js) All skill usage states now reset on death, to prevent cases of players being "busy" while trying to use skills that got stuck due to script bugs. The 'regspawn GM command now supports a new parameter called "max". Updated command syntax: 'regspawn # // perform a single respawn cycle in a specific spawn region 'regspawn all // perform a single respawn cycle across all spawn regions 'regspawn max // respawn ALL spawn regions to MAX capacity in one go Added new UOX.INI setting that determines the maximum range at which NPCs can initiate attacks on players/NPCs (the old MAXRANGE=10 setting now instead defines max range at which players can initiate attacks on players/NPCs): MAXNPCAGGRORANGE=10 Optimized performance by significantly reducing the number of line-of-sight checks performed by characters, especially in combat scenarios, or when evaluating potential targets for NPC AIs. The amount of checks done is also affected by the new ini setting for max aggro range. Fixed an issue where both NPC and player characters would instantly drop one hunger level (from 6 to 5) upon creation since hungerrate was not initialized until after first hunger-event Updated character priv property from UI16 to UI32, and added a new flag that determines if fame/karma title is hidden for character: HIDEFAMEKARMATITLE (0x10000) NPCs will no longer aggro other NPCs if the Z difference between them is greater or equal to 20 (i.e. they're on different floors), unless both are using ranged weapons and both are in range Fixed an issue where players could get discounts from shopkeepers even though neither player nor shopkeeper were members of a NPC guild (js/npc/ai/shopkeeper.js) Fixed an issue where the "premium" a player would get when selling items to a shopkeeper in the same NPC guild as them would be 110% extra on top of the item's value, instead of the intended 10% (js/npc/ai/shopkeeper.js) (Thanks, cobrag0318!) Added missing tall straw hat to tailoring crafting scripts (Thanks, Dragon Slayer!) Improved error reporting during compilation of individual scripts being reloaded - will now show more context and line number onCombatEnd JS Event now also triggers when NPCs ignore their target and/or evade during combat Updated 'decorate command to support saving/loading custom tags on items for world templates. These are stored after a @ symbol in the world template, each custom tag separated by a | symbol, and with each custom tag saved using this syntax: key$type$value Updated resource-harvesting scripts to use script-specific global (const) variables, to avoid interference between different scripts (js/server/resource/*) Added new resource-harvesting scripts and added spawn regions for these in fields on farms all over Britannia/Lost Lands cabbages (js/server/resource/cabbages.js) canteloupes (js/server/resource/canteloupes.js) carrots (js/server/resource/carrots.js) garlic (js/server/resource/garlic.js) gourds (js/server/resource/gourds.js) honeydew melons (js/server/resource/honeydewmelon.js) onions (js/server/resource/onions.js) pumpkins (js/server/resource/pumpkins.js) squashes (js/server/resource/squashes.js) turnips (js/server/resource/turnips.js) watermelons (js/server/resource/watermelon.js) Updated CSpawnRegion::FindItemSpotToSpawn() function in cSpawnRegion.cpp to prevent duplicate spawning of exact same item in exact same location Updated sectionid of all potion and scroll aliases to match main item, so they'll get correctly picked up by NPC shopkeepers (dfndata/items/magic/potions.dfn and scrolls.dfn) Specified sectionid for backpacks, so it also gets applied to packs added using the alias [backpack] (dfndata/items/misc/provisions.dfn) Fixed a code issue that prevented players from selling empty containers to NPC shopkeepers willing to buy such containers Fixed an issue where field-spells (wall of stone, poison field, etc) would ignore dynamic/static items that should block these Fixed an issue where field-spells could be cast into houses from the outside by standing next to a wall and targeting self Fixed a War/Peace-mode desync between client and server by having server always notify client (using war-toggle packet) when the "at war" flag is toggled for player character Fixed an issue with hiding skill that wouldn't allow player to hide after having acquired self as target in combat (through spellcasting, for instance) (Thanks, Dragon Slayer!) Fixed an issue where mana/reagents were consumed and skillcheck performed before all spellcast-validations had succeeded, resulting in the occasional loss of reagents/mana when spellcasting was disallowed (code and js/magic/clumsy.js and level1targ.js) Fixed an issue with lack of criminal-flagging for casting of hostile spells scripted in JS (clumsy, magic arrow, feeblemind) vs blue targets (js/magic/clumsy.js and level1targ.js) Fixed some issues with Line-of-Sight checking code that returned incorrect results, which amongst other things affected spellcasting in areas with uneven terrain Fixed some issues with movement code and climbing of ladders, in particular the rope ladder in the 2-story log cabin. Code now sets a "is climbing" flag when character steps onto a rope ladder, and uses that to help resolve some edge cases, and then unsets it when they step off. Renamed section headers of some map-items in DFNs from "locationname" to "locationnamemap" for clarity (example: "britain" to "britainmap") Fixed broken "map wrapping" when sailing to edges of map in Felucca or Trammel Fixed a server crash related to attempts at reading data from invalid map tiles
2025-06-27 08:40:02 +08:00
case CIP_SPAWNSERIAL:
JS_NewNumberValue( cx, gPriv->GetSpawn(), vp );
Small update Fixed an issue with an internal movement check that prevented characters from moving in valid map areas in Felucca/Trammel from X 6144 to X 7168 Fixed an issue where .instanceID property was misspelled in 'xgo GM command script, causing characters to be teleported to an out of bounds area where they would no longer be saved (js/commands/targeting/x.js) Added some additional error-checking to .Teleport()/.SetLocation() JS Method to prevent script-accidents from sending characters out of bounds. Updated Poisoning skill to add poison-charges to weapons being poisoned. Charges are consumed when applying poison in combat (js/skill/poisoning.js) Updated combat code to consume poison-charges if a poisoned weapon is used to poison an opponent Updated shoplists for Blacksmiths and Weaponsmiths - they now buy/sell longswords (dfndata/items/shoplist.dfn) Updated MageShopping shoplist for mage vendors - they now buy/sell mass curse scrolls (dfndata/items/shoplist.dfn) Added new Spawn Region DFN tag that can specify which era or eras of UO (Multiple comma-separated entries supported) a given spawn region is valid for. Spawn region not valid for core shard era will be ignored. Syntax: ERAS=UO,T2A,UOR,LBR,AOS,SE,ML,SA,HS,TOL Added new Spawn Region DFN tag that allows using another spawn region as a "parent". All properties of this parent will be inherited except for these, which are ignored: ERAS, NPCLIST, ITEMLIST, NPC and ITEM. Syntax for new tag: GET=# // Inherit a specified spawn region Added spawn region for animal trainer vendor in Vesper stable Added spawn region for fur trader/tanner vendors in The Best Hides of Britain Added spawn region for spinner vendor in The Lord's Clothier's and The Right Fit shops in Britain Added spawn region for tanner NPC to Nujel'm Tannery (and fixed leatherworker spawn region for same area) Added spawn regions for banker NPCs in East Bank of Britain, First Bank of Moonglow, Jhelom Bank and Jeweler, Bank of Skara Brae Added spawn regions for stables, tailor and blacksmith inside Castle British Added spawn regions for mage shops, mage guilds and farm houses in Moonglow Added spawn regions for misc vendors and townfolk in multiple cities Added spawn regions for Fire Island Updated spawn regions for Dagger Isle/Ice Island Added spawn regions for forests and jungles in southern Britannia and on various islands including Bucc's Den, Moonglow, Serpent's Hold, and misc unpopulated islands Added spawn regions for area east of Skara Brae, around Hedge Maze and south of Britain Added spawn regions for wandering healers outside every dungeon entrance in Britannia and Lost Lands Re-integrated ocean spawn regions for ocean creatures (dolphin, walrus, water elemental, sea serpent) from the original community-based spawn file Added reagent spawns in overworld spawn regions in Britannia/Lost Lands Added special reagent spawns in swamp areas Added additional overworld spawn regions in Britannia/Lost Lands Added spawn regions for Khaldun dungeon that spawn some new and some old NPCs: Old: Zombies, skeletons, skeletal mages, skeletal knights, ancient liches New: Cursed (and named) NPCs, shadowfiends, zealots of khaldun (knights/summoners), tentacles of the harrower Updated size and positions of some existing overworld spawn regions Fixed incorrect spawn region size for small island south of Trinsic Added switch/door puzzle functionality in Khaldun dungeon using new switch/door combo script (js/item/dungeons/switch_door_combo.js) Added "smart objects" in Khaldun dungeon that activate when you come close enough (js/item/dungeons/smart_activate_item.js) Added teleport locations within Khaldun dungeon (js/teleport.scp) Added custom AIs to existing NPC spawning in Khaldun dungeon: Ancient Lich (summons other undead, and can turn into one of them for disguise) Added DFN entries for new NPCs spawning in Khaldun dungeon, some with custom AIs: [tentacles_of_the_harrower] -> Tentacles of the Harrower (life steal) [shadowfiend] -> Shadowfiends (seek out and reveal hidden players) [zealot_knight]/[zealot_summoner] -> Zealots of Khaldun (turn into undead on death, male/female variants) [cursed] -> Cursed (male/female variants) [spectralarmor] -> Spectral Armor Added DFN entries for new (named) NPCs spawning in Khaldun dungeon: [lysander_gathenwale] -> Lysander Gathenwale [grimmoch_drummel] -> Grimmoch Drummel [morg_bergen] -> Morg Bergen [tavara_sewel] -> Tavara Sewel Added new NPC DFN entries: [leatherworker] -> alias for male/female leatherworker vendors [mapmaker] -> alias for male/female mapmaker vendors Added new Race DFN entries: [RACE 29] -> Cursed (enemies of RACE 30) [RACE 30] -> Zealots (enemies of RACE 29) Added new book DFN entries for Khaldun journals of Lysander, Tavara and Grimmoch - available as loot from the respective NPCs (dfndata/misc/books.dfn and dfndata/items/misc/books.dfn) Added 25% chance for hit-animations and hit-SFX to play for targets in combat, instead of playing every time - can get very spammy Monsters with actual weapons equipped (like Ophidian Enforcer with Halberd/Bardiche) will now get appropriate combat SFX for hitting with that weapon Updated Healing skill to base cure/resurrection skill requirements on the calculated skill, rather than base skill (js/skill/healing.js) Fixed an issue where healing with bandages and dying in the process would not properly reset the healing-related tags and skills used Updated healing script to show a resurrection confirmation menu for players targeted with bandages for resurrect (js/skill/healing.js) All skill usage states now reset on death, to prevent cases of players being "busy" while trying to use skills that got stuck due to script bugs. The 'regspawn GM command now supports a new parameter called "max". Updated command syntax: 'regspawn # // perform a single respawn cycle in a specific spawn region 'regspawn all // perform a single respawn cycle across all spawn regions 'regspawn max // respawn ALL spawn regions to MAX capacity in one go Added new UOX.INI setting that determines the maximum range at which NPCs can initiate attacks on players/NPCs (the old MAXRANGE=10 setting now instead defines max range at which players can initiate attacks on players/NPCs): MAXNPCAGGRORANGE=10 Optimized performance by significantly reducing the number of line-of-sight checks performed by characters, especially in combat scenarios, or when evaluating potential targets for NPC AIs. The amount of checks done is also affected by the new ini setting for max aggro range. Fixed an issue where both NPC and player characters would instantly drop one hunger level (from 6 to 5) upon creation since hungerrate was not initialized until after first hunger-event Updated character priv property from UI16 to UI32, and added a new flag that determines if fame/karma title is hidden for character: HIDEFAMEKARMATITLE (0x10000) NPCs will no longer aggro other NPCs if the Z difference between them is greater or equal to 20 (i.e. they're on different floors), unless both are using ranged weapons and both are in range Fixed an issue where players could get discounts from shopkeepers even though neither player nor shopkeeper were members of a NPC guild (js/npc/ai/shopkeeper.js) Fixed an issue where the "premium" a player would get when selling items to a shopkeeper in the same NPC guild as them would be 110% extra on top of the item's value, instead of the intended 10% (js/npc/ai/shopkeeper.js) (Thanks, cobrag0318!) Added missing tall straw hat to tailoring crafting scripts (Thanks, Dragon Slayer!) Improved error reporting during compilation of individual scripts being reloaded - will now show more context and line number onCombatEnd JS Event now also triggers when NPCs ignore their target and/or evade during combat Updated 'decorate command to support saving/loading custom tags on items for world templates. These are stored after a @ symbol in the world template, each custom tag separated by a | symbol, and with each custom tag saved using this syntax: key$type$value Updated resource-harvesting scripts to use script-specific global (const) variables, to avoid interference between different scripts (js/server/resource/*) Added new resource-harvesting scripts and added spawn regions for these in fields on farms all over Britannia/Lost Lands cabbages (js/server/resource/cabbages.js) canteloupes (js/server/resource/canteloupes.js) carrots (js/server/resource/carrots.js) garlic (js/server/resource/garlic.js) gourds (js/server/resource/gourds.js) honeydew melons (js/server/resource/honeydewmelon.js) onions (js/server/resource/onions.js) pumpkins (js/server/resource/pumpkins.js) squashes (js/server/resource/squashes.js) turnips (js/server/resource/turnips.js) watermelons (js/server/resource/watermelon.js) Updated CSpawnRegion::FindItemSpotToSpawn() function in cSpawnRegion.cpp to prevent duplicate spawning of exact same item in exact same location Updated sectionid of all potion and scroll aliases to match main item, so they'll get correctly picked up by NPC shopkeepers (dfndata/items/magic/potions.dfn and scrolls.dfn) Specified sectionid for backpacks, so it also gets applied to packs added using the alias [backpack] (dfndata/items/misc/provisions.dfn) Fixed a code issue that prevented players from selling empty containers to NPC shopkeepers willing to buy such containers Fixed an issue where field-spells (wall of stone, poison field, etc) would ignore dynamic/static items that should block these Fixed an issue where field-spells could be cast into houses from the outside by standing next to a wall and targeting self Fixed a War/Peace-mode desync between client and server by having server always notify client (using war-toggle packet) when the "at war" flag is toggled for player character Fixed an issue with hiding skill that wouldn't allow player to hide after having acquired self as target in combat (through spellcasting, for instance) (Thanks, Dragon Slayer!) Fixed an issue where mana/reagents were consumed and skillcheck performed before all spellcast-validations had succeeded, resulting in the occasional loss of reagents/mana when spellcasting was disallowed (code and js/magic/clumsy.js and level1targ.js) Fixed an issue with lack of criminal-flagging for casting of hostile spells scripted in JS (clumsy, magic arrow, feeblemind) vs blue targets (js/magic/clumsy.js and level1targ.js) Fixed some issues with Line-of-Sight checking code that returned incorrect results, which amongst other things affected spellcasting in areas with uneven terrain Fixed some issues with movement code and climbing of ladders, in particular the rope ladder in the 2-story log cabin. Code now sets a "is climbing" flag when character steps onto a rope ladder, and uses that to help resolve some edge cases, and then unsets it when they step off. Renamed section headers of some map-items in DFNs from "locationname" to "locationnamemap" for clarity (example: "britain" to "britainmap") Fixed broken "map wrapping" when sailing to edges of map in Felucca or Trammel Fixed a server crash related to attempts at reading data from invalid map tiles
2025-06-27 08:40:02 +08:00
break;
case CIP_ORIGIN:
UOX3 0.99.6-RC3 Updated Item DFNs with ORIGIN and SECTIONID tags for relevant items Added JS Function to make comparing eras (based on object origin or server settings) easier: EraStringToNum( eraString ) // Takes an era string (uo, t2a, uor, td, lbr, aos, etc) and returns an int Updated some JS scripts to use EraStringToNum() for era comparisons (potionkeg.js) Default CORESHARDERA setting is now LBR Removed PUB15 as a separate "era" - it's identical to late stage LBR anyway: Removed support for GETPUB15 tag Added support for GETUO tag for items/NPCs: GETUO=<sectionID> // Inherit DFN section if core shard era is Ultima Online (original release, before T2A) Rewrote portions of MsgBoardQuestEscortCreate() function in msgboard.cpp to ensure only escort regions within same world as NPC can be selected as destinations Increased maximum number of possible escort regions that can exist from 255 to 65535 Added region definitions for all shrines in Britannia (Fel & Trammel), and marked them as valid destinations for NPC escorts (uox3/regions/regions.dfn) Moved bankers from vendor to human DFN files, and made them inherit basehuman instead of basevendor - since they are not vendors To address an issue with escorted NPCs not timing out and vanishing if they are left in a "dormant" area of the world with no player activity, the NPCs are marked as "always awake" the moment they arrive at their destination. Note that the uox.ini setting ALLOWAWAKENPCS needs to be enabled for this to work. Fixed an issue where spawnsection of spawners did not show up correctly in tweak menu Fixed an issue where the generic Orc AI script didn't have a return true at end of onDamage() event, which prevented all orcs from taking damage in combat (js/npc/ai/monster/orc.js) Moved Anatomy skill-check in healing script (js/skill/healing.js) from onCallback1() function to onTimer() to prevent the skill-check from being spammable Added mount ID for Frost Mite in creatures.dfn, allowing it to be used as mount Exposed the following character properties to JS engine, which can be used to view/adjust the permanent hair/beard options for a character: .hairStyle .hairColour .beardStyle .beardColour Updated 'kill hair, 'shavehair, 'shavebeard and 'remove commands to clear permanent hair/beard colour and style properties in addition to removing the item itself Added a GM override to let GMs place as many houses as they want (js/server/house/houseDeed.js) Fixed an issue where attempting to sell items to NPC shopkeepers could result in client crashing Added a new JS Event: onMultiLogout( iMulti, cPlayer ) // Handles players logging out while inside multis Updated house script (js/server/house/house.js) with onMultiLogout event, which allows owners (always) and co-owners/friends/guests (if option enabled in uox.ini) to safely log out inside the house (without getting booted). Added a "keyless" option for interacting with locked doors (js/item/doors.js) of player-owned houses, which lets owners/co-owners/friends/guests of a house use locked doors in the house without requiring a key in their backpack, if the options for that are enabled in UOX.INI. Enabled for owners/co-owners and friends by default (but not for guests) Note that if option to safely log out is enabled, but keyless option is NOT enabled, then the server will check if the player has a key to the house in their backpack, and eject them from the house upon logging out if not. This is to make sure players don't get stuck inside a house they can't get out of because they lack the rights to open doors etc. Added new UOX.INI options, under the [houses] section: SAFECOOWNERLOGOUT=1 // Allow co-owners to safely and instantly log out inside house SAFEFRIENDLOGOUT=1 // Allow friends to safely and instantly log out inside house SAFEGUESTLOGOUT=1 // Allow guests to safely and instantly log out inside house KEYLESSOWNERACCESS=1 // Allow owner of house to use locked doors in house without key in pack KEYLESSCOOWNERACCESS=1 // Allow co-owners of house to use locked doors in house without key in pack KEYLESSFRIENDACCESS=1 // Allow friends of house to use locked doors in house without key in pack KEYLESSGUESTACCESS=0 // Allow guests of house to use locked doors in house without key in pack Fixed NOHAIR tag from races.dfn not being loaded correctly
2023-03-04 22:50:55 +08:00
tString = JS_NewStringCopyZ( cx, cwmWorldState->ServerData()->EraEnumToString( static_cast<ExpansionRuleset>( gPriv->GetOrigin() )).c_str() );
*vp = STRING_TO_JSVAL( tString );
break;
case CIP_ISITEMHELD: *vp = BOOLEAN_TO_JSVAL( gPriv->IsHeldOnCursor() ); break;
Thief Revamp - 0.99.6-RC5 Added script for NPC guildmasters (js/npc/ai/guildmaster.js). Only one NPC guild has been setup in the script so far (more can be easily added) - the Thieves Guild - which if joined grants players the ability to steal from other players and to buy disguise kits Added two new NPCs, which there will now spawn one of in a random location in each city in Britannia (felucca facet): m_thief_guildmaster (dfndata/npc/male_human.dfn) f_thief_guildmaster (dfndata/npc/female_Human.dfn) Added two new character properties to keep track of which NPC guild a player (or NPC) belongs to. These properties have been exposed as the following Character JS properties: .npcGuild // ID of NPC guild, as defined in script .npcGuildJoined // Timestamp for when player joined NPC guild Added script for Disguise Kits (js/item/disguisekit.js). These allow members of the Thieves Guild to disguise themselves from the prying eyes of other players. Added two new character properties: .isDisguised // true/false flag for character being disguised .origName // used to store character's original name before disguise went into effect Moved implementation of Stealing skill from code to script (js/skill/stealing.js) and revamped it completely in the process. Changes include: New features: Town rare stealing - any item marked as "special stealable" with new item property .stealable can be stolen, even if it's locked down by a GM on the ground, or inside a container When stealing from item piles, thief can potentially steal the amount of items that makes up the max weight limit for what they can steal, from those piles Chance to successfully steal is now affected by whether there are any characters (NPCs or Players) that witness the attempt. Depends on distance to character, and direction character is facing Players now become "permagrey" when successfully stealing from another player, regardless of whether it's witnessed Players now receive a "stealing" flag when stealing from another player, regardless of whether it's witnessed Stolen items cannot be removed from thief's backpack for 30 seconds following the theft of the item (AoS core shard era and above) Optional AoS feature to steal special consumable items from monsters Updated default stealing rules: Updated calculations to determine chance of success when stealing Players cannot steal while engaged in combat Players are revealed if hidden as soon as they use the stealing skill Players can no longer steal items in the secure trade window Players can no longer steal items from NPC shopkeepers Both hands must be free to steal Stealing now checks line of sight to target player/object Only members of Thieves Guild (NPC guild) can now steal from other players, unless they are guild enemies Players can no longer steal from NPC guards by default Players can no longer steal from the same NPC monster more than once Only gold and gems can be stolen from innocent players in dungeon/ll areas of Felucca, if core shard era is set to AoS or higher Players can no longer steal items held on cursor by other players Orcish masks now eplode if player steals from orcs while wearing it If core shard era is set to LBR or lower, player is marked as an aggressor if they steal from another player Guards can only be called on players that are flagged as criminals within the first 10 seconds of them being flagged Stealing script options: Allow stealing entire containers (off by default pre-AoS) Return stolen items on thief death (off by default) Temporarily make stolen items immovable in thief's backpack (on by default post-AoS) Temporarily protect traded items (on by default) Let dexterity affect chance for successful theft (off by default) Let light level affect chance for successful theft (off by default) Allow stealing from NPC Guards (off by default) Allow stealing special loot from monsters (on by default post-ml) Moved implementation of Snooping skill from code to script (js/skill/snooping.js), with some changes: Players cannot snoop pack animals from inside a house, if the animal is outside The deeper inside main backpack a container sits, the harder it becomes to snoop inside it Included an optional feature that lets targets of snooping gradually become more aware, increasing the difficulty of succeeding. This awareness fades over time. Players have a chance to stay hidden while snooping, based on their Hiding skill Karma is now lowered by snooping regardless of success or failure Added tracking system for "aggressors" in combat. A player attacking someone (regardless of flag status) will be marked as aggressor to that someone for 2 minutes Added tracking system for "permagrey" flags - these are stored on a per-target basis, so a player can be flagged visibly as permagrey to multiple other players. Persists until player dies. Player combat targets and war mode are now cleared on logout Players will now be unable to hide if within visual distance and in line of sight of their attacker or current target in combat Server leave-announcement now only happens after the logout timer has expired, instead of the exact moment the player presses the logout button Fixed an issue that could cause swimming NPCs to swim on land NPCs now have the ability to temporarily ignore unreachable targets in combat. If attacked by someone they are ignoring, they will enter evade state and try to move away from that someone. SpawnRegions now support NPCLISTS with weighted entries. Example of an NPCLIST with 75% chance of spawning some kind of orc, and 25% chance of spawning a ratman archer: [NPCLIST example] { 75|NPCLIST=allorc 25|ratman } Added 3 additional "all purpose" item properties (.more0, .more1 and .more2) and exposed those to JS engine. These work the same as more/morex/morey/morez Mark spell now stores a 4th property on recall runes - instanceID. This is stored in the rune's .more0 property. Recall and Gate spells now check the recall rune (or runebook)'s 4th location property - instanceID - to determine where the player ends up Fixed a server crash related to equipment being automatically unequipped if character is no longer strong enough to have it equipped Added new JS Function to check if any characters at specified location potentially block movement: DoesCharacterBlock( x, y, z, worldNum, instanceID ) // returns true if a character exists at given coordinate (within z +/- 4)
2023-06-20 02:21:16 +08:00
case CIP_STEALABLE: *vp = INT_TO_JSVAL( gPriv->GetStealable() ); break;
Minor JS revamp - multiple scripts per object! Added TryParseJSVal() helper function in cScript.cpp, used to parse jsval values returned from script events. Provides results matching 0 (0, false), 1 (1, true) or any specific int value returned from script. JS events updated to use new TryParseJSVal helper function (no change in behaviour): onDecay, onResurrect, onCommand, onBuyFromVendor, onSellToVendor, onPickup, onCharDoubleClick, onSkillGump, onUseBandageMacro, onCombatStart, onCombatEnd, onDeathBlow, onBuy, onSell JS events with slight change of behaviour after update to use TryParseJSVal: onDrop, onDropItemOnItem, onDropItemOnNpc - previously, a blank or non-existent return value would be treated the same as a return true. This will now be treated as a return false. Update scripts accordingly! JS events updated to support return values from scripts: onCollide, onTalk, onSnooped, OnHungerChange Return false or nothing to prevent hard code from running Return true to allow hard code to run like normal onStolenFrom, onAISliver, onLightChange, onVirtueGumpPress, onQuestGump, onSpecialMove, onSwing, onClick, onHouseCommand, onSellToVendor, onSkillCheck, onSpellGain, onSpellLoss Return false to allow hard code and other scripts with event to run like normal Return true to prevent hard code and other scripts with event from running onSteal Return false or nothing to allow hard code and other scripts with event to run like normal Return true to prevent hard code and onStolenFrom event from running (theft failed?) Return 2 to prevent hard code, but allow onStolenFrom event to run (theft succeeded, but handled in script?) onLeaving, onEntrance, onEquip, onUnequip, onEnterEvadeState, onSoldToVendor, onBoughtFromVendor, onSpellSuccess, onSpellTarget, onFlagChange, onDeath Return false or nothing to allow other scripts with event to run like normal Return true to prevent other scripts with event from running Added new JS events that run prior to items being equipped/unequipped, with support for return values: onEquipAttempt( pEquipper, iEquipping ) onUnequipAttempt( pEquipper, iUnequipping ) Return false or nothing to reject attempt to equip/unequip item, and prevent hard-code or other scripts with event from running Return true to allow hard code to run like normal Added new JS event that runs prior to onSnooped event, for character doing the snooping: onSnoopAttempt( snooped, snooper ) Return false or nothing to prevent hard code and other snooping-related events from running Return true to allow hard code and other snooping-related events to run like normal Updated onSnooped JS event to accept return values: Return true when success state is true to prevent other scripts with event from running Return true when success state is false to prevent hard code and other scripts with event from running Updated onClick JS event to also run for characters with event attached (return 1 to prevent showing hard-coded name for whatever object is clicked) Updated onSteal JS event to include a third parameter, an object reference for the target of the theft Added support for assigning multiple JS scripts per object (item, multi, char, region). Any time a scriptID is added to an object, the list of such IDs for that object will be sorted from lowest to highest scriptID, which also determines the execution order for the scripts. Note that if the same JS event is present in several scripts assigned to an object, each of those events will trigger, unless the rules about return values for said event prevent this DFNs for Items, Multis, Characters and Regions can now contain multiple SCRIPT=scriptID tags per definition. Each such SCRIPT tag will be applied to the object in question, then sorted from lowest to highest scriptID by server. Added new JS property for Items, Multis, Characters and Regions: .scriptTriggers // If used to get property, will return array object with all script IDs assigned to object. If used to set property, will add script ID to existing list of script IDs for object. Modified JS property for Items, Multis, Characters and Regions, which for backwards compatibility functions similar to in older versions: .scripttrigger // If used to get property, will return last script ID in list of script IDs assigned to object. If used to set property, will clear list of script IDs and assign only the new ID Added new JS Methods for Items, Multis, Characters and Regions: .AddScriptTrigger( scriptID ) // Adds a new scriptID to list of scripts assigned to object .RemoveScriptTrigger( scriptID ) // Remove a specific scriptID from object (0 = remove all) Moved SETSCPTRIG command from code to JS (js/commands/targeting/scptrig.js), and supplemented it with some additional commands: GETSCPTRIG // List out all scriptIDs assigned to object SETSCPTRIG scriptID // Clears list of scriptIDs for object, then assigns the specified scriptID ADDSCPTRIG scriptID // Adds specified scriptID to list of scriptsIDs assigned to object REMOVESCPTRIG scriptID // Removes specified scriptID from list of scriptIDs assigned to object (0 = remove all)
2021-05-25 19:37:52 +08:00
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
// The following entries are specifically for CSpawnItem objects
case CIP_SPAWNSECTION:
if( gPriv->GetObjType() == OT_SPAWNER )
{
tString = JS_NewStringCopyZ( cx, ( static_cast<CSpawnItem *>( gPriv ))->GetSpawnSection().c_str() );
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
*vp = STRING_TO_JSVAL( tString );
}
break;
case CIP_SECTIONALIST:
if( gPriv->GetObjType() == OT_SPAWNER )
{
*vp = INT_TO_JSVAL(( static_cast<CSpawnItem *>( gPriv ))->IsSectionAList() );
}
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
break;
case CIP_MININTERVAL:
if( gPriv->GetObjType() == OT_SPAWNER )
{
*vp = INT_TO_JSVAL(( static_cast<CSpawnItem *>( gPriv ))->GetInterval( 0 ));
}
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
break;
case CIP_MAXINTERVAL:
if( gPriv->GetObjType() == OT_SPAWNER )
{
*vp = INT_TO_JSVAL(( static_cast<CSpawnItem *>( gPriv ))->GetInterval( 1 ));
}
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
break;
case CIP_MULTI:
CMultiObj *multi;
multi = gPriv->GetMultiObj();
if( !ValidateObject( multi ))
{
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
*vp = JSVAL_NULL;
}
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
else
{
// Otherwise Acquire an object
JSObject *myObj = JSEngine->AcquireObject( IUE_ITEM, multi, JSEngine->FindActiveRuntime( JS_GetRuntime( cx )));
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
*vp = OBJECT_TO_JSVAL( myObj );
}
break;
Housing Revamp and more Updated JS SysMessage function to accept up to 10 extra, optional arguments, which can be used with dictionary messages that require additional parameters like %s or %i Added new type of house privilege in cMultiObj.cpp to keep track of friends of the multi - HOUSEPRIV_FRIEND - which is stored during worldsaves as one or more Friend=<player serial> tags in house.wsc Added new type of house privilege in cMultiObj.cpp to keep track of guests of the multi - HOUSEPRIV_GUEST - which is stored during worldsaves as one or more Guest=<player serial> tags in house.wsc When items are created for houses upon house placement, a reference to the multi's serial is now stored in the house sign's MORE property to allow easier tracking of which house a particular sign belongs to Added tracking of new, persistent properties for houses via cMultiObj.cpp/h: lockdowns, secure containers, vendors, guests, friends, owners, ban location, public status, number of visits, timestamps Added a multitude of new methods in cMultiObj.cpp/h to assist in improving the functionality of houses Added new tags for houses in house.dfn (default values applied if tag not specified): MAXSECURECONTAINERS=4 - Max amount of secure containers allowed in a multi MAXLOCKDOWNS=256 - Max amount of lockdowns allowed in a multi MAXVENDORS=10 - Max amount of vendors allowed in a multi MAXBANS=50 - Max amount of bans in a multi's ban list MAXFRIENDS=50 - Max amount of friends in a multi's friend list MAXGUESTS=50 - Max amount of guests in a multi's guest list MAXOWNERS=8 - Max amount of owners and co-owners in a multi's owner list MAXTRASHCONTAINERS=1 - Max amount of trash containers allowed in multi SCRIPT=<scriptID> - Assign a JS script-ID directly to a multi FRONTDOOR - indicates that a door is the front door of a house. Cannot be locked in public houses! INTERIORDOOR - indicates that a door is an interior door of a house. Can be locked in public houses. BANX - Location X offset for multi's ban location, if not used, will try to use SE corner of multi instead BANY - Location Y offset for multi's ban location, if not used, will try to use SE corner of multi instead Added JS Event: onHouseCommand( tSock, multiObj, cmdID ) - For handling spoken house commands via JS scripts attached to multi. Updated JS Events: onEntrance() - can now trigger both for multi being entered and/or object entering onLeaving() - can now trigger both for multi being left and/or object entering onSpeech() - can now also trigger for items (in addition to chars) with event & script attached, if UOX.INI setting ITEMSDETECTSPEECH is enabled Added JS Multi methods: .IsBoat() - Returns whether the item (or multi) is a boat .IsOwner( playerToCheck ) - Returns whether a player is the owner of a multi .IsOnOwnerList( playerToCheck ) - Returns whether a player is on the (co-)owner list of a multi .IsOnFriendList( playerToCheck ) - Returns whether a player is on the friend list of a multi .IsOnGuestList( playerToCheck ) - Returns whether a player is on the guest list of a multi .IsOnBanList( playerToCheck ) - Returns whether a player is on the ban list of a multi .AddToFriendList( playertoAdd ) - Adds player to the friend list of a multi .RemoveFromFriendList( playertoRemove ) - Removes player from the friend list of a multi .AddToGuestList( playertoAdd ) - Adds player to the guest list of a multi .RemoveFromGuestList( playertoRemove ) - Removes player from the guest list of a multi .ClearOwnerList() - Clears all entries from a multi's (co-)owner list .ClearFriendList() - Clears all entries from a multi's friend list .ClearGuestList() - Clears all entries from a multi's guest list .ClearBanList() - Clears all entries from a multi's ban list .SecureContainer( itemToSecure ) - Secures a container in a multi .UnsecureContainer( itemToUnsecure ) - Unsecures a container in a multi .IsSecureContainer( itemToCheck ) - Checks if specified item is a secure container in a multi .LockDownItem( itemToLockDown) - Locks down an item in a multi .ReleaseItem( itemToRelease ) - Releases a locked down item in a multi .KillKeys() - Deletes ALL keys associated with a multi .AddTrashCont( itemToAdd ) - Add trash container to multi's list of trash containers .RemoveTrashCont( itemToRemove ) - Remove trash container from multi's list of trash containers Added JS Item (Multi only) properties: .lockdowns - Get the number of lockdowns in a multi .maxLockdowns - Get/Set the max number of lockdowns allowed in a multi .secureContainers - Get the number of secure containers in a multi .maxSecureContainers - Get/Set the max number of secure containers allowed in a multi .trashContainers - Get the number of trash containers in a multi .maxTrashContainers - Get/Set the max number of trash containers allowed in a multi .friends - Get the number of friends in a multi's friend list .maxFriends - Get/Set the max number of friends allowed in a multi's friend list .guests - Get the number of guests in a multi's guest list .maxGuests - Get/Set the max number of guests allowed in a multi's guest list .owners - Get the number of owners in a multi's owner list .maxOwners - Get/Set the max number of owners allowed in a multi's owner list .bans - Get the number of banned players in a multi's ban list .maxBans - Get/Set the max number of banned players allowed in a multi's ban list .vendors - Get the number of player vendors in a multi .maxVendors - Get the max number of player vendors allowed in a multi .deed - Get the item sectionID for deed used to place multi .isPublic - Get/Set the private/public state of a multi .buildTimestamp - Get the timestamp for when the house was originally placed .tradeTimestamp - Get the timestamp for when the house was last traded to another player .banX - Get/Set the ban location X offset for the multi .banY - Get/Set the ban location Y offset for the multi Added JS Character properties: .multi = Get/Set the multi object the character is in .accountNum = Get the account number the character belongs to .housesOwned = Get a count of houses owned by the character .housesCoOwned = Get a count of houses co-owned by the character Updated JS cBaseObject Methods .FirstItem(), .NextItem() and .FinishedItems() to also support iterating through items in multis Updated JS multi Methods .FirstChar(), .NextChar() and .FinishedChars() to support an additional parameter to specify what kind of characters to loop through: "default" or no parameter - all characters inside the multi "owner" - players on multi's owner list "friend" - players on multi's friend list "guest" - players on multi's guest list "banned" - players on multi's ban list Added new INI tags to a new section of uox.ini called [houses] DECAYTIMERINHOUSE=3600 // Decay timer in seconds for non-locked down items inside houses PROTECTPRIVATEHOUSES=1 // Toggles whether private houses will automatically boot unauthorized visitors (1) or not (0) TRACKHOUSESPERACCOUNT=1 // Toggles whether to track (and restrict) house ownership per account (1) or per character (0) MAXHOUSESOWNABLE=1 // Specifies the max amount of houses a player can own per account/char, depending on how house ownership is tracked MAXHOUSESCOOWNABLE=10 // Specifies the max amount of houses a player can co-own per character CANOWNANDCOOWNHOUSES=1 // Toggles whether players can own and co-own houses at the same time COOWNHOUSESONSAMEACCOUNT=1 // Toggles whether characters on same account as house owner will be treated as co-owners Added new INI tags in [settings] section of uox.ini: ITEMSDETECTSPEECH=0 // If enabled, server will search for nearby items with onSpeech JS event running whenever a character speaks. Disabled by default. MAXPLAYERPACKITEMS=125 // Defines max item capacity for player (and NPC) backpacks. Defaults to 125. Moved most of the existing house functionality to JS and expanded upon it to reach feature parity with houses in regular UO around Publish 15/16, with various extras thrown in for good measure and all functionality being customizable: js/server/house/house.js (15000) - handles detection of house commands and characters entering/leaving houses js/server/house/houseSign.js (15001) - contains and handles all house-related gumps/menus and what is shown when players interact with house sign js/server/house/houseCommands.js (15002) - handles functionality of house commands and other functionality such as transfer of ownership, demolishing house, etc. js/server/house/houseDeed.js (15003) - handles initial rules that allow/disallow placement of additional houses for players All house-related menus now fully handled through JS All house commands and other functionality now fully handled through JS Removed redundant hard-coded house functionality Implemented Co-owners, friends, guests for houses, with access rules in place for entry, lockdowns, house commands, etc. Implemented Private and Public houses Implemented Secure Containers and Trash Barrels Definable max lockdowns, secure containers, player vendors, bans, friends, guests, owners, trash containers and more - per house type JS scripts can now be attached directly to houses Doors in houses can be marked as front doors or interior doors, and will be treated differently with regards to private and public houses Added new item to dfndata/items/containers/misc.dfn - [trashbarrel] Added new JS script (js/items/trashbarrel.js) with trash barrel functionality for houses. Trash barrels that are marked as secure containers are only accessible by owners, co-owners and friends of the house. Various options available at top of script. Updated js/items/axe.js to support chopping up trash barrels and house add-ons in houses owned by the player Fixed an issue with house doors being left behind after demolishing houses while their doors were open Fixed an issue where GMs could be banned from player houses Added Line of Sight checks to speech, to give players some privacy in their own homes Updated house placement code to more accurately check for other multis, dynamic and static objects when placing houses; now requires free space around each house that cannot be blocked by other houses or items that can block player movement, and disallows placement of houses on roads Updated house placement code to move characters blocking house placement to SE corner of the house Updated house placement code to disallow placing houses in guarded regions, or in dungeons Added new DFN tag for regions to enable/disable player houses in specific regions: HOUSING=0/1 Added new region (247) that covers path to Valley of Eodon in Felucca Added new region (248) that covers Valley of Eodon in Ter-Mur, with player housing disabled Added new region (249) that covers entire T2A lands, with player housing disabled Updated SPACEX and SPACEY values for all houses in dfndata/house/house.dfn to match updated house placement code Added new JS property to Regions that can be used to determine or change state of player housing in a region: .canPlaceHouse() Updated rules for usage of dye tubs to dye locked down items; now only house owners or co-owners may dye locked down items Updated rules for usage of the following locked down items in a house, which are now only usable by house owners and co-owners Dyes, Guildstone Deeds, Recall Runes (renaming), Rename Deeds, Townstone Deeds, House Deeds, Boat Models, Player Vendor Deeds, Ore, Hair Dye Updated rules for usage of the following locked down items in a house, which are now only usable by house owners, co-owners and friends: Keys, Dye Tubs, Magic Scrolls, Fireworks Wands, Magic Wands, Smithing Tools, Mining Tools, Fishing Poles Updated item lockdown rules to allow locking down (and releasing) items in a container as long as the container is locked down, and to only allow releasing a locked down container if it's empty of locked down items Updated item lockdown rules to only allow locking down movement-blocking items further than 2 tiles away from doors Updated rules for releasing items in houses - now the house owner can release any locked down items, co-owners can release items locked down by themselves or by friends, while friends can release only items locked down by themselves Added some feedback to player about why their attempted house placement failed Items added by GMs directly into multis will now decay based on the house-specific decay timer instead of the regular one Fixed an issue that could cause items to almost instantly decay after being released from lockdown in a house Placing house add-ons now properly takes into account SPACEX and SPACEY values when checking if they can fit in selected area of houses Re-added SPACEX and SPACEY values for Pentagram and Loom house add-ons House add-ons can now be converted back into house add-on deeds by chopping them with an axe Added new item type - IT_HOUSEADDON (201) - used by house add-ons placed in player houses Fixed a bug where keys would stop working after being added to a keyring, and would turn into blank keys upon release from the keyring Added visitor count for public player houses, which keeps track of how many visits a public house has received, with each player counted max 1 time every 24 hours Fixed an issue with FindPlayersInOldVisrange() where it didn't take into account that players could see buildings further away than the standard update range. This could cause players to see ghost images of buildings if they were at the "right" distance when the building was being demolished Added NODECAY tag to all signs and doors in dfndata/house/house.dfn Added FRONTDOOR or INTERIORDOOR (as appropriate) to all doors in dfndata/house/house.dfn Added BANX and BANY to specify ban location for some houses in dfndata/house/house.dfn instead of relying on finding SE corner automatically Implemented strongboxes (js/server/house/strongbox.js) for co-owners of a house, which can be placed with the house command "i wish to place a strongbox". Max capacity is 25 items Updated 'REMOVE command to take an optional parameter - itemID. If supplied, the command will remove all items with this itemID from a targeted container Fixed a bug when checking if dynamic items were blocking valid spawn locations for NPCs, some function arguments were in the wrong order! Improved code that finds valid spawn locations for items and NPCs spawned via spawn regions. As server gradually builds up lists of valid spawn locations per region over time, it will start using these lists more often, rather than always look for brand new spawn locations. Fixed a bug with CMulHandler::CheckStaticFlag() that prevented NPCs from spawning inside buildings with no static floors! Fixed an issue with repeating commands that prevented GMs from being able to cancel them when using the ClassicUO client Exposed character property .accountNum to JS engine Extended CDataList class to include a Clear() method for clearing lists Updated JS File method .Open() to support an optional, third argument - subFolderName - that defines in which sub-folder of UOX3/shared/ to store/look for a file. If no third argument is supplied, UOX3 will default to using the shared folder itself. Updated JS File method .Length() to return a value of -1 for files that don't exist Added new code function, exposed to JS engine with same parameters, which simply checks if a given tile ID has a specific flag bool CheckTileFlag( UI16 itemID, TILEFLAG flagToCheck ) Added JS function used to find the root container of an item (if any) FindRootContainer( itemSerial ) FindRootContainer( item ) Added new JS function that allows deleting files from UOX3/shared/ folder or subfolders of shared folder. If no subFolderName is provided, looks for file directly in shared folder itself. Restrictions on file- and folder-names apply. bool DeleteFile( fileName, subFolderName ) Added new JS functions for checking if a specific client or server feature is enabled. See documentation for full list of client/server features. GetClientFeature( bitNum ) // Returns true if specified client feature is enabled on server GetServerFeature( bitNum ) // Returns true if specified server feature is enabled on server Added new JS function for returning the value of almost any server setting from UOX.INI GetServerSetting( settingNameInDoubleQuotes ) Updated JS function DoesDynamicBlock() with two new parameters - checkOnlyMultis and checkOnlyNonMultis Updated JS function DoesMapBlock() with two new parameters - checkMultiPlacement and checkForRoad Fixed an issue where a LoS check would prevent players from accessing containers in their own backpack Added new functions in findfuncs.cpp to make it easier to find items near another object or location: findNearbyItems( object, distance ) findNearbyItems( x, y, worldNumber, instanceID, distance ) Added new Item property - maxItems - used by containers to determine their max item capacity Added new Item property - totalItemCount - used to get total item count in a container (including sub-containers) Added check for max item capacity when creating new items that are added to a character's backpack - items will be created below character's feet if backpack is full! Added new DFN tag for items, used by containers to determine item capacity for a given container: MAXITEMS=# // 125 is the default for all containers if not set Added new JS Item properties: .maxItems // gets/sets item capacity for a given container .totalItemCount // gets total item count in a container, including sub-containers Updated item tooltips for containers to show accurate total item count, as well as to display max item capacity Fixed a bug where picking up items from a non-locked down pile of items on the floor inside a multi could cause the remaining pile to be seen as no longer inside the multi, disallowing locking it back down and causing it to decay based on regular decay timer instead of house-specific one Updated JS command set to allow setting poison-level on items ('set poison #) and hunger-level on characters ('set hunger #) Fixed an issue with js/item/food.js that prevented poisoned food from poisoning characters when eaten Fixed an issue with js/skill/poisoning.js that prevented players from poisoning food! Updated various JS scripts and hardcoded targeting functions to disallow the targeting of locked down resources using skills and tools Updated JS Method TextMessage() to support three extra, optional parameters. Note that if one optional parameter is included, all preceding optional parameters are also required! speechTarget - What kind of target is this message intended for? 0 - Only visible for sender and receiver of message 1 - Visible to all players in range 2 - Visible to all NPCs and players in range 3 - Visible to all PCs everywhere + NPCs in range 4 - Visible to all PCs everywhere (broadcast) 5 - Only visible for the receiver of the message speechTargetSerial - The serial of the receiver of the message, used if speechTarget is 0 or 5 speechFontType - The type of font to display the text in. Defaults to normal. 0 - Bold 1 - Normal with shadow 2 - Bold with shadow 3 - Normal 4 - Gothic 5 - Italic 6 - Small, dark 7 - Colourful 8 - Runic (only works with CAPS) 9 - Small, light Added timestamp to worldsaves in console, to make it easier to see when a particular world-save was done Added info about compiler/environment displayed at the top of the UOX3 console during startup Updated dictionary files with new messages primarily related to housing
2020-11-04 02:00:37 +08:00
// The following entries are specifically for CMultiObj objects
case CIP_LOCKDDOWNS:
if( gPriv->GetObjType() == OT_MULTI )
{
*vp = INT_TO_JSVAL(( static_cast<CMultiObj *>( gPriv )->GetLockdownCount() ));
}
0.99.4d Added new option in UOX.INI under [settings] section: MAPDIFFSENABLED=0/1 // If enabled, server will attempt to load diff files, and send "Enable Map-diff files" packet to client to also load these. Disabled by default. Server no longer loads map/statics diff files by default, nor does it send packet to client to request loading these files, as only client versions below 7.0.8.2 will actively load these files. Can be re-enabled with new UOX.INI setting mentioned above! Fixed incorrect ID for gargish dagger in CHandleCombat::getWeaponType() Added missing weapon entries in CHandleCombat::getWeaponType(): bladed whip, barbed whip, spiked whip, gargish talwar Fixed an issue that would show the end part of some tiledata names as garbled text instead of cutting off the text(!) at 20 characters Fixed an issue with advanced character creation template when using ClassicUO client, which sends a profession value of 255 instead of 0 when no profession template has been selected. Fixed an issue where clones of NPCs that can split in combat didn't get the NPC flag correctly set Guild titles are now removed for players who leave their guilds Enabled closing some hard-coded gump menus using right-click (howto, guild, towns, wholist, addmenu, craftmenu, info) Fixed an issue where adding base items using 'add [itemID] would sometimes get false positive hits from harditems.dfn, depending on the length of the itemID Fixed an issue where items added using 'add [itemID] would not get names applied properly from harditems.dfn Item/NPC DFN tag GET can now inherit a random parent by adding additional values separated by spaces. Syntax: GET=parent1 parent2 parent3 (etc) Fixed an issue where NPC backpacks would not have the max item capacity set properly Added new properties for CItem objects (also exposed as JS Item Properties): maxRange // max distance a ranged weapon can fire at (replaces ARCHERRANGE ini setting) baseRange // base distance throwing weapons (when implemented) can be used at Added support for new Item DFN tag that replaces global UOX.INI setting ARCHERRANGE: MAXRANGE=# // Specifies max range of ranged weapon Added support for new Item/NPC DFN tags to support randomizing elemental resistances: RESISTFIRE=#/# # // Set NPC's poison resistance; fixed or random value RESISTCOLD=#/# # // Set NPC's poison resistance; fixed or random value RESISTLIGHTNING=#/# # // Set NPC's poison resistance; fixed or random value RESISTPOISON=#/# # // Set NPC's poison resistance; fixed or random value Added support for two new DFN tags in dfndata/race/races.dfn that can be used to allow/ban lists of equipment for specific races ALLOWEQUIPLIST=# BANEQUIPLIST=# Added support for new section in dfndata/race/races.dfn - [EQUIPLIST #], which can be used to define lists of equipment that is whitelisted or banned for specific races. Fixed a bug that would report incorrect weight in tooltips for Item/NPC spawner objects ScriptSections are now reapplied for items bought by players from NPC vendors Fixed an issue where players could drop an item on the ground and other players would still see the item after it was picked up, because of a failed distance check vs old location coordinates (in pack) instead of vs current location on ground Fixed a bug with players being able to use last-target macro to target objects picked up and held by other players on their cursor Updated all references to "devinelock" to be "divinelock" instead - this includes the name of the JS Item property Fixed house commands triggering (useless) targeting cursors for players onboard boats Changed default statcap in UOX.INI from 325 to 225 Fixed a out-of-range error for players attempting to combine ore inside their own backpack Fixed various issues with distance checks and container checks when using/target objects Added optional 4th "hue" parameter to AddGump JS method Added JS Function to get total amount of accounts on server - GetAccountCount() Added JS Function to get total amount of players online - GetPlayerCount() onSwing JS Event can now trigger in scripts attached to items, not just items attached to characters Added some JS Functions to expose some hard-coded constants to JS scripts: BASEITEMSERIAL() // Base item serial INVALIDSERIAL() // Invalid serial INVALIDID() // Invalid ID INVALIDCOLOUR() // Invalid colour Fixed an issue where JS character property .colour would modify origSkin property instead of colour Fixed an issue where JS character property .guildTitle returned the name of the character instead of the guild title Character JS property .poison can now also be used to set a character's poisoned level, not just read it Exposed Item property to JS engine: .ac // armour class for item (0-128). Primarily used for setting race-restrictions for equippable items, i.e. race X cannot equip items of armour class Y. .def // defensive value of item (Physical resistance post-AoS, AR in older UO) // NOTE: The following properties don't actually do anything yet, but can still be used in custom JS scripts if desired .resistCold // Cold resistance of item 0-1000, where 1000 equals 100.0% .resistHeat // Heat/Fire resistance of item 0-1000, where 1000 equals 100.0% .resistLight // Light resistance of item 0-1000, where 1000 equals 100.0% .resistLightning // Energy/Lightning resistance of item 0-1000, where 1000 equals 100.0% .resistPoison // Poison resistance of item 0-1000, where 1000 equals 100.0% .resistRain // Rain resistance of item 0-1000, where 1000 equals 100.0% .resistSnow // Snow resistance of item 0-1000, where 1000 equals 100.0% .damageHeat // Weapon deals Heat/Fire elemental damage (true/false) .damageCold // Weapon deals Cold elemental damage (true/false) .damageLight // Weapon deals Light elemental damage (true/false) .damageLightning // Weapon deals Lightning elemental damage (true/false) .damagePoison // Weapon deals Poison elemental damage (true/false) .damageRain // Weapon deals Rain/Water elemental damage (true/false) .damageSnow // Weapon deals Snow/Ice elemental damage (true/false) Added new UOX.INI setting under [server] to enable/disable shard response to ConnectUO server polling (disabled by default) Sub-commands are no longer included when registering packets to be overloaded via RegisterPacket function, as that part was never fully implemented. Packet-hook scripts can be setup for specific packet IDs, but any sub-command checking will need to be done in the script itself JS Packet Method GetDWord() now uses JS_NewNumberValue instead of INT_TO_JSVAL to read from the socket buffer, to better handle large numbers, which could previously be returned with wrong values. JS Function CalcItemFromSer() now uses a JS_GetStringBytes() and str_value() combo instead of JSVAL_TO_INT() to read the data provided in the function argument. This allows JS scripts to provide item serials to the function directly without needing to split it into four parts first (though that still works) Fixed issue where JS properties for multis didn't always return correct values The 'set command can now be used to set the armour class of items ('set ac #) Reimplemented 'tweak command in JS engine (js/commands/targeting/tweak.js) - can be used to view and modify properties of characters, character skills, items, multis and regions (target ground) Added placeholder packet-hook script (js/server/network/0xf1_connectUoServerPoll.js) to handle responses to ConnectUO server polling. By default this script does nothing, but serves as a placeholder for drop-in replacement scripts generated specifically for each shard by the ConnectUO service. Updated some commands to support an alternate STATIC keyword (can also be ommitted) to add base items: 'add static itemID 'tile static itemID Updated some commands with support for randomization. Provided itemID will be randomized based on provided rndValue: /js/commands/targeting/add.js: 'add itemID rndValue cmdtable.cpp and targeting.cpp: 'tile itemID rndValue 'tile itemID x1 x2 y1 y2 z rndValue Updated js/commands/custom/repeatingcmds.js to support 'm delete as an alias for 'rremove Added 'props as an alias for the 'tweak command Added 'teleport as an alias for the 'tele command (js/commands/targeting/tele.js) Added 'shavehair and 'shavebeard as aliases for 'kill hair and 'kill beard (js/commands/targeting/kill.js) Added 'noinvul and 'mortal aliases for the 'invul false command (js/commands/custom/misc-cmds.js) Added 'immortal and 'invul (without parameter) as aliases for the 'invul true command Added 'bringtopack as an alias of 'movetobag command (js/commands/targeting/movetobag.js) Updated check for cancelling of target cursor in various JS scripts Minor updates to various JS scripts Fixed issue where some item definitions in dfndata/harditems/harditems.dfn and dfndata/items/building/lighting.dfn used comma instead of space as delimiter for the VALUE tag, which thus never got applied Updated all NPC definitions to let NPCs spawn facing in random directions
2021-03-22 05:59:20 +08:00
else
{
0.99.4d Added new option in UOX.INI under [settings] section: MAPDIFFSENABLED=0/1 // If enabled, server will attempt to load diff files, and send "Enable Map-diff files" packet to client to also load these. Disabled by default. Server no longer loads map/statics diff files by default, nor does it send packet to client to request loading these files, as only client versions below 7.0.8.2 will actively load these files. Can be re-enabled with new UOX.INI setting mentioned above! Fixed incorrect ID for gargish dagger in CHandleCombat::getWeaponType() Added missing weapon entries in CHandleCombat::getWeaponType(): bladed whip, barbed whip, spiked whip, gargish talwar Fixed an issue that would show the end part of some tiledata names as garbled text instead of cutting off the text(!) at 20 characters Fixed an issue with advanced character creation template when using ClassicUO client, which sends a profession value of 255 instead of 0 when no profession template has been selected. Fixed an issue where clones of NPCs that can split in combat didn't get the NPC flag correctly set Guild titles are now removed for players who leave their guilds Enabled closing some hard-coded gump menus using right-click (howto, guild, towns, wholist, addmenu, craftmenu, info) Fixed an issue where adding base items using 'add [itemID] would sometimes get false positive hits from harditems.dfn, depending on the length of the itemID Fixed an issue where items added using 'add [itemID] would not get names applied properly from harditems.dfn Item/NPC DFN tag GET can now inherit a random parent by adding additional values separated by spaces. Syntax: GET=parent1 parent2 parent3 (etc) Fixed an issue where NPC backpacks would not have the max item capacity set properly Added new properties for CItem objects (also exposed as JS Item Properties): maxRange // max distance a ranged weapon can fire at (replaces ARCHERRANGE ini setting) baseRange // base distance throwing weapons (when implemented) can be used at Added support for new Item DFN tag that replaces global UOX.INI setting ARCHERRANGE: MAXRANGE=# // Specifies max range of ranged weapon Added support for new Item/NPC DFN tags to support randomizing elemental resistances: RESISTFIRE=#/# # // Set NPC's poison resistance; fixed or random value RESISTCOLD=#/# # // Set NPC's poison resistance; fixed or random value RESISTLIGHTNING=#/# # // Set NPC's poison resistance; fixed or random value RESISTPOISON=#/# # // Set NPC's poison resistance; fixed or random value Added support for two new DFN tags in dfndata/race/races.dfn that can be used to allow/ban lists of equipment for specific races ALLOWEQUIPLIST=# BANEQUIPLIST=# Added support for new section in dfndata/race/races.dfn - [EQUIPLIST #], which can be used to define lists of equipment that is whitelisted or banned for specific races. Fixed a bug that would report incorrect weight in tooltips for Item/NPC spawner objects ScriptSections are now reapplied for items bought by players from NPC vendors Fixed an issue where players could drop an item on the ground and other players would still see the item after it was picked up, because of a failed distance check vs old location coordinates (in pack) instead of vs current location on ground Fixed a bug with players being able to use last-target macro to target objects picked up and held by other players on their cursor Updated all references to "devinelock" to be "divinelock" instead - this includes the name of the JS Item property Fixed house commands triggering (useless) targeting cursors for players onboard boats Changed default statcap in UOX.INI from 325 to 225 Fixed a out-of-range error for players attempting to combine ore inside their own backpack Fixed various issues with distance checks and container checks when using/target objects Added optional 4th "hue" parameter to AddGump JS method Added JS Function to get total amount of accounts on server - GetAccountCount() Added JS Function to get total amount of players online - GetPlayerCount() onSwing JS Event can now trigger in scripts attached to items, not just items attached to characters Added some JS Functions to expose some hard-coded constants to JS scripts: BASEITEMSERIAL() // Base item serial INVALIDSERIAL() // Invalid serial INVALIDID() // Invalid ID INVALIDCOLOUR() // Invalid colour Fixed an issue where JS character property .colour would modify origSkin property instead of colour Fixed an issue where JS character property .guildTitle returned the name of the character instead of the guild title Character JS property .poison can now also be used to set a character's poisoned level, not just read it Exposed Item property to JS engine: .ac // armour class for item (0-128). Primarily used for setting race-restrictions for equippable items, i.e. race X cannot equip items of armour class Y. .def // defensive value of item (Physical resistance post-AoS, AR in older UO) // NOTE: The following properties don't actually do anything yet, but can still be used in custom JS scripts if desired .resistCold // Cold resistance of item 0-1000, where 1000 equals 100.0% .resistHeat // Heat/Fire resistance of item 0-1000, where 1000 equals 100.0% .resistLight // Light resistance of item 0-1000, where 1000 equals 100.0% .resistLightning // Energy/Lightning resistance of item 0-1000, where 1000 equals 100.0% .resistPoison // Poison resistance of item 0-1000, where 1000 equals 100.0% .resistRain // Rain resistance of item 0-1000, where 1000 equals 100.0% .resistSnow // Snow resistance of item 0-1000, where 1000 equals 100.0% .damageHeat // Weapon deals Heat/Fire elemental damage (true/false) .damageCold // Weapon deals Cold elemental damage (true/false) .damageLight // Weapon deals Light elemental damage (true/false) .damageLightning // Weapon deals Lightning elemental damage (true/false) .damagePoison // Weapon deals Poison elemental damage (true/false) .damageRain // Weapon deals Rain/Water elemental damage (true/false) .damageSnow // Weapon deals Snow/Ice elemental damage (true/false) Added new UOX.INI setting under [server] to enable/disable shard response to ConnectUO server polling (disabled by default) Sub-commands are no longer included when registering packets to be overloaded via RegisterPacket function, as that part was never fully implemented. Packet-hook scripts can be setup for specific packet IDs, but any sub-command checking will need to be done in the script itself JS Packet Method GetDWord() now uses JS_NewNumberValue instead of INT_TO_JSVAL to read from the socket buffer, to better handle large numbers, which could previously be returned with wrong values. JS Function CalcItemFromSer() now uses a JS_GetStringBytes() and str_value() combo instead of JSVAL_TO_INT() to read the data provided in the function argument. This allows JS scripts to provide item serials to the function directly without needing to split it into four parts first (though that still works) Fixed issue where JS properties for multis didn't always return correct values The 'set command can now be used to set the armour class of items ('set ac #) Reimplemented 'tweak command in JS engine (js/commands/targeting/tweak.js) - can be used to view and modify properties of characters, character skills, items, multis and regions (target ground) Added placeholder packet-hook script (js/server/network/0xf1_connectUoServerPoll.js) to handle responses to ConnectUO server polling. By default this script does nothing, but serves as a placeholder for drop-in replacement scripts generated specifically for each shard by the ConnectUO service. Updated some commands to support an alternate STATIC keyword (can also be ommitted) to add base items: 'add static itemID 'tile static itemID Updated some commands with support for randomization. Provided itemID will be randomized based on provided rndValue: /js/commands/targeting/add.js: 'add itemID rndValue cmdtable.cpp and targeting.cpp: 'tile itemID rndValue 'tile itemID x1 x2 y1 y2 z rndValue Updated js/commands/custom/repeatingcmds.js to support 'm delete as an alias for 'rremove Added 'props as an alias for the 'tweak command Added 'teleport as an alias for the 'tele command (js/commands/targeting/tele.js) Added 'shavehair and 'shavebeard as aliases for 'kill hair and 'kill beard (js/commands/targeting/kill.js) Added 'noinvul and 'mortal aliases for the 'invul false command (js/commands/custom/misc-cmds.js) Added 'immortal and 'invul (without parameter) as aliases for the 'invul true command Added 'bringtopack as an alias of 'movetobag command (js/commands/targeting/movetobag.js) Updated check for cancelling of target cursor in various JS scripts Minor updates to various JS scripts Fixed issue where some item definitions in dfndata/harditems/harditems.dfn and dfndata/items/building/lighting.dfn used comma instead of space as delimiter for the VALUE tag, which thus never got applied Updated all NPC definitions to let NPCs spawn facing in random directions
2021-03-22 05:59:20 +08:00
*vp = JSVAL_NULL;
}
Housing Revamp and more Updated JS SysMessage function to accept up to 10 extra, optional arguments, which can be used with dictionary messages that require additional parameters like %s or %i Added new type of house privilege in cMultiObj.cpp to keep track of friends of the multi - HOUSEPRIV_FRIEND - which is stored during worldsaves as one or more Friend=<player serial> tags in house.wsc Added new type of house privilege in cMultiObj.cpp to keep track of guests of the multi - HOUSEPRIV_GUEST - which is stored during worldsaves as one or more Guest=<player serial> tags in house.wsc When items are created for houses upon house placement, a reference to the multi's serial is now stored in the house sign's MORE property to allow easier tracking of which house a particular sign belongs to Added tracking of new, persistent properties for houses via cMultiObj.cpp/h: lockdowns, secure containers, vendors, guests, friends, owners, ban location, public status, number of visits, timestamps Added a multitude of new methods in cMultiObj.cpp/h to assist in improving the functionality of houses Added new tags for houses in house.dfn (default values applied if tag not specified): MAXSECURECONTAINERS=4 - Max amount of secure containers allowed in a multi MAXLOCKDOWNS=256 - Max amount of lockdowns allowed in a multi MAXVENDORS=10 - Max amount of vendors allowed in a multi MAXBANS=50 - Max amount of bans in a multi's ban list MAXFRIENDS=50 - Max amount of friends in a multi's friend list MAXGUESTS=50 - Max amount of guests in a multi's guest list MAXOWNERS=8 - Max amount of owners and co-owners in a multi's owner list MAXTRASHCONTAINERS=1 - Max amount of trash containers allowed in multi SCRIPT=<scriptID> - Assign a JS script-ID directly to a multi FRONTDOOR - indicates that a door is the front door of a house. Cannot be locked in public houses! INTERIORDOOR - indicates that a door is an interior door of a house. Can be locked in public houses. BANX - Location X offset for multi's ban location, if not used, will try to use SE corner of multi instead BANY - Location Y offset for multi's ban location, if not used, will try to use SE corner of multi instead Added JS Event: onHouseCommand( tSock, multiObj, cmdID ) - For handling spoken house commands via JS scripts attached to multi. Updated JS Events: onEntrance() - can now trigger both for multi being entered and/or object entering onLeaving() - can now trigger both for multi being left and/or object entering onSpeech() - can now also trigger for items (in addition to chars) with event & script attached, if UOX.INI setting ITEMSDETECTSPEECH is enabled Added JS Multi methods: .IsBoat() - Returns whether the item (or multi) is a boat .IsOwner( playerToCheck ) - Returns whether a player is the owner of a multi .IsOnOwnerList( playerToCheck ) - Returns whether a player is on the (co-)owner list of a multi .IsOnFriendList( playerToCheck ) - Returns whether a player is on the friend list of a multi .IsOnGuestList( playerToCheck ) - Returns whether a player is on the guest list of a multi .IsOnBanList( playerToCheck ) - Returns whether a player is on the ban list of a multi .AddToFriendList( playertoAdd ) - Adds player to the friend list of a multi .RemoveFromFriendList( playertoRemove ) - Removes player from the friend list of a multi .AddToGuestList( playertoAdd ) - Adds player to the guest list of a multi .RemoveFromGuestList( playertoRemove ) - Removes player from the guest list of a multi .ClearOwnerList() - Clears all entries from a multi's (co-)owner list .ClearFriendList() - Clears all entries from a multi's friend list .ClearGuestList() - Clears all entries from a multi's guest list .ClearBanList() - Clears all entries from a multi's ban list .SecureContainer( itemToSecure ) - Secures a container in a multi .UnsecureContainer( itemToUnsecure ) - Unsecures a container in a multi .IsSecureContainer( itemToCheck ) - Checks if specified item is a secure container in a multi .LockDownItem( itemToLockDown) - Locks down an item in a multi .ReleaseItem( itemToRelease ) - Releases a locked down item in a multi .KillKeys() - Deletes ALL keys associated with a multi .AddTrashCont( itemToAdd ) - Add trash container to multi's list of trash containers .RemoveTrashCont( itemToRemove ) - Remove trash container from multi's list of trash containers Added JS Item (Multi only) properties: .lockdowns - Get the number of lockdowns in a multi .maxLockdowns - Get/Set the max number of lockdowns allowed in a multi .secureContainers - Get the number of secure containers in a multi .maxSecureContainers - Get/Set the max number of secure containers allowed in a multi .trashContainers - Get the number of trash containers in a multi .maxTrashContainers - Get/Set the max number of trash containers allowed in a multi .friends - Get the number of friends in a multi's friend list .maxFriends - Get/Set the max number of friends allowed in a multi's friend list .guests - Get the number of guests in a multi's guest list .maxGuests - Get/Set the max number of guests allowed in a multi's guest list .owners - Get the number of owners in a multi's owner list .maxOwners - Get/Set the max number of owners allowed in a multi's owner list .bans - Get the number of banned players in a multi's ban list .maxBans - Get/Set the max number of banned players allowed in a multi's ban list .vendors - Get the number of player vendors in a multi .maxVendors - Get the max number of player vendors allowed in a multi .deed - Get the item sectionID for deed used to place multi .isPublic - Get/Set the private/public state of a multi .buildTimestamp - Get the timestamp for when the house was originally placed .tradeTimestamp - Get the timestamp for when the house was last traded to another player .banX - Get/Set the ban location X offset for the multi .banY - Get/Set the ban location Y offset for the multi Added JS Character properties: .multi = Get/Set the multi object the character is in .accountNum = Get the account number the character belongs to .housesOwned = Get a count of houses owned by the character .housesCoOwned = Get a count of houses co-owned by the character Updated JS cBaseObject Methods .FirstItem(), .NextItem() and .FinishedItems() to also support iterating through items in multis Updated JS multi Methods .FirstChar(), .NextChar() and .FinishedChars() to support an additional parameter to specify what kind of characters to loop through: "default" or no parameter - all characters inside the multi "owner" - players on multi's owner list "friend" - players on multi's friend list "guest" - players on multi's guest list "banned" - players on multi's ban list Added new INI tags to a new section of uox.ini called [houses] DECAYTIMERINHOUSE=3600 // Decay timer in seconds for non-locked down items inside houses PROTECTPRIVATEHOUSES=1 // Toggles whether private houses will automatically boot unauthorized visitors (1) or not (0) TRACKHOUSESPERACCOUNT=1 // Toggles whether to track (and restrict) house ownership per account (1) or per character (0) MAXHOUSESOWNABLE=1 // Specifies the max amount of houses a player can own per account/char, depending on how house ownership is tracked MAXHOUSESCOOWNABLE=10 // Specifies the max amount of houses a player can co-own per character CANOWNANDCOOWNHOUSES=1 // Toggles whether players can own and co-own houses at the same time COOWNHOUSESONSAMEACCOUNT=1 // Toggles whether characters on same account as house owner will be treated as co-owners Added new INI tags in [settings] section of uox.ini: ITEMSDETECTSPEECH=0 // If enabled, server will search for nearby items with onSpeech JS event running whenever a character speaks. Disabled by default. MAXPLAYERPACKITEMS=125 // Defines max item capacity for player (and NPC) backpacks. Defaults to 125. Moved most of the existing house functionality to JS and expanded upon it to reach feature parity with houses in regular UO around Publish 15/16, with various extras thrown in for good measure and all functionality being customizable: js/server/house/house.js (15000) - handles detection of house commands and characters entering/leaving houses js/server/house/houseSign.js (15001) - contains and handles all house-related gumps/menus and what is shown when players interact with house sign js/server/house/houseCommands.js (15002) - handles functionality of house commands and other functionality such as transfer of ownership, demolishing house, etc. js/server/house/houseDeed.js (15003) - handles initial rules that allow/disallow placement of additional houses for players All house-related menus now fully handled through JS All house commands and other functionality now fully handled through JS Removed redundant hard-coded house functionality Implemented Co-owners, friends, guests for houses, with access rules in place for entry, lockdowns, house commands, etc. Implemented Private and Public houses Implemented Secure Containers and Trash Barrels Definable max lockdowns, secure containers, player vendors, bans, friends, guests, owners, trash containers and more - per house type JS scripts can now be attached directly to houses Doors in houses can be marked as front doors or interior doors, and will be treated differently with regards to private and public houses Added new item to dfndata/items/containers/misc.dfn - [trashbarrel] Added new JS script (js/items/trashbarrel.js) with trash barrel functionality for houses. Trash barrels that are marked as secure containers are only accessible by owners, co-owners and friends of the house. Various options available at top of script. Updated js/items/axe.js to support chopping up trash barrels and house add-ons in houses owned by the player Fixed an issue with house doors being left behind after demolishing houses while their doors were open Fixed an issue where GMs could be banned from player houses Added Line of Sight checks to speech, to give players some privacy in their own homes Updated house placement code to more accurately check for other multis, dynamic and static objects when placing houses; now requires free space around each house that cannot be blocked by other houses or items that can block player movement, and disallows placement of houses on roads Updated house placement code to move characters blocking house placement to SE corner of the house Updated house placement code to disallow placing houses in guarded regions, or in dungeons Added new DFN tag for regions to enable/disable player houses in specific regions: HOUSING=0/1 Added new region (247) that covers path to Valley of Eodon in Felucca Added new region (248) that covers Valley of Eodon in Ter-Mur, with player housing disabled Added new region (249) that covers entire T2A lands, with player housing disabled Updated SPACEX and SPACEY values for all houses in dfndata/house/house.dfn to match updated house placement code Added new JS property to Regions that can be used to determine or change state of player housing in a region: .canPlaceHouse() Updated rules for usage of dye tubs to dye locked down items; now only house owners or co-owners may dye locked down items Updated rules for usage of the following locked down items in a house, which are now only usable by house owners and co-owners Dyes, Guildstone Deeds, Recall Runes (renaming), Rename Deeds, Townstone Deeds, House Deeds, Boat Models, Player Vendor Deeds, Ore, Hair Dye Updated rules for usage of the following locked down items in a house, which are now only usable by house owners, co-owners and friends: Keys, Dye Tubs, Magic Scrolls, Fireworks Wands, Magic Wands, Smithing Tools, Mining Tools, Fishing Poles Updated item lockdown rules to allow locking down (and releasing) items in a container as long as the container is locked down, and to only allow releasing a locked down container if it's empty of locked down items Updated item lockdown rules to only allow locking down movement-blocking items further than 2 tiles away from doors Updated rules for releasing items in houses - now the house owner can release any locked down items, co-owners can release items locked down by themselves or by friends, while friends can release only items locked down by themselves Added some feedback to player about why their attempted house placement failed Items added by GMs directly into multis will now decay based on the house-specific decay timer instead of the regular one Fixed an issue that could cause items to almost instantly decay after being released from lockdown in a house Placing house add-ons now properly takes into account SPACEX and SPACEY values when checking if they can fit in selected area of houses Re-added SPACEX and SPACEY values for Pentagram and Loom house add-ons House add-ons can now be converted back into house add-on deeds by chopping them with an axe Added new item type - IT_HOUSEADDON (201) - used by house add-ons placed in player houses Fixed a bug where keys would stop working after being added to a keyring, and would turn into blank keys upon release from the keyring Added visitor count for public player houses, which keeps track of how many visits a public house has received, with each player counted max 1 time every 24 hours Fixed an issue with FindPlayersInOldVisrange() where it didn't take into account that players could see buildings further away than the standard update range. This could cause players to see ghost images of buildings if they were at the "right" distance when the building was being demolished Added NODECAY tag to all signs and doors in dfndata/house/house.dfn Added FRONTDOOR or INTERIORDOOR (as appropriate) to all doors in dfndata/house/house.dfn Added BANX and BANY to specify ban location for some houses in dfndata/house/house.dfn instead of relying on finding SE corner automatically Implemented strongboxes (js/server/house/strongbox.js) for co-owners of a house, which can be placed with the house command "i wish to place a strongbox". Max capacity is 25 items Updated 'REMOVE command to take an optional parameter - itemID. If supplied, the command will remove all items with this itemID from a targeted container Fixed a bug when checking if dynamic items were blocking valid spawn locations for NPCs, some function arguments were in the wrong order! Improved code that finds valid spawn locations for items and NPCs spawned via spawn regions. As server gradually builds up lists of valid spawn locations per region over time, it will start using these lists more often, rather than always look for brand new spawn locations. Fixed a bug with CMulHandler::CheckStaticFlag() that prevented NPCs from spawning inside buildings with no static floors! Fixed an issue with repeating commands that prevented GMs from being able to cancel them when using the ClassicUO client Exposed character property .accountNum to JS engine Extended CDataList class to include a Clear() method for clearing lists Updated JS File method .Open() to support an optional, third argument - subFolderName - that defines in which sub-folder of UOX3/shared/ to store/look for a file. If no third argument is supplied, UOX3 will default to using the shared folder itself. Updated JS File method .Length() to return a value of -1 for files that don't exist Added new code function, exposed to JS engine with same parameters, which simply checks if a given tile ID has a specific flag bool CheckTileFlag( UI16 itemID, TILEFLAG flagToCheck ) Added JS function used to find the root container of an item (if any) FindRootContainer( itemSerial ) FindRootContainer( item ) Added new JS function that allows deleting files from UOX3/shared/ folder or subfolders of shared folder. If no subFolderName is provided, looks for file directly in shared folder itself. Restrictions on file- and folder-names apply. bool DeleteFile( fileName, subFolderName ) Added new JS functions for checking if a specific client or server feature is enabled. See documentation for full list of client/server features. GetClientFeature( bitNum ) // Returns true if specified client feature is enabled on server GetServerFeature( bitNum ) // Returns true if specified server feature is enabled on server Added new JS function for returning the value of almost any server setting from UOX.INI GetServerSetting( settingNameInDoubleQuotes ) Updated JS function DoesDynamicBlock() with two new parameters - checkOnlyMultis and checkOnlyNonMultis Updated JS function DoesMapBlock() with two new parameters - checkMultiPlacement and checkForRoad Fixed an issue where a LoS check would prevent players from accessing containers in their own backpack Added new functions in findfuncs.cpp to make it easier to find items near another object or location: findNearbyItems( object, distance ) findNearbyItems( x, y, worldNumber, instanceID, distance ) Added new Item property - maxItems - used by containers to determine their max item capacity Added new Item property - totalItemCount - used to get total item count in a container (including sub-containers) Added check for max item capacity when creating new items that are added to a character's backpack - items will be created below character's feet if backpack is full! Added new DFN tag for items, used by containers to determine item capacity for a given container: MAXITEMS=# // 125 is the default for all containers if not set Added new JS Item properties: .maxItems // gets/sets item capacity for a given container .totalItemCount // gets total item count in a container, including sub-containers Updated item tooltips for containers to show accurate total item count, as well as to display max item capacity Fixed a bug where picking up items from a non-locked down pile of items on the floor inside a multi could cause the remaining pile to be seen as no longer inside the multi, disallowing locking it back down and causing it to decay based on regular decay timer instead of house-specific one Updated JS command set to allow setting poison-level on items ('set poison #) and hunger-level on characters ('set hunger #) Fixed an issue with js/item/food.js that prevented poisoned food from poisoning characters when eaten Fixed an issue with js/skill/poisoning.js that prevented players from poisoning food! Updated various JS scripts and hardcoded targeting functions to disallow the targeting of locked down resources using skills and tools Updated JS Method TextMessage() to support three extra, optional parameters. Note that if one optional parameter is included, all preceding optional parameters are also required! speechTarget - What kind of target is this message intended for? 0 - Only visible for sender and receiver of message 1 - Visible to all players in range 2 - Visible to all NPCs and players in range 3 - Visible to all PCs everywhere + NPCs in range 4 - Visible to all PCs everywhere (broadcast) 5 - Only visible for the receiver of the message speechTargetSerial - The serial of the receiver of the message, used if speechTarget is 0 or 5 speechFontType - The type of font to display the text in. Defaults to normal. 0 - Bold 1 - Normal with shadow 2 - Bold with shadow 3 - Normal 4 - Gothic 5 - Italic 6 - Small, dark 7 - Colourful 8 - Runic (only works with CAPS) 9 - Small, light Added timestamp to worldsaves in console, to make it easier to see when a particular world-save was done Added info about compiler/environment displayed at the top of the UOX3 console during startup Updated dictionary files with new messages primarily related to housing
2020-11-04 02:00:37 +08:00
break;
case CIP_MAXLOCKDOWNS:
if( gPriv->GetObjType() == OT_MULTI )
{
*vp = INT_TO_JSVAL(( static_cast<CMultiObj *>( gPriv )->GetMaxLockdowns() ));
}
0.99.4d Added new option in UOX.INI under [settings] section: MAPDIFFSENABLED=0/1 // If enabled, server will attempt to load diff files, and send "Enable Map-diff files" packet to client to also load these. Disabled by default. Server no longer loads map/statics diff files by default, nor does it send packet to client to request loading these files, as only client versions below 7.0.8.2 will actively load these files. Can be re-enabled with new UOX.INI setting mentioned above! Fixed incorrect ID for gargish dagger in CHandleCombat::getWeaponType() Added missing weapon entries in CHandleCombat::getWeaponType(): bladed whip, barbed whip, spiked whip, gargish talwar Fixed an issue that would show the end part of some tiledata names as garbled text instead of cutting off the text(!) at 20 characters Fixed an issue with advanced character creation template when using ClassicUO client, which sends a profession value of 255 instead of 0 when no profession template has been selected. Fixed an issue where clones of NPCs that can split in combat didn't get the NPC flag correctly set Guild titles are now removed for players who leave their guilds Enabled closing some hard-coded gump menus using right-click (howto, guild, towns, wholist, addmenu, craftmenu, info) Fixed an issue where adding base items using 'add [itemID] would sometimes get false positive hits from harditems.dfn, depending on the length of the itemID Fixed an issue where items added using 'add [itemID] would not get names applied properly from harditems.dfn Item/NPC DFN tag GET can now inherit a random parent by adding additional values separated by spaces. Syntax: GET=parent1 parent2 parent3 (etc) Fixed an issue where NPC backpacks would not have the max item capacity set properly Added new properties for CItem objects (also exposed as JS Item Properties): maxRange // max distance a ranged weapon can fire at (replaces ARCHERRANGE ini setting) baseRange // base distance throwing weapons (when implemented) can be used at Added support for new Item DFN tag that replaces global UOX.INI setting ARCHERRANGE: MAXRANGE=# // Specifies max range of ranged weapon Added support for new Item/NPC DFN tags to support randomizing elemental resistances: RESISTFIRE=#/# # // Set NPC's poison resistance; fixed or random value RESISTCOLD=#/# # // Set NPC's poison resistance; fixed or random value RESISTLIGHTNING=#/# # // Set NPC's poison resistance; fixed or random value RESISTPOISON=#/# # // Set NPC's poison resistance; fixed or random value Added support for two new DFN tags in dfndata/race/races.dfn that can be used to allow/ban lists of equipment for specific races ALLOWEQUIPLIST=# BANEQUIPLIST=# Added support for new section in dfndata/race/races.dfn - [EQUIPLIST #], which can be used to define lists of equipment that is whitelisted or banned for specific races. Fixed a bug that would report incorrect weight in tooltips for Item/NPC spawner objects ScriptSections are now reapplied for items bought by players from NPC vendors Fixed an issue where players could drop an item on the ground and other players would still see the item after it was picked up, because of a failed distance check vs old location coordinates (in pack) instead of vs current location on ground Fixed a bug with players being able to use last-target macro to target objects picked up and held by other players on their cursor Updated all references to "devinelock" to be "divinelock" instead - this includes the name of the JS Item property Fixed house commands triggering (useless) targeting cursors for players onboard boats Changed default statcap in UOX.INI from 325 to 225 Fixed a out-of-range error for players attempting to combine ore inside their own backpack Fixed various issues with distance checks and container checks when using/target objects Added optional 4th "hue" parameter to AddGump JS method Added JS Function to get total amount of accounts on server - GetAccountCount() Added JS Function to get total amount of players online - GetPlayerCount() onSwing JS Event can now trigger in scripts attached to items, not just items attached to characters Added some JS Functions to expose some hard-coded constants to JS scripts: BASEITEMSERIAL() // Base item serial INVALIDSERIAL() // Invalid serial INVALIDID() // Invalid ID INVALIDCOLOUR() // Invalid colour Fixed an issue where JS character property .colour would modify origSkin property instead of colour Fixed an issue where JS character property .guildTitle returned the name of the character instead of the guild title Character JS property .poison can now also be used to set a character's poisoned level, not just read it Exposed Item property to JS engine: .ac // armour class for item (0-128). Primarily used for setting race-restrictions for equippable items, i.e. race X cannot equip items of armour class Y. .def // defensive value of item (Physical resistance post-AoS, AR in older UO) // NOTE: The following properties don't actually do anything yet, but can still be used in custom JS scripts if desired .resistCold // Cold resistance of item 0-1000, where 1000 equals 100.0% .resistHeat // Heat/Fire resistance of item 0-1000, where 1000 equals 100.0% .resistLight // Light resistance of item 0-1000, where 1000 equals 100.0% .resistLightning // Energy/Lightning resistance of item 0-1000, where 1000 equals 100.0% .resistPoison // Poison resistance of item 0-1000, where 1000 equals 100.0% .resistRain // Rain resistance of item 0-1000, where 1000 equals 100.0% .resistSnow // Snow resistance of item 0-1000, where 1000 equals 100.0% .damageHeat // Weapon deals Heat/Fire elemental damage (true/false) .damageCold // Weapon deals Cold elemental damage (true/false) .damageLight // Weapon deals Light elemental damage (true/false) .damageLightning // Weapon deals Lightning elemental damage (true/false) .damagePoison // Weapon deals Poison elemental damage (true/false) .damageRain // Weapon deals Rain/Water elemental damage (true/false) .damageSnow // Weapon deals Snow/Ice elemental damage (true/false) Added new UOX.INI setting under [server] to enable/disable shard response to ConnectUO server polling (disabled by default) Sub-commands are no longer included when registering packets to be overloaded via RegisterPacket function, as that part was never fully implemented. Packet-hook scripts can be setup for specific packet IDs, but any sub-command checking will need to be done in the script itself JS Packet Method GetDWord() now uses JS_NewNumberValue instead of INT_TO_JSVAL to read from the socket buffer, to better handle large numbers, which could previously be returned with wrong values. JS Function CalcItemFromSer() now uses a JS_GetStringBytes() and str_value() combo instead of JSVAL_TO_INT() to read the data provided in the function argument. This allows JS scripts to provide item serials to the function directly without needing to split it into four parts first (though that still works) Fixed issue where JS properties for multis didn't always return correct values The 'set command can now be used to set the armour class of items ('set ac #) Reimplemented 'tweak command in JS engine (js/commands/targeting/tweak.js) - can be used to view and modify properties of characters, character skills, items, multis and regions (target ground) Added placeholder packet-hook script (js/server/network/0xf1_connectUoServerPoll.js) to handle responses to ConnectUO server polling. By default this script does nothing, but serves as a placeholder for drop-in replacement scripts generated specifically for each shard by the ConnectUO service. Updated some commands to support an alternate STATIC keyword (can also be ommitted) to add base items: 'add static itemID 'tile static itemID Updated some commands with support for randomization. Provided itemID will be randomized based on provided rndValue: /js/commands/targeting/add.js: 'add itemID rndValue cmdtable.cpp and targeting.cpp: 'tile itemID rndValue 'tile itemID x1 x2 y1 y2 z rndValue Updated js/commands/custom/repeatingcmds.js to support 'm delete as an alias for 'rremove Added 'props as an alias for the 'tweak command Added 'teleport as an alias for the 'tele command (js/commands/targeting/tele.js) Added 'shavehair and 'shavebeard as aliases for 'kill hair and 'kill beard (js/commands/targeting/kill.js) Added 'noinvul and 'mortal aliases for the 'invul false command (js/commands/custom/misc-cmds.js) Added 'immortal and 'invul (without parameter) as aliases for the 'invul true command Added 'bringtopack as an alias of 'movetobag command (js/commands/targeting/movetobag.js) Updated check for cancelling of target cursor in various JS scripts Minor updates to various JS scripts Fixed issue where some item definitions in dfndata/harditems/harditems.dfn and dfndata/items/building/lighting.dfn used comma instead of space as delimiter for the VALUE tag, which thus never got applied Updated all NPC definitions to let NPCs spawn facing in random directions
2021-03-22 05:59:20 +08:00
else
{
0.99.4d Added new option in UOX.INI under [settings] section: MAPDIFFSENABLED=0/1 // If enabled, server will attempt to load diff files, and send "Enable Map-diff files" packet to client to also load these. Disabled by default. Server no longer loads map/statics diff files by default, nor does it send packet to client to request loading these files, as only client versions below 7.0.8.2 will actively load these files. Can be re-enabled with new UOX.INI setting mentioned above! Fixed incorrect ID for gargish dagger in CHandleCombat::getWeaponType() Added missing weapon entries in CHandleCombat::getWeaponType(): bladed whip, barbed whip, spiked whip, gargish talwar Fixed an issue that would show the end part of some tiledata names as garbled text instead of cutting off the text(!) at 20 characters Fixed an issue with advanced character creation template when using ClassicUO client, which sends a profession value of 255 instead of 0 when no profession template has been selected. Fixed an issue where clones of NPCs that can split in combat didn't get the NPC flag correctly set Guild titles are now removed for players who leave their guilds Enabled closing some hard-coded gump menus using right-click (howto, guild, towns, wholist, addmenu, craftmenu, info) Fixed an issue where adding base items using 'add [itemID] would sometimes get false positive hits from harditems.dfn, depending on the length of the itemID Fixed an issue where items added using 'add [itemID] would not get names applied properly from harditems.dfn Item/NPC DFN tag GET can now inherit a random parent by adding additional values separated by spaces. Syntax: GET=parent1 parent2 parent3 (etc) Fixed an issue where NPC backpacks would not have the max item capacity set properly Added new properties for CItem objects (also exposed as JS Item Properties): maxRange // max distance a ranged weapon can fire at (replaces ARCHERRANGE ini setting) baseRange // base distance throwing weapons (when implemented) can be used at Added support for new Item DFN tag that replaces global UOX.INI setting ARCHERRANGE: MAXRANGE=# // Specifies max range of ranged weapon Added support for new Item/NPC DFN tags to support randomizing elemental resistances: RESISTFIRE=#/# # // Set NPC's poison resistance; fixed or random value RESISTCOLD=#/# # // Set NPC's poison resistance; fixed or random value RESISTLIGHTNING=#/# # // Set NPC's poison resistance; fixed or random value RESISTPOISON=#/# # // Set NPC's poison resistance; fixed or random value Added support for two new DFN tags in dfndata/race/races.dfn that can be used to allow/ban lists of equipment for specific races ALLOWEQUIPLIST=# BANEQUIPLIST=# Added support for new section in dfndata/race/races.dfn - [EQUIPLIST #], which can be used to define lists of equipment that is whitelisted or banned for specific races. Fixed a bug that would report incorrect weight in tooltips for Item/NPC spawner objects ScriptSections are now reapplied for items bought by players from NPC vendors Fixed an issue where players could drop an item on the ground and other players would still see the item after it was picked up, because of a failed distance check vs old location coordinates (in pack) instead of vs current location on ground Fixed a bug with players being able to use last-target macro to target objects picked up and held by other players on their cursor Updated all references to "devinelock" to be "divinelock" instead - this includes the name of the JS Item property Fixed house commands triggering (useless) targeting cursors for players onboard boats Changed default statcap in UOX.INI from 325 to 225 Fixed a out-of-range error for players attempting to combine ore inside their own backpack Fixed various issues with distance checks and container checks when using/target objects Added optional 4th "hue" parameter to AddGump JS method Added JS Function to get total amount of accounts on server - GetAccountCount() Added JS Function to get total amount of players online - GetPlayerCount() onSwing JS Event can now trigger in scripts attached to items, not just items attached to characters Added some JS Functions to expose some hard-coded constants to JS scripts: BASEITEMSERIAL() // Base item serial INVALIDSERIAL() // Invalid serial INVALIDID() // Invalid ID INVALIDCOLOUR() // Invalid colour Fixed an issue where JS character property .colour would modify origSkin property instead of colour Fixed an issue where JS character property .guildTitle returned the name of the character instead of the guild title Character JS property .poison can now also be used to set a character's poisoned level, not just read it Exposed Item property to JS engine: .ac // armour class for item (0-128). Primarily used for setting race-restrictions for equippable items, i.e. race X cannot equip items of armour class Y. .def // defensive value of item (Physical resistance post-AoS, AR in older UO) // NOTE: The following properties don't actually do anything yet, but can still be used in custom JS scripts if desired .resistCold // Cold resistance of item 0-1000, where 1000 equals 100.0% .resistHeat // Heat/Fire resistance of item 0-1000, where 1000 equals 100.0% .resistLight // Light resistance of item 0-1000, where 1000 equals 100.0% .resistLightning // Energy/Lightning resistance of item 0-1000, where 1000 equals 100.0% .resistPoison // Poison resistance of item 0-1000, where 1000 equals 100.0% .resistRain // Rain resistance of item 0-1000, where 1000 equals 100.0% .resistSnow // Snow resistance of item 0-1000, where 1000 equals 100.0% .damageHeat // Weapon deals Heat/Fire elemental damage (true/false) .damageCold // Weapon deals Cold elemental damage (true/false) .damageLight // Weapon deals Light elemental damage (true/false) .damageLightning // Weapon deals Lightning elemental damage (true/false) .damagePoison // Weapon deals Poison elemental damage (true/false) .damageRain // Weapon deals Rain/Water elemental damage (true/false) .damageSnow // Weapon deals Snow/Ice elemental damage (true/false) Added new UOX.INI setting under [server] to enable/disable shard response to ConnectUO server polling (disabled by default) Sub-commands are no longer included when registering packets to be overloaded via RegisterPacket function, as that part was never fully implemented. Packet-hook scripts can be setup for specific packet IDs, but any sub-command checking will need to be done in the script itself JS Packet Method GetDWord() now uses JS_NewNumberValue instead of INT_TO_JSVAL to read from the socket buffer, to better handle large numbers, which could previously be returned with wrong values. JS Function CalcItemFromSer() now uses a JS_GetStringBytes() and str_value() combo instead of JSVAL_TO_INT() to read the data provided in the function argument. This allows JS scripts to provide item serials to the function directly without needing to split it into four parts first (though that still works) Fixed issue where JS properties for multis didn't always return correct values The 'set command can now be used to set the armour class of items ('set ac #) Reimplemented 'tweak command in JS engine (js/commands/targeting/tweak.js) - can be used to view and modify properties of characters, character skills, items, multis and regions (target ground) Added placeholder packet-hook script (js/server/network/0xf1_connectUoServerPoll.js) to handle responses to ConnectUO server polling. By default this script does nothing, but serves as a placeholder for drop-in replacement scripts generated specifically for each shard by the ConnectUO service. Updated some commands to support an alternate STATIC keyword (can also be ommitted) to add base items: 'add static itemID 'tile static itemID Updated some commands with support for randomization. Provided itemID will be randomized based on provided rndValue: /js/commands/targeting/add.js: 'add itemID rndValue cmdtable.cpp and targeting.cpp: 'tile itemID rndValue 'tile itemID x1 x2 y1 y2 z rndValue Updated js/commands/custom/repeatingcmds.js to support 'm delete as an alias for 'rremove Added 'props as an alias for the 'tweak command Added 'teleport as an alias for the 'tele command (js/commands/targeting/tele.js) Added 'shavehair and 'shavebeard as aliases for 'kill hair and 'kill beard (js/commands/targeting/kill.js) Added 'noinvul and 'mortal aliases for the 'invul false command (js/commands/custom/misc-cmds.js) Added 'immortal and 'invul (without parameter) as aliases for the 'invul true command Added 'bringtopack as an alias of 'movetobag command (js/commands/targeting/movetobag.js) Updated check for cancelling of target cursor in various JS scripts Minor updates to various JS scripts Fixed issue where some item definitions in dfndata/harditems/harditems.dfn and dfndata/items/building/lighting.dfn used comma instead of space as delimiter for the VALUE tag, which thus never got applied Updated all NPC definitions to let NPCs spawn facing in random directions
2021-03-22 05:59:20 +08:00
*vp = JSVAL_NULL;
}
Housing Revamp and more Updated JS SysMessage function to accept up to 10 extra, optional arguments, which can be used with dictionary messages that require additional parameters like %s or %i Added new type of house privilege in cMultiObj.cpp to keep track of friends of the multi - HOUSEPRIV_FRIEND - which is stored during worldsaves as one or more Friend=<player serial> tags in house.wsc Added new type of house privilege in cMultiObj.cpp to keep track of guests of the multi - HOUSEPRIV_GUEST - which is stored during worldsaves as one or more Guest=<player serial> tags in house.wsc When items are created for houses upon house placement, a reference to the multi's serial is now stored in the house sign's MORE property to allow easier tracking of which house a particular sign belongs to Added tracking of new, persistent properties for houses via cMultiObj.cpp/h: lockdowns, secure containers, vendors, guests, friends, owners, ban location, public status, number of visits, timestamps Added a multitude of new methods in cMultiObj.cpp/h to assist in improving the functionality of houses Added new tags for houses in house.dfn (default values applied if tag not specified): MAXSECURECONTAINERS=4 - Max amount of secure containers allowed in a multi MAXLOCKDOWNS=256 - Max amount of lockdowns allowed in a multi MAXVENDORS=10 - Max amount of vendors allowed in a multi MAXBANS=50 - Max amount of bans in a multi's ban list MAXFRIENDS=50 - Max amount of friends in a multi's friend list MAXGUESTS=50 - Max amount of guests in a multi's guest list MAXOWNERS=8 - Max amount of owners and co-owners in a multi's owner list MAXTRASHCONTAINERS=1 - Max amount of trash containers allowed in multi SCRIPT=<scriptID> - Assign a JS script-ID directly to a multi FRONTDOOR - indicates that a door is the front door of a house. Cannot be locked in public houses! INTERIORDOOR - indicates that a door is an interior door of a house. Can be locked in public houses. BANX - Location X offset for multi's ban location, if not used, will try to use SE corner of multi instead BANY - Location Y offset for multi's ban location, if not used, will try to use SE corner of multi instead Added JS Event: onHouseCommand( tSock, multiObj, cmdID ) - For handling spoken house commands via JS scripts attached to multi. Updated JS Events: onEntrance() - can now trigger both for multi being entered and/or object entering onLeaving() - can now trigger both for multi being left and/or object entering onSpeech() - can now also trigger for items (in addition to chars) with event & script attached, if UOX.INI setting ITEMSDETECTSPEECH is enabled Added JS Multi methods: .IsBoat() - Returns whether the item (or multi) is a boat .IsOwner( playerToCheck ) - Returns whether a player is the owner of a multi .IsOnOwnerList( playerToCheck ) - Returns whether a player is on the (co-)owner list of a multi .IsOnFriendList( playerToCheck ) - Returns whether a player is on the friend list of a multi .IsOnGuestList( playerToCheck ) - Returns whether a player is on the guest list of a multi .IsOnBanList( playerToCheck ) - Returns whether a player is on the ban list of a multi .AddToFriendList( playertoAdd ) - Adds player to the friend list of a multi .RemoveFromFriendList( playertoRemove ) - Removes player from the friend list of a multi .AddToGuestList( playertoAdd ) - Adds player to the guest list of a multi .RemoveFromGuestList( playertoRemove ) - Removes player from the guest list of a multi .ClearOwnerList() - Clears all entries from a multi's (co-)owner list .ClearFriendList() - Clears all entries from a multi's friend list .ClearGuestList() - Clears all entries from a multi's guest list .ClearBanList() - Clears all entries from a multi's ban list .SecureContainer( itemToSecure ) - Secures a container in a multi .UnsecureContainer( itemToUnsecure ) - Unsecures a container in a multi .IsSecureContainer( itemToCheck ) - Checks if specified item is a secure container in a multi .LockDownItem( itemToLockDown) - Locks down an item in a multi .ReleaseItem( itemToRelease ) - Releases a locked down item in a multi .KillKeys() - Deletes ALL keys associated with a multi .AddTrashCont( itemToAdd ) - Add trash container to multi's list of trash containers .RemoveTrashCont( itemToRemove ) - Remove trash container from multi's list of trash containers Added JS Item (Multi only) properties: .lockdowns - Get the number of lockdowns in a multi .maxLockdowns - Get/Set the max number of lockdowns allowed in a multi .secureContainers - Get the number of secure containers in a multi .maxSecureContainers - Get/Set the max number of secure containers allowed in a multi .trashContainers - Get the number of trash containers in a multi .maxTrashContainers - Get/Set the max number of trash containers allowed in a multi .friends - Get the number of friends in a multi's friend list .maxFriends - Get/Set the max number of friends allowed in a multi's friend list .guests - Get the number of guests in a multi's guest list .maxGuests - Get/Set the max number of guests allowed in a multi's guest list .owners - Get the number of owners in a multi's owner list .maxOwners - Get/Set the max number of owners allowed in a multi's owner list .bans - Get the number of banned players in a multi's ban list .maxBans - Get/Set the max number of banned players allowed in a multi's ban list .vendors - Get the number of player vendors in a multi .maxVendors - Get the max number of player vendors allowed in a multi .deed - Get the item sectionID for deed used to place multi .isPublic - Get/Set the private/public state of a multi .buildTimestamp - Get the timestamp for when the house was originally placed .tradeTimestamp - Get the timestamp for when the house was last traded to another player .banX - Get/Set the ban location X offset for the multi .banY - Get/Set the ban location Y offset for the multi Added JS Character properties: .multi = Get/Set the multi object the character is in .accountNum = Get the account number the character belongs to .housesOwned = Get a count of houses owned by the character .housesCoOwned = Get a count of houses co-owned by the character Updated JS cBaseObject Methods .FirstItem(), .NextItem() and .FinishedItems() to also support iterating through items in multis Updated JS multi Methods .FirstChar(), .NextChar() and .FinishedChars() to support an additional parameter to specify what kind of characters to loop through: "default" or no parameter - all characters inside the multi "owner" - players on multi's owner list "friend" - players on multi's friend list "guest" - players on multi's guest list "banned" - players on multi's ban list Added new INI tags to a new section of uox.ini called [houses] DECAYTIMERINHOUSE=3600 // Decay timer in seconds for non-locked down items inside houses PROTECTPRIVATEHOUSES=1 // Toggles whether private houses will automatically boot unauthorized visitors (1) or not (0) TRACKHOUSESPERACCOUNT=1 // Toggles whether to track (and restrict) house ownership per account (1) or per character (0) MAXHOUSESOWNABLE=1 // Specifies the max amount of houses a player can own per account/char, depending on how house ownership is tracked MAXHOUSESCOOWNABLE=10 // Specifies the max amount of houses a player can co-own per character CANOWNANDCOOWNHOUSES=1 // Toggles whether players can own and co-own houses at the same time COOWNHOUSESONSAMEACCOUNT=1 // Toggles whether characters on same account as house owner will be treated as co-owners Added new INI tags in [settings] section of uox.ini: ITEMSDETECTSPEECH=0 // If enabled, server will search for nearby items with onSpeech JS event running whenever a character speaks. Disabled by default. MAXPLAYERPACKITEMS=125 // Defines max item capacity for player (and NPC) backpacks. Defaults to 125. Moved most of the existing house functionality to JS and expanded upon it to reach feature parity with houses in regular UO around Publish 15/16, with various extras thrown in for good measure and all functionality being customizable: js/server/house/house.js (15000) - handles detection of house commands and characters entering/leaving houses js/server/house/houseSign.js (15001) - contains and handles all house-related gumps/menus and what is shown when players interact with house sign js/server/house/houseCommands.js (15002) - handles functionality of house commands and other functionality such as transfer of ownership, demolishing house, etc. js/server/house/houseDeed.js (15003) - handles initial rules that allow/disallow placement of additional houses for players All house-related menus now fully handled through JS All house commands and other functionality now fully handled through JS Removed redundant hard-coded house functionality Implemented Co-owners, friends, guests for houses, with access rules in place for entry, lockdowns, house commands, etc. Implemented Private and Public houses Implemented Secure Containers and Trash Barrels Definable max lockdowns, secure containers, player vendors, bans, friends, guests, owners, trash containers and more - per house type JS scripts can now be attached directly to houses Doors in houses can be marked as front doors or interior doors, and will be treated differently with regards to private and public houses Added new item to dfndata/items/containers/misc.dfn - [trashbarrel] Added new JS script (js/items/trashbarrel.js) with trash barrel functionality for houses. Trash barrels that are marked as secure containers are only accessible by owners, co-owners and friends of the house. Various options available at top of script. Updated js/items/axe.js to support chopping up trash barrels and house add-ons in houses owned by the player Fixed an issue with house doors being left behind after demolishing houses while their doors were open Fixed an issue where GMs could be banned from player houses Added Line of Sight checks to speech, to give players some privacy in their own homes Updated house placement code to more accurately check for other multis, dynamic and static objects when placing houses; now requires free space around each house that cannot be blocked by other houses or items that can block player movement, and disallows placement of houses on roads Updated house placement code to move characters blocking house placement to SE corner of the house Updated house placement code to disallow placing houses in guarded regions, or in dungeons Added new DFN tag for regions to enable/disable player houses in specific regions: HOUSING=0/1 Added new region (247) that covers path to Valley of Eodon in Felucca Added new region (248) that covers Valley of Eodon in Ter-Mur, with player housing disabled Added new region (249) that covers entire T2A lands, with player housing disabled Updated SPACEX and SPACEY values for all houses in dfndata/house/house.dfn to match updated house placement code Added new JS property to Regions that can be used to determine or change state of player housing in a region: .canPlaceHouse() Updated rules for usage of dye tubs to dye locked down items; now only house owners or co-owners may dye locked down items Updated rules for usage of the following locked down items in a house, which are now only usable by house owners and co-owners Dyes, Guildstone Deeds, Recall Runes (renaming), Rename Deeds, Townstone Deeds, House Deeds, Boat Models, Player Vendor Deeds, Ore, Hair Dye Updated rules for usage of the following locked down items in a house, which are now only usable by house owners, co-owners and friends: Keys, Dye Tubs, Magic Scrolls, Fireworks Wands, Magic Wands, Smithing Tools, Mining Tools, Fishing Poles Updated item lockdown rules to allow locking down (and releasing) items in a container as long as the container is locked down, and to only allow releasing a locked down container if it's empty of locked down items Updated item lockdown rules to only allow locking down movement-blocking items further than 2 tiles away from doors Updated rules for releasing items in houses - now the house owner can release any locked down items, co-owners can release items locked down by themselves or by friends, while friends can release only items locked down by themselves Added some feedback to player about why their attempted house placement failed Items added by GMs directly into multis will now decay based on the house-specific decay timer instead of the regular one Fixed an issue that could cause items to almost instantly decay after being released from lockdown in a house Placing house add-ons now properly takes into account SPACEX and SPACEY values when checking if they can fit in selected area of houses Re-added SPACEX and SPACEY values for Pentagram and Loom house add-ons House add-ons can now be converted back into house add-on deeds by chopping them with an axe Added new item type - IT_HOUSEADDON (201) - used by house add-ons placed in player houses Fixed a bug where keys would stop working after being added to a keyring, and would turn into blank keys upon release from the keyring Added visitor count for public player houses, which keeps track of how many visits a public house has received, with each player counted max 1 time every 24 hours Fixed an issue with FindPlayersInOldVisrange() where it didn't take into account that players could see buildings further away than the standard update range. This could cause players to see ghost images of buildings if they were at the "right" distance when the building was being demolished Added NODECAY tag to all signs and doors in dfndata/house/house.dfn Added FRONTDOOR or INTERIORDOOR (as appropriate) to all doors in dfndata/house/house.dfn Added BANX and BANY to specify ban location for some houses in dfndata/house/house.dfn instead of relying on finding SE corner automatically Implemented strongboxes (js/server/house/strongbox.js) for co-owners of a house, which can be placed with the house command "i wish to place a strongbox". Max capacity is 25 items Updated 'REMOVE command to take an optional parameter - itemID. If supplied, the command will remove all items with this itemID from a targeted container Fixed a bug when checking if dynamic items were blocking valid spawn locations for NPCs, some function arguments were in the wrong order! Improved code that finds valid spawn locations for items and NPCs spawned via spawn regions. As server gradually builds up lists of valid spawn locations per region over time, it will start using these lists more often, rather than always look for brand new spawn locations. Fixed a bug with CMulHandler::CheckStaticFlag() that prevented NPCs from spawning inside buildings with no static floors! Fixed an issue with repeating commands that prevented GMs from being able to cancel them when using the ClassicUO client Exposed character property .accountNum to JS engine Extended CDataList class to include a Clear() method for clearing lists Updated JS File method .Open() to support an optional, third argument - subFolderName - that defines in which sub-folder of UOX3/shared/ to store/look for a file. If no third argument is supplied, UOX3 will default to using the shared folder itself. Updated JS File method .Length() to return a value of -1 for files that don't exist Added new code function, exposed to JS engine with same parameters, which simply checks if a given tile ID has a specific flag bool CheckTileFlag( UI16 itemID, TILEFLAG flagToCheck ) Added JS function used to find the root container of an item (if any) FindRootContainer( itemSerial ) FindRootContainer( item ) Added new JS function that allows deleting files from UOX3/shared/ folder or subfolders of shared folder. If no subFolderName is provided, looks for file directly in shared folder itself. Restrictions on file- and folder-names apply. bool DeleteFile( fileName, subFolderName ) Added new JS functions for checking if a specific client or server feature is enabled. See documentation for full list of client/server features. GetClientFeature( bitNum ) // Returns true if specified client feature is enabled on server GetServerFeature( bitNum ) // Returns true if specified server feature is enabled on server Added new JS function for returning the value of almost any server setting from UOX.INI GetServerSetting( settingNameInDoubleQuotes ) Updated JS function DoesDynamicBlock() with two new parameters - checkOnlyMultis and checkOnlyNonMultis Updated JS function DoesMapBlock() with two new parameters - checkMultiPlacement and checkForRoad Fixed an issue where a LoS check would prevent players from accessing containers in their own backpack Added new functions in findfuncs.cpp to make it easier to find items near another object or location: findNearbyItems( object, distance ) findNearbyItems( x, y, worldNumber, instanceID, distance ) Added new Item property - maxItems - used by containers to determine their max item capacity Added new Item property - totalItemCount - used to get total item count in a container (including sub-containers) Added check for max item capacity when creating new items that are added to a character's backpack - items will be created below character's feet if backpack is full! Added new DFN tag for items, used by containers to determine item capacity for a given container: MAXITEMS=# // 125 is the default for all containers if not set Added new JS Item properties: .maxItems // gets/sets item capacity for a given container .totalItemCount // gets total item count in a container, including sub-containers Updated item tooltips for containers to show accurate total item count, as well as to display max item capacity Fixed a bug where picking up items from a non-locked down pile of items on the floor inside a multi could cause the remaining pile to be seen as no longer inside the multi, disallowing locking it back down and causing it to decay based on regular decay timer instead of house-specific one Updated JS command set to allow setting poison-level on items ('set poison #) and hunger-level on characters ('set hunger #) Fixed an issue with js/item/food.js that prevented poisoned food from poisoning characters when eaten Fixed an issue with js/skill/poisoning.js that prevented players from poisoning food! Updated various JS scripts and hardcoded targeting functions to disallow the targeting of locked down resources using skills and tools Updated JS Method TextMessage() to support three extra, optional parameters. Note that if one optional parameter is included, all preceding optional parameters are also required! speechTarget - What kind of target is this message intended for? 0 - Only visible for sender and receiver of message 1 - Visible to all players in range 2 - Visible to all NPCs and players in range 3 - Visible to all PCs everywhere + NPCs in range 4 - Visible to all PCs everywhere (broadcast) 5 - Only visible for the receiver of the message speechTargetSerial - The serial of the receiver of the message, used if speechTarget is 0 or 5 speechFontType - The type of font to display the text in. Defaults to normal. 0 - Bold 1 - Normal with shadow 2 - Bold with shadow 3 - Normal 4 - Gothic 5 - Italic 6 - Small, dark 7 - Colourful 8 - Runic (only works with CAPS) 9 - Small, light Added timestamp to worldsaves in console, to make it easier to see when a particular world-save was done Added info about compiler/environment displayed at the top of the UOX3 console during startup Updated dictionary files with new messages primarily related to housing
2020-11-04 02:00:37 +08:00
break;
case CIP_TRASHCONTAINERS:
if( gPriv->GetObjType() == OT_MULTI )
{
*vp = INT_TO_JSVAL(( static_cast<CMultiObj *>( gPriv )->GetTrashContainerCount() ));
}
0.99.4d Added new option in UOX.INI under [settings] section: MAPDIFFSENABLED=0/1 // If enabled, server will attempt to load diff files, and send "Enable Map-diff files" packet to client to also load these. Disabled by default. Server no longer loads map/statics diff files by default, nor does it send packet to client to request loading these files, as only client versions below 7.0.8.2 will actively load these files. Can be re-enabled with new UOX.INI setting mentioned above! Fixed incorrect ID for gargish dagger in CHandleCombat::getWeaponType() Added missing weapon entries in CHandleCombat::getWeaponType(): bladed whip, barbed whip, spiked whip, gargish talwar Fixed an issue that would show the end part of some tiledata names as garbled text instead of cutting off the text(!) at 20 characters Fixed an issue with advanced character creation template when using ClassicUO client, which sends a profession value of 255 instead of 0 when no profession template has been selected. Fixed an issue where clones of NPCs that can split in combat didn't get the NPC flag correctly set Guild titles are now removed for players who leave their guilds Enabled closing some hard-coded gump menus using right-click (howto, guild, towns, wholist, addmenu, craftmenu, info) Fixed an issue where adding base items using 'add [itemID] would sometimes get false positive hits from harditems.dfn, depending on the length of the itemID Fixed an issue where items added using 'add [itemID] would not get names applied properly from harditems.dfn Item/NPC DFN tag GET can now inherit a random parent by adding additional values separated by spaces. Syntax: GET=parent1 parent2 parent3 (etc) Fixed an issue where NPC backpacks would not have the max item capacity set properly Added new properties for CItem objects (also exposed as JS Item Properties): maxRange // max distance a ranged weapon can fire at (replaces ARCHERRANGE ini setting) baseRange // base distance throwing weapons (when implemented) can be used at Added support for new Item DFN tag that replaces global UOX.INI setting ARCHERRANGE: MAXRANGE=# // Specifies max range of ranged weapon Added support for new Item/NPC DFN tags to support randomizing elemental resistances: RESISTFIRE=#/# # // Set NPC's poison resistance; fixed or random value RESISTCOLD=#/# # // Set NPC's poison resistance; fixed or random value RESISTLIGHTNING=#/# # // Set NPC's poison resistance; fixed or random value RESISTPOISON=#/# # // Set NPC's poison resistance; fixed or random value Added support for two new DFN tags in dfndata/race/races.dfn that can be used to allow/ban lists of equipment for specific races ALLOWEQUIPLIST=# BANEQUIPLIST=# Added support for new section in dfndata/race/races.dfn - [EQUIPLIST #], which can be used to define lists of equipment that is whitelisted or banned for specific races. Fixed a bug that would report incorrect weight in tooltips for Item/NPC spawner objects ScriptSections are now reapplied for items bought by players from NPC vendors Fixed an issue where players could drop an item on the ground and other players would still see the item after it was picked up, because of a failed distance check vs old location coordinates (in pack) instead of vs current location on ground Fixed a bug with players being able to use last-target macro to target objects picked up and held by other players on their cursor Updated all references to "devinelock" to be "divinelock" instead - this includes the name of the JS Item property Fixed house commands triggering (useless) targeting cursors for players onboard boats Changed default statcap in UOX.INI from 325 to 225 Fixed a out-of-range error for players attempting to combine ore inside their own backpack Fixed various issues with distance checks and container checks when using/target objects Added optional 4th "hue" parameter to AddGump JS method Added JS Function to get total amount of accounts on server - GetAccountCount() Added JS Function to get total amount of players online - GetPlayerCount() onSwing JS Event can now trigger in scripts attached to items, not just items attached to characters Added some JS Functions to expose some hard-coded constants to JS scripts: BASEITEMSERIAL() // Base item serial INVALIDSERIAL() // Invalid serial INVALIDID() // Invalid ID INVALIDCOLOUR() // Invalid colour Fixed an issue where JS character property .colour would modify origSkin property instead of colour Fixed an issue where JS character property .guildTitle returned the name of the character instead of the guild title Character JS property .poison can now also be used to set a character's poisoned level, not just read it Exposed Item property to JS engine: .ac // armour class for item (0-128). Primarily used for setting race-restrictions for equippable items, i.e. race X cannot equip items of armour class Y. .def // defensive value of item (Physical resistance post-AoS, AR in older UO) // NOTE: The following properties don't actually do anything yet, but can still be used in custom JS scripts if desired .resistCold // Cold resistance of item 0-1000, where 1000 equals 100.0% .resistHeat // Heat/Fire resistance of item 0-1000, where 1000 equals 100.0% .resistLight // Light resistance of item 0-1000, where 1000 equals 100.0% .resistLightning // Energy/Lightning resistance of item 0-1000, where 1000 equals 100.0% .resistPoison // Poison resistance of item 0-1000, where 1000 equals 100.0% .resistRain // Rain resistance of item 0-1000, where 1000 equals 100.0% .resistSnow // Snow resistance of item 0-1000, where 1000 equals 100.0% .damageHeat // Weapon deals Heat/Fire elemental damage (true/false) .damageCold // Weapon deals Cold elemental damage (true/false) .damageLight // Weapon deals Light elemental damage (true/false) .damageLightning // Weapon deals Lightning elemental damage (true/false) .damagePoison // Weapon deals Poison elemental damage (true/false) .damageRain // Weapon deals Rain/Water elemental damage (true/false) .damageSnow // Weapon deals Snow/Ice elemental damage (true/false) Added new UOX.INI setting under [server] to enable/disable shard response to ConnectUO server polling (disabled by default) Sub-commands are no longer included when registering packets to be overloaded via RegisterPacket function, as that part was never fully implemented. Packet-hook scripts can be setup for specific packet IDs, but any sub-command checking will need to be done in the script itself JS Packet Method GetDWord() now uses JS_NewNumberValue instead of INT_TO_JSVAL to read from the socket buffer, to better handle large numbers, which could previously be returned with wrong values. JS Function CalcItemFromSer() now uses a JS_GetStringBytes() and str_value() combo instead of JSVAL_TO_INT() to read the data provided in the function argument. This allows JS scripts to provide item serials to the function directly without needing to split it into four parts first (though that still works) Fixed issue where JS properties for multis didn't always return correct values The 'set command can now be used to set the armour class of items ('set ac #) Reimplemented 'tweak command in JS engine (js/commands/targeting/tweak.js) - can be used to view and modify properties of characters, character skills, items, multis and regions (target ground) Added placeholder packet-hook script (js/server/network/0xf1_connectUoServerPoll.js) to handle responses to ConnectUO server polling. By default this script does nothing, but serves as a placeholder for drop-in replacement scripts generated specifically for each shard by the ConnectUO service. Updated some commands to support an alternate STATIC keyword (can also be ommitted) to add base items: 'add static itemID 'tile static itemID Updated some commands with support for randomization. Provided itemID will be randomized based on provided rndValue: /js/commands/targeting/add.js: 'add itemID rndValue cmdtable.cpp and targeting.cpp: 'tile itemID rndValue 'tile itemID x1 x2 y1 y2 z rndValue Updated js/commands/custom/repeatingcmds.js to support 'm delete as an alias for 'rremove Added 'props as an alias for the 'tweak command Added 'teleport as an alias for the 'tele command (js/commands/targeting/tele.js) Added 'shavehair and 'shavebeard as aliases for 'kill hair and 'kill beard (js/commands/targeting/kill.js) Added 'noinvul and 'mortal aliases for the 'invul false command (js/commands/custom/misc-cmds.js) Added 'immortal and 'invul (without parameter) as aliases for the 'invul true command Added 'bringtopack as an alias of 'movetobag command (js/commands/targeting/movetobag.js) Updated check for cancelling of target cursor in various JS scripts Minor updates to various JS scripts Fixed issue where some item definitions in dfndata/harditems/harditems.dfn and dfndata/items/building/lighting.dfn used comma instead of space as delimiter for the VALUE tag, which thus never got applied Updated all NPC definitions to let NPCs spawn facing in random directions
2021-03-22 05:59:20 +08:00
else
{
0.99.4d Added new option in UOX.INI under [settings] section: MAPDIFFSENABLED=0/1 // If enabled, server will attempt to load diff files, and send "Enable Map-diff files" packet to client to also load these. Disabled by default. Server no longer loads map/statics diff files by default, nor does it send packet to client to request loading these files, as only client versions below 7.0.8.2 will actively load these files. Can be re-enabled with new UOX.INI setting mentioned above! Fixed incorrect ID for gargish dagger in CHandleCombat::getWeaponType() Added missing weapon entries in CHandleCombat::getWeaponType(): bladed whip, barbed whip, spiked whip, gargish talwar Fixed an issue that would show the end part of some tiledata names as garbled text instead of cutting off the text(!) at 20 characters Fixed an issue with advanced character creation template when using ClassicUO client, which sends a profession value of 255 instead of 0 when no profession template has been selected. Fixed an issue where clones of NPCs that can split in combat didn't get the NPC flag correctly set Guild titles are now removed for players who leave their guilds Enabled closing some hard-coded gump menus using right-click (howto, guild, towns, wholist, addmenu, craftmenu, info) Fixed an issue where adding base items using 'add [itemID] would sometimes get false positive hits from harditems.dfn, depending on the length of the itemID Fixed an issue where items added using 'add [itemID] would not get names applied properly from harditems.dfn Item/NPC DFN tag GET can now inherit a random parent by adding additional values separated by spaces. Syntax: GET=parent1 parent2 parent3 (etc) Fixed an issue where NPC backpacks would not have the max item capacity set properly Added new properties for CItem objects (also exposed as JS Item Properties): maxRange // max distance a ranged weapon can fire at (replaces ARCHERRANGE ini setting) baseRange // base distance throwing weapons (when implemented) can be used at Added support for new Item DFN tag that replaces global UOX.INI setting ARCHERRANGE: MAXRANGE=# // Specifies max range of ranged weapon Added support for new Item/NPC DFN tags to support randomizing elemental resistances: RESISTFIRE=#/# # // Set NPC's poison resistance; fixed or random value RESISTCOLD=#/# # // Set NPC's poison resistance; fixed or random value RESISTLIGHTNING=#/# # // Set NPC's poison resistance; fixed or random value RESISTPOISON=#/# # // Set NPC's poison resistance; fixed or random value Added support for two new DFN tags in dfndata/race/races.dfn that can be used to allow/ban lists of equipment for specific races ALLOWEQUIPLIST=# BANEQUIPLIST=# Added support for new section in dfndata/race/races.dfn - [EQUIPLIST #], which can be used to define lists of equipment that is whitelisted or banned for specific races. Fixed a bug that would report incorrect weight in tooltips for Item/NPC spawner objects ScriptSections are now reapplied for items bought by players from NPC vendors Fixed an issue where players could drop an item on the ground and other players would still see the item after it was picked up, because of a failed distance check vs old location coordinates (in pack) instead of vs current location on ground Fixed a bug with players being able to use last-target macro to target objects picked up and held by other players on their cursor Updated all references to "devinelock" to be "divinelock" instead - this includes the name of the JS Item property Fixed house commands triggering (useless) targeting cursors for players onboard boats Changed default statcap in UOX.INI from 325 to 225 Fixed a out-of-range error for players attempting to combine ore inside their own backpack Fixed various issues with distance checks and container checks when using/target objects Added optional 4th "hue" parameter to AddGump JS method Added JS Function to get total amount of accounts on server - GetAccountCount() Added JS Function to get total amount of players online - GetPlayerCount() onSwing JS Event can now trigger in scripts attached to items, not just items attached to characters Added some JS Functions to expose some hard-coded constants to JS scripts: BASEITEMSERIAL() // Base item serial INVALIDSERIAL() // Invalid serial INVALIDID() // Invalid ID INVALIDCOLOUR() // Invalid colour Fixed an issue where JS character property .colour would modify origSkin property instead of colour Fixed an issue where JS character property .guildTitle returned the name of the character instead of the guild title Character JS property .poison can now also be used to set a character's poisoned level, not just read it Exposed Item property to JS engine: .ac // armour class for item (0-128). Primarily used for setting race-restrictions for equippable items, i.e. race X cannot equip items of armour class Y. .def // defensive value of item (Physical resistance post-AoS, AR in older UO) // NOTE: The following properties don't actually do anything yet, but can still be used in custom JS scripts if desired .resistCold // Cold resistance of item 0-1000, where 1000 equals 100.0% .resistHeat // Heat/Fire resistance of item 0-1000, where 1000 equals 100.0% .resistLight // Light resistance of item 0-1000, where 1000 equals 100.0% .resistLightning // Energy/Lightning resistance of item 0-1000, where 1000 equals 100.0% .resistPoison // Poison resistance of item 0-1000, where 1000 equals 100.0% .resistRain // Rain resistance of item 0-1000, where 1000 equals 100.0% .resistSnow // Snow resistance of item 0-1000, where 1000 equals 100.0% .damageHeat // Weapon deals Heat/Fire elemental damage (true/false) .damageCold // Weapon deals Cold elemental damage (true/false) .damageLight // Weapon deals Light elemental damage (true/false) .damageLightning // Weapon deals Lightning elemental damage (true/false) .damagePoison // Weapon deals Poison elemental damage (true/false) .damageRain // Weapon deals Rain/Water elemental damage (true/false) .damageSnow // Weapon deals Snow/Ice elemental damage (true/false) Added new UOX.INI setting under [server] to enable/disable shard response to ConnectUO server polling (disabled by default) Sub-commands are no longer included when registering packets to be overloaded via RegisterPacket function, as that part was never fully implemented. Packet-hook scripts can be setup for specific packet IDs, but any sub-command checking will need to be done in the script itself JS Packet Method GetDWord() now uses JS_NewNumberValue instead of INT_TO_JSVAL to read from the socket buffer, to better handle large numbers, which could previously be returned with wrong values. JS Function CalcItemFromSer() now uses a JS_GetStringBytes() and str_value() combo instead of JSVAL_TO_INT() to read the data provided in the function argument. This allows JS scripts to provide item serials to the function directly without needing to split it into four parts first (though that still works) Fixed issue where JS properties for multis didn't always return correct values The 'set command can now be used to set the armour class of items ('set ac #) Reimplemented 'tweak command in JS engine (js/commands/targeting/tweak.js) - can be used to view and modify properties of characters, character skills, items, multis and regions (target ground) Added placeholder packet-hook script (js/server/network/0xf1_connectUoServerPoll.js) to handle responses to ConnectUO server polling. By default this script does nothing, but serves as a placeholder for drop-in replacement scripts generated specifically for each shard by the ConnectUO service. Updated some commands to support an alternate STATIC keyword (can also be ommitted) to add base items: 'add static itemID 'tile static itemID Updated some commands with support for randomization. Provided itemID will be randomized based on provided rndValue: /js/commands/targeting/add.js: 'add itemID rndValue cmdtable.cpp and targeting.cpp: 'tile itemID rndValue 'tile itemID x1 x2 y1 y2 z rndValue Updated js/commands/custom/repeatingcmds.js to support 'm delete as an alias for 'rremove Added 'props as an alias for the 'tweak command Added 'teleport as an alias for the 'tele command (js/commands/targeting/tele.js) Added 'shavehair and 'shavebeard as aliases for 'kill hair and 'kill beard (js/commands/targeting/kill.js) Added 'noinvul and 'mortal aliases for the 'invul false command (js/commands/custom/misc-cmds.js) Added 'immortal and 'invul (without parameter) as aliases for the 'invul true command Added 'bringtopack as an alias of 'movetobag command (js/commands/targeting/movetobag.js) Updated check for cancelling of target cursor in various JS scripts Minor updates to various JS scripts Fixed issue where some item definitions in dfndata/harditems/harditems.dfn and dfndata/items/building/lighting.dfn used comma instead of space as delimiter for the VALUE tag, which thus never got applied Updated all NPC definitions to let NPCs spawn facing in random directions
2021-03-22 05:59:20 +08:00
*vp = JSVAL_NULL;
}
Housing Revamp and more Updated JS SysMessage function to accept up to 10 extra, optional arguments, which can be used with dictionary messages that require additional parameters like %s or %i Added new type of house privilege in cMultiObj.cpp to keep track of friends of the multi - HOUSEPRIV_FRIEND - which is stored during worldsaves as one or more Friend=<player serial> tags in house.wsc Added new type of house privilege in cMultiObj.cpp to keep track of guests of the multi - HOUSEPRIV_GUEST - which is stored during worldsaves as one or more Guest=<player serial> tags in house.wsc When items are created for houses upon house placement, a reference to the multi's serial is now stored in the house sign's MORE property to allow easier tracking of which house a particular sign belongs to Added tracking of new, persistent properties for houses via cMultiObj.cpp/h: lockdowns, secure containers, vendors, guests, friends, owners, ban location, public status, number of visits, timestamps Added a multitude of new methods in cMultiObj.cpp/h to assist in improving the functionality of houses Added new tags for houses in house.dfn (default values applied if tag not specified): MAXSECURECONTAINERS=4 - Max amount of secure containers allowed in a multi MAXLOCKDOWNS=256 - Max amount of lockdowns allowed in a multi MAXVENDORS=10 - Max amount of vendors allowed in a multi MAXBANS=50 - Max amount of bans in a multi's ban list MAXFRIENDS=50 - Max amount of friends in a multi's friend list MAXGUESTS=50 - Max amount of guests in a multi's guest list MAXOWNERS=8 - Max amount of owners and co-owners in a multi's owner list MAXTRASHCONTAINERS=1 - Max amount of trash containers allowed in multi SCRIPT=<scriptID> - Assign a JS script-ID directly to a multi FRONTDOOR - indicates that a door is the front door of a house. Cannot be locked in public houses! INTERIORDOOR - indicates that a door is an interior door of a house. Can be locked in public houses. BANX - Location X offset for multi's ban location, if not used, will try to use SE corner of multi instead BANY - Location Y offset for multi's ban location, if not used, will try to use SE corner of multi instead Added JS Event: onHouseCommand( tSock, multiObj, cmdID ) - For handling spoken house commands via JS scripts attached to multi. Updated JS Events: onEntrance() - can now trigger both for multi being entered and/or object entering onLeaving() - can now trigger both for multi being left and/or object entering onSpeech() - can now also trigger for items (in addition to chars) with event & script attached, if UOX.INI setting ITEMSDETECTSPEECH is enabled Added JS Multi methods: .IsBoat() - Returns whether the item (or multi) is a boat .IsOwner( playerToCheck ) - Returns whether a player is the owner of a multi .IsOnOwnerList( playerToCheck ) - Returns whether a player is on the (co-)owner list of a multi .IsOnFriendList( playerToCheck ) - Returns whether a player is on the friend list of a multi .IsOnGuestList( playerToCheck ) - Returns whether a player is on the guest list of a multi .IsOnBanList( playerToCheck ) - Returns whether a player is on the ban list of a multi .AddToFriendList( playertoAdd ) - Adds player to the friend list of a multi .RemoveFromFriendList( playertoRemove ) - Removes player from the friend list of a multi .AddToGuestList( playertoAdd ) - Adds player to the guest list of a multi .RemoveFromGuestList( playertoRemove ) - Removes player from the guest list of a multi .ClearOwnerList() - Clears all entries from a multi's (co-)owner list .ClearFriendList() - Clears all entries from a multi's friend list .ClearGuestList() - Clears all entries from a multi's guest list .ClearBanList() - Clears all entries from a multi's ban list .SecureContainer( itemToSecure ) - Secures a container in a multi .UnsecureContainer( itemToUnsecure ) - Unsecures a container in a multi .IsSecureContainer( itemToCheck ) - Checks if specified item is a secure container in a multi .LockDownItem( itemToLockDown) - Locks down an item in a multi .ReleaseItem( itemToRelease ) - Releases a locked down item in a multi .KillKeys() - Deletes ALL keys associated with a multi .AddTrashCont( itemToAdd ) - Add trash container to multi's list of trash containers .RemoveTrashCont( itemToRemove ) - Remove trash container from multi's list of trash containers Added JS Item (Multi only) properties: .lockdowns - Get the number of lockdowns in a multi .maxLockdowns - Get/Set the max number of lockdowns allowed in a multi .secureContainers - Get the number of secure containers in a multi .maxSecureContainers - Get/Set the max number of secure containers allowed in a multi .trashContainers - Get the number of trash containers in a multi .maxTrashContainers - Get/Set the max number of trash containers allowed in a multi .friends - Get the number of friends in a multi's friend list .maxFriends - Get/Set the max number of friends allowed in a multi's friend list .guests - Get the number of guests in a multi's guest list .maxGuests - Get/Set the max number of guests allowed in a multi's guest list .owners - Get the number of owners in a multi's owner list .maxOwners - Get/Set the max number of owners allowed in a multi's owner list .bans - Get the number of banned players in a multi's ban list .maxBans - Get/Set the max number of banned players allowed in a multi's ban list .vendors - Get the number of player vendors in a multi .maxVendors - Get the max number of player vendors allowed in a multi .deed - Get the item sectionID for deed used to place multi .isPublic - Get/Set the private/public state of a multi .buildTimestamp - Get the timestamp for when the house was originally placed .tradeTimestamp - Get the timestamp for when the house was last traded to another player .banX - Get/Set the ban location X offset for the multi .banY - Get/Set the ban location Y offset for the multi Added JS Character properties: .multi = Get/Set the multi object the character is in .accountNum = Get the account number the character belongs to .housesOwned = Get a count of houses owned by the character .housesCoOwned = Get a count of houses co-owned by the character Updated JS cBaseObject Methods .FirstItem(), .NextItem() and .FinishedItems() to also support iterating through items in multis Updated JS multi Methods .FirstChar(), .NextChar() and .FinishedChars() to support an additional parameter to specify what kind of characters to loop through: "default" or no parameter - all characters inside the multi "owner" - players on multi's owner list "friend" - players on multi's friend list "guest" - players on multi's guest list "banned" - players on multi's ban list Added new INI tags to a new section of uox.ini called [houses] DECAYTIMERINHOUSE=3600 // Decay timer in seconds for non-locked down items inside houses PROTECTPRIVATEHOUSES=1 // Toggles whether private houses will automatically boot unauthorized visitors (1) or not (0) TRACKHOUSESPERACCOUNT=1 // Toggles whether to track (and restrict) house ownership per account (1) or per character (0) MAXHOUSESOWNABLE=1 // Specifies the max amount of houses a player can own per account/char, depending on how house ownership is tracked MAXHOUSESCOOWNABLE=10 // Specifies the max amount of houses a player can co-own per character CANOWNANDCOOWNHOUSES=1 // Toggles whether players can own and co-own houses at the same time COOWNHOUSESONSAMEACCOUNT=1 // Toggles whether characters on same account as house owner will be treated as co-owners Added new INI tags in [settings] section of uox.ini: ITEMSDETECTSPEECH=0 // If enabled, server will search for nearby items with onSpeech JS event running whenever a character speaks. Disabled by default. MAXPLAYERPACKITEMS=125 // Defines max item capacity for player (and NPC) backpacks. Defaults to 125. Moved most of the existing house functionality to JS and expanded upon it to reach feature parity with houses in regular UO around Publish 15/16, with various extras thrown in for good measure and all functionality being customizable: js/server/house/house.js (15000) - handles detection of house commands and characters entering/leaving houses js/server/house/houseSign.js (15001) - contains and handles all house-related gumps/menus and what is shown when players interact with house sign js/server/house/houseCommands.js (15002) - handles functionality of house commands and other functionality such as transfer of ownership, demolishing house, etc. js/server/house/houseDeed.js (15003) - handles initial rules that allow/disallow placement of additional houses for players All house-related menus now fully handled through JS All house commands and other functionality now fully handled through JS Removed redundant hard-coded house functionality Implemented Co-owners, friends, guests for houses, with access rules in place for entry, lockdowns, house commands, etc. Implemented Private and Public houses Implemented Secure Containers and Trash Barrels Definable max lockdowns, secure containers, player vendors, bans, friends, guests, owners, trash containers and more - per house type JS scripts can now be attached directly to houses Doors in houses can be marked as front doors or interior doors, and will be treated differently with regards to private and public houses Added new item to dfndata/items/containers/misc.dfn - [trashbarrel] Added new JS script (js/items/trashbarrel.js) with trash barrel functionality for houses. Trash barrels that are marked as secure containers are only accessible by owners, co-owners and friends of the house. Various options available at top of script. Updated js/items/axe.js to support chopping up trash barrels and house add-ons in houses owned by the player Fixed an issue with house doors being left behind after demolishing houses while their doors were open Fixed an issue where GMs could be banned from player houses Added Line of Sight checks to speech, to give players some privacy in their own homes Updated house placement code to more accurately check for other multis, dynamic and static objects when placing houses; now requires free space around each house that cannot be blocked by other houses or items that can block player movement, and disallows placement of houses on roads Updated house placement code to move characters blocking house placement to SE corner of the house Updated house placement code to disallow placing houses in guarded regions, or in dungeons Added new DFN tag for regions to enable/disable player houses in specific regions: HOUSING=0/1 Added new region (247) that covers path to Valley of Eodon in Felucca Added new region (248) that covers Valley of Eodon in Ter-Mur, with player housing disabled Added new region (249) that covers entire T2A lands, with player housing disabled Updated SPACEX and SPACEY values for all houses in dfndata/house/house.dfn to match updated house placement code Added new JS property to Regions that can be used to determine or change state of player housing in a region: .canPlaceHouse() Updated rules for usage of dye tubs to dye locked down items; now only house owners or co-owners may dye locked down items Updated rules for usage of the following locked down items in a house, which are now only usable by house owners and co-owners Dyes, Guildstone Deeds, Recall Runes (renaming), Rename Deeds, Townstone Deeds, House Deeds, Boat Models, Player Vendor Deeds, Ore, Hair Dye Updated rules for usage of the following locked down items in a house, which are now only usable by house owners, co-owners and friends: Keys, Dye Tubs, Magic Scrolls, Fireworks Wands, Magic Wands, Smithing Tools, Mining Tools, Fishing Poles Updated item lockdown rules to allow locking down (and releasing) items in a container as long as the container is locked down, and to only allow releasing a locked down container if it's empty of locked down items Updated item lockdown rules to only allow locking down movement-blocking items further than 2 tiles away from doors Updated rules for releasing items in houses - now the house owner can release any locked down items, co-owners can release items locked down by themselves or by friends, while friends can release only items locked down by themselves Added some feedback to player about why their attempted house placement failed Items added by GMs directly into multis will now decay based on the house-specific decay timer instead of the regular one Fixed an issue that could cause items to almost instantly decay after being released from lockdown in a house Placing house add-ons now properly takes into account SPACEX and SPACEY values when checking if they can fit in selected area of houses Re-added SPACEX and SPACEY values for Pentagram and Loom house add-ons House add-ons can now be converted back into house add-on deeds by chopping them with an axe Added new item type - IT_HOUSEADDON (201) - used by house add-ons placed in player houses Fixed a bug where keys would stop working after being added to a keyring, and would turn into blank keys upon release from the keyring Added visitor count for public player houses, which keeps track of how many visits a public house has received, with each player counted max 1 time every 24 hours Fixed an issue with FindPlayersInOldVisrange() where it didn't take into account that players could see buildings further away than the standard update range. This could cause players to see ghost images of buildings if they were at the "right" distance when the building was being demolished Added NODECAY tag to all signs and doors in dfndata/house/house.dfn Added FRONTDOOR or INTERIORDOOR (as appropriate) to all doors in dfndata/house/house.dfn Added BANX and BANY to specify ban location for some houses in dfndata/house/house.dfn instead of relying on finding SE corner automatically Implemented strongboxes (js/server/house/strongbox.js) for co-owners of a house, which can be placed with the house command "i wish to place a strongbox". Max capacity is 25 items Updated 'REMOVE command to take an optional parameter - itemID. If supplied, the command will remove all items with this itemID from a targeted container Fixed a bug when checking if dynamic items were blocking valid spawn locations for NPCs, some function arguments were in the wrong order! Improved code that finds valid spawn locations for items and NPCs spawned via spawn regions. As server gradually builds up lists of valid spawn locations per region over time, it will start using these lists more often, rather than always look for brand new spawn locations. Fixed a bug with CMulHandler::CheckStaticFlag() that prevented NPCs from spawning inside buildings with no static floors! Fixed an issue with repeating commands that prevented GMs from being able to cancel them when using the ClassicUO client Exposed character property .accountNum to JS engine Extended CDataList class to include a Clear() method for clearing lists Updated JS File method .Open() to support an optional, third argument - subFolderName - that defines in which sub-folder of UOX3/shared/ to store/look for a file. If no third argument is supplied, UOX3 will default to using the shared folder itself. Updated JS File method .Length() to return a value of -1 for files that don't exist Added new code function, exposed to JS engine with same parameters, which simply checks if a given tile ID has a specific flag bool CheckTileFlag( UI16 itemID, TILEFLAG flagToCheck ) Added JS function used to find the root container of an item (if any) FindRootContainer( itemSerial ) FindRootContainer( item ) Added new JS function that allows deleting files from UOX3/shared/ folder or subfolders of shared folder. If no subFolderName is provided, looks for file directly in shared folder itself. Restrictions on file- and folder-names apply. bool DeleteFile( fileName, subFolderName ) Added new JS functions for checking if a specific client or server feature is enabled. See documentation for full list of client/server features. GetClientFeature( bitNum ) // Returns true if specified client feature is enabled on server GetServerFeature( bitNum ) // Returns true if specified server feature is enabled on server Added new JS function for returning the value of almost any server setting from UOX.INI GetServerSetting( settingNameInDoubleQuotes ) Updated JS function DoesDynamicBlock() with two new parameters - checkOnlyMultis and checkOnlyNonMultis Updated JS function DoesMapBlock() with two new parameters - checkMultiPlacement and checkForRoad Fixed an issue where a LoS check would prevent players from accessing containers in their own backpack Added new functions in findfuncs.cpp to make it easier to find items near another object or location: findNearbyItems( object, distance ) findNearbyItems( x, y, worldNumber, instanceID, distance ) Added new Item property - maxItems - used by containers to determine their max item capacity Added new Item property - totalItemCount - used to get total item count in a container (including sub-containers) Added check for max item capacity when creating new items that are added to a character's backpack - items will be created below character's feet if backpack is full! Added new DFN tag for items, used by containers to determine item capacity for a given container: MAXITEMS=# // 125 is the default for all containers if not set Added new JS Item properties: .maxItems // gets/sets item capacity for a given container .totalItemCount // gets total item count in a container, including sub-containers Updated item tooltips for containers to show accurate total item count, as well as to display max item capacity Fixed a bug where picking up items from a non-locked down pile of items on the floor inside a multi could cause the remaining pile to be seen as no longer inside the multi, disallowing locking it back down and causing it to decay based on regular decay timer instead of house-specific one Updated JS command set to allow setting poison-level on items ('set poison #) and hunger-level on characters ('set hunger #) Fixed an issue with js/item/food.js that prevented poisoned food from poisoning characters when eaten Fixed an issue with js/skill/poisoning.js that prevented players from poisoning food! Updated various JS scripts and hardcoded targeting functions to disallow the targeting of locked down resources using skills and tools Updated JS Method TextMessage() to support three extra, optional parameters. Note that if one optional parameter is included, all preceding optional parameters are also required! speechTarget - What kind of target is this message intended for? 0 - Only visible for sender and receiver of message 1 - Visible to all players in range 2 - Visible to all NPCs and players in range 3 - Visible to all PCs everywhere + NPCs in range 4 - Visible to all PCs everywhere (broadcast) 5 - Only visible for the receiver of the message speechTargetSerial - The serial of the receiver of the message, used if speechTarget is 0 or 5 speechFontType - The type of font to display the text in. Defaults to normal. 0 - Bold 1 - Normal with shadow 2 - Bold with shadow 3 - Normal 4 - Gothic 5 - Italic 6 - Small, dark 7 - Colourful 8 - Runic (only works with CAPS) 9 - Small, light Added timestamp to worldsaves in console, to make it easier to see when a particular world-save was done Added info about compiler/environment displayed at the top of the UOX3 console during startup Updated dictionary files with new messages primarily related to housing
2020-11-04 02:00:37 +08:00
break;
case CIP_MAXTRASHCONTAINERS:
if( gPriv->GetObjType() == OT_MULTI )
{
*vp = INT_TO_JSVAL(( static_cast<CMultiObj *>( gPriv )->GetMaxTrashContainers() ));
}
0.99.4d Added new option in UOX.INI under [settings] section: MAPDIFFSENABLED=0/1 // If enabled, server will attempt to load diff files, and send "Enable Map-diff files" packet to client to also load these. Disabled by default. Server no longer loads map/statics diff files by default, nor does it send packet to client to request loading these files, as only client versions below 7.0.8.2 will actively load these files. Can be re-enabled with new UOX.INI setting mentioned above! Fixed incorrect ID for gargish dagger in CHandleCombat::getWeaponType() Added missing weapon entries in CHandleCombat::getWeaponType(): bladed whip, barbed whip, spiked whip, gargish talwar Fixed an issue that would show the end part of some tiledata names as garbled text instead of cutting off the text(!) at 20 characters Fixed an issue with advanced character creation template when using ClassicUO client, which sends a profession value of 255 instead of 0 when no profession template has been selected. Fixed an issue where clones of NPCs that can split in combat didn't get the NPC flag correctly set Guild titles are now removed for players who leave their guilds Enabled closing some hard-coded gump menus using right-click (howto, guild, towns, wholist, addmenu, craftmenu, info) Fixed an issue where adding base items using 'add [itemID] would sometimes get false positive hits from harditems.dfn, depending on the length of the itemID Fixed an issue where items added using 'add [itemID] would not get names applied properly from harditems.dfn Item/NPC DFN tag GET can now inherit a random parent by adding additional values separated by spaces. Syntax: GET=parent1 parent2 parent3 (etc) Fixed an issue where NPC backpacks would not have the max item capacity set properly Added new properties for CItem objects (also exposed as JS Item Properties): maxRange // max distance a ranged weapon can fire at (replaces ARCHERRANGE ini setting) baseRange // base distance throwing weapons (when implemented) can be used at Added support for new Item DFN tag that replaces global UOX.INI setting ARCHERRANGE: MAXRANGE=# // Specifies max range of ranged weapon Added support for new Item/NPC DFN tags to support randomizing elemental resistances: RESISTFIRE=#/# # // Set NPC's poison resistance; fixed or random value RESISTCOLD=#/# # // Set NPC's poison resistance; fixed or random value RESISTLIGHTNING=#/# # // Set NPC's poison resistance; fixed or random value RESISTPOISON=#/# # // Set NPC's poison resistance; fixed or random value Added support for two new DFN tags in dfndata/race/races.dfn that can be used to allow/ban lists of equipment for specific races ALLOWEQUIPLIST=# BANEQUIPLIST=# Added support for new section in dfndata/race/races.dfn - [EQUIPLIST #], which can be used to define lists of equipment that is whitelisted or banned for specific races. Fixed a bug that would report incorrect weight in tooltips for Item/NPC spawner objects ScriptSections are now reapplied for items bought by players from NPC vendors Fixed an issue where players could drop an item on the ground and other players would still see the item after it was picked up, because of a failed distance check vs old location coordinates (in pack) instead of vs current location on ground Fixed a bug with players being able to use last-target macro to target objects picked up and held by other players on their cursor Updated all references to "devinelock" to be "divinelock" instead - this includes the name of the JS Item property Fixed house commands triggering (useless) targeting cursors for players onboard boats Changed default statcap in UOX.INI from 325 to 225 Fixed a out-of-range error for players attempting to combine ore inside their own backpack Fixed various issues with distance checks and container checks when using/target objects Added optional 4th "hue" parameter to AddGump JS method Added JS Function to get total amount of accounts on server - GetAccountCount() Added JS Function to get total amount of players online - GetPlayerCount() onSwing JS Event can now trigger in scripts attached to items, not just items attached to characters Added some JS Functions to expose some hard-coded constants to JS scripts: BASEITEMSERIAL() // Base item serial INVALIDSERIAL() // Invalid serial INVALIDID() // Invalid ID INVALIDCOLOUR() // Invalid colour Fixed an issue where JS character property .colour would modify origSkin property instead of colour Fixed an issue where JS character property .guildTitle returned the name of the character instead of the guild title Character JS property .poison can now also be used to set a character's poisoned level, not just read it Exposed Item property to JS engine: .ac // armour class for item (0-128). Primarily used for setting race-restrictions for equippable items, i.e. race X cannot equip items of armour class Y. .def // defensive value of item (Physical resistance post-AoS, AR in older UO) // NOTE: The following properties don't actually do anything yet, but can still be used in custom JS scripts if desired .resistCold // Cold resistance of item 0-1000, where 1000 equals 100.0% .resistHeat // Heat/Fire resistance of item 0-1000, where 1000 equals 100.0% .resistLight // Light resistance of item 0-1000, where 1000 equals 100.0% .resistLightning // Energy/Lightning resistance of item 0-1000, where 1000 equals 100.0% .resistPoison // Poison resistance of item 0-1000, where 1000 equals 100.0% .resistRain // Rain resistance of item 0-1000, where 1000 equals 100.0% .resistSnow // Snow resistance of item 0-1000, where 1000 equals 100.0% .damageHeat // Weapon deals Heat/Fire elemental damage (true/false) .damageCold // Weapon deals Cold elemental damage (true/false) .damageLight // Weapon deals Light elemental damage (true/false) .damageLightning // Weapon deals Lightning elemental damage (true/false) .damagePoison // Weapon deals Poison elemental damage (true/false) .damageRain // Weapon deals Rain/Water elemental damage (true/false) .damageSnow // Weapon deals Snow/Ice elemental damage (true/false) Added new UOX.INI setting under [server] to enable/disable shard response to ConnectUO server polling (disabled by default) Sub-commands are no longer included when registering packets to be overloaded via RegisterPacket function, as that part was never fully implemented. Packet-hook scripts can be setup for specific packet IDs, but any sub-command checking will need to be done in the script itself JS Packet Method GetDWord() now uses JS_NewNumberValue instead of INT_TO_JSVAL to read from the socket buffer, to better handle large numbers, which could previously be returned with wrong values. JS Function CalcItemFromSer() now uses a JS_GetStringBytes() and str_value() combo instead of JSVAL_TO_INT() to read the data provided in the function argument. This allows JS scripts to provide item serials to the function directly without needing to split it into four parts first (though that still works) Fixed issue where JS properties for multis didn't always return correct values The 'set command can now be used to set the armour class of items ('set ac #) Reimplemented 'tweak command in JS engine (js/commands/targeting/tweak.js) - can be used to view and modify properties of characters, character skills, items, multis and regions (target ground) Added placeholder packet-hook script (js/server/network/0xf1_connectUoServerPoll.js) to handle responses to ConnectUO server polling. By default this script does nothing, but serves as a placeholder for drop-in replacement scripts generated specifically for each shard by the ConnectUO service. Updated some commands to support an alternate STATIC keyword (can also be ommitted) to add base items: 'add static itemID 'tile static itemID Updated some commands with support for randomization. Provided itemID will be randomized based on provided rndValue: /js/commands/targeting/add.js: 'add itemID rndValue cmdtable.cpp and targeting.cpp: 'tile itemID rndValue 'tile itemID x1 x2 y1 y2 z rndValue Updated js/commands/custom/repeatingcmds.js to support 'm delete as an alias for 'rremove Added 'props as an alias for the 'tweak command Added 'teleport as an alias for the 'tele command (js/commands/targeting/tele.js) Added 'shavehair and 'shavebeard as aliases for 'kill hair and 'kill beard (js/commands/targeting/kill.js) Added 'noinvul and 'mortal aliases for the 'invul false command (js/commands/custom/misc-cmds.js) Added 'immortal and 'invul (without parameter) as aliases for the 'invul true command Added 'bringtopack as an alias of 'movetobag command (js/commands/targeting/movetobag.js) Updated check for cancelling of target cursor in various JS scripts Minor updates to various JS scripts Fixed issue where some item definitions in dfndata/harditems/harditems.dfn and dfndata/items/building/lighting.dfn used comma instead of space as delimiter for the VALUE tag, which thus never got applied Updated all NPC definitions to let NPCs spawn facing in random directions
2021-03-22 05:59:20 +08:00
else
{
0.99.4d Added new option in UOX.INI under [settings] section: MAPDIFFSENABLED=0/1 // If enabled, server will attempt to load diff files, and send "Enable Map-diff files" packet to client to also load these. Disabled by default. Server no longer loads map/statics diff files by default, nor does it send packet to client to request loading these files, as only client versions below 7.0.8.2 will actively load these files. Can be re-enabled with new UOX.INI setting mentioned above! Fixed incorrect ID for gargish dagger in CHandleCombat::getWeaponType() Added missing weapon entries in CHandleCombat::getWeaponType(): bladed whip, barbed whip, spiked whip, gargish talwar Fixed an issue that would show the end part of some tiledata names as garbled text instead of cutting off the text(!) at 20 characters Fixed an issue with advanced character creation template when using ClassicUO client, which sends a profession value of 255 instead of 0 when no profession template has been selected. Fixed an issue where clones of NPCs that can split in combat didn't get the NPC flag correctly set Guild titles are now removed for players who leave their guilds Enabled closing some hard-coded gump menus using right-click (howto, guild, towns, wholist, addmenu, craftmenu, info) Fixed an issue where adding base items using 'add [itemID] would sometimes get false positive hits from harditems.dfn, depending on the length of the itemID Fixed an issue where items added using 'add [itemID] would not get names applied properly from harditems.dfn Item/NPC DFN tag GET can now inherit a random parent by adding additional values separated by spaces. Syntax: GET=parent1 parent2 parent3 (etc) Fixed an issue where NPC backpacks would not have the max item capacity set properly Added new properties for CItem objects (also exposed as JS Item Properties): maxRange // max distance a ranged weapon can fire at (replaces ARCHERRANGE ini setting) baseRange // base distance throwing weapons (when implemented) can be used at Added support for new Item DFN tag that replaces global UOX.INI setting ARCHERRANGE: MAXRANGE=# // Specifies max range of ranged weapon Added support for new Item/NPC DFN tags to support randomizing elemental resistances: RESISTFIRE=#/# # // Set NPC's poison resistance; fixed or random value RESISTCOLD=#/# # // Set NPC's poison resistance; fixed or random value RESISTLIGHTNING=#/# # // Set NPC's poison resistance; fixed or random value RESISTPOISON=#/# # // Set NPC's poison resistance; fixed or random value Added support for two new DFN tags in dfndata/race/races.dfn that can be used to allow/ban lists of equipment for specific races ALLOWEQUIPLIST=# BANEQUIPLIST=# Added support for new section in dfndata/race/races.dfn - [EQUIPLIST #], which can be used to define lists of equipment that is whitelisted or banned for specific races. Fixed a bug that would report incorrect weight in tooltips for Item/NPC spawner objects ScriptSections are now reapplied for items bought by players from NPC vendors Fixed an issue where players could drop an item on the ground and other players would still see the item after it was picked up, because of a failed distance check vs old location coordinates (in pack) instead of vs current location on ground Fixed a bug with players being able to use last-target macro to target objects picked up and held by other players on their cursor Updated all references to "devinelock" to be "divinelock" instead - this includes the name of the JS Item property Fixed house commands triggering (useless) targeting cursors for players onboard boats Changed default statcap in UOX.INI from 325 to 225 Fixed a out-of-range error for players attempting to combine ore inside their own backpack Fixed various issues with distance checks and container checks when using/target objects Added optional 4th "hue" parameter to AddGump JS method Added JS Function to get total amount of accounts on server - GetAccountCount() Added JS Function to get total amount of players online - GetPlayerCount() onSwing JS Event can now trigger in scripts attached to items, not just items attached to characters Added some JS Functions to expose some hard-coded constants to JS scripts: BASEITEMSERIAL() // Base item serial INVALIDSERIAL() // Invalid serial INVALIDID() // Invalid ID INVALIDCOLOUR() // Invalid colour Fixed an issue where JS character property .colour would modify origSkin property instead of colour Fixed an issue where JS character property .guildTitle returned the name of the character instead of the guild title Character JS property .poison can now also be used to set a character's poisoned level, not just read it Exposed Item property to JS engine: .ac // armour class for item (0-128). Primarily used for setting race-restrictions for equippable items, i.e. race X cannot equip items of armour class Y. .def // defensive value of item (Physical resistance post-AoS, AR in older UO) // NOTE: The following properties don't actually do anything yet, but can still be used in custom JS scripts if desired .resistCold // Cold resistance of item 0-1000, where 1000 equals 100.0% .resistHeat // Heat/Fire resistance of item 0-1000, where 1000 equals 100.0% .resistLight // Light resistance of item 0-1000, where 1000 equals 100.0% .resistLightning // Energy/Lightning resistance of item 0-1000, where 1000 equals 100.0% .resistPoison // Poison resistance of item 0-1000, where 1000 equals 100.0% .resistRain // Rain resistance of item 0-1000, where 1000 equals 100.0% .resistSnow // Snow resistance of item 0-1000, where 1000 equals 100.0% .damageHeat // Weapon deals Heat/Fire elemental damage (true/false) .damageCold // Weapon deals Cold elemental damage (true/false) .damageLight // Weapon deals Light elemental damage (true/false) .damageLightning // Weapon deals Lightning elemental damage (true/false) .damagePoison // Weapon deals Poison elemental damage (true/false) .damageRain // Weapon deals Rain/Water elemental damage (true/false) .damageSnow // Weapon deals Snow/Ice elemental damage (true/false) Added new UOX.INI setting under [server] to enable/disable shard response to ConnectUO server polling (disabled by default) Sub-commands are no longer included when registering packets to be overloaded via RegisterPacket function, as that part was never fully implemented. Packet-hook scripts can be setup for specific packet IDs, but any sub-command checking will need to be done in the script itself JS Packet Method GetDWord() now uses JS_NewNumberValue instead of INT_TO_JSVAL to read from the socket buffer, to better handle large numbers, which could previously be returned with wrong values. JS Function CalcItemFromSer() now uses a JS_GetStringBytes() and str_value() combo instead of JSVAL_TO_INT() to read the data provided in the function argument. This allows JS scripts to provide item serials to the function directly without needing to split it into four parts first (though that still works) Fixed issue where JS properties for multis didn't always return correct values The 'set command can now be used to set the armour class of items ('set ac #) Reimplemented 'tweak command in JS engine (js/commands/targeting/tweak.js) - can be used to view and modify properties of characters, character skills, items, multis and regions (target ground) Added placeholder packet-hook script (js/server/network/0xf1_connectUoServerPoll.js) to handle responses to ConnectUO server polling. By default this script does nothing, but serves as a placeholder for drop-in replacement scripts generated specifically for each shard by the ConnectUO service. Updated some commands to support an alternate STATIC keyword (can also be ommitted) to add base items: 'add static itemID 'tile static itemID Updated some commands with support for randomization. Provided itemID will be randomized based on provided rndValue: /js/commands/targeting/add.js: 'add itemID rndValue cmdtable.cpp and targeting.cpp: 'tile itemID rndValue 'tile itemID x1 x2 y1 y2 z rndValue Updated js/commands/custom/repeatingcmds.js to support 'm delete as an alias for 'rremove Added 'props as an alias for the 'tweak command Added 'teleport as an alias for the 'tele command (js/commands/targeting/tele.js) Added 'shavehair and 'shavebeard as aliases for 'kill hair and 'kill beard (js/commands/targeting/kill.js) Added 'noinvul and 'mortal aliases for the 'invul false command (js/commands/custom/misc-cmds.js) Added 'immortal and 'invul (without parameter) as aliases for the 'invul true command Added 'bringtopack as an alias of 'movetobag command (js/commands/targeting/movetobag.js) Updated check for cancelling of target cursor in various JS scripts Minor updates to various JS scripts Fixed issue where some item definitions in dfndata/harditems/harditems.dfn and dfndata/items/building/lighting.dfn used comma instead of space as delimiter for the VALUE tag, which thus never got applied Updated all NPC definitions to let NPCs spawn facing in random directions
2021-03-22 05:59:20 +08:00
*vp = JSVAL_NULL;
}
Housing Revamp and more Updated JS SysMessage function to accept up to 10 extra, optional arguments, which can be used with dictionary messages that require additional parameters like %s or %i Added new type of house privilege in cMultiObj.cpp to keep track of friends of the multi - HOUSEPRIV_FRIEND - which is stored during worldsaves as one or more Friend=<player serial> tags in house.wsc Added new type of house privilege in cMultiObj.cpp to keep track of guests of the multi - HOUSEPRIV_GUEST - which is stored during worldsaves as one or more Guest=<player serial> tags in house.wsc When items are created for houses upon house placement, a reference to the multi's serial is now stored in the house sign's MORE property to allow easier tracking of which house a particular sign belongs to Added tracking of new, persistent properties for houses via cMultiObj.cpp/h: lockdowns, secure containers, vendors, guests, friends, owners, ban location, public status, number of visits, timestamps Added a multitude of new methods in cMultiObj.cpp/h to assist in improving the functionality of houses Added new tags for houses in house.dfn (default values applied if tag not specified): MAXSECURECONTAINERS=4 - Max amount of secure containers allowed in a multi MAXLOCKDOWNS=256 - Max amount of lockdowns allowed in a multi MAXVENDORS=10 - Max amount of vendors allowed in a multi MAXBANS=50 - Max amount of bans in a multi's ban list MAXFRIENDS=50 - Max amount of friends in a multi's friend list MAXGUESTS=50 - Max amount of guests in a multi's guest list MAXOWNERS=8 - Max amount of owners and co-owners in a multi's owner list MAXTRASHCONTAINERS=1 - Max amount of trash containers allowed in multi SCRIPT=<scriptID> - Assign a JS script-ID directly to a multi FRONTDOOR - indicates that a door is the front door of a house. Cannot be locked in public houses! INTERIORDOOR - indicates that a door is an interior door of a house. Can be locked in public houses. BANX - Location X offset for multi's ban location, if not used, will try to use SE corner of multi instead BANY - Location Y offset for multi's ban location, if not used, will try to use SE corner of multi instead Added JS Event: onHouseCommand( tSock, multiObj, cmdID ) - For handling spoken house commands via JS scripts attached to multi. Updated JS Events: onEntrance() - can now trigger both for multi being entered and/or object entering onLeaving() - can now trigger both for multi being left and/or object entering onSpeech() - can now also trigger for items (in addition to chars) with event & script attached, if UOX.INI setting ITEMSDETECTSPEECH is enabled Added JS Multi methods: .IsBoat() - Returns whether the item (or multi) is a boat .IsOwner( playerToCheck ) - Returns whether a player is the owner of a multi .IsOnOwnerList( playerToCheck ) - Returns whether a player is on the (co-)owner list of a multi .IsOnFriendList( playerToCheck ) - Returns whether a player is on the friend list of a multi .IsOnGuestList( playerToCheck ) - Returns whether a player is on the guest list of a multi .IsOnBanList( playerToCheck ) - Returns whether a player is on the ban list of a multi .AddToFriendList( playertoAdd ) - Adds player to the friend list of a multi .RemoveFromFriendList( playertoRemove ) - Removes player from the friend list of a multi .AddToGuestList( playertoAdd ) - Adds player to the guest list of a multi .RemoveFromGuestList( playertoRemove ) - Removes player from the guest list of a multi .ClearOwnerList() - Clears all entries from a multi's (co-)owner list .ClearFriendList() - Clears all entries from a multi's friend list .ClearGuestList() - Clears all entries from a multi's guest list .ClearBanList() - Clears all entries from a multi's ban list .SecureContainer( itemToSecure ) - Secures a container in a multi .UnsecureContainer( itemToUnsecure ) - Unsecures a container in a multi .IsSecureContainer( itemToCheck ) - Checks if specified item is a secure container in a multi .LockDownItem( itemToLockDown) - Locks down an item in a multi .ReleaseItem( itemToRelease ) - Releases a locked down item in a multi .KillKeys() - Deletes ALL keys associated with a multi .AddTrashCont( itemToAdd ) - Add trash container to multi's list of trash containers .RemoveTrashCont( itemToRemove ) - Remove trash container from multi's list of trash containers Added JS Item (Multi only) properties: .lockdowns - Get the number of lockdowns in a multi .maxLockdowns - Get/Set the max number of lockdowns allowed in a multi .secureContainers - Get the number of secure containers in a multi .maxSecureContainers - Get/Set the max number of secure containers allowed in a multi .trashContainers - Get the number of trash containers in a multi .maxTrashContainers - Get/Set the max number of trash containers allowed in a multi .friends - Get the number of friends in a multi's friend list .maxFriends - Get/Set the max number of friends allowed in a multi's friend list .guests - Get the number of guests in a multi's guest list .maxGuests - Get/Set the max number of guests allowed in a multi's guest list .owners - Get the number of owners in a multi's owner list .maxOwners - Get/Set the max number of owners allowed in a multi's owner list .bans - Get the number of banned players in a multi's ban list .maxBans - Get/Set the max number of banned players allowed in a multi's ban list .vendors - Get the number of player vendors in a multi .maxVendors - Get the max number of player vendors allowed in a multi .deed - Get the item sectionID for deed used to place multi .isPublic - Get/Set the private/public state of a multi .buildTimestamp - Get the timestamp for when the house was originally placed .tradeTimestamp - Get the timestamp for when the house was last traded to another player .banX - Get/Set the ban location X offset for the multi .banY - Get/Set the ban location Y offset for the multi Added JS Character properties: .multi = Get/Set the multi object the character is in .accountNum = Get the account number the character belongs to .housesOwned = Get a count of houses owned by the character .housesCoOwned = Get a count of houses co-owned by the character Updated JS cBaseObject Methods .FirstItem(), .NextItem() and .FinishedItems() to also support iterating through items in multis Updated JS multi Methods .FirstChar(), .NextChar() and .FinishedChars() to support an additional parameter to specify what kind of characters to loop through: "default" or no parameter - all characters inside the multi "owner" - players on multi's owner list "friend" - players on multi's friend list "guest" - players on multi's guest list "banned" - players on multi's ban list Added new INI tags to a new section of uox.ini called [houses] DECAYTIMERINHOUSE=3600 // Decay timer in seconds for non-locked down items inside houses PROTECTPRIVATEHOUSES=1 // Toggles whether private houses will automatically boot unauthorized visitors (1) or not (0) TRACKHOUSESPERACCOUNT=1 // Toggles whether to track (and restrict) house ownership per account (1) or per character (0) MAXHOUSESOWNABLE=1 // Specifies the max amount of houses a player can own per account/char, depending on how house ownership is tracked MAXHOUSESCOOWNABLE=10 // Specifies the max amount of houses a player can co-own per character CANOWNANDCOOWNHOUSES=1 // Toggles whether players can own and co-own houses at the same time COOWNHOUSESONSAMEACCOUNT=1 // Toggles whether characters on same account as house owner will be treated as co-owners Added new INI tags in [settings] section of uox.ini: ITEMSDETECTSPEECH=0 // If enabled, server will search for nearby items with onSpeech JS event running whenever a character speaks. Disabled by default. MAXPLAYERPACKITEMS=125 // Defines max item capacity for player (and NPC) backpacks. Defaults to 125. Moved most of the existing house functionality to JS and expanded upon it to reach feature parity with houses in regular UO around Publish 15/16, with various extras thrown in for good measure and all functionality being customizable: js/server/house/house.js (15000) - handles detection of house commands and characters entering/leaving houses js/server/house/houseSign.js (15001) - contains and handles all house-related gumps/menus and what is shown when players interact with house sign js/server/house/houseCommands.js (15002) - handles functionality of house commands and other functionality such as transfer of ownership, demolishing house, etc. js/server/house/houseDeed.js (15003) - handles initial rules that allow/disallow placement of additional houses for players All house-related menus now fully handled through JS All house commands and other functionality now fully handled through JS Removed redundant hard-coded house functionality Implemented Co-owners, friends, guests for houses, with access rules in place for entry, lockdowns, house commands, etc. Implemented Private and Public houses Implemented Secure Containers and Trash Barrels Definable max lockdowns, secure containers, player vendors, bans, friends, guests, owners, trash containers and more - per house type JS scripts can now be attached directly to houses Doors in houses can be marked as front doors or interior doors, and will be treated differently with regards to private and public houses Added new item to dfndata/items/containers/misc.dfn - [trashbarrel] Added new JS script (js/items/trashbarrel.js) with trash barrel functionality for houses. Trash barrels that are marked as secure containers are only accessible by owners, co-owners and friends of the house. Various options available at top of script. Updated js/items/axe.js to support chopping up trash barrels and house add-ons in houses owned by the player Fixed an issue with house doors being left behind after demolishing houses while their doors were open Fixed an issue where GMs could be banned from player houses Added Line of Sight checks to speech, to give players some privacy in their own homes Updated house placement code to more accurately check for other multis, dynamic and static objects when placing houses; now requires free space around each house that cannot be blocked by other houses or items that can block player movement, and disallows placement of houses on roads Updated house placement code to move characters blocking house placement to SE corner of the house Updated house placement code to disallow placing houses in guarded regions, or in dungeons Added new DFN tag for regions to enable/disable player houses in specific regions: HOUSING=0/1 Added new region (247) that covers path to Valley of Eodon in Felucca Added new region (248) that covers Valley of Eodon in Ter-Mur, with player housing disabled Added new region (249) that covers entire T2A lands, with player housing disabled Updated SPACEX and SPACEY values for all houses in dfndata/house/house.dfn to match updated house placement code Added new JS property to Regions that can be used to determine or change state of player housing in a region: .canPlaceHouse() Updated rules for usage of dye tubs to dye locked down items; now only house owners or co-owners may dye locked down items Updated rules for usage of the following locked down items in a house, which are now only usable by house owners and co-owners Dyes, Guildstone Deeds, Recall Runes (renaming), Rename Deeds, Townstone Deeds, House Deeds, Boat Models, Player Vendor Deeds, Ore, Hair Dye Updated rules for usage of the following locked down items in a house, which are now only usable by house owners, co-owners and friends: Keys, Dye Tubs, Magic Scrolls, Fireworks Wands, Magic Wands, Smithing Tools, Mining Tools, Fishing Poles Updated item lockdown rules to allow locking down (and releasing) items in a container as long as the container is locked down, and to only allow releasing a locked down container if it's empty of locked down items Updated item lockdown rules to only allow locking down movement-blocking items further than 2 tiles away from doors Updated rules for releasing items in houses - now the house owner can release any locked down items, co-owners can release items locked down by themselves or by friends, while friends can release only items locked down by themselves Added some feedback to player about why their attempted house placement failed Items added by GMs directly into multis will now decay based on the house-specific decay timer instead of the regular one Fixed an issue that could cause items to almost instantly decay after being released from lockdown in a house Placing house add-ons now properly takes into account SPACEX and SPACEY values when checking if they can fit in selected area of houses Re-added SPACEX and SPACEY values for Pentagram and Loom house add-ons House add-ons can now be converted back into house add-on deeds by chopping them with an axe Added new item type - IT_HOUSEADDON (201) - used by house add-ons placed in player houses Fixed a bug where keys would stop working after being added to a keyring, and would turn into blank keys upon release from the keyring Added visitor count for public player houses, which keeps track of how many visits a public house has received, with each player counted max 1 time every 24 hours Fixed an issue with FindPlayersInOldVisrange() where it didn't take into account that players could see buildings further away than the standard update range. This could cause players to see ghost images of buildings if they were at the "right" distance when the building was being demolished Added NODECAY tag to all signs and doors in dfndata/house/house.dfn Added FRONTDOOR or INTERIORDOOR (as appropriate) to all doors in dfndata/house/house.dfn Added BANX and BANY to specify ban location for some houses in dfndata/house/house.dfn instead of relying on finding SE corner automatically Implemented strongboxes (js/server/house/strongbox.js) for co-owners of a house, which can be placed with the house command "i wish to place a strongbox". Max capacity is 25 items Updated 'REMOVE command to take an optional parameter - itemID. If supplied, the command will remove all items with this itemID from a targeted container Fixed a bug when checking if dynamic items were blocking valid spawn locations for NPCs, some function arguments were in the wrong order! Improved code that finds valid spawn locations for items and NPCs spawned via spawn regions. As server gradually builds up lists of valid spawn locations per region over time, it will start using these lists more often, rather than always look for brand new spawn locations. Fixed a bug with CMulHandler::CheckStaticFlag() that prevented NPCs from spawning inside buildings with no static floors! Fixed an issue with repeating commands that prevented GMs from being able to cancel them when using the ClassicUO client Exposed character property .accountNum to JS engine Extended CDataList class to include a Clear() method for clearing lists Updated JS File method .Open() to support an optional, third argument - subFolderName - that defines in which sub-folder of UOX3/shared/ to store/look for a file. If no third argument is supplied, UOX3 will default to using the shared folder itself. Updated JS File method .Length() to return a value of -1 for files that don't exist Added new code function, exposed to JS engine with same parameters, which simply checks if a given tile ID has a specific flag bool CheckTileFlag( UI16 itemID, TILEFLAG flagToCheck ) Added JS function used to find the root container of an item (if any) FindRootContainer( itemSerial ) FindRootContainer( item ) Added new JS function that allows deleting files from UOX3/shared/ folder or subfolders of shared folder. If no subFolderName is provided, looks for file directly in shared folder itself. Restrictions on file- and folder-names apply. bool DeleteFile( fileName, subFolderName ) Added new JS functions for checking if a specific client or server feature is enabled. See documentation for full list of client/server features. GetClientFeature( bitNum ) // Returns true if specified client feature is enabled on server GetServerFeature( bitNum ) // Returns true if specified server feature is enabled on server Added new JS function for returning the value of almost any server setting from UOX.INI GetServerSetting( settingNameInDoubleQuotes ) Updated JS function DoesDynamicBlock() with two new parameters - checkOnlyMultis and checkOnlyNonMultis Updated JS function DoesMapBlock() with two new parameters - checkMultiPlacement and checkForRoad Fixed an issue where a LoS check would prevent players from accessing containers in their own backpack Added new functions in findfuncs.cpp to make it easier to find items near another object or location: findNearbyItems( object, distance ) findNearbyItems( x, y, worldNumber, instanceID, distance ) Added new Item property - maxItems - used by containers to determine their max item capacity Added new Item property - totalItemCount - used to get total item count in a container (including sub-containers) Added check for max item capacity when creating new items that are added to a character's backpack - items will be created below character's feet if backpack is full! Added new DFN tag for items, used by containers to determine item capacity for a given container: MAXITEMS=# // 125 is the default for all containers if not set Added new JS Item properties: .maxItems // gets/sets item capacity for a given container .totalItemCount // gets total item count in a container, including sub-containers Updated item tooltips for containers to show accurate total item count, as well as to display max item capacity Fixed a bug where picking up items from a non-locked down pile of items on the floor inside a multi could cause the remaining pile to be seen as no longer inside the multi, disallowing locking it back down and causing it to decay based on regular decay timer instead of house-specific one Updated JS command set to allow setting poison-level on items ('set poison #) and hunger-level on characters ('set hunger #) Fixed an issue with js/item/food.js that prevented poisoned food from poisoning characters when eaten Fixed an issue with js/skill/poisoning.js that prevented players from poisoning food! Updated various JS scripts and hardcoded targeting functions to disallow the targeting of locked down resources using skills and tools Updated JS Method TextMessage() to support three extra, optional parameters. Note that if one optional parameter is included, all preceding optional parameters are also required! speechTarget - What kind of target is this message intended for? 0 - Only visible for sender and receiver of message 1 - Visible to all players in range 2 - Visible to all NPCs and players in range 3 - Visible to all PCs everywhere + NPCs in range 4 - Visible to all PCs everywhere (broadcast) 5 - Only visible for the receiver of the message speechTargetSerial - The serial of the receiver of the message, used if speechTarget is 0 or 5 speechFontType - The type of font to display the text in. Defaults to normal. 0 - Bold 1 - Normal with shadow 2 - Bold with shadow 3 - Normal 4 - Gothic 5 - Italic 6 - Small, dark 7 - Colourful 8 - Runic (only works with CAPS) 9 - Small, light Added timestamp to worldsaves in console, to make it easier to see when a particular world-save was done Added info about compiler/environment displayed at the top of the UOX3 console during startup Updated dictionary files with new messages primarily related to housing
2020-11-04 02:00:37 +08:00
break;
case CIP_SECURECONTAINERS:
if( gPriv->GetObjType() == OT_MULTI )
{
*vp = INT_TO_JSVAL(( static_cast<CMultiObj *>( gPriv )->GetSecureContainerCount() ));
}
0.99.4d Added new option in UOX.INI under [settings] section: MAPDIFFSENABLED=0/1 // If enabled, server will attempt to load diff files, and send "Enable Map-diff files" packet to client to also load these. Disabled by default. Server no longer loads map/statics diff files by default, nor does it send packet to client to request loading these files, as only client versions below 7.0.8.2 will actively load these files. Can be re-enabled with new UOX.INI setting mentioned above! Fixed incorrect ID for gargish dagger in CHandleCombat::getWeaponType() Added missing weapon entries in CHandleCombat::getWeaponType(): bladed whip, barbed whip, spiked whip, gargish talwar Fixed an issue that would show the end part of some tiledata names as garbled text instead of cutting off the text(!) at 20 characters Fixed an issue with advanced character creation template when using ClassicUO client, which sends a profession value of 255 instead of 0 when no profession template has been selected. Fixed an issue where clones of NPCs that can split in combat didn't get the NPC flag correctly set Guild titles are now removed for players who leave their guilds Enabled closing some hard-coded gump menus using right-click (howto, guild, towns, wholist, addmenu, craftmenu, info) Fixed an issue where adding base items using 'add [itemID] would sometimes get false positive hits from harditems.dfn, depending on the length of the itemID Fixed an issue where items added using 'add [itemID] would not get names applied properly from harditems.dfn Item/NPC DFN tag GET can now inherit a random parent by adding additional values separated by spaces. Syntax: GET=parent1 parent2 parent3 (etc) Fixed an issue where NPC backpacks would not have the max item capacity set properly Added new properties for CItem objects (also exposed as JS Item Properties): maxRange // max distance a ranged weapon can fire at (replaces ARCHERRANGE ini setting) baseRange // base distance throwing weapons (when implemented) can be used at Added support for new Item DFN tag that replaces global UOX.INI setting ARCHERRANGE: MAXRANGE=# // Specifies max range of ranged weapon Added support for new Item/NPC DFN tags to support randomizing elemental resistances: RESISTFIRE=#/# # // Set NPC's poison resistance; fixed or random value RESISTCOLD=#/# # // Set NPC's poison resistance; fixed or random value RESISTLIGHTNING=#/# # // Set NPC's poison resistance; fixed or random value RESISTPOISON=#/# # // Set NPC's poison resistance; fixed or random value Added support for two new DFN tags in dfndata/race/races.dfn that can be used to allow/ban lists of equipment for specific races ALLOWEQUIPLIST=# BANEQUIPLIST=# Added support for new section in dfndata/race/races.dfn - [EQUIPLIST #], which can be used to define lists of equipment that is whitelisted or banned for specific races. Fixed a bug that would report incorrect weight in tooltips for Item/NPC spawner objects ScriptSections are now reapplied for items bought by players from NPC vendors Fixed an issue where players could drop an item on the ground and other players would still see the item after it was picked up, because of a failed distance check vs old location coordinates (in pack) instead of vs current location on ground Fixed a bug with players being able to use last-target macro to target objects picked up and held by other players on their cursor Updated all references to "devinelock" to be "divinelock" instead - this includes the name of the JS Item property Fixed house commands triggering (useless) targeting cursors for players onboard boats Changed default statcap in UOX.INI from 325 to 225 Fixed a out-of-range error for players attempting to combine ore inside their own backpack Fixed various issues with distance checks and container checks when using/target objects Added optional 4th "hue" parameter to AddGump JS method Added JS Function to get total amount of accounts on server - GetAccountCount() Added JS Function to get total amount of players online - GetPlayerCount() onSwing JS Event can now trigger in scripts attached to items, not just items attached to characters Added some JS Functions to expose some hard-coded constants to JS scripts: BASEITEMSERIAL() // Base item serial INVALIDSERIAL() // Invalid serial INVALIDID() // Invalid ID INVALIDCOLOUR() // Invalid colour Fixed an issue where JS character property .colour would modify origSkin property instead of colour Fixed an issue where JS character property .guildTitle returned the name of the character instead of the guild title Character JS property .poison can now also be used to set a character's poisoned level, not just read it Exposed Item property to JS engine: .ac // armour class for item (0-128). Primarily used for setting race-restrictions for equippable items, i.e. race X cannot equip items of armour class Y. .def // defensive value of item (Physical resistance post-AoS, AR in older UO) // NOTE: The following properties don't actually do anything yet, but can still be used in custom JS scripts if desired .resistCold // Cold resistance of item 0-1000, where 1000 equals 100.0% .resistHeat // Heat/Fire resistance of item 0-1000, where 1000 equals 100.0% .resistLight // Light resistance of item 0-1000, where 1000 equals 100.0% .resistLightning // Energy/Lightning resistance of item 0-1000, where 1000 equals 100.0% .resistPoison // Poison resistance of item 0-1000, where 1000 equals 100.0% .resistRain // Rain resistance of item 0-1000, where 1000 equals 100.0% .resistSnow // Snow resistance of item 0-1000, where 1000 equals 100.0% .damageHeat // Weapon deals Heat/Fire elemental damage (true/false) .damageCold // Weapon deals Cold elemental damage (true/false) .damageLight // Weapon deals Light elemental damage (true/false) .damageLightning // Weapon deals Lightning elemental damage (true/false) .damagePoison // Weapon deals Poison elemental damage (true/false) .damageRain // Weapon deals Rain/Water elemental damage (true/false) .damageSnow // Weapon deals Snow/Ice elemental damage (true/false) Added new UOX.INI setting under [server] to enable/disable shard response to ConnectUO server polling (disabled by default) Sub-commands are no longer included when registering packets to be overloaded via RegisterPacket function, as that part was never fully implemented. Packet-hook scripts can be setup for specific packet IDs, but any sub-command checking will need to be done in the script itself JS Packet Method GetDWord() now uses JS_NewNumberValue instead of INT_TO_JSVAL to read from the socket buffer, to better handle large numbers, which could previously be returned with wrong values. JS Function CalcItemFromSer() now uses a JS_GetStringBytes() and str_value() combo instead of JSVAL_TO_INT() to read the data provided in the function argument. This allows JS scripts to provide item serials to the function directly without needing to split it into four parts first (though that still works) Fixed issue where JS properties for multis didn't always return correct values The 'set command can now be used to set the armour class of items ('set ac #) Reimplemented 'tweak command in JS engine (js/commands/targeting/tweak.js) - can be used to view and modify properties of characters, character skills, items, multis and regions (target ground) Added placeholder packet-hook script (js/server/network/0xf1_connectUoServerPoll.js) to handle responses to ConnectUO server polling. By default this script does nothing, but serves as a placeholder for drop-in replacement scripts generated specifically for each shard by the ConnectUO service. Updated some commands to support an alternate STATIC keyword (can also be ommitted) to add base items: 'add static itemID 'tile static itemID Updated some commands with support for randomization. Provided itemID will be randomized based on provided rndValue: /js/commands/targeting/add.js: 'add itemID rndValue cmdtable.cpp and targeting.cpp: 'tile itemID rndValue 'tile itemID x1 x2 y1 y2 z rndValue Updated js/commands/custom/repeatingcmds.js to support 'm delete as an alias for 'rremove Added 'props as an alias for the 'tweak command Added 'teleport as an alias for the 'tele command (js/commands/targeting/tele.js) Added 'shavehair and 'shavebeard as aliases for 'kill hair and 'kill beard (js/commands/targeting/kill.js) Added 'noinvul and 'mortal aliases for the 'invul false command (js/commands/custom/misc-cmds.js) Added 'immortal and 'invul (without parameter) as aliases for the 'invul true command Added 'bringtopack as an alias of 'movetobag command (js/commands/targeting/movetobag.js) Updated check for cancelling of target cursor in various JS scripts Minor updates to various JS scripts Fixed issue where some item definitions in dfndata/harditems/harditems.dfn and dfndata/items/building/lighting.dfn used comma instead of space as delimiter for the VALUE tag, which thus never got applied Updated all NPC definitions to let NPCs spawn facing in random directions
2021-03-22 05:59:20 +08:00
else
{
0.99.4d Added new option in UOX.INI under [settings] section: MAPDIFFSENABLED=0/1 // If enabled, server will attempt to load diff files, and send "Enable Map-diff files" packet to client to also load these. Disabled by default. Server no longer loads map/statics diff files by default, nor does it send packet to client to request loading these files, as only client versions below 7.0.8.2 will actively load these files. Can be re-enabled with new UOX.INI setting mentioned above! Fixed incorrect ID for gargish dagger in CHandleCombat::getWeaponType() Added missing weapon entries in CHandleCombat::getWeaponType(): bladed whip, barbed whip, spiked whip, gargish talwar Fixed an issue that would show the end part of some tiledata names as garbled text instead of cutting off the text(!) at 20 characters Fixed an issue with advanced character creation template when using ClassicUO client, which sends a profession value of 255 instead of 0 when no profession template has been selected. Fixed an issue where clones of NPCs that can split in combat didn't get the NPC flag correctly set Guild titles are now removed for players who leave their guilds Enabled closing some hard-coded gump menus using right-click (howto, guild, towns, wholist, addmenu, craftmenu, info) Fixed an issue where adding base items using 'add [itemID] would sometimes get false positive hits from harditems.dfn, depending on the length of the itemID Fixed an issue where items added using 'add [itemID] would not get names applied properly from harditems.dfn Item/NPC DFN tag GET can now inherit a random parent by adding additional values separated by spaces. Syntax: GET=parent1 parent2 parent3 (etc) Fixed an issue where NPC backpacks would not have the max item capacity set properly Added new properties for CItem objects (also exposed as JS Item Properties): maxRange // max distance a ranged weapon can fire at (replaces ARCHERRANGE ini setting) baseRange // base distance throwing weapons (when implemented) can be used at Added support for new Item DFN tag that replaces global UOX.INI setting ARCHERRANGE: MAXRANGE=# // Specifies max range of ranged weapon Added support for new Item/NPC DFN tags to support randomizing elemental resistances: RESISTFIRE=#/# # // Set NPC's poison resistance; fixed or random value RESISTCOLD=#/# # // Set NPC's poison resistance; fixed or random value RESISTLIGHTNING=#/# # // Set NPC's poison resistance; fixed or random value RESISTPOISON=#/# # // Set NPC's poison resistance; fixed or random value Added support for two new DFN tags in dfndata/race/races.dfn that can be used to allow/ban lists of equipment for specific races ALLOWEQUIPLIST=# BANEQUIPLIST=# Added support for new section in dfndata/race/races.dfn - [EQUIPLIST #], which can be used to define lists of equipment that is whitelisted or banned for specific races. Fixed a bug that would report incorrect weight in tooltips for Item/NPC spawner objects ScriptSections are now reapplied for items bought by players from NPC vendors Fixed an issue where players could drop an item on the ground and other players would still see the item after it was picked up, because of a failed distance check vs old location coordinates (in pack) instead of vs current location on ground Fixed a bug with players being able to use last-target macro to target objects picked up and held by other players on their cursor Updated all references to "devinelock" to be "divinelock" instead - this includes the name of the JS Item property Fixed house commands triggering (useless) targeting cursors for players onboard boats Changed default statcap in UOX.INI from 325 to 225 Fixed a out-of-range error for players attempting to combine ore inside their own backpack Fixed various issues with distance checks and container checks when using/target objects Added optional 4th "hue" parameter to AddGump JS method Added JS Function to get total amount of accounts on server - GetAccountCount() Added JS Function to get total amount of players online - GetPlayerCount() onSwing JS Event can now trigger in scripts attached to items, not just items attached to characters Added some JS Functions to expose some hard-coded constants to JS scripts: BASEITEMSERIAL() // Base item serial INVALIDSERIAL() // Invalid serial INVALIDID() // Invalid ID INVALIDCOLOUR() // Invalid colour Fixed an issue where JS character property .colour would modify origSkin property instead of colour Fixed an issue where JS character property .guildTitle returned the name of the character instead of the guild title Character JS property .poison can now also be used to set a character's poisoned level, not just read it Exposed Item property to JS engine: .ac // armour class for item (0-128). Primarily used for setting race-restrictions for equippable items, i.e. race X cannot equip items of armour class Y. .def // defensive value of item (Physical resistance post-AoS, AR in older UO) // NOTE: The following properties don't actually do anything yet, but can still be used in custom JS scripts if desired .resistCold // Cold resistance of item 0-1000, where 1000 equals 100.0% .resistHeat // Heat/Fire resistance of item 0-1000, where 1000 equals 100.0% .resistLight // Light resistance of item 0-1000, where 1000 equals 100.0% .resistLightning // Energy/Lightning resistance of item 0-1000, where 1000 equals 100.0% .resistPoison // Poison resistance of item 0-1000, where 1000 equals 100.0% .resistRain // Rain resistance of item 0-1000, where 1000 equals 100.0% .resistSnow // Snow resistance of item 0-1000, where 1000 equals 100.0% .damageHeat // Weapon deals Heat/Fire elemental damage (true/false) .damageCold // Weapon deals Cold elemental damage (true/false) .damageLight // Weapon deals Light elemental damage (true/false) .damageLightning // Weapon deals Lightning elemental damage (true/false) .damagePoison // Weapon deals Poison elemental damage (true/false) .damageRain // Weapon deals Rain/Water elemental damage (true/false) .damageSnow // Weapon deals Snow/Ice elemental damage (true/false) Added new UOX.INI setting under [server] to enable/disable shard response to ConnectUO server polling (disabled by default) Sub-commands are no longer included when registering packets to be overloaded via RegisterPacket function, as that part was never fully implemented. Packet-hook scripts can be setup for specific packet IDs, but any sub-command checking will need to be done in the script itself JS Packet Method GetDWord() now uses JS_NewNumberValue instead of INT_TO_JSVAL to read from the socket buffer, to better handle large numbers, which could previously be returned with wrong values. JS Function CalcItemFromSer() now uses a JS_GetStringBytes() and str_value() combo instead of JSVAL_TO_INT() to read the data provided in the function argument. This allows JS scripts to provide item serials to the function directly without needing to split it into four parts first (though that still works) Fixed issue where JS properties for multis didn't always return correct values The 'set command can now be used to set the armour class of items ('set ac #) Reimplemented 'tweak command in JS engine (js/commands/targeting/tweak.js) - can be used to view and modify properties of characters, character skills, items, multis and regions (target ground) Added placeholder packet-hook script (js/server/network/0xf1_connectUoServerPoll.js) to handle responses to ConnectUO server polling. By default this script does nothing, but serves as a placeholder for drop-in replacement scripts generated specifically for each shard by the ConnectUO service. Updated some commands to support an alternate STATIC keyword (can also be ommitted) to add base items: 'add static itemID 'tile static itemID Updated some commands with support for randomization. Provided itemID will be randomized based on provided rndValue: /js/commands/targeting/add.js: 'add itemID rndValue cmdtable.cpp and targeting.cpp: 'tile itemID rndValue 'tile itemID x1 x2 y1 y2 z rndValue Updated js/commands/custom/repeatingcmds.js to support 'm delete as an alias for 'rremove Added 'props as an alias for the 'tweak command Added 'teleport as an alias for the 'tele command (js/commands/targeting/tele.js) Added 'shavehair and 'shavebeard as aliases for 'kill hair and 'kill beard (js/commands/targeting/kill.js) Added 'noinvul and 'mortal aliases for the 'invul false command (js/commands/custom/misc-cmds.js) Added 'immortal and 'invul (without parameter) as aliases for the 'invul true command Added 'bringtopack as an alias of 'movetobag command (js/commands/targeting/movetobag.js) Updated check for cancelling of target cursor in various JS scripts Minor updates to various JS scripts Fixed issue where some item definitions in dfndata/harditems/harditems.dfn and dfndata/items/building/lighting.dfn used comma instead of space as delimiter for the VALUE tag, which thus never got applied Updated all NPC definitions to let NPCs spawn facing in random directions
2021-03-22 05:59:20 +08:00
*vp = JSVAL_NULL;
}
Housing Revamp and more Updated JS SysMessage function to accept up to 10 extra, optional arguments, which can be used with dictionary messages that require additional parameters like %s or %i Added new type of house privilege in cMultiObj.cpp to keep track of friends of the multi - HOUSEPRIV_FRIEND - which is stored during worldsaves as one or more Friend=<player serial> tags in house.wsc Added new type of house privilege in cMultiObj.cpp to keep track of guests of the multi - HOUSEPRIV_GUEST - which is stored during worldsaves as one or more Guest=<player serial> tags in house.wsc When items are created for houses upon house placement, a reference to the multi's serial is now stored in the house sign's MORE property to allow easier tracking of which house a particular sign belongs to Added tracking of new, persistent properties for houses via cMultiObj.cpp/h: lockdowns, secure containers, vendors, guests, friends, owners, ban location, public status, number of visits, timestamps Added a multitude of new methods in cMultiObj.cpp/h to assist in improving the functionality of houses Added new tags for houses in house.dfn (default values applied if tag not specified): MAXSECURECONTAINERS=4 - Max amount of secure containers allowed in a multi MAXLOCKDOWNS=256 - Max amount of lockdowns allowed in a multi MAXVENDORS=10 - Max amount of vendors allowed in a multi MAXBANS=50 - Max amount of bans in a multi's ban list MAXFRIENDS=50 - Max amount of friends in a multi's friend list MAXGUESTS=50 - Max amount of guests in a multi's guest list MAXOWNERS=8 - Max amount of owners and co-owners in a multi's owner list MAXTRASHCONTAINERS=1 - Max amount of trash containers allowed in multi SCRIPT=<scriptID> - Assign a JS script-ID directly to a multi FRONTDOOR - indicates that a door is the front door of a house. Cannot be locked in public houses! INTERIORDOOR - indicates that a door is an interior door of a house. Can be locked in public houses. BANX - Location X offset for multi's ban location, if not used, will try to use SE corner of multi instead BANY - Location Y offset for multi's ban location, if not used, will try to use SE corner of multi instead Added JS Event: onHouseCommand( tSock, multiObj, cmdID ) - For handling spoken house commands via JS scripts attached to multi. Updated JS Events: onEntrance() - can now trigger both for multi being entered and/or object entering onLeaving() - can now trigger both for multi being left and/or object entering onSpeech() - can now also trigger for items (in addition to chars) with event & script attached, if UOX.INI setting ITEMSDETECTSPEECH is enabled Added JS Multi methods: .IsBoat() - Returns whether the item (or multi) is a boat .IsOwner( playerToCheck ) - Returns whether a player is the owner of a multi .IsOnOwnerList( playerToCheck ) - Returns whether a player is on the (co-)owner list of a multi .IsOnFriendList( playerToCheck ) - Returns whether a player is on the friend list of a multi .IsOnGuestList( playerToCheck ) - Returns whether a player is on the guest list of a multi .IsOnBanList( playerToCheck ) - Returns whether a player is on the ban list of a multi .AddToFriendList( playertoAdd ) - Adds player to the friend list of a multi .RemoveFromFriendList( playertoRemove ) - Removes player from the friend list of a multi .AddToGuestList( playertoAdd ) - Adds player to the guest list of a multi .RemoveFromGuestList( playertoRemove ) - Removes player from the guest list of a multi .ClearOwnerList() - Clears all entries from a multi's (co-)owner list .ClearFriendList() - Clears all entries from a multi's friend list .ClearGuestList() - Clears all entries from a multi's guest list .ClearBanList() - Clears all entries from a multi's ban list .SecureContainer( itemToSecure ) - Secures a container in a multi .UnsecureContainer( itemToUnsecure ) - Unsecures a container in a multi .IsSecureContainer( itemToCheck ) - Checks if specified item is a secure container in a multi .LockDownItem( itemToLockDown) - Locks down an item in a multi .ReleaseItem( itemToRelease ) - Releases a locked down item in a multi .KillKeys() - Deletes ALL keys associated with a multi .AddTrashCont( itemToAdd ) - Add trash container to multi's list of trash containers .RemoveTrashCont( itemToRemove ) - Remove trash container from multi's list of trash containers Added JS Item (Multi only) properties: .lockdowns - Get the number of lockdowns in a multi .maxLockdowns - Get/Set the max number of lockdowns allowed in a multi .secureContainers - Get the number of secure containers in a multi .maxSecureContainers - Get/Set the max number of secure containers allowed in a multi .trashContainers - Get the number of trash containers in a multi .maxTrashContainers - Get/Set the max number of trash containers allowed in a multi .friends - Get the number of friends in a multi's friend list .maxFriends - Get/Set the max number of friends allowed in a multi's friend list .guests - Get the number of guests in a multi's guest list .maxGuests - Get/Set the max number of guests allowed in a multi's guest list .owners - Get the number of owners in a multi's owner list .maxOwners - Get/Set the max number of owners allowed in a multi's owner list .bans - Get the number of banned players in a multi's ban list .maxBans - Get/Set the max number of banned players allowed in a multi's ban list .vendors - Get the number of player vendors in a multi .maxVendors - Get the max number of player vendors allowed in a multi .deed - Get the item sectionID for deed used to place multi .isPublic - Get/Set the private/public state of a multi .buildTimestamp - Get the timestamp for when the house was originally placed .tradeTimestamp - Get the timestamp for when the house was last traded to another player .banX - Get/Set the ban location X offset for the multi .banY - Get/Set the ban location Y offset for the multi Added JS Character properties: .multi = Get/Set the multi object the character is in .accountNum = Get the account number the character belongs to .housesOwned = Get a count of houses owned by the character .housesCoOwned = Get a count of houses co-owned by the character Updated JS cBaseObject Methods .FirstItem(), .NextItem() and .FinishedItems() to also support iterating through items in multis Updated JS multi Methods .FirstChar(), .NextChar() and .FinishedChars() to support an additional parameter to specify what kind of characters to loop through: "default" or no parameter - all characters inside the multi "owner" - players on multi's owner list "friend" - players on multi's friend list "guest" - players on multi's guest list "banned" - players on multi's ban list Added new INI tags to a new section of uox.ini called [houses] DECAYTIMERINHOUSE=3600 // Decay timer in seconds for non-locked down items inside houses PROTECTPRIVATEHOUSES=1 // Toggles whether private houses will automatically boot unauthorized visitors (1) or not (0) TRACKHOUSESPERACCOUNT=1 // Toggles whether to track (and restrict) house ownership per account (1) or per character (0) MAXHOUSESOWNABLE=1 // Specifies the max amount of houses a player can own per account/char, depending on how house ownership is tracked MAXHOUSESCOOWNABLE=10 // Specifies the max amount of houses a player can co-own per character CANOWNANDCOOWNHOUSES=1 // Toggles whether players can own and co-own houses at the same time COOWNHOUSESONSAMEACCOUNT=1 // Toggles whether characters on same account as house owner will be treated as co-owners Added new INI tags in [settings] section of uox.ini: ITEMSDETECTSPEECH=0 // If enabled, server will search for nearby items with onSpeech JS event running whenever a character speaks. Disabled by default. MAXPLAYERPACKITEMS=125 // Defines max item capacity for player (and NPC) backpacks. Defaults to 125. Moved most of the existing house functionality to JS and expanded upon it to reach feature parity with houses in regular UO around Publish 15/16, with various extras thrown in for good measure and all functionality being customizable: js/server/house/house.js (15000) - handles detection of house commands and characters entering/leaving houses js/server/house/houseSign.js (15001) - contains and handles all house-related gumps/menus and what is shown when players interact with house sign js/server/house/houseCommands.js (15002) - handles functionality of house commands and other functionality such as transfer of ownership, demolishing house, etc. js/server/house/houseDeed.js (15003) - handles initial rules that allow/disallow placement of additional houses for players All house-related menus now fully handled through JS All house commands and other functionality now fully handled through JS Removed redundant hard-coded house functionality Implemented Co-owners, friends, guests for houses, with access rules in place for entry, lockdowns, house commands, etc. Implemented Private and Public houses Implemented Secure Containers and Trash Barrels Definable max lockdowns, secure containers, player vendors, bans, friends, guests, owners, trash containers and more - per house type JS scripts can now be attached directly to houses Doors in houses can be marked as front doors or interior doors, and will be treated differently with regards to private and public houses Added new item to dfndata/items/containers/misc.dfn - [trashbarrel] Added new JS script (js/items/trashbarrel.js) with trash barrel functionality for houses. Trash barrels that are marked as secure containers are only accessible by owners, co-owners and friends of the house. Various options available at top of script. Updated js/items/axe.js to support chopping up trash barrels and house add-ons in houses owned by the player Fixed an issue with house doors being left behind after demolishing houses while their doors were open Fixed an issue where GMs could be banned from player houses Added Line of Sight checks to speech, to give players some privacy in their own homes Updated house placement code to more accurately check for other multis, dynamic and static objects when placing houses; now requires free space around each house that cannot be blocked by other houses or items that can block player movement, and disallows placement of houses on roads Updated house placement code to move characters blocking house placement to SE corner of the house Updated house placement code to disallow placing houses in guarded regions, or in dungeons Added new DFN tag for regions to enable/disable player houses in specific regions: HOUSING=0/1 Added new region (247) that covers path to Valley of Eodon in Felucca Added new region (248) that covers Valley of Eodon in Ter-Mur, with player housing disabled Added new region (249) that covers entire T2A lands, with player housing disabled Updated SPACEX and SPACEY values for all houses in dfndata/house/house.dfn to match updated house placement code Added new JS property to Regions that can be used to determine or change state of player housing in a region: .canPlaceHouse() Updated rules for usage of dye tubs to dye locked down items; now only house owners or co-owners may dye locked down items Updated rules for usage of the following locked down items in a house, which are now only usable by house owners and co-owners Dyes, Guildstone Deeds, Recall Runes (renaming), Rename Deeds, Townstone Deeds, House Deeds, Boat Models, Player Vendor Deeds, Ore, Hair Dye Updated rules for usage of the following locked down items in a house, which are now only usable by house owners, co-owners and friends: Keys, Dye Tubs, Magic Scrolls, Fireworks Wands, Magic Wands, Smithing Tools, Mining Tools, Fishing Poles Updated item lockdown rules to allow locking down (and releasing) items in a container as long as the container is locked down, and to only allow releasing a locked down container if it's empty of locked down items Updated item lockdown rules to only allow locking down movement-blocking items further than 2 tiles away from doors Updated rules for releasing items in houses - now the house owner can release any locked down items, co-owners can release items locked down by themselves or by friends, while friends can release only items locked down by themselves Added some feedback to player about why their attempted house placement failed Items added by GMs directly into multis will now decay based on the house-specific decay timer instead of the regular one Fixed an issue that could cause items to almost instantly decay after being released from lockdown in a house Placing house add-ons now properly takes into account SPACEX and SPACEY values when checking if they can fit in selected area of houses Re-added SPACEX and SPACEY values for Pentagram and Loom house add-ons House add-ons can now be converted back into house add-on deeds by chopping them with an axe Added new item type - IT_HOUSEADDON (201) - used by house add-ons placed in player houses Fixed a bug where keys would stop working after being added to a keyring, and would turn into blank keys upon release from the keyring Added visitor count for public player houses, which keeps track of how many visits a public house has received, with each player counted max 1 time every 24 hours Fixed an issue with FindPlayersInOldVisrange() where it didn't take into account that players could see buildings further away than the standard update range. This could cause players to see ghost images of buildings if they were at the "right" distance when the building was being demolished Added NODECAY tag to all signs and doors in dfndata/house/house.dfn Added FRONTDOOR or INTERIORDOOR (as appropriate) to all doors in dfndata/house/house.dfn Added BANX and BANY to specify ban location for some houses in dfndata/house/house.dfn instead of relying on finding SE corner automatically Implemented strongboxes (js/server/house/strongbox.js) for co-owners of a house, which can be placed with the house command "i wish to place a strongbox". Max capacity is 25 items Updated 'REMOVE command to take an optional parameter - itemID. If supplied, the command will remove all items with this itemID from a targeted container Fixed a bug when checking if dynamic items were blocking valid spawn locations for NPCs, some function arguments were in the wrong order! Improved code that finds valid spawn locations for items and NPCs spawned via spawn regions. As server gradually builds up lists of valid spawn locations per region over time, it will start using these lists more often, rather than always look for brand new spawn locations. Fixed a bug with CMulHandler::CheckStaticFlag() that prevented NPCs from spawning inside buildings with no static floors! Fixed an issue with repeating commands that prevented GMs from being able to cancel them when using the ClassicUO client Exposed character property .accountNum to JS engine Extended CDataList class to include a Clear() method for clearing lists Updated JS File method .Open() to support an optional, third argument - subFolderName - that defines in which sub-folder of UOX3/shared/ to store/look for a file. If no third argument is supplied, UOX3 will default to using the shared folder itself. Updated JS File method .Length() to return a value of -1 for files that don't exist Added new code function, exposed to JS engine with same parameters, which simply checks if a given tile ID has a specific flag bool CheckTileFlag( UI16 itemID, TILEFLAG flagToCheck ) Added JS function used to find the root container of an item (if any) FindRootContainer( itemSerial ) FindRootContainer( item ) Added new JS function that allows deleting files from UOX3/shared/ folder or subfolders of shared folder. If no subFolderName is provided, looks for file directly in shared folder itself. Restrictions on file- and folder-names apply. bool DeleteFile( fileName, subFolderName ) Added new JS functions for checking if a specific client or server feature is enabled. See documentation for full list of client/server features. GetClientFeature( bitNum ) // Returns true if specified client feature is enabled on server GetServerFeature( bitNum ) // Returns true if specified server feature is enabled on server Added new JS function for returning the value of almost any server setting from UOX.INI GetServerSetting( settingNameInDoubleQuotes ) Updated JS function DoesDynamicBlock() with two new parameters - checkOnlyMultis and checkOnlyNonMultis Updated JS function DoesMapBlock() with two new parameters - checkMultiPlacement and checkForRoad Fixed an issue where a LoS check would prevent players from accessing containers in their own backpack Added new functions in findfuncs.cpp to make it easier to find items near another object or location: findNearbyItems( object, distance ) findNearbyItems( x, y, worldNumber, instanceID, distance ) Added new Item property - maxItems - used by containers to determine their max item capacity Added new Item property - totalItemCount - used to get total item count in a container (including sub-containers) Added check for max item capacity when creating new items that are added to a character's backpack - items will be created below character's feet if backpack is full! Added new DFN tag for items, used by containers to determine item capacity for a given container: MAXITEMS=# // 125 is the default for all containers if not set Added new JS Item properties: .maxItems // gets/sets item capacity for a given container .totalItemCount // gets total item count in a container, including sub-containers Updated item tooltips for containers to show accurate total item count, as well as to display max item capacity Fixed a bug where picking up items from a non-locked down pile of items on the floor inside a multi could cause the remaining pile to be seen as no longer inside the multi, disallowing locking it back down and causing it to decay based on regular decay timer instead of house-specific one Updated JS command set to allow setting poison-level on items ('set poison #) and hunger-level on characters ('set hunger #) Fixed an issue with js/item/food.js that prevented poisoned food from poisoning characters when eaten Fixed an issue with js/skill/poisoning.js that prevented players from poisoning food! Updated various JS scripts and hardcoded targeting functions to disallow the targeting of locked down resources using skills and tools Updated JS Method TextMessage() to support three extra, optional parameters. Note that if one optional parameter is included, all preceding optional parameters are also required! speechTarget - What kind of target is this message intended for? 0 - Only visible for sender and receiver of message 1 - Visible to all players in range 2 - Visible to all NPCs and players in range 3 - Visible to all PCs everywhere + NPCs in range 4 - Visible to all PCs everywhere (broadcast) 5 - Only visible for the receiver of the message speechTargetSerial - The serial of the receiver of the message, used if speechTarget is 0 or 5 speechFontType - The type of font to display the text in. Defaults to normal. 0 - Bold 1 - Normal with shadow 2 - Bold with shadow 3 - Normal 4 - Gothic 5 - Italic 6 - Small, dark 7 - Colourful 8 - Runic (only works with CAPS) 9 - Small, light Added timestamp to worldsaves in console, to make it easier to see when a particular world-save was done Added info about compiler/environment displayed at the top of the UOX3 console during startup Updated dictionary files with new messages primarily related to housing
2020-11-04 02:00:37 +08:00
break;
case CIP_MAXSECURECONTAINERS:
if( gPriv->GetObjType() == OT_MULTI )
{
*vp = INT_TO_JSVAL(( static_cast<CMultiObj *>( gPriv )->GetMaxSecureContainers() ));
}
0.99.4d Added new option in UOX.INI under [settings] section: MAPDIFFSENABLED=0/1 // If enabled, server will attempt to load diff files, and send "Enable Map-diff files" packet to client to also load these. Disabled by default. Server no longer loads map/statics diff files by default, nor does it send packet to client to request loading these files, as only client versions below 7.0.8.2 will actively load these files. Can be re-enabled with new UOX.INI setting mentioned above! Fixed incorrect ID for gargish dagger in CHandleCombat::getWeaponType() Added missing weapon entries in CHandleCombat::getWeaponType(): bladed whip, barbed whip, spiked whip, gargish talwar Fixed an issue that would show the end part of some tiledata names as garbled text instead of cutting off the text(!) at 20 characters Fixed an issue with advanced character creation template when using ClassicUO client, which sends a profession value of 255 instead of 0 when no profession template has been selected. Fixed an issue where clones of NPCs that can split in combat didn't get the NPC flag correctly set Guild titles are now removed for players who leave their guilds Enabled closing some hard-coded gump menus using right-click (howto, guild, towns, wholist, addmenu, craftmenu, info) Fixed an issue where adding base items using 'add [itemID] would sometimes get false positive hits from harditems.dfn, depending on the length of the itemID Fixed an issue where items added using 'add [itemID] would not get names applied properly from harditems.dfn Item/NPC DFN tag GET can now inherit a random parent by adding additional values separated by spaces. Syntax: GET=parent1 parent2 parent3 (etc) Fixed an issue where NPC backpacks would not have the max item capacity set properly Added new properties for CItem objects (also exposed as JS Item Properties): maxRange // max distance a ranged weapon can fire at (replaces ARCHERRANGE ini setting) baseRange // base distance throwing weapons (when implemented) can be used at Added support for new Item DFN tag that replaces global UOX.INI setting ARCHERRANGE: MAXRANGE=# // Specifies max range of ranged weapon Added support for new Item/NPC DFN tags to support randomizing elemental resistances: RESISTFIRE=#/# # // Set NPC's poison resistance; fixed or random value RESISTCOLD=#/# # // Set NPC's poison resistance; fixed or random value RESISTLIGHTNING=#/# # // Set NPC's poison resistance; fixed or random value RESISTPOISON=#/# # // Set NPC's poison resistance; fixed or random value Added support for two new DFN tags in dfndata/race/races.dfn that can be used to allow/ban lists of equipment for specific races ALLOWEQUIPLIST=# BANEQUIPLIST=# Added support for new section in dfndata/race/races.dfn - [EQUIPLIST #], which can be used to define lists of equipment that is whitelisted or banned for specific races. Fixed a bug that would report incorrect weight in tooltips for Item/NPC spawner objects ScriptSections are now reapplied for items bought by players from NPC vendors Fixed an issue where players could drop an item on the ground and other players would still see the item after it was picked up, because of a failed distance check vs old location coordinates (in pack) instead of vs current location on ground Fixed a bug with players being able to use last-target macro to target objects picked up and held by other players on their cursor Updated all references to "devinelock" to be "divinelock" instead - this includes the name of the JS Item property Fixed house commands triggering (useless) targeting cursors for players onboard boats Changed default statcap in UOX.INI from 325 to 225 Fixed a out-of-range error for players attempting to combine ore inside their own backpack Fixed various issues with distance checks and container checks when using/target objects Added optional 4th "hue" parameter to AddGump JS method Added JS Function to get total amount of accounts on server - GetAccountCount() Added JS Function to get total amount of players online - GetPlayerCount() onSwing JS Event can now trigger in scripts attached to items, not just items attached to characters Added some JS Functions to expose some hard-coded constants to JS scripts: BASEITEMSERIAL() // Base item serial INVALIDSERIAL() // Invalid serial INVALIDID() // Invalid ID INVALIDCOLOUR() // Invalid colour Fixed an issue where JS character property .colour would modify origSkin property instead of colour Fixed an issue where JS character property .guildTitle returned the name of the character instead of the guild title Character JS property .poison can now also be used to set a character's poisoned level, not just read it Exposed Item property to JS engine: .ac // armour class for item (0-128). Primarily used for setting race-restrictions for equippable items, i.e. race X cannot equip items of armour class Y. .def // defensive value of item (Physical resistance post-AoS, AR in older UO) // NOTE: The following properties don't actually do anything yet, but can still be used in custom JS scripts if desired .resistCold // Cold resistance of item 0-1000, where 1000 equals 100.0% .resistHeat // Heat/Fire resistance of item 0-1000, where 1000 equals 100.0% .resistLight // Light resistance of item 0-1000, where 1000 equals 100.0% .resistLightning // Energy/Lightning resistance of item 0-1000, where 1000 equals 100.0% .resistPoison // Poison resistance of item 0-1000, where 1000 equals 100.0% .resistRain // Rain resistance of item 0-1000, where 1000 equals 100.0% .resistSnow // Snow resistance of item 0-1000, where 1000 equals 100.0% .damageHeat // Weapon deals Heat/Fire elemental damage (true/false) .damageCold // Weapon deals Cold elemental damage (true/false) .damageLight // Weapon deals Light elemental damage (true/false) .damageLightning // Weapon deals Lightning elemental damage (true/false) .damagePoison // Weapon deals Poison elemental damage (true/false) .damageRain // Weapon deals Rain/Water elemental damage (true/false) .damageSnow // Weapon deals Snow/Ice elemental damage (true/false) Added new UOX.INI setting under [server] to enable/disable shard response to ConnectUO server polling (disabled by default) Sub-commands are no longer included when registering packets to be overloaded via RegisterPacket function, as that part was never fully implemented. Packet-hook scripts can be setup for specific packet IDs, but any sub-command checking will need to be done in the script itself JS Packet Method GetDWord() now uses JS_NewNumberValue instead of INT_TO_JSVAL to read from the socket buffer, to better handle large numbers, which could previously be returned with wrong values. JS Function CalcItemFromSer() now uses a JS_GetStringBytes() and str_value() combo instead of JSVAL_TO_INT() to read the data provided in the function argument. This allows JS scripts to provide item serials to the function directly without needing to split it into four parts first (though that still works) Fixed issue where JS properties for multis didn't always return correct values The 'set command can now be used to set the armour class of items ('set ac #) Reimplemented 'tweak command in JS engine (js/commands/targeting/tweak.js) - can be used to view and modify properties of characters, character skills, items, multis and regions (target ground) Added placeholder packet-hook script (js/server/network/0xf1_connectUoServerPoll.js) to handle responses to ConnectUO server polling. By default this script does nothing, but serves as a placeholder for drop-in replacement scripts generated specifically for each shard by the ConnectUO service. Updated some commands to support an alternate STATIC keyword (can also be ommitted) to add base items: 'add static itemID 'tile static itemID Updated some commands with support for randomization. Provided itemID will be randomized based on provided rndValue: /js/commands/targeting/add.js: 'add itemID rndValue cmdtable.cpp and targeting.cpp: 'tile itemID rndValue 'tile itemID x1 x2 y1 y2 z rndValue Updated js/commands/custom/repeatingcmds.js to support 'm delete as an alias for 'rremove Added 'props as an alias for the 'tweak command Added 'teleport as an alias for the 'tele command (js/commands/targeting/tele.js) Added 'shavehair and 'shavebeard as aliases for 'kill hair and 'kill beard (js/commands/targeting/kill.js) Added 'noinvul and 'mortal aliases for the 'invul false command (js/commands/custom/misc-cmds.js) Added 'immortal and 'invul (without parameter) as aliases for the 'invul true command Added 'bringtopack as an alias of 'movetobag command (js/commands/targeting/movetobag.js) Updated check for cancelling of target cursor in various JS scripts Minor updates to various JS scripts Fixed issue where some item definitions in dfndata/harditems/harditems.dfn and dfndata/items/building/lighting.dfn used comma instead of space as delimiter for the VALUE tag, which thus never got applied Updated all NPC definitions to let NPCs spawn facing in random directions
2021-03-22 05:59:20 +08:00
else
{
0.99.4d Added new option in UOX.INI under [settings] section: MAPDIFFSENABLED=0/1 // If enabled, server will attempt to load diff files, and send "Enable Map-diff files" packet to client to also load these. Disabled by default. Server no longer loads map/statics diff files by default, nor does it send packet to client to request loading these files, as only client versions below 7.0.8.2 will actively load these files. Can be re-enabled with new UOX.INI setting mentioned above! Fixed incorrect ID for gargish dagger in CHandleCombat::getWeaponType() Added missing weapon entries in CHandleCombat::getWeaponType(): bladed whip, barbed whip, spiked whip, gargish talwar Fixed an issue that would show the end part of some tiledata names as garbled text instead of cutting off the text(!) at 20 characters Fixed an issue with advanced character creation template when using ClassicUO client, which sends a profession value of 255 instead of 0 when no profession template has been selected. Fixed an issue where clones of NPCs that can split in combat didn't get the NPC flag correctly set Guild titles are now removed for players who leave their guilds Enabled closing some hard-coded gump menus using right-click (howto, guild, towns, wholist, addmenu, craftmenu, info) Fixed an issue where adding base items using 'add [itemID] would sometimes get false positive hits from harditems.dfn, depending on the length of the itemID Fixed an issue where items added using 'add [itemID] would not get names applied properly from harditems.dfn Item/NPC DFN tag GET can now inherit a random parent by adding additional values separated by spaces. Syntax: GET=parent1 parent2 parent3 (etc) Fixed an issue where NPC backpacks would not have the max item capacity set properly Added new properties for CItem objects (also exposed as JS Item Properties): maxRange // max distance a ranged weapon can fire at (replaces ARCHERRANGE ini setting) baseRange // base distance throwing weapons (when implemented) can be used at Added support for new Item DFN tag that replaces global UOX.INI setting ARCHERRANGE: MAXRANGE=# // Specifies max range of ranged weapon Added support for new Item/NPC DFN tags to support randomizing elemental resistances: RESISTFIRE=#/# # // Set NPC's poison resistance; fixed or random value RESISTCOLD=#/# # // Set NPC's poison resistance; fixed or random value RESISTLIGHTNING=#/# # // Set NPC's poison resistance; fixed or random value RESISTPOISON=#/# # // Set NPC's poison resistance; fixed or random value Added support for two new DFN tags in dfndata/race/races.dfn that can be used to allow/ban lists of equipment for specific races ALLOWEQUIPLIST=# BANEQUIPLIST=# Added support for new section in dfndata/race/races.dfn - [EQUIPLIST #], which can be used to define lists of equipment that is whitelisted or banned for specific races. Fixed a bug that would report incorrect weight in tooltips for Item/NPC spawner objects ScriptSections are now reapplied for items bought by players from NPC vendors Fixed an issue where players could drop an item on the ground and other players would still see the item after it was picked up, because of a failed distance check vs old location coordinates (in pack) instead of vs current location on ground Fixed a bug with players being able to use last-target macro to target objects picked up and held by other players on their cursor Updated all references to "devinelock" to be "divinelock" instead - this includes the name of the JS Item property Fixed house commands triggering (useless) targeting cursors for players onboard boats Changed default statcap in UOX.INI from 325 to 225 Fixed a out-of-range error for players attempting to combine ore inside their own backpack Fixed various issues with distance checks and container checks when using/target objects Added optional 4th "hue" parameter to AddGump JS method Added JS Function to get total amount of accounts on server - GetAccountCount() Added JS Function to get total amount of players online - GetPlayerCount() onSwing JS Event can now trigger in scripts attached to items, not just items attached to characters Added some JS Functions to expose some hard-coded constants to JS scripts: BASEITEMSERIAL() // Base item serial INVALIDSERIAL() // Invalid serial INVALIDID() // Invalid ID INVALIDCOLOUR() // Invalid colour Fixed an issue where JS character property .colour would modify origSkin property instead of colour Fixed an issue where JS character property .guildTitle returned the name of the character instead of the guild title Character JS property .poison can now also be used to set a character's poisoned level, not just read it Exposed Item property to JS engine: .ac // armour class for item (0-128). Primarily used for setting race-restrictions for equippable items, i.e. race X cannot equip items of armour class Y. .def // defensive value of item (Physical resistance post-AoS, AR in older UO) // NOTE: The following properties don't actually do anything yet, but can still be used in custom JS scripts if desired .resistCold // Cold resistance of item 0-1000, where 1000 equals 100.0% .resistHeat // Heat/Fire resistance of item 0-1000, where 1000 equals 100.0% .resistLight // Light resistance of item 0-1000, where 1000 equals 100.0% .resistLightning // Energy/Lightning resistance of item 0-1000, where 1000 equals 100.0% .resistPoison // Poison resistance of item 0-1000, where 1000 equals 100.0% .resistRain // Rain resistance of item 0-1000, where 1000 equals 100.0% .resistSnow // Snow resistance of item 0-1000, where 1000 equals 100.0% .damageHeat // Weapon deals Heat/Fire elemental damage (true/false) .damageCold // Weapon deals Cold elemental damage (true/false) .damageLight // Weapon deals Light elemental damage (true/false) .damageLightning // Weapon deals Lightning elemental damage (true/false) .damagePoison // Weapon deals Poison elemental damage (true/false) .damageRain // Weapon deals Rain/Water elemental damage (true/false) .damageSnow // Weapon deals Snow/Ice elemental damage (true/false) Added new UOX.INI setting under [server] to enable/disable shard response to ConnectUO server polling (disabled by default) Sub-commands are no longer included when registering packets to be overloaded via RegisterPacket function, as that part was never fully implemented. Packet-hook scripts can be setup for specific packet IDs, but any sub-command checking will need to be done in the script itself JS Packet Method GetDWord() now uses JS_NewNumberValue instead of INT_TO_JSVAL to read from the socket buffer, to better handle large numbers, which could previously be returned with wrong values. JS Function CalcItemFromSer() now uses a JS_GetStringBytes() and str_value() combo instead of JSVAL_TO_INT() to read the data provided in the function argument. This allows JS scripts to provide item serials to the function directly without needing to split it into four parts first (though that still works) Fixed issue where JS properties for multis didn't always return correct values The 'set command can now be used to set the armour class of items ('set ac #) Reimplemented 'tweak command in JS engine (js/commands/targeting/tweak.js) - can be used to view and modify properties of characters, character skills, items, multis and regions (target ground) Added placeholder packet-hook script (js/server/network/0xf1_connectUoServerPoll.js) to handle responses to ConnectUO server polling. By default this script does nothing, but serves as a placeholder for drop-in replacement scripts generated specifically for each shard by the ConnectUO service. Updated some commands to support an alternate STATIC keyword (can also be ommitted) to add base items: 'add static itemID 'tile static itemID Updated some commands with support for randomization. Provided itemID will be randomized based on provided rndValue: /js/commands/targeting/add.js: 'add itemID rndValue cmdtable.cpp and targeting.cpp: 'tile itemID rndValue 'tile itemID x1 x2 y1 y2 z rndValue Updated js/commands/custom/repeatingcmds.js to support 'm delete as an alias for 'rremove Added 'props as an alias for the 'tweak command Added 'teleport as an alias for the 'tele command (js/commands/targeting/tele.js) Added 'shavehair and 'shavebeard as aliases for 'kill hair and 'kill beard (js/commands/targeting/kill.js) Added 'noinvul and 'mortal aliases for the 'invul false command (js/commands/custom/misc-cmds.js) Added 'immortal and 'invul (without parameter) as aliases for the 'invul true command Added 'bringtopack as an alias of 'movetobag command (js/commands/targeting/movetobag.js) Updated check for cancelling of target cursor in various JS scripts Minor updates to various JS scripts Fixed issue where some item definitions in dfndata/harditems/harditems.dfn and dfndata/items/building/lighting.dfn used comma instead of space as delimiter for the VALUE tag, which thus never got applied Updated all NPC definitions to let NPCs spawn facing in random directions
2021-03-22 05:59:20 +08:00
*vp = JSVAL_NULL;
}
Housing Revamp and more Updated JS SysMessage function to accept up to 10 extra, optional arguments, which can be used with dictionary messages that require additional parameters like %s or %i Added new type of house privilege in cMultiObj.cpp to keep track of friends of the multi - HOUSEPRIV_FRIEND - which is stored during worldsaves as one or more Friend=<player serial> tags in house.wsc Added new type of house privilege in cMultiObj.cpp to keep track of guests of the multi - HOUSEPRIV_GUEST - which is stored during worldsaves as one or more Guest=<player serial> tags in house.wsc When items are created for houses upon house placement, a reference to the multi's serial is now stored in the house sign's MORE property to allow easier tracking of which house a particular sign belongs to Added tracking of new, persistent properties for houses via cMultiObj.cpp/h: lockdowns, secure containers, vendors, guests, friends, owners, ban location, public status, number of visits, timestamps Added a multitude of new methods in cMultiObj.cpp/h to assist in improving the functionality of houses Added new tags for houses in house.dfn (default values applied if tag not specified): MAXSECURECONTAINERS=4 - Max amount of secure containers allowed in a multi MAXLOCKDOWNS=256 - Max amount of lockdowns allowed in a multi MAXVENDORS=10 - Max amount of vendors allowed in a multi MAXBANS=50 - Max amount of bans in a multi's ban list MAXFRIENDS=50 - Max amount of friends in a multi's friend list MAXGUESTS=50 - Max amount of guests in a multi's guest list MAXOWNERS=8 - Max amount of owners and co-owners in a multi's owner list MAXTRASHCONTAINERS=1 - Max amount of trash containers allowed in multi SCRIPT=<scriptID> - Assign a JS script-ID directly to a multi FRONTDOOR - indicates that a door is the front door of a house. Cannot be locked in public houses! INTERIORDOOR - indicates that a door is an interior door of a house. Can be locked in public houses. BANX - Location X offset for multi's ban location, if not used, will try to use SE corner of multi instead BANY - Location Y offset for multi's ban location, if not used, will try to use SE corner of multi instead Added JS Event: onHouseCommand( tSock, multiObj, cmdID ) - For handling spoken house commands via JS scripts attached to multi. Updated JS Events: onEntrance() - can now trigger both for multi being entered and/or object entering onLeaving() - can now trigger both for multi being left and/or object entering onSpeech() - can now also trigger for items (in addition to chars) with event & script attached, if UOX.INI setting ITEMSDETECTSPEECH is enabled Added JS Multi methods: .IsBoat() - Returns whether the item (or multi) is a boat .IsOwner( playerToCheck ) - Returns whether a player is the owner of a multi .IsOnOwnerList( playerToCheck ) - Returns whether a player is on the (co-)owner list of a multi .IsOnFriendList( playerToCheck ) - Returns whether a player is on the friend list of a multi .IsOnGuestList( playerToCheck ) - Returns whether a player is on the guest list of a multi .IsOnBanList( playerToCheck ) - Returns whether a player is on the ban list of a multi .AddToFriendList( playertoAdd ) - Adds player to the friend list of a multi .RemoveFromFriendList( playertoRemove ) - Removes player from the friend list of a multi .AddToGuestList( playertoAdd ) - Adds player to the guest list of a multi .RemoveFromGuestList( playertoRemove ) - Removes player from the guest list of a multi .ClearOwnerList() - Clears all entries from a multi's (co-)owner list .ClearFriendList() - Clears all entries from a multi's friend list .ClearGuestList() - Clears all entries from a multi's guest list .ClearBanList() - Clears all entries from a multi's ban list .SecureContainer( itemToSecure ) - Secures a container in a multi .UnsecureContainer( itemToUnsecure ) - Unsecures a container in a multi .IsSecureContainer( itemToCheck ) - Checks if specified item is a secure container in a multi .LockDownItem( itemToLockDown) - Locks down an item in a multi .ReleaseItem( itemToRelease ) - Releases a locked down item in a multi .KillKeys() - Deletes ALL keys associated with a multi .AddTrashCont( itemToAdd ) - Add trash container to multi's list of trash containers .RemoveTrashCont( itemToRemove ) - Remove trash container from multi's list of trash containers Added JS Item (Multi only) properties: .lockdowns - Get the number of lockdowns in a multi .maxLockdowns - Get/Set the max number of lockdowns allowed in a multi .secureContainers - Get the number of secure containers in a multi .maxSecureContainers - Get/Set the max number of secure containers allowed in a multi .trashContainers - Get the number of trash containers in a multi .maxTrashContainers - Get/Set the max number of trash containers allowed in a multi .friends - Get the number of friends in a multi's friend list .maxFriends - Get/Set the max number of friends allowed in a multi's friend list .guests - Get the number of guests in a multi's guest list .maxGuests - Get/Set the max number of guests allowed in a multi's guest list .owners - Get the number of owners in a multi's owner list .maxOwners - Get/Set the max number of owners allowed in a multi's owner list .bans - Get the number of banned players in a multi's ban list .maxBans - Get/Set the max number of banned players allowed in a multi's ban list .vendors - Get the number of player vendors in a multi .maxVendors - Get the max number of player vendors allowed in a multi .deed - Get the item sectionID for deed used to place multi .isPublic - Get/Set the private/public state of a multi .buildTimestamp - Get the timestamp for when the house was originally placed .tradeTimestamp - Get the timestamp for when the house was last traded to another player .banX - Get/Set the ban location X offset for the multi .banY - Get/Set the ban location Y offset for the multi Added JS Character properties: .multi = Get/Set the multi object the character is in .accountNum = Get the account number the character belongs to .housesOwned = Get a count of houses owned by the character .housesCoOwned = Get a count of houses co-owned by the character Updated JS cBaseObject Methods .FirstItem(), .NextItem() and .FinishedItems() to also support iterating through items in multis Updated JS multi Methods .FirstChar(), .NextChar() and .FinishedChars() to support an additional parameter to specify what kind of characters to loop through: "default" or no parameter - all characters inside the multi "owner" - players on multi's owner list "friend" - players on multi's friend list "guest" - players on multi's guest list "banned" - players on multi's ban list Added new INI tags to a new section of uox.ini called [houses] DECAYTIMERINHOUSE=3600 // Decay timer in seconds for non-locked down items inside houses PROTECTPRIVATEHOUSES=1 // Toggles whether private houses will automatically boot unauthorized visitors (1) or not (0) TRACKHOUSESPERACCOUNT=1 // Toggles whether to track (and restrict) house ownership per account (1) or per character (0) MAXHOUSESOWNABLE=1 // Specifies the max amount of houses a player can own per account/char, depending on how house ownership is tracked MAXHOUSESCOOWNABLE=10 // Specifies the max amount of houses a player can co-own per character CANOWNANDCOOWNHOUSES=1 // Toggles whether players can own and co-own houses at the same time COOWNHOUSESONSAMEACCOUNT=1 // Toggles whether characters on same account as house owner will be treated as co-owners Added new INI tags in [settings] section of uox.ini: ITEMSDETECTSPEECH=0 // If enabled, server will search for nearby items with onSpeech JS event running whenever a character speaks. Disabled by default. MAXPLAYERPACKITEMS=125 // Defines max item capacity for player (and NPC) backpacks. Defaults to 125. Moved most of the existing house functionality to JS and expanded upon it to reach feature parity with houses in regular UO around Publish 15/16, with various extras thrown in for good measure and all functionality being customizable: js/server/house/house.js (15000) - handles detection of house commands and characters entering/leaving houses js/server/house/houseSign.js (15001) - contains and handles all house-related gumps/menus and what is shown when players interact with house sign js/server/house/houseCommands.js (15002) - handles functionality of house commands and other functionality such as transfer of ownership, demolishing house, etc. js/server/house/houseDeed.js (15003) - handles initial rules that allow/disallow placement of additional houses for players All house-related menus now fully handled through JS All house commands and other functionality now fully handled through JS Removed redundant hard-coded house functionality Implemented Co-owners, friends, guests for houses, with access rules in place for entry, lockdowns, house commands, etc. Implemented Private and Public houses Implemented Secure Containers and Trash Barrels Definable max lockdowns, secure containers, player vendors, bans, friends, guests, owners, trash containers and more - per house type JS scripts can now be attached directly to houses Doors in houses can be marked as front doors or interior doors, and will be treated differently with regards to private and public houses Added new item to dfndata/items/containers/misc.dfn - [trashbarrel] Added new JS script (js/items/trashbarrel.js) with trash barrel functionality for houses. Trash barrels that are marked as secure containers are only accessible by owners, co-owners and friends of the house. Various options available at top of script. Updated js/items/axe.js to support chopping up trash barrels and house add-ons in houses owned by the player Fixed an issue with house doors being left behind after demolishing houses while their doors were open Fixed an issue where GMs could be banned from player houses Added Line of Sight checks to speech, to give players some privacy in their own homes Updated house placement code to more accurately check for other multis, dynamic and static objects when placing houses; now requires free space around each house that cannot be blocked by other houses or items that can block player movement, and disallows placement of houses on roads Updated house placement code to move characters blocking house placement to SE corner of the house Updated house placement code to disallow placing houses in guarded regions, or in dungeons Added new DFN tag for regions to enable/disable player houses in specific regions: HOUSING=0/1 Added new region (247) that covers path to Valley of Eodon in Felucca Added new region (248) that covers Valley of Eodon in Ter-Mur, with player housing disabled Added new region (249) that covers entire T2A lands, with player housing disabled Updated SPACEX and SPACEY values for all houses in dfndata/house/house.dfn to match updated house placement code Added new JS property to Regions that can be used to determine or change state of player housing in a region: .canPlaceHouse() Updated rules for usage of dye tubs to dye locked down items; now only house owners or co-owners may dye locked down items Updated rules for usage of the following locked down items in a house, which are now only usable by house owners and co-owners Dyes, Guildstone Deeds, Recall Runes (renaming), Rename Deeds, Townstone Deeds, House Deeds, Boat Models, Player Vendor Deeds, Ore, Hair Dye Updated rules for usage of the following locked down items in a house, which are now only usable by house owners, co-owners and friends: Keys, Dye Tubs, Magic Scrolls, Fireworks Wands, Magic Wands, Smithing Tools, Mining Tools, Fishing Poles Updated item lockdown rules to allow locking down (and releasing) items in a container as long as the container is locked down, and to only allow releasing a locked down container if it's empty of locked down items Updated item lockdown rules to only allow locking down movement-blocking items further than 2 tiles away from doors Updated rules for releasing items in houses - now the house owner can release any locked down items, co-owners can release items locked down by themselves or by friends, while friends can release only items locked down by themselves Added some feedback to player about why their attempted house placement failed Items added by GMs directly into multis will now decay based on the house-specific decay timer instead of the regular one Fixed an issue that could cause items to almost instantly decay after being released from lockdown in a house Placing house add-ons now properly takes into account SPACEX and SPACEY values when checking if they can fit in selected area of houses Re-added SPACEX and SPACEY values for Pentagram and Loom house add-ons House add-ons can now be converted back into house add-on deeds by chopping them with an axe Added new item type - IT_HOUSEADDON (201) - used by house add-ons placed in player houses Fixed a bug where keys would stop working after being added to a keyring, and would turn into blank keys upon release from the keyring Added visitor count for public player houses, which keeps track of how many visits a public house has received, with each player counted max 1 time every 24 hours Fixed an issue with FindPlayersInOldVisrange() where it didn't take into account that players could see buildings further away than the standard update range. This could cause players to see ghost images of buildings if they were at the "right" distance when the building was being demolished Added NODECAY tag to all signs and doors in dfndata/house/house.dfn Added FRONTDOOR or INTERIORDOOR (as appropriate) to all doors in dfndata/house/house.dfn Added BANX and BANY to specify ban location for some houses in dfndata/house/house.dfn instead of relying on finding SE corner automatically Implemented strongboxes (js/server/house/strongbox.js) for co-owners of a house, which can be placed with the house command "i wish to place a strongbox". Max capacity is 25 items Updated 'REMOVE command to take an optional parameter - itemID. If supplied, the command will remove all items with this itemID from a targeted container Fixed a bug when checking if dynamic items were blocking valid spawn locations for NPCs, some function arguments were in the wrong order! Improved code that finds valid spawn locations for items and NPCs spawned via spawn regions. As server gradually builds up lists of valid spawn locations per region over time, it will start using these lists more often, rather than always look for brand new spawn locations. Fixed a bug with CMulHandler::CheckStaticFlag() that prevented NPCs from spawning inside buildings with no static floors! Fixed an issue with repeating commands that prevented GMs from being able to cancel them when using the ClassicUO client Exposed character property .accountNum to JS engine Extended CDataList class to include a Clear() method for clearing lists Updated JS File method .Open() to support an optional, third argument - subFolderName - that defines in which sub-folder of UOX3/shared/ to store/look for a file. If no third argument is supplied, UOX3 will default to using the shared folder itself. Updated JS File method .Length() to return a value of -1 for files that don't exist Added new code function, exposed to JS engine with same parameters, which simply checks if a given tile ID has a specific flag bool CheckTileFlag( UI16 itemID, TILEFLAG flagToCheck ) Added JS function used to find the root container of an item (if any) FindRootContainer( itemSerial ) FindRootContainer( item ) Added new JS function that allows deleting files from UOX3/shared/ folder or subfolders of shared folder. If no subFolderName is provided, looks for file directly in shared folder itself. Restrictions on file- and folder-names apply. bool DeleteFile( fileName, subFolderName ) Added new JS functions for checking if a specific client or server feature is enabled. See documentation for full list of client/server features. GetClientFeature( bitNum ) // Returns true if specified client feature is enabled on server GetServerFeature( bitNum ) // Returns true if specified server feature is enabled on server Added new JS function for returning the value of almost any server setting from UOX.INI GetServerSetting( settingNameInDoubleQuotes ) Updated JS function DoesDynamicBlock() with two new parameters - checkOnlyMultis and checkOnlyNonMultis Updated JS function DoesMapBlock() with two new parameters - checkMultiPlacement and checkForRoad Fixed an issue where a LoS check would prevent players from accessing containers in their own backpack Added new functions in findfuncs.cpp to make it easier to find items near another object or location: findNearbyItems( object, distance ) findNearbyItems( x, y, worldNumber, instanceID, distance ) Added new Item property - maxItems - used by containers to determine their max item capacity Added new Item property - totalItemCount - used to get total item count in a container (including sub-containers) Added check for max item capacity when creating new items that are added to a character's backpack - items will be created below character's feet if backpack is full! Added new DFN tag for items, used by containers to determine item capacity for a given container: MAXITEMS=# // 125 is the default for all containers if not set Added new JS Item properties: .maxItems // gets/sets item capacity for a given container .totalItemCount // gets total item count in a container, including sub-containers Updated item tooltips for containers to show accurate total item count, as well as to display max item capacity Fixed a bug where picking up items from a non-locked down pile of items on the floor inside a multi could cause the remaining pile to be seen as no longer inside the multi, disallowing locking it back down and causing it to decay based on regular decay timer instead of house-specific one Updated JS command set to allow setting poison-level on items ('set poison #) and hunger-level on characters ('set hunger #) Fixed an issue with js/item/food.js that prevented poisoned food from poisoning characters when eaten Fixed an issue with js/skill/poisoning.js that prevented players from poisoning food! Updated various JS scripts and hardcoded targeting functions to disallow the targeting of locked down resources using skills and tools Updated JS Method TextMessage() to support three extra, optional parameters. Note that if one optional parameter is included, all preceding optional parameters are also required! speechTarget - What kind of target is this message intended for? 0 - Only visible for sender and receiver of message 1 - Visible to all players in range 2 - Visible to all NPCs and players in range 3 - Visible to all PCs everywhere + NPCs in range 4 - Visible to all PCs everywhere (broadcast) 5 - Only visible for the receiver of the message speechTargetSerial - The serial of the receiver of the message, used if speechTarget is 0 or 5 speechFontType - The type of font to display the text in. Defaults to normal. 0 - Bold 1 - Normal with shadow 2 - Bold with shadow 3 - Normal 4 - Gothic 5 - Italic 6 - Small, dark 7 - Colourful 8 - Runic (only works with CAPS) 9 - Small, light Added timestamp to worldsaves in console, to make it easier to see when a particular world-save was done Added info about compiler/environment displayed at the top of the UOX3 console during startup Updated dictionary files with new messages primarily related to housing
2020-11-04 02:00:37 +08:00
break;
case CIP_FRIENDS:
if( gPriv->GetObjType() == OT_MULTI )
{
*vp = INT_TO_JSVAL(( static_cast<CMultiObj *>( gPriv )->GetFriendCount() ));
}
0.99.4d Added new option in UOX.INI under [settings] section: MAPDIFFSENABLED=0/1 // If enabled, server will attempt to load diff files, and send "Enable Map-diff files" packet to client to also load these. Disabled by default. Server no longer loads map/statics diff files by default, nor does it send packet to client to request loading these files, as only client versions below 7.0.8.2 will actively load these files. Can be re-enabled with new UOX.INI setting mentioned above! Fixed incorrect ID for gargish dagger in CHandleCombat::getWeaponType() Added missing weapon entries in CHandleCombat::getWeaponType(): bladed whip, barbed whip, spiked whip, gargish talwar Fixed an issue that would show the end part of some tiledata names as garbled text instead of cutting off the text(!) at 20 characters Fixed an issue with advanced character creation template when using ClassicUO client, which sends a profession value of 255 instead of 0 when no profession template has been selected. Fixed an issue where clones of NPCs that can split in combat didn't get the NPC flag correctly set Guild titles are now removed for players who leave their guilds Enabled closing some hard-coded gump menus using right-click (howto, guild, towns, wholist, addmenu, craftmenu, info) Fixed an issue where adding base items using 'add [itemID] would sometimes get false positive hits from harditems.dfn, depending on the length of the itemID Fixed an issue where items added using 'add [itemID] would not get names applied properly from harditems.dfn Item/NPC DFN tag GET can now inherit a random parent by adding additional values separated by spaces. Syntax: GET=parent1 parent2 parent3 (etc) Fixed an issue where NPC backpacks would not have the max item capacity set properly Added new properties for CItem objects (also exposed as JS Item Properties): maxRange // max distance a ranged weapon can fire at (replaces ARCHERRANGE ini setting) baseRange // base distance throwing weapons (when implemented) can be used at Added support for new Item DFN tag that replaces global UOX.INI setting ARCHERRANGE: MAXRANGE=# // Specifies max range of ranged weapon Added support for new Item/NPC DFN tags to support randomizing elemental resistances: RESISTFIRE=#/# # // Set NPC's poison resistance; fixed or random value RESISTCOLD=#/# # // Set NPC's poison resistance; fixed or random value RESISTLIGHTNING=#/# # // Set NPC's poison resistance; fixed or random value RESISTPOISON=#/# # // Set NPC's poison resistance; fixed or random value Added support for two new DFN tags in dfndata/race/races.dfn that can be used to allow/ban lists of equipment for specific races ALLOWEQUIPLIST=# BANEQUIPLIST=# Added support for new section in dfndata/race/races.dfn - [EQUIPLIST #], which can be used to define lists of equipment that is whitelisted or banned for specific races. Fixed a bug that would report incorrect weight in tooltips for Item/NPC spawner objects ScriptSections are now reapplied for items bought by players from NPC vendors Fixed an issue where players could drop an item on the ground and other players would still see the item after it was picked up, because of a failed distance check vs old location coordinates (in pack) instead of vs current location on ground Fixed a bug with players being able to use last-target macro to target objects picked up and held by other players on their cursor Updated all references to "devinelock" to be "divinelock" instead - this includes the name of the JS Item property Fixed house commands triggering (useless) targeting cursors for players onboard boats Changed default statcap in UOX.INI from 325 to 225 Fixed a out-of-range error for players attempting to combine ore inside their own backpack Fixed various issues with distance checks and container checks when using/target objects Added optional 4th "hue" parameter to AddGump JS method Added JS Function to get total amount of accounts on server - GetAccountCount() Added JS Function to get total amount of players online - GetPlayerCount() onSwing JS Event can now trigger in scripts attached to items, not just items attached to characters Added some JS Functions to expose some hard-coded constants to JS scripts: BASEITEMSERIAL() // Base item serial INVALIDSERIAL() // Invalid serial INVALIDID() // Invalid ID INVALIDCOLOUR() // Invalid colour Fixed an issue where JS character property .colour would modify origSkin property instead of colour Fixed an issue where JS character property .guildTitle returned the name of the character instead of the guild title Character JS property .poison can now also be used to set a character's poisoned level, not just read it Exposed Item property to JS engine: .ac // armour class for item (0-128). Primarily used for setting race-restrictions for equippable items, i.e. race X cannot equip items of armour class Y. .def // defensive value of item (Physical resistance post-AoS, AR in older UO) // NOTE: The following properties don't actually do anything yet, but can still be used in custom JS scripts if desired .resistCold // Cold resistance of item 0-1000, where 1000 equals 100.0% .resistHeat // Heat/Fire resistance of item 0-1000, where 1000 equals 100.0% .resistLight // Light resistance of item 0-1000, where 1000 equals 100.0% .resistLightning // Energy/Lightning resistance of item 0-1000, where 1000 equals 100.0% .resistPoison // Poison resistance of item 0-1000, where 1000 equals 100.0% .resistRain // Rain resistance of item 0-1000, where 1000 equals 100.0% .resistSnow // Snow resistance of item 0-1000, where 1000 equals 100.0% .damageHeat // Weapon deals Heat/Fire elemental damage (true/false) .damageCold // Weapon deals Cold elemental damage (true/false) .damageLight // Weapon deals Light elemental damage (true/false) .damageLightning // Weapon deals Lightning elemental damage (true/false) .damagePoison // Weapon deals Poison elemental damage (true/false) .damageRain // Weapon deals Rain/Water elemental damage (true/false) .damageSnow // Weapon deals Snow/Ice elemental damage (true/false) Added new UOX.INI setting under [server] to enable/disable shard response to ConnectUO server polling (disabled by default) Sub-commands are no longer included when registering packets to be overloaded via RegisterPacket function, as that part was never fully implemented. Packet-hook scripts can be setup for specific packet IDs, but any sub-command checking will need to be done in the script itself JS Packet Method GetDWord() now uses JS_NewNumberValue instead of INT_TO_JSVAL to read from the socket buffer, to better handle large numbers, which could previously be returned with wrong values. JS Function CalcItemFromSer() now uses a JS_GetStringBytes() and str_value() combo instead of JSVAL_TO_INT() to read the data provided in the function argument. This allows JS scripts to provide item serials to the function directly without needing to split it into four parts first (though that still works) Fixed issue where JS properties for multis didn't always return correct values The 'set command can now be used to set the armour class of items ('set ac #) Reimplemented 'tweak command in JS engine (js/commands/targeting/tweak.js) - can be used to view and modify properties of characters, character skills, items, multis and regions (target ground) Added placeholder packet-hook script (js/server/network/0xf1_connectUoServerPoll.js) to handle responses to ConnectUO server polling. By default this script does nothing, but serves as a placeholder for drop-in replacement scripts generated specifically for each shard by the ConnectUO service. Updated some commands to support an alternate STATIC keyword (can also be ommitted) to add base items: 'add static itemID 'tile static itemID Updated some commands with support for randomization. Provided itemID will be randomized based on provided rndValue: /js/commands/targeting/add.js: 'add itemID rndValue cmdtable.cpp and targeting.cpp: 'tile itemID rndValue 'tile itemID x1 x2 y1 y2 z rndValue Updated js/commands/custom/repeatingcmds.js to support 'm delete as an alias for 'rremove Added 'props as an alias for the 'tweak command Added 'teleport as an alias for the 'tele command (js/commands/targeting/tele.js) Added 'shavehair and 'shavebeard as aliases for 'kill hair and 'kill beard (js/commands/targeting/kill.js) Added 'noinvul and 'mortal aliases for the 'invul false command (js/commands/custom/misc-cmds.js) Added 'immortal and 'invul (without parameter) as aliases for the 'invul true command Added 'bringtopack as an alias of 'movetobag command (js/commands/targeting/movetobag.js) Updated check for cancelling of target cursor in various JS scripts Minor updates to various JS scripts Fixed issue where some item definitions in dfndata/harditems/harditems.dfn and dfndata/items/building/lighting.dfn used comma instead of space as delimiter for the VALUE tag, which thus never got applied Updated all NPC definitions to let NPCs spawn facing in random directions
2021-03-22 05:59:20 +08:00
else
{
0.99.4d Added new option in UOX.INI under [settings] section: MAPDIFFSENABLED=0/1 // If enabled, server will attempt to load diff files, and send "Enable Map-diff files" packet to client to also load these. Disabled by default. Server no longer loads map/statics diff files by default, nor does it send packet to client to request loading these files, as only client versions below 7.0.8.2 will actively load these files. Can be re-enabled with new UOX.INI setting mentioned above! Fixed incorrect ID for gargish dagger in CHandleCombat::getWeaponType() Added missing weapon entries in CHandleCombat::getWeaponType(): bladed whip, barbed whip, spiked whip, gargish talwar Fixed an issue that would show the end part of some tiledata names as garbled text instead of cutting off the text(!) at 20 characters Fixed an issue with advanced character creation template when using ClassicUO client, which sends a profession value of 255 instead of 0 when no profession template has been selected. Fixed an issue where clones of NPCs that can split in combat didn't get the NPC flag correctly set Guild titles are now removed for players who leave their guilds Enabled closing some hard-coded gump menus using right-click (howto, guild, towns, wholist, addmenu, craftmenu, info) Fixed an issue where adding base items using 'add [itemID] would sometimes get false positive hits from harditems.dfn, depending on the length of the itemID Fixed an issue where items added using 'add [itemID] would not get names applied properly from harditems.dfn Item/NPC DFN tag GET can now inherit a random parent by adding additional values separated by spaces. Syntax: GET=parent1 parent2 parent3 (etc) Fixed an issue where NPC backpacks would not have the max item capacity set properly Added new properties for CItem objects (also exposed as JS Item Properties): maxRange // max distance a ranged weapon can fire at (replaces ARCHERRANGE ini setting) baseRange // base distance throwing weapons (when implemented) can be used at Added support for new Item DFN tag that replaces global UOX.INI setting ARCHERRANGE: MAXRANGE=# // Specifies max range of ranged weapon Added support for new Item/NPC DFN tags to support randomizing elemental resistances: RESISTFIRE=#/# # // Set NPC's poison resistance; fixed or random value RESISTCOLD=#/# # // Set NPC's poison resistance; fixed or random value RESISTLIGHTNING=#/# # // Set NPC's poison resistance; fixed or random value RESISTPOISON=#/# # // Set NPC's poison resistance; fixed or random value Added support for two new DFN tags in dfndata/race/races.dfn that can be used to allow/ban lists of equipment for specific races ALLOWEQUIPLIST=# BANEQUIPLIST=# Added support for new section in dfndata/race/races.dfn - [EQUIPLIST #], which can be used to define lists of equipment that is whitelisted or banned for specific races. Fixed a bug that would report incorrect weight in tooltips for Item/NPC spawner objects ScriptSections are now reapplied for items bought by players from NPC vendors Fixed an issue where players could drop an item on the ground and other players would still see the item after it was picked up, because of a failed distance check vs old location coordinates (in pack) instead of vs current location on ground Fixed a bug with players being able to use last-target macro to target objects picked up and held by other players on their cursor Updated all references to "devinelock" to be "divinelock" instead - this includes the name of the JS Item property Fixed house commands triggering (useless) targeting cursors for players onboard boats Changed default statcap in UOX.INI from 325 to 225 Fixed a out-of-range error for players attempting to combine ore inside their own backpack Fixed various issues with distance checks and container checks when using/target objects Added optional 4th "hue" parameter to AddGump JS method Added JS Function to get total amount of accounts on server - GetAccountCount() Added JS Function to get total amount of players online - GetPlayerCount() onSwing JS Event can now trigger in scripts attached to items, not just items attached to characters Added some JS Functions to expose some hard-coded constants to JS scripts: BASEITEMSERIAL() // Base item serial INVALIDSERIAL() // Invalid serial INVALIDID() // Invalid ID INVALIDCOLOUR() // Invalid colour Fixed an issue where JS character property .colour would modify origSkin property instead of colour Fixed an issue where JS character property .guildTitle returned the name of the character instead of the guild title Character JS property .poison can now also be used to set a character's poisoned level, not just read it Exposed Item property to JS engine: .ac // armour class for item (0-128). Primarily used for setting race-restrictions for equippable items, i.e. race X cannot equip items of armour class Y. .def // defensive value of item (Physical resistance post-AoS, AR in older UO) // NOTE: The following properties don't actually do anything yet, but can still be used in custom JS scripts if desired .resistCold // Cold resistance of item 0-1000, where 1000 equals 100.0% .resistHeat // Heat/Fire resistance of item 0-1000, where 1000 equals 100.0% .resistLight // Light resistance of item 0-1000, where 1000 equals 100.0% .resistLightning // Energy/Lightning resistance of item 0-1000, where 1000 equals 100.0% .resistPoison // Poison resistance of item 0-1000, where 1000 equals 100.0% .resistRain // Rain resistance of item 0-1000, where 1000 equals 100.0% .resistSnow // Snow resistance of item 0-1000, where 1000 equals 100.0% .damageHeat // Weapon deals Heat/Fire elemental damage (true/false) .damageCold // Weapon deals Cold elemental damage (true/false) .damageLight // Weapon deals Light elemental damage (true/false) .damageLightning // Weapon deals Lightning elemental damage (true/false) .damagePoison // Weapon deals Poison elemental damage (true/false) .damageRain // Weapon deals Rain/Water elemental damage (true/false) .damageSnow // Weapon deals Snow/Ice elemental damage (true/false) Added new UOX.INI setting under [server] to enable/disable shard response to ConnectUO server polling (disabled by default) Sub-commands are no longer included when registering packets to be overloaded via RegisterPacket function, as that part was never fully implemented. Packet-hook scripts can be setup for specific packet IDs, but any sub-command checking will need to be done in the script itself JS Packet Method GetDWord() now uses JS_NewNumberValue instead of INT_TO_JSVAL to read from the socket buffer, to better handle large numbers, which could previously be returned with wrong values. JS Function CalcItemFromSer() now uses a JS_GetStringBytes() and str_value() combo instead of JSVAL_TO_INT() to read the data provided in the function argument. This allows JS scripts to provide item serials to the function directly without needing to split it into four parts first (though that still works) Fixed issue where JS properties for multis didn't always return correct values The 'set command can now be used to set the armour class of items ('set ac #) Reimplemented 'tweak command in JS engine (js/commands/targeting/tweak.js) - can be used to view and modify properties of characters, character skills, items, multis and regions (target ground) Added placeholder packet-hook script (js/server/network/0xf1_connectUoServerPoll.js) to handle responses to ConnectUO server polling. By default this script does nothing, but serves as a placeholder for drop-in replacement scripts generated specifically for each shard by the ConnectUO service. Updated some commands to support an alternate STATIC keyword (can also be ommitted) to add base items: 'add static itemID 'tile static itemID Updated some commands with support for randomization. Provided itemID will be randomized based on provided rndValue: /js/commands/targeting/add.js: 'add itemID rndValue cmdtable.cpp and targeting.cpp: 'tile itemID rndValue 'tile itemID x1 x2 y1 y2 z rndValue Updated js/commands/custom/repeatingcmds.js to support 'm delete as an alias for 'rremove Added 'props as an alias for the 'tweak command Added 'teleport as an alias for the 'tele command (js/commands/targeting/tele.js) Added 'shavehair and 'shavebeard as aliases for 'kill hair and 'kill beard (js/commands/targeting/kill.js) Added 'noinvul and 'mortal aliases for the 'invul false command (js/commands/custom/misc-cmds.js) Added 'immortal and 'invul (without parameter) as aliases for the 'invul true command Added 'bringtopack as an alias of 'movetobag command (js/commands/targeting/movetobag.js) Updated check for cancelling of target cursor in various JS scripts Minor updates to various JS scripts Fixed issue where some item definitions in dfndata/harditems/harditems.dfn and dfndata/items/building/lighting.dfn used comma instead of space as delimiter for the VALUE tag, which thus never got applied Updated all NPC definitions to let NPCs spawn facing in random directions
2021-03-22 05:59:20 +08:00
*vp = JSVAL_NULL;
}
Housing Revamp and more Updated JS SysMessage function to accept up to 10 extra, optional arguments, which can be used with dictionary messages that require additional parameters like %s or %i Added new type of house privilege in cMultiObj.cpp to keep track of friends of the multi - HOUSEPRIV_FRIEND - which is stored during worldsaves as one or more Friend=<player serial> tags in house.wsc Added new type of house privilege in cMultiObj.cpp to keep track of guests of the multi - HOUSEPRIV_GUEST - which is stored during worldsaves as one or more Guest=<player serial> tags in house.wsc When items are created for houses upon house placement, a reference to the multi's serial is now stored in the house sign's MORE property to allow easier tracking of which house a particular sign belongs to Added tracking of new, persistent properties for houses via cMultiObj.cpp/h: lockdowns, secure containers, vendors, guests, friends, owners, ban location, public status, number of visits, timestamps Added a multitude of new methods in cMultiObj.cpp/h to assist in improving the functionality of houses Added new tags for houses in house.dfn (default values applied if tag not specified): MAXSECURECONTAINERS=4 - Max amount of secure containers allowed in a multi MAXLOCKDOWNS=256 - Max amount of lockdowns allowed in a multi MAXVENDORS=10 - Max amount of vendors allowed in a multi MAXBANS=50 - Max amount of bans in a multi's ban list MAXFRIENDS=50 - Max amount of friends in a multi's friend list MAXGUESTS=50 - Max amount of guests in a multi's guest list MAXOWNERS=8 - Max amount of owners and co-owners in a multi's owner list MAXTRASHCONTAINERS=1 - Max amount of trash containers allowed in multi SCRIPT=<scriptID> - Assign a JS script-ID directly to a multi FRONTDOOR - indicates that a door is the front door of a house. Cannot be locked in public houses! INTERIORDOOR - indicates that a door is an interior door of a house. Can be locked in public houses. BANX - Location X offset for multi's ban location, if not used, will try to use SE corner of multi instead BANY - Location Y offset for multi's ban location, if not used, will try to use SE corner of multi instead Added JS Event: onHouseCommand( tSock, multiObj, cmdID ) - For handling spoken house commands via JS scripts attached to multi. Updated JS Events: onEntrance() - can now trigger both for multi being entered and/or object entering onLeaving() - can now trigger both for multi being left and/or object entering onSpeech() - can now also trigger for items (in addition to chars) with event & script attached, if UOX.INI setting ITEMSDETECTSPEECH is enabled Added JS Multi methods: .IsBoat() - Returns whether the item (or multi) is a boat .IsOwner( playerToCheck ) - Returns whether a player is the owner of a multi .IsOnOwnerList( playerToCheck ) - Returns whether a player is on the (co-)owner list of a multi .IsOnFriendList( playerToCheck ) - Returns whether a player is on the friend list of a multi .IsOnGuestList( playerToCheck ) - Returns whether a player is on the guest list of a multi .IsOnBanList( playerToCheck ) - Returns whether a player is on the ban list of a multi .AddToFriendList( playertoAdd ) - Adds player to the friend list of a multi .RemoveFromFriendList( playertoRemove ) - Removes player from the friend list of a multi .AddToGuestList( playertoAdd ) - Adds player to the guest list of a multi .RemoveFromGuestList( playertoRemove ) - Removes player from the guest list of a multi .ClearOwnerList() - Clears all entries from a multi's (co-)owner list .ClearFriendList() - Clears all entries from a multi's friend list .ClearGuestList() - Clears all entries from a multi's guest list .ClearBanList() - Clears all entries from a multi's ban list .SecureContainer( itemToSecure ) - Secures a container in a multi .UnsecureContainer( itemToUnsecure ) - Unsecures a container in a multi .IsSecureContainer( itemToCheck ) - Checks if specified item is a secure container in a multi .LockDownItem( itemToLockDown) - Locks down an item in a multi .ReleaseItem( itemToRelease ) - Releases a locked down item in a multi .KillKeys() - Deletes ALL keys associated with a multi .AddTrashCont( itemToAdd ) - Add trash container to multi's list of trash containers .RemoveTrashCont( itemToRemove ) - Remove trash container from multi's list of trash containers Added JS Item (Multi only) properties: .lockdowns - Get the number of lockdowns in a multi .maxLockdowns - Get/Set the max number of lockdowns allowed in a multi .secureContainers - Get the number of secure containers in a multi .maxSecureContainers - Get/Set the max number of secure containers allowed in a multi .trashContainers - Get the number of trash containers in a multi .maxTrashContainers - Get/Set the max number of trash containers allowed in a multi .friends - Get the number of friends in a multi's friend list .maxFriends - Get/Set the max number of friends allowed in a multi's friend list .guests - Get the number of guests in a multi's guest list .maxGuests - Get/Set the max number of guests allowed in a multi's guest list .owners - Get the number of owners in a multi's owner list .maxOwners - Get/Set the max number of owners allowed in a multi's owner list .bans - Get the number of banned players in a multi's ban list .maxBans - Get/Set the max number of banned players allowed in a multi's ban list .vendors - Get the number of player vendors in a multi .maxVendors - Get the max number of player vendors allowed in a multi .deed - Get the item sectionID for deed used to place multi .isPublic - Get/Set the private/public state of a multi .buildTimestamp - Get the timestamp for when the house was originally placed .tradeTimestamp - Get the timestamp for when the house was last traded to another player .banX - Get/Set the ban location X offset for the multi .banY - Get/Set the ban location Y offset for the multi Added JS Character properties: .multi = Get/Set the multi object the character is in .accountNum = Get the account number the character belongs to .housesOwned = Get a count of houses owned by the character .housesCoOwned = Get a count of houses co-owned by the character Updated JS cBaseObject Methods .FirstItem(), .NextItem() and .FinishedItems() to also support iterating through items in multis Updated JS multi Methods .FirstChar(), .NextChar() and .FinishedChars() to support an additional parameter to specify what kind of characters to loop through: "default" or no parameter - all characters inside the multi "owner" - players on multi's owner list "friend" - players on multi's friend list "guest" - players on multi's guest list "banned" - players on multi's ban list Added new INI tags to a new section of uox.ini called [houses] DECAYTIMERINHOUSE=3600 // Decay timer in seconds for non-locked down items inside houses PROTECTPRIVATEHOUSES=1 // Toggles whether private houses will automatically boot unauthorized visitors (1) or not (0) TRACKHOUSESPERACCOUNT=1 // Toggles whether to track (and restrict) house ownership per account (1) or per character (0) MAXHOUSESOWNABLE=1 // Specifies the max amount of houses a player can own per account/char, depending on how house ownership is tracked MAXHOUSESCOOWNABLE=10 // Specifies the max amount of houses a player can co-own per character CANOWNANDCOOWNHOUSES=1 // Toggles whether players can own and co-own houses at the same time COOWNHOUSESONSAMEACCOUNT=1 // Toggles whether characters on same account as house owner will be treated as co-owners Added new INI tags in [settings] section of uox.ini: ITEMSDETECTSPEECH=0 // If enabled, server will search for nearby items with onSpeech JS event running whenever a character speaks. Disabled by default. MAXPLAYERPACKITEMS=125 // Defines max item capacity for player (and NPC) backpacks. Defaults to 125. Moved most of the existing house functionality to JS and expanded upon it to reach feature parity with houses in regular UO around Publish 15/16, with various extras thrown in for good measure and all functionality being customizable: js/server/house/house.js (15000) - handles detection of house commands and characters entering/leaving houses js/server/house/houseSign.js (15001) - contains and handles all house-related gumps/menus and what is shown when players interact with house sign js/server/house/houseCommands.js (15002) - handles functionality of house commands and other functionality such as transfer of ownership, demolishing house, etc. js/server/house/houseDeed.js (15003) - handles initial rules that allow/disallow placement of additional houses for players All house-related menus now fully handled through JS All house commands and other functionality now fully handled through JS Removed redundant hard-coded house functionality Implemented Co-owners, friends, guests for houses, with access rules in place for entry, lockdowns, house commands, etc. Implemented Private and Public houses Implemented Secure Containers and Trash Barrels Definable max lockdowns, secure containers, player vendors, bans, friends, guests, owners, trash containers and more - per house type JS scripts can now be attached directly to houses Doors in houses can be marked as front doors or interior doors, and will be treated differently with regards to private and public houses Added new item to dfndata/items/containers/misc.dfn - [trashbarrel] Added new JS script (js/items/trashbarrel.js) with trash barrel functionality for houses. Trash barrels that are marked as secure containers are only accessible by owners, co-owners and friends of the house. Various options available at top of script. Updated js/items/axe.js to support chopping up trash barrels and house add-ons in houses owned by the player Fixed an issue with house doors being left behind after demolishing houses while their doors were open Fixed an issue where GMs could be banned from player houses Added Line of Sight checks to speech, to give players some privacy in their own homes Updated house placement code to more accurately check for other multis, dynamic and static objects when placing houses; now requires free space around each house that cannot be blocked by other houses or items that can block player movement, and disallows placement of houses on roads Updated house placement code to move characters blocking house placement to SE corner of the house Updated house placement code to disallow placing houses in guarded regions, or in dungeons Added new DFN tag for regions to enable/disable player houses in specific regions: HOUSING=0/1 Added new region (247) that covers path to Valley of Eodon in Felucca Added new region (248) that covers Valley of Eodon in Ter-Mur, with player housing disabled Added new region (249) that covers entire T2A lands, with player housing disabled Updated SPACEX and SPACEY values for all houses in dfndata/house/house.dfn to match updated house placement code Added new JS property to Regions that can be used to determine or change state of player housing in a region: .canPlaceHouse() Updated rules for usage of dye tubs to dye locked down items; now only house owners or co-owners may dye locked down items Updated rules for usage of the following locked down items in a house, which are now only usable by house owners and co-owners Dyes, Guildstone Deeds, Recall Runes (renaming), Rename Deeds, Townstone Deeds, House Deeds, Boat Models, Player Vendor Deeds, Ore, Hair Dye Updated rules for usage of the following locked down items in a house, which are now only usable by house owners, co-owners and friends: Keys, Dye Tubs, Magic Scrolls, Fireworks Wands, Magic Wands, Smithing Tools, Mining Tools, Fishing Poles Updated item lockdown rules to allow locking down (and releasing) items in a container as long as the container is locked down, and to only allow releasing a locked down container if it's empty of locked down items Updated item lockdown rules to only allow locking down movement-blocking items further than 2 tiles away from doors Updated rules for releasing items in houses - now the house owner can release any locked down items, co-owners can release items locked down by themselves or by friends, while friends can release only items locked down by themselves Added some feedback to player about why their attempted house placement failed Items added by GMs directly into multis will now decay based on the house-specific decay timer instead of the regular one Fixed an issue that could cause items to almost instantly decay after being released from lockdown in a house Placing house add-ons now properly takes into account SPACEX and SPACEY values when checking if they can fit in selected area of houses Re-added SPACEX and SPACEY values for Pentagram and Loom house add-ons House add-ons can now be converted back into house add-on deeds by chopping them with an axe Added new item type - IT_HOUSEADDON (201) - used by house add-ons placed in player houses Fixed a bug where keys would stop working after being added to a keyring, and would turn into blank keys upon release from the keyring Added visitor count for public player houses, which keeps track of how many visits a public house has received, with each player counted max 1 time every 24 hours Fixed an issue with FindPlayersInOldVisrange() where it didn't take into account that players could see buildings further away than the standard update range. This could cause players to see ghost images of buildings if they were at the "right" distance when the building was being demolished Added NODECAY tag to all signs and doors in dfndata/house/house.dfn Added FRONTDOOR or INTERIORDOOR (as appropriate) to all doors in dfndata/house/house.dfn Added BANX and BANY to specify ban location for some houses in dfndata/house/house.dfn instead of relying on finding SE corner automatically Implemented strongboxes (js/server/house/strongbox.js) for co-owners of a house, which can be placed with the house command "i wish to place a strongbox". Max capacity is 25 items Updated 'REMOVE command to take an optional parameter - itemID. If supplied, the command will remove all items with this itemID from a targeted container Fixed a bug when checking if dynamic items were blocking valid spawn locations for NPCs, some function arguments were in the wrong order! Improved code that finds valid spawn locations for items and NPCs spawned via spawn regions. As server gradually builds up lists of valid spawn locations per region over time, it will start using these lists more often, rather than always look for brand new spawn locations. Fixed a bug with CMulHandler::CheckStaticFlag() that prevented NPCs from spawning inside buildings with no static floors! Fixed an issue with repeating commands that prevented GMs from being able to cancel them when using the ClassicUO client Exposed character property .accountNum to JS engine Extended CDataList class to include a Clear() method for clearing lists Updated JS File method .Open() to support an optional, third argument - subFolderName - that defines in which sub-folder of UOX3/shared/ to store/look for a file. If no third argument is supplied, UOX3 will default to using the shared folder itself. Updated JS File method .Length() to return a value of -1 for files that don't exist Added new code function, exposed to JS engine with same parameters, which simply checks if a given tile ID has a specific flag bool CheckTileFlag( UI16 itemID, TILEFLAG flagToCheck ) Added JS function used to find the root container of an item (if any) FindRootContainer( itemSerial ) FindRootContainer( item ) Added new JS function that allows deleting files from UOX3/shared/ folder or subfolders of shared folder. If no subFolderName is provided, looks for file directly in shared folder itself. Restrictions on file- and folder-names apply. bool DeleteFile( fileName, subFolderName ) Added new JS functions for checking if a specific client or server feature is enabled. See documentation for full list of client/server features. GetClientFeature( bitNum ) // Returns true if specified client feature is enabled on server GetServerFeature( bitNum ) // Returns true if specified server feature is enabled on server Added new JS function for returning the value of almost any server setting from UOX.INI GetServerSetting( settingNameInDoubleQuotes ) Updated JS function DoesDynamicBlock() with two new parameters - checkOnlyMultis and checkOnlyNonMultis Updated JS function DoesMapBlock() with two new parameters - checkMultiPlacement and checkForRoad Fixed an issue where a LoS check would prevent players from accessing containers in their own backpack Added new functions in findfuncs.cpp to make it easier to find items near another object or location: findNearbyItems( object, distance ) findNearbyItems( x, y, worldNumber, instanceID, distance ) Added new Item property - maxItems - used by containers to determine their max item capacity Added new Item property - totalItemCount - used to get total item count in a container (including sub-containers) Added check for max item capacity when creating new items that are added to a character's backpack - items will be created below character's feet if backpack is full! Added new DFN tag for items, used by containers to determine item capacity for a given container: MAXITEMS=# // 125 is the default for all containers if not set Added new JS Item properties: .maxItems // gets/sets item capacity for a given container .totalItemCount // gets total item count in a container, including sub-containers Updated item tooltips for containers to show accurate total item count, as well as to display max item capacity Fixed a bug where picking up items from a non-locked down pile of items on the floor inside a multi could cause the remaining pile to be seen as no longer inside the multi, disallowing locking it back down and causing it to decay based on regular decay timer instead of house-specific one Updated JS command set to allow setting poison-level on items ('set poison #) and hunger-level on characters ('set hunger #) Fixed an issue with js/item/food.js that prevented poisoned food from poisoning characters when eaten Fixed an issue with js/skill/poisoning.js that prevented players from poisoning food! Updated various JS scripts and hardcoded targeting functions to disallow the targeting of locked down resources using skills and tools Updated JS Method TextMessage() to support three extra, optional parameters. Note that if one optional parameter is included, all preceding optional parameters are also required! speechTarget - What kind of target is this message intended for? 0 - Only visible for sender and receiver of message 1 - Visible to all players in range 2 - Visible to all NPCs and players in range 3 - Visible to all PCs everywhere + NPCs in range 4 - Visible to all PCs everywhere (broadcast) 5 - Only visible for the receiver of the message speechTargetSerial - The serial of the receiver of the message, used if speechTarget is 0 or 5 speechFontType - The type of font to display the text in. Defaults to normal. 0 - Bold 1 - Normal with shadow 2 - Bold with shadow 3 - Normal 4 - Gothic 5 - Italic 6 - Small, dark 7 - Colourful 8 - Runic (only works with CAPS) 9 - Small, light Added timestamp to worldsaves in console, to make it easier to see when a particular world-save was done Added info about compiler/environment displayed at the top of the UOX3 console during startup Updated dictionary files with new messages primarily related to housing
2020-11-04 02:00:37 +08:00
break;
case CIP_MAXFRIENDS:
if( gPriv->GetObjType() == OT_MULTI )
{
*vp = INT_TO_JSVAL(( static_cast<CMultiObj *>( gPriv )->GetMaxFriends() ));
}
0.99.4d Added new option in UOX.INI under [settings] section: MAPDIFFSENABLED=0/1 // If enabled, server will attempt to load diff files, and send "Enable Map-diff files" packet to client to also load these. Disabled by default. Server no longer loads map/statics diff files by default, nor does it send packet to client to request loading these files, as only client versions below 7.0.8.2 will actively load these files. Can be re-enabled with new UOX.INI setting mentioned above! Fixed incorrect ID for gargish dagger in CHandleCombat::getWeaponType() Added missing weapon entries in CHandleCombat::getWeaponType(): bladed whip, barbed whip, spiked whip, gargish talwar Fixed an issue that would show the end part of some tiledata names as garbled text instead of cutting off the text(!) at 20 characters Fixed an issue with advanced character creation template when using ClassicUO client, which sends a profession value of 255 instead of 0 when no profession template has been selected. Fixed an issue where clones of NPCs that can split in combat didn't get the NPC flag correctly set Guild titles are now removed for players who leave their guilds Enabled closing some hard-coded gump menus using right-click (howto, guild, towns, wholist, addmenu, craftmenu, info) Fixed an issue where adding base items using 'add [itemID] would sometimes get false positive hits from harditems.dfn, depending on the length of the itemID Fixed an issue where items added using 'add [itemID] would not get names applied properly from harditems.dfn Item/NPC DFN tag GET can now inherit a random parent by adding additional values separated by spaces. Syntax: GET=parent1 parent2 parent3 (etc) Fixed an issue where NPC backpacks would not have the max item capacity set properly Added new properties for CItem objects (also exposed as JS Item Properties): maxRange // max distance a ranged weapon can fire at (replaces ARCHERRANGE ini setting) baseRange // base distance throwing weapons (when implemented) can be used at Added support for new Item DFN tag that replaces global UOX.INI setting ARCHERRANGE: MAXRANGE=# // Specifies max range of ranged weapon Added support for new Item/NPC DFN tags to support randomizing elemental resistances: RESISTFIRE=#/# # // Set NPC's poison resistance; fixed or random value RESISTCOLD=#/# # // Set NPC's poison resistance; fixed or random value RESISTLIGHTNING=#/# # // Set NPC's poison resistance; fixed or random value RESISTPOISON=#/# # // Set NPC's poison resistance; fixed or random value Added support for two new DFN tags in dfndata/race/races.dfn that can be used to allow/ban lists of equipment for specific races ALLOWEQUIPLIST=# BANEQUIPLIST=# Added support for new section in dfndata/race/races.dfn - [EQUIPLIST #], which can be used to define lists of equipment that is whitelisted or banned for specific races. Fixed a bug that would report incorrect weight in tooltips for Item/NPC spawner objects ScriptSections are now reapplied for items bought by players from NPC vendors Fixed an issue where players could drop an item on the ground and other players would still see the item after it was picked up, because of a failed distance check vs old location coordinates (in pack) instead of vs current location on ground Fixed a bug with players being able to use last-target macro to target objects picked up and held by other players on their cursor Updated all references to "devinelock" to be "divinelock" instead - this includes the name of the JS Item property Fixed house commands triggering (useless) targeting cursors for players onboard boats Changed default statcap in UOX.INI from 325 to 225 Fixed a out-of-range error for players attempting to combine ore inside their own backpack Fixed various issues with distance checks and container checks when using/target objects Added optional 4th "hue" parameter to AddGump JS method Added JS Function to get total amount of accounts on server - GetAccountCount() Added JS Function to get total amount of players online - GetPlayerCount() onSwing JS Event can now trigger in scripts attached to items, not just items attached to characters Added some JS Functions to expose some hard-coded constants to JS scripts: BASEITEMSERIAL() // Base item serial INVALIDSERIAL() // Invalid serial INVALIDID() // Invalid ID INVALIDCOLOUR() // Invalid colour Fixed an issue where JS character property .colour would modify origSkin property instead of colour Fixed an issue where JS character property .guildTitle returned the name of the character instead of the guild title Character JS property .poison can now also be used to set a character's poisoned level, not just read it Exposed Item property to JS engine: .ac // armour class for item (0-128). Primarily used for setting race-restrictions for equippable items, i.e. race X cannot equip items of armour class Y. .def // defensive value of item (Physical resistance post-AoS, AR in older UO) // NOTE: The following properties don't actually do anything yet, but can still be used in custom JS scripts if desired .resistCold // Cold resistance of item 0-1000, where 1000 equals 100.0% .resistHeat // Heat/Fire resistance of item 0-1000, where 1000 equals 100.0% .resistLight // Light resistance of item 0-1000, where 1000 equals 100.0% .resistLightning // Energy/Lightning resistance of item 0-1000, where 1000 equals 100.0% .resistPoison // Poison resistance of item 0-1000, where 1000 equals 100.0% .resistRain // Rain resistance of item 0-1000, where 1000 equals 100.0% .resistSnow // Snow resistance of item 0-1000, where 1000 equals 100.0% .damageHeat // Weapon deals Heat/Fire elemental damage (true/false) .damageCold // Weapon deals Cold elemental damage (true/false) .damageLight // Weapon deals Light elemental damage (true/false) .damageLightning // Weapon deals Lightning elemental damage (true/false) .damagePoison // Weapon deals Poison elemental damage (true/false) .damageRain // Weapon deals Rain/Water elemental damage (true/false) .damageSnow // Weapon deals Snow/Ice elemental damage (true/false) Added new UOX.INI setting under [server] to enable/disable shard response to ConnectUO server polling (disabled by default) Sub-commands are no longer included when registering packets to be overloaded via RegisterPacket function, as that part was never fully implemented. Packet-hook scripts can be setup for specific packet IDs, but any sub-command checking will need to be done in the script itself JS Packet Method GetDWord() now uses JS_NewNumberValue instead of INT_TO_JSVAL to read from the socket buffer, to better handle large numbers, which could previously be returned with wrong values. JS Function CalcItemFromSer() now uses a JS_GetStringBytes() and str_value() combo instead of JSVAL_TO_INT() to read the data provided in the function argument. This allows JS scripts to provide item serials to the function directly without needing to split it into four parts first (though that still works) Fixed issue where JS properties for multis didn't always return correct values The 'set command can now be used to set the armour class of items ('set ac #) Reimplemented 'tweak command in JS engine (js/commands/targeting/tweak.js) - can be used to view and modify properties of characters, character skills, items, multis and regions (target ground) Added placeholder packet-hook script (js/server/network/0xf1_connectUoServerPoll.js) to handle responses to ConnectUO server polling. By default this script does nothing, but serves as a placeholder for drop-in replacement scripts generated specifically for each shard by the ConnectUO service. Updated some commands to support an alternate STATIC keyword (can also be ommitted) to add base items: 'add static itemID 'tile static itemID Updated some commands with support for randomization. Provided itemID will be randomized based on provided rndValue: /js/commands/targeting/add.js: 'add itemID rndValue cmdtable.cpp and targeting.cpp: 'tile itemID rndValue 'tile itemID x1 x2 y1 y2 z rndValue Updated js/commands/custom/repeatingcmds.js to support 'm delete as an alias for 'rremove Added 'props as an alias for the 'tweak command Added 'teleport as an alias for the 'tele command (js/commands/targeting/tele.js) Added 'shavehair and 'shavebeard as aliases for 'kill hair and 'kill beard (js/commands/targeting/kill.js) Added 'noinvul and 'mortal aliases for the 'invul false command (js/commands/custom/misc-cmds.js) Added 'immortal and 'invul (without parameter) as aliases for the 'invul true command Added 'bringtopack as an alias of 'movetobag command (js/commands/targeting/movetobag.js) Updated check for cancelling of target cursor in various JS scripts Minor updates to various JS scripts Fixed issue where some item definitions in dfndata/harditems/harditems.dfn and dfndata/items/building/lighting.dfn used comma instead of space as delimiter for the VALUE tag, which thus never got applied Updated all NPC definitions to let NPCs spawn facing in random directions
2021-03-22 05:59:20 +08:00
else
{
0.99.4d Added new option in UOX.INI under [settings] section: MAPDIFFSENABLED=0/1 // If enabled, server will attempt to load diff files, and send "Enable Map-diff files" packet to client to also load these. Disabled by default. Server no longer loads map/statics diff files by default, nor does it send packet to client to request loading these files, as only client versions below 7.0.8.2 will actively load these files. Can be re-enabled with new UOX.INI setting mentioned above! Fixed incorrect ID for gargish dagger in CHandleCombat::getWeaponType() Added missing weapon entries in CHandleCombat::getWeaponType(): bladed whip, barbed whip, spiked whip, gargish talwar Fixed an issue that would show the end part of some tiledata names as garbled text instead of cutting off the text(!) at 20 characters Fixed an issue with advanced character creation template when using ClassicUO client, which sends a profession value of 255 instead of 0 when no profession template has been selected. Fixed an issue where clones of NPCs that can split in combat didn't get the NPC flag correctly set Guild titles are now removed for players who leave their guilds Enabled closing some hard-coded gump menus using right-click (howto, guild, towns, wholist, addmenu, craftmenu, info) Fixed an issue where adding base items using 'add [itemID] would sometimes get false positive hits from harditems.dfn, depending on the length of the itemID Fixed an issue where items added using 'add [itemID] would not get names applied properly from harditems.dfn Item/NPC DFN tag GET can now inherit a random parent by adding additional values separated by spaces. Syntax: GET=parent1 parent2 parent3 (etc) Fixed an issue where NPC backpacks would not have the max item capacity set properly Added new properties for CItem objects (also exposed as JS Item Properties): maxRange // max distance a ranged weapon can fire at (replaces ARCHERRANGE ini setting) baseRange // base distance throwing weapons (when implemented) can be used at Added support for new Item DFN tag that replaces global UOX.INI setting ARCHERRANGE: MAXRANGE=# // Specifies max range of ranged weapon Added support for new Item/NPC DFN tags to support randomizing elemental resistances: RESISTFIRE=#/# # // Set NPC's poison resistance; fixed or random value RESISTCOLD=#/# # // Set NPC's poison resistance; fixed or random value RESISTLIGHTNING=#/# # // Set NPC's poison resistance; fixed or random value RESISTPOISON=#/# # // Set NPC's poison resistance; fixed or random value Added support for two new DFN tags in dfndata/race/races.dfn that can be used to allow/ban lists of equipment for specific races ALLOWEQUIPLIST=# BANEQUIPLIST=# Added support for new section in dfndata/race/races.dfn - [EQUIPLIST #], which can be used to define lists of equipment that is whitelisted or banned for specific races. Fixed a bug that would report incorrect weight in tooltips for Item/NPC spawner objects ScriptSections are now reapplied for items bought by players from NPC vendors Fixed an issue where players could drop an item on the ground and other players would still see the item after it was picked up, because of a failed distance check vs old location coordinates (in pack) instead of vs current location on ground Fixed a bug with players being able to use last-target macro to target objects picked up and held by other players on their cursor Updated all references to "devinelock" to be "divinelock" instead - this includes the name of the JS Item property Fixed house commands triggering (useless) targeting cursors for players onboard boats Changed default statcap in UOX.INI from 325 to 225 Fixed a out-of-range error for players attempting to combine ore inside their own backpack Fixed various issues with distance checks and container checks when using/target objects Added optional 4th "hue" parameter to AddGump JS method Added JS Function to get total amount of accounts on server - GetAccountCount() Added JS Function to get total amount of players online - GetPlayerCount() onSwing JS Event can now trigger in scripts attached to items, not just items attached to characters Added some JS Functions to expose some hard-coded constants to JS scripts: BASEITEMSERIAL() // Base item serial INVALIDSERIAL() // Invalid serial INVALIDID() // Invalid ID INVALIDCOLOUR() // Invalid colour Fixed an issue where JS character property .colour would modify origSkin property instead of colour Fixed an issue where JS character property .guildTitle returned the name of the character instead of the guild title Character JS property .poison can now also be used to set a character's poisoned level, not just read it Exposed Item property to JS engine: .ac // armour class for item (0-128). Primarily used for setting race-restrictions for equippable items, i.e. race X cannot equip items of armour class Y. .def // defensive value of item (Physical resistance post-AoS, AR in older UO) // NOTE: The following properties don't actually do anything yet, but can still be used in custom JS scripts if desired .resistCold // Cold resistance of item 0-1000, where 1000 equals 100.0% .resistHeat // Heat/Fire resistance of item 0-1000, where 1000 equals 100.0% .resistLight // Light resistance of item 0-1000, where 1000 equals 100.0% .resistLightning // Energy/Lightning resistance of item 0-1000, where 1000 equals 100.0% .resistPoison // Poison resistance of item 0-1000, where 1000 equals 100.0% .resistRain // Rain resistance of item 0-1000, where 1000 equals 100.0% .resistSnow // Snow resistance of item 0-1000, where 1000 equals 100.0% .damageHeat // Weapon deals Heat/Fire elemental damage (true/false) .damageCold // Weapon deals Cold elemental damage (true/false) .damageLight // Weapon deals Light elemental damage (true/false) .damageLightning // Weapon deals Lightning elemental damage (true/false) .damagePoison // Weapon deals Poison elemental damage (true/false) .damageRain // Weapon deals Rain/Water elemental damage (true/false) .damageSnow // Weapon deals Snow/Ice elemental damage (true/false) Added new UOX.INI setting under [server] to enable/disable shard response to ConnectUO server polling (disabled by default) Sub-commands are no longer included when registering packets to be overloaded via RegisterPacket function, as that part was never fully implemented. Packet-hook scripts can be setup for specific packet IDs, but any sub-command checking will need to be done in the script itself JS Packet Method GetDWord() now uses JS_NewNumberValue instead of INT_TO_JSVAL to read from the socket buffer, to better handle large numbers, which could previously be returned with wrong values. JS Function CalcItemFromSer() now uses a JS_GetStringBytes() and str_value() combo instead of JSVAL_TO_INT() to read the data provided in the function argument. This allows JS scripts to provide item serials to the function directly without needing to split it into four parts first (though that still works) Fixed issue where JS properties for multis didn't always return correct values The 'set command can now be used to set the armour class of items ('set ac #) Reimplemented 'tweak command in JS engine (js/commands/targeting/tweak.js) - can be used to view and modify properties of characters, character skills, items, multis and regions (target ground) Added placeholder packet-hook script (js/server/network/0xf1_connectUoServerPoll.js) to handle responses to ConnectUO server polling. By default this script does nothing, but serves as a placeholder for drop-in replacement scripts generated specifically for each shard by the ConnectUO service. Updated some commands to support an alternate STATIC keyword (can also be ommitted) to add base items: 'add static itemID 'tile static itemID Updated some commands with support for randomization. Provided itemID will be randomized based on provided rndValue: /js/commands/targeting/add.js: 'add itemID rndValue cmdtable.cpp and targeting.cpp: 'tile itemID rndValue 'tile itemID x1 x2 y1 y2 z rndValue Updated js/commands/custom/repeatingcmds.js to support 'm delete as an alias for 'rremove Added 'props as an alias for the 'tweak command Added 'teleport as an alias for the 'tele command (js/commands/targeting/tele.js) Added 'shavehair and 'shavebeard as aliases for 'kill hair and 'kill beard (js/commands/targeting/kill.js) Added 'noinvul and 'mortal aliases for the 'invul false command (js/commands/custom/misc-cmds.js) Added 'immortal and 'invul (without parameter) as aliases for the 'invul true command Added 'bringtopack as an alias of 'movetobag command (js/commands/targeting/movetobag.js) Updated check for cancelling of target cursor in various JS scripts Minor updates to various JS scripts Fixed issue where some item definitions in dfndata/harditems/harditems.dfn and dfndata/items/building/lighting.dfn used comma instead of space as delimiter for the VALUE tag, which thus never got applied Updated all NPC definitions to let NPCs spawn facing in random directions
2021-03-22 05:59:20 +08:00
*vp = JSVAL_NULL;
}
Housing Revamp and more Updated JS SysMessage function to accept up to 10 extra, optional arguments, which can be used with dictionary messages that require additional parameters like %s or %i Added new type of house privilege in cMultiObj.cpp to keep track of friends of the multi - HOUSEPRIV_FRIEND - which is stored during worldsaves as one or more Friend=<player serial> tags in house.wsc Added new type of house privilege in cMultiObj.cpp to keep track of guests of the multi - HOUSEPRIV_GUEST - which is stored during worldsaves as one or more Guest=<player serial> tags in house.wsc When items are created for houses upon house placement, a reference to the multi's serial is now stored in the house sign's MORE property to allow easier tracking of which house a particular sign belongs to Added tracking of new, persistent properties for houses via cMultiObj.cpp/h: lockdowns, secure containers, vendors, guests, friends, owners, ban location, public status, number of visits, timestamps Added a multitude of new methods in cMultiObj.cpp/h to assist in improving the functionality of houses Added new tags for houses in house.dfn (default values applied if tag not specified): MAXSECURECONTAINERS=4 - Max amount of secure containers allowed in a multi MAXLOCKDOWNS=256 - Max amount of lockdowns allowed in a multi MAXVENDORS=10 - Max amount of vendors allowed in a multi MAXBANS=50 - Max amount of bans in a multi's ban list MAXFRIENDS=50 - Max amount of friends in a multi's friend list MAXGUESTS=50 - Max amount of guests in a multi's guest list MAXOWNERS=8 - Max amount of owners and co-owners in a multi's owner list MAXTRASHCONTAINERS=1 - Max amount of trash containers allowed in multi SCRIPT=<scriptID> - Assign a JS script-ID directly to a multi FRONTDOOR - indicates that a door is the front door of a house. Cannot be locked in public houses! INTERIORDOOR - indicates that a door is an interior door of a house. Can be locked in public houses. BANX - Location X offset for multi's ban location, if not used, will try to use SE corner of multi instead BANY - Location Y offset for multi's ban location, if not used, will try to use SE corner of multi instead Added JS Event: onHouseCommand( tSock, multiObj, cmdID ) - For handling spoken house commands via JS scripts attached to multi. Updated JS Events: onEntrance() - can now trigger both for multi being entered and/or object entering onLeaving() - can now trigger both for multi being left and/or object entering onSpeech() - can now also trigger for items (in addition to chars) with event & script attached, if UOX.INI setting ITEMSDETECTSPEECH is enabled Added JS Multi methods: .IsBoat() - Returns whether the item (or multi) is a boat .IsOwner( playerToCheck ) - Returns whether a player is the owner of a multi .IsOnOwnerList( playerToCheck ) - Returns whether a player is on the (co-)owner list of a multi .IsOnFriendList( playerToCheck ) - Returns whether a player is on the friend list of a multi .IsOnGuestList( playerToCheck ) - Returns whether a player is on the guest list of a multi .IsOnBanList( playerToCheck ) - Returns whether a player is on the ban list of a multi .AddToFriendList( playertoAdd ) - Adds player to the friend list of a multi .RemoveFromFriendList( playertoRemove ) - Removes player from the friend list of a multi .AddToGuestList( playertoAdd ) - Adds player to the guest list of a multi .RemoveFromGuestList( playertoRemove ) - Removes player from the guest list of a multi .ClearOwnerList() - Clears all entries from a multi's (co-)owner list .ClearFriendList() - Clears all entries from a multi's friend list .ClearGuestList() - Clears all entries from a multi's guest list .ClearBanList() - Clears all entries from a multi's ban list .SecureContainer( itemToSecure ) - Secures a container in a multi .UnsecureContainer( itemToUnsecure ) - Unsecures a container in a multi .IsSecureContainer( itemToCheck ) - Checks if specified item is a secure container in a multi .LockDownItem( itemToLockDown) - Locks down an item in a multi .ReleaseItem( itemToRelease ) - Releases a locked down item in a multi .KillKeys() - Deletes ALL keys associated with a multi .AddTrashCont( itemToAdd ) - Add trash container to multi's list of trash containers .RemoveTrashCont( itemToRemove ) - Remove trash container from multi's list of trash containers Added JS Item (Multi only) properties: .lockdowns - Get the number of lockdowns in a multi .maxLockdowns - Get/Set the max number of lockdowns allowed in a multi .secureContainers - Get the number of secure containers in a multi .maxSecureContainers - Get/Set the max number of secure containers allowed in a multi .trashContainers - Get the number of trash containers in a multi .maxTrashContainers - Get/Set the max number of trash containers allowed in a multi .friends - Get the number of friends in a multi's friend list .maxFriends - Get/Set the max number of friends allowed in a multi's friend list .guests - Get the number of guests in a multi's guest list .maxGuests - Get/Set the max number of guests allowed in a multi's guest list .owners - Get the number of owners in a multi's owner list .maxOwners - Get/Set the max number of owners allowed in a multi's owner list .bans - Get the number of banned players in a multi's ban list .maxBans - Get/Set the max number of banned players allowed in a multi's ban list .vendors - Get the number of player vendors in a multi .maxVendors - Get the max number of player vendors allowed in a multi .deed - Get the item sectionID for deed used to place multi .isPublic - Get/Set the private/public state of a multi .buildTimestamp - Get the timestamp for when the house was originally placed .tradeTimestamp - Get the timestamp for when the house was last traded to another player .banX - Get/Set the ban location X offset for the multi .banY - Get/Set the ban location Y offset for the multi Added JS Character properties: .multi = Get/Set the multi object the character is in .accountNum = Get the account number the character belongs to .housesOwned = Get a count of houses owned by the character .housesCoOwned = Get a count of houses co-owned by the character Updated JS cBaseObject Methods .FirstItem(), .NextItem() and .FinishedItems() to also support iterating through items in multis Updated JS multi Methods .FirstChar(), .NextChar() and .FinishedChars() to support an additional parameter to specify what kind of characters to loop through: "default" or no parameter - all characters inside the multi "owner" - players on multi's owner list "friend" - players on multi's friend list "guest" - players on multi's guest list "banned" - players on multi's ban list Added new INI tags to a new section of uox.ini called [houses] DECAYTIMERINHOUSE=3600 // Decay timer in seconds for non-locked down items inside houses PROTECTPRIVATEHOUSES=1 // Toggles whether private houses will automatically boot unauthorized visitors (1) or not (0) TRACKHOUSESPERACCOUNT=1 // Toggles whether to track (and restrict) house ownership per account (1) or per character (0) MAXHOUSESOWNABLE=1 // Specifies the max amount of houses a player can own per account/char, depending on how house ownership is tracked MAXHOUSESCOOWNABLE=10 // Specifies the max amount of houses a player can co-own per character CANOWNANDCOOWNHOUSES=1 // Toggles whether players can own and co-own houses at the same time COOWNHOUSESONSAMEACCOUNT=1 // Toggles whether characters on same account as house owner will be treated as co-owners Added new INI tags in [settings] section of uox.ini: ITEMSDETECTSPEECH=0 // If enabled, server will search for nearby items with onSpeech JS event running whenever a character speaks. Disabled by default. MAXPLAYERPACKITEMS=125 // Defines max item capacity for player (and NPC) backpacks. Defaults to 125. Moved most of the existing house functionality to JS and expanded upon it to reach feature parity with houses in regular UO around Publish 15/16, with various extras thrown in for good measure and all functionality being customizable: js/server/house/house.js (15000) - handles detection of house commands and characters entering/leaving houses js/server/house/houseSign.js (15001) - contains and handles all house-related gumps/menus and what is shown when players interact with house sign js/server/house/houseCommands.js (15002) - handles functionality of house commands and other functionality such as transfer of ownership, demolishing house, etc. js/server/house/houseDeed.js (15003) - handles initial rules that allow/disallow placement of additional houses for players All house-related menus now fully handled through JS All house commands and other functionality now fully handled through JS Removed redundant hard-coded house functionality Implemented Co-owners, friends, guests for houses, with access rules in place for entry, lockdowns, house commands, etc. Implemented Private and Public houses Implemented Secure Containers and Trash Barrels Definable max lockdowns, secure containers, player vendors, bans, friends, guests, owners, trash containers and more - per house type JS scripts can now be attached directly to houses Doors in houses can be marked as front doors or interior doors, and will be treated differently with regards to private and public houses Added new item to dfndata/items/containers/misc.dfn - [trashbarrel] Added new JS script (js/items/trashbarrel.js) with trash barrel functionality for houses. Trash barrels that are marked as secure containers are only accessible by owners, co-owners and friends of the house. Various options available at top of script. Updated js/items/axe.js to support chopping up trash barrels and house add-ons in houses owned by the player Fixed an issue with house doors being left behind after demolishing houses while their doors were open Fixed an issue where GMs could be banned from player houses Added Line of Sight checks to speech, to give players some privacy in their own homes Updated house placement code to more accurately check for other multis, dynamic and static objects when placing houses; now requires free space around each house that cannot be blocked by other houses or items that can block player movement, and disallows placement of houses on roads Updated house placement code to move characters blocking house placement to SE corner of the house Updated house placement code to disallow placing houses in guarded regions, or in dungeons Added new DFN tag for regions to enable/disable player houses in specific regions: HOUSING=0/1 Added new region (247) that covers path to Valley of Eodon in Felucca Added new region (248) that covers Valley of Eodon in Ter-Mur, with player housing disabled Added new region (249) that covers entire T2A lands, with player housing disabled Updated SPACEX and SPACEY values for all houses in dfndata/house/house.dfn to match updated house placement code Added new JS property to Regions that can be used to determine or change state of player housing in a region: .canPlaceHouse() Updated rules for usage of dye tubs to dye locked down items; now only house owners or co-owners may dye locked down items Updated rules for usage of the following locked down items in a house, which are now only usable by house owners and co-owners Dyes, Guildstone Deeds, Recall Runes (renaming), Rename Deeds, Townstone Deeds, House Deeds, Boat Models, Player Vendor Deeds, Ore, Hair Dye Updated rules for usage of the following locked down items in a house, which are now only usable by house owners, co-owners and friends: Keys, Dye Tubs, Magic Scrolls, Fireworks Wands, Magic Wands, Smithing Tools, Mining Tools, Fishing Poles Updated item lockdown rules to allow locking down (and releasing) items in a container as long as the container is locked down, and to only allow releasing a locked down container if it's empty of locked down items Updated item lockdown rules to only allow locking down movement-blocking items further than 2 tiles away from doors Updated rules for releasing items in houses - now the house owner can release any locked down items, co-owners can release items locked down by themselves or by friends, while friends can release only items locked down by themselves Added some feedback to player about why their attempted house placement failed Items added by GMs directly into multis will now decay based on the house-specific decay timer instead of the regular one Fixed an issue that could cause items to almost instantly decay after being released from lockdown in a house Placing house add-ons now properly takes into account SPACEX and SPACEY values when checking if they can fit in selected area of houses Re-added SPACEX and SPACEY values for Pentagram and Loom house add-ons House add-ons can now be converted back into house add-on deeds by chopping them with an axe Added new item type - IT_HOUSEADDON (201) - used by house add-ons placed in player houses Fixed a bug where keys would stop working after being added to a keyring, and would turn into blank keys upon release from the keyring Added visitor count for public player houses, which keeps track of how many visits a public house has received, with each player counted max 1 time every 24 hours Fixed an issue with FindPlayersInOldVisrange() where it didn't take into account that players could see buildings further away than the standard update range. This could cause players to see ghost images of buildings if they were at the "right" distance when the building was being demolished Added NODECAY tag to all signs and doors in dfndata/house/house.dfn Added FRONTDOOR or INTERIORDOOR (as appropriate) to all doors in dfndata/house/house.dfn Added BANX and BANY to specify ban location for some houses in dfndata/house/house.dfn instead of relying on finding SE corner automatically Implemented strongboxes (js/server/house/strongbox.js) for co-owners of a house, which can be placed with the house command "i wish to place a strongbox". Max capacity is 25 items Updated 'REMOVE command to take an optional parameter - itemID. If supplied, the command will remove all items with this itemID from a targeted container Fixed a bug when checking if dynamic items were blocking valid spawn locations for NPCs, some function arguments were in the wrong order! Improved code that finds valid spawn locations for items and NPCs spawned via spawn regions. As server gradually builds up lists of valid spawn locations per region over time, it will start using these lists more often, rather than always look for brand new spawn locations. Fixed a bug with CMulHandler::CheckStaticFlag() that prevented NPCs from spawning inside buildings with no static floors! Fixed an issue with repeating commands that prevented GMs from being able to cancel them when using the ClassicUO client Exposed character property .accountNum to JS engine Extended CDataList class to include a Clear() method for clearing lists Updated JS File method .Open() to support an optional, third argument - subFolderName - that defines in which sub-folder of UOX3/shared/ to store/look for a file. If no third argument is supplied, UOX3 will default to using the shared folder itself. Updated JS File method .Length() to return a value of -1 for files that don't exist Added new code function, exposed to JS engine with same parameters, which simply checks if a given tile ID has a specific flag bool CheckTileFlag( UI16 itemID, TILEFLAG flagToCheck ) Added JS function used to find the root container of an item (if any) FindRootContainer( itemSerial ) FindRootContainer( item ) Added new JS function that allows deleting files from UOX3/shared/ folder or subfolders of shared folder. If no subFolderName is provided, looks for file directly in shared folder itself. Restrictions on file- and folder-names apply. bool DeleteFile( fileName, subFolderName ) Added new JS functions for checking if a specific client or server feature is enabled. See documentation for full list of client/server features. GetClientFeature( bitNum ) // Returns true if specified client feature is enabled on server GetServerFeature( bitNum ) // Returns true if specified server feature is enabled on server Added new JS function for returning the value of almost any server setting from UOX.INI GetServerSetting( settingNameInDoubleQuotes ) Updated JS function DoesDynamicBlock() with two new parameters - checkOnlyMultis and checkOnlyNonMultis Updated JS function DoesMapBlock() with two new parameters - checkMultiPlacement and checkForRoad Fixed an issue where a LoS check would prevent players from accessing containers in their own backpack Added new functions in findfuncs.cpp to make it easier to find items near another object or location: findNearbyItems( object, distance ) findNearbyItems( x, y, worldNumber, instanceID, distance ) Added new Item property - maxItems - used by containers to determine their max item capacity Added new Item property - totalItemCount - used to get total item count in a container (including sub-containers) Added check for max item capacity when creating new items that are added to a character's backpack - items will be created below character's feet if backpack is full! Added new DFN tag for items, used by containers to determine item capacity for a given container: MAXITEMS=# // 125 is the default for all containers if not set Added new JS Item properties: .maxItems // gets/sets item capacity for a given container .totalItemCount // gets total item count in a container, including sub-containers Updated item tooltips for containers to show accurate total item count, as well as to display max item capacity Fixed a bug where picking up items from a non-locked down pile of items on the floor inside a multi could cause the remaining pile to be seen as no longer inside the multi, disallowing locking it back down and causing it to decay based on regular decay timer instead of house-specific one Updated JS command set to allow setting poison-level on items ('set poison #) and hunger-level on characters ('set hunger #) Fixed an issue with js/item/food.js that prevented poisoned food from poisoning characters when eaten Fixed an issue with js/skill/poisoning.js that prevented players from poisoning food! Updated various JS scripts and hardcoded targeting functions to disallow the targeting of locked down resources using skills and tools Updated JS Method TextMessage() to support three extra, optional parameters. Note that if one optional parameter is included, all preceding optional parameters are also required! speechTarget - What kind of target is this message intended for? 0 - Only visible for sender and receiver of message 1 - Visible to all players in range 2 - Visible to all NPCs and players in range 3 - Visible to all PCs everywhere + NPCs in range 4 - Visible to all PCs everywhere (broadcast) 5 - Only visible for the receiver of the message speechTargetSerial - The serial of the receiver of the message, used if speechTarget is 0 or 5 speechFontType - The type of font to display the text in. Defaults to normal. 0 - Bold 1 - Normal with shadow 2 - Bold with shadow 3 - Normal 4 - Gothic 5 - Italic 6 - Small, dark 7 - Colourful 8 - Runic (only works with CAPS) 9 - Small, light Added timestamp to worldsaves in console, to make it easier to see when a particular world-save was done Added info about compiler/environment displayed at the top of the UOX3 console during startup Updated dictionary files with new messages primarily related to housing
2020-11-04 02:00:37 +08:00
break;
case CIP_GUESTS:
if( gPriv->GetObjType() == OT_MULTI )
{
*vp = INT_TO_JSVAL(( static_cast<CMultiObj *>( gPriv )->GetGuestCount() ));
}
0.99.4d Added new option in UOX.INI under [settings] section: MAPDIFFSENABLED=0/1 // If enabled, server will attempt to load diff files, and send "Enable Map-diff files" packet to client to also load these. Disabled by default. Server no longer loads map/statics diff files by default, nor does it send packet to client to request loading these files, as only client versions below 7.0.8.2 will actively load these files. Can be re-enabled with new UOX.INI setting mentioned above! Fixed incorrect ID for gargish dagger in CHandleCombat::getWeaponType() Added missing weapon entries in CHandleCombat::getWeaponType(): bladed whip, barbed whip, spiked whip, gargish talwar Fixed an issue that would show the end part of some tiledata names as garbled text instead of cutting off the text(!) at 20 characters Fixed an issue with advanced character creation template when using ClassicUO client, which sends a profession value of 255 instead of 0 when no profession template has been selected. Fixed an issue where clones of NPCs that can split in combat didn't get the NPC flag correctly set Guild titles are now removed for players who leave their guilds Enabled closing some hard-coded gump menus using right-click (howto, guild, towns, wholist, addmenu, craftmenu, info) Fixed an issue where adding base items using 'add [itemID] would sometimes get false positive hits from harditems.dfn, depending on the length of the itemID Fixed an issue where items added using 'add [itemID] would not get names applied properly from harditems.dfn Item/NPC DFN tag GET can now inherit a random parent by adding additional values separated by spaces. Syntax: GET=parent1 parent2 parent3 (etc) Fixed an issue where NPC backpacks would not have the max item capacity set properly Added new properties for CItem objects (also exposed as JS Item Properties): maxRange // max distance a ranged weapon can fire at (replaces ARCHERRANGE ini setting) baseRange // base distance throwing weapons (when implemented) can be used at Added support for new Item DFN tag that replaces global UOX.INI setting ARCHERRANGE: MAXRANGE=# // Specifies max range of ranged weapon Added support for new Item/NPC DFN tags to support randomizing elemental resistances: RESISTFIRE=#/# # // Set NPC's poison resistance; fixed or random value RESISTCOLD=#/# # // Set NPC's poison resistance; fixed or random value RESISTLIGHTNING=#/# # // Set NPC's poison resistance; fixed or random value RESISTPOISON=#/# # // Set NPC's poison resistance; fixed or random value Added support for two new DFN tags in dfndata/race/races.dfn that can be used to allow/ban lists of equipment for specific races ALLOWEQUIPLIST=# BANEQUIPLIST=# Added support for new section in dfndata/race/races.dfn - [EQUIPLIST #], which can be used to define lists of equipment that is whitelisted or banned for specific races. Fixed a bug that would report incorrect weight in tooltips for Item/NPC spawner objects ScriptSections are now reapplied for items bought by players from NPC vendors Fixed an issue where players could drop an item on the ground and other players would still see the item after it was picked up, because of a failed distance check vs old location coordinates (in pack) instead of vs current location on ground Fixed a bug with players being able to use last-target macro to target objects picked up and held by other players on their cursor Updated all references to "devinelock" to be "divinelock" instead - this includes the name of the JS Item property Fixed house commands triggering (useless) targeting cursors for players onboard boats Changed default statcap in UOX.INI from 325 to 225 Fixed a out-of-range error for players attempting to combine ore inside their own backpack Fixed various issues with distance checks and container checks when using/target objects Added optional 4th "hue" parameter to AddGump JS method Added JS Function to get total amount of accounts on server - GetAccountCount() Added JS Function to get total amount of players online - GetPlayerCount() onSwing JS Event can now trigger in scripts attached to items, not just items attached to characters Added some JS Functions to expose some hard-coded constants to JS scripts: BASEITEMSERIAL() // Base item serial INVALIDSERIAL() // Invalid serial INVALIDID() // Invalid ID INVALIDCOLOUR() // Invalid colour Fixed an issue where JS character property .colour would modify origSkin property instead of colour Fixed an issue where JS character property .guildTitle returned the name of the character instead of the guild title Character JS property .poison can now also be used to set a character's poisoned level, not just read it Exposed Item property to JS engine: .ac // armour class for item (0-128). Primarily used for setting race-restrictions for equippable items, i.e. race X cannot equip items of armour class Y. .def // defensive value of item (Physical resistance post-AoS, AR in older UO) // NOTE: The following properties don't actually do anything yet, but can still be used in custom JS scripts if desired .resistCold // Cold resistance of item 0-1000, where 1000 equals 100.0% .resistHeat // Heat/Fire resistance of item 0-1000, where 1000 equals 100.0% .resistLight // Light resistance of item 0-1000, where 1000 equals 100.0% .resistLightning // Energy/Lightning resistance of item 0-1000, where 1000 equals 100.0% .resistPoison // Poison resistance of item 0-1000, where 1000 equals 100.0% .resistRain // Rain resistance of item 0-1000, where 1000 equals 100.0% .resistSnow // Snow resistance of item 0-1000, where 1000 equals 100.0% .damageHeat // Weapon deals Heat/Fire elemental damage (true/false) .damageCold // Weapon deals Cold elemental damage (true/false) .damageLight // Weapon deals Light elemental damage (true/false) .damageLightning // Weapon deals Lightning elemental damage (true/false) .damagePoison // Weapon deals Poison elemental damage (true/false) .damageRain // Weapon deals Rain/Water elemental damage (true/false) .damageSnow // Weapon deals Snow/Ice elemental damage (true/false) Added new UOX.INI setting under [server] to enable/disable shard response to ConnectUO server polling (disabled by default) Sub-commands are no longer included when registering packets to be overloaded via RegisterPacket function, as that part was never fully implemented. Packet-hook scripts can be setup for specific packet IDs, but any sub-command checking will need to be done in the script itself JS Packet Method GetDWord() now uses JS_NewNumberValue instead of INT_TO_JSVAL to read from the socket buffer, to better handle large numbers, which could previously be returned with wrong values. JS Function CalcItemFromSer() now uses a JS_GetStringBytes() and str_value() combo instead of JSVAL_TO_INT() to read the data provided in the function argument. This allows JS scripts to provide item serials to the function directly without needing to split it into four parts first (though that still works) Fixed issue where JS properties for multis didn't always return correct values The 'set command can now be used to set the armour class of items ('set ac #) Reimplemented 'tweak command in JS engine (js/commands/targeting/tweak.js) - can be used to view and modify properties of characters, character skills, items, multis and regions (target ground) Added placeholder packet-hook script (js/server/network/0xf1_connectUoServerPoll.js) to handle responses to ConnectUO server polling. By default this script does nothing, but serves as a placeholder for drop-in replacement scripts generated specifically for each shard by the ConnectUO service. Updated some commands to support an alternate STATIC keyword (can also be ommitted) to add base items: 'add static itemID 'tile static itemID Updated some commands with support for randomization. Provided itemID will be randomized based on provided rndValue: /js/commands/targeting/add.js: 'add itemID rndValue cmdtable.cpp and targeting.cpp: 'tile itemID rndValue 'tile itemID x1 x2 y1 y2 z rndValue Updated js/commands/custom/repeatingcmds.js to support 'm delete as an alias for 'rremove Added 'props as an alias for the 'tweak command Added 'teleport as an alias for the 'tele command (js/commands/targeting/tele.js) Added 'shavehair and 'shavebeard as aliases for 'kill hair and 'kill beard (js/commands/targeting/kill.js) Added 'noinvul and 'mortal aliases for the 'invul false command (js/commands/custom/misc-cmds.js) Added 'immortal and 'invul (without parameter) as aliases for the 'invul true command Added 'bringtopack as an alias of 'movetobag command (js/commands/targeting/movetobag.js) Updated check for cancelling of target cursor in various JS scripts Minor updates to various JS scripts Fixed issue where some item definitions in dfndata/harditems/harditems.dfn and dfndata/items/building/lighting.dfn used comma instead of space as delimiter for the VALUE tag, which thus never got applied Updated all NPC definitions to let NPCs spawn facing in random directions
2021-03-22 05:59:20 +08:00
else
{
0.99.4d Added new option in UOX.INI under [settings] section: MAPDIFFSENABLED=0/1 // If enabled, server will attempt to load diff files, and send "Enable Map-diff files" packet to client to also load these. Disabled by default. Server no longer loads map/statics diff files by default, nor does it send packet to client to request loading these files, as only client versions below 7.0.8.2 will actively load these files. Can be re-enabled with new UOX.INI setting mentioned above! Fixed incorrect ID for gargish dagger in CHandleCombat::getWeaponType() Added missing weapon entries in CHandleCombat::getWeaponType(): bladed whip, barbed whip, spiked whip, gargish talwar Fixed an issue that would show the end part of some tiledata names as garbled text instead of cutting off the text(!) at 20 characters Fixed an issue with advanced character creation template when using ClassicUO client, which sends a profession value of 255 instead of 0 when no profession template has been selected. Fixed an issue where clones of NPCs that can split in combat didn't get the NPC flag correctly set Guild titles are now removed for players who leave their guilds Enabled closing some hard-coded gump menus using right-click (howto, guild, towns, wholist, addmenu, craftmenu, info) Fixed an issue where adding base items using 'add [itemID] would sometimes get false positive hits from harditems.dfn, depending on the length of the itemID Fixed an issue where items added using 'add [itemID] would not get names applied properly from harditems.dfn Item/NPC DFN tag GET can now inherit a random parent by adding additional values separated by spaces. Syntax: GET=parent1 parent2 parent3 (etc) Fixed an issue where NPC backpacks would not have the max item capacity set properly Added new properties for CItem objects (also exposed as JS Item Properties): maxRange // max distance a ranged weapon can fire at (replaces ARCHERRANGE ini setting) baseRange // base distance throwing weapons (when implemented) can be used at Added support for new Item DFN tag that replaces global UOX.INI setting ARCHERRANGE: MAXRANGE=# // Specifies max range of ranged weapon Added support for new Item/NPC DFN tags to support randomizing elemental resistances: RESISTFIRE=#/# # // Set NPC's poison resistance; fixed or random value RESISTCOLD=#/# # // Set NPC's poison resistance; fixed or random value RESISTLIGHTNING=#/# # // Set NPC's poison resistance; fixed or random value RESISTPOISON=#/# # // Set NPC's poison resistance; fixed or random value Added support for two new DFN tags in dfndata/race/races.dfn that can be used to allow/ban lists of equipment for specific races ALLOWEQUIPLIST=# BANEQUIPLIST=# Added support for new section in dfndata/race/races.dfn - [EQUIPLIST #], which can be used to define lists of equipment that is whitelisted or banned for specific races. Fixed a bug that would report incorrect weight in tooltips for Item/NPC spawner objects ScriptSections are now reapplied for items bought by players from NPC vendors Fixed an issue where players could drop an item on the ground and other players would still see the item after it was picked up, because of a failed distance check vs old location coordinates (in pack) instead of vs current location on ground Fixed a bug with players being able to use last-target macro to target objects picked up and held by other players on their cursor Updated all references to "devinelock" to be "divinelock" instead - this includes the name of the JS Item property Fixed house commands triggering (useless) targeting cursors for players onboard boats Changed default statcap in UOX.INI from 325 to 225 Fixed a out-of-range error for players attempting to combine ore inside their own backpack Fixed various issues with distance checks and container checks when using/target objects Added optional 4th "hue" parameter to AddGump JS method Added JS Function to get total amount of accounts on server - GetAccountCount() Added JS Function to get total amount of players online - GetPlayerCount() onSwing JS Event can now trigger in scripts attached to items, not just items attached to characters Added some JS Functions to expose some hard-coded constants to JS scripts: BASEITEMSERIAL() // Base item serial INVALIDSERIAL() // Invalid serial INVALIDID() // Invalid ID INVALIDCOLOUR() // Invalid colour Fixed an issue where JS character property .colour would modify origSkin property instead of colour Fixed an issue where JS character property .guildTitle returned the name of the character instead of the guild title Character JS property .poison can now also be used to set a character's poisoned level, not just read it Exposed Item property to JS engine: .ac // armour class for item (0-128). Primarily used for setting race-restrictions for equippable items, i.e. race X cannot equip items of armour class Y. .def // defensive value of item (Physical resistance post-AoS, AR in older UO) // NOTE: The following properties don't actually do anything yet, but can still be used in custom JS scripts if desired .resistCold // Cold resistance of item 0-1000, where 1000 equals 100.0% .resistHeat // Heat/Fire resistance of item 0-1000, where 1000 equals 100.0% .resistLight // Light resistance of item 0-1000, where 1000 equals 100.0% .resistLightning // Energy/Lightning resistance of item 0-1000, where 1000 equals 100.0% .resistPoison // Poison resistance of item 0-1000, where 1000 equals 100.0% .resistRain // Rain resistance of item 0-1000, where 1000 equals 100.0% .resistSnow // Snow resistance of item 0-1000, where 1000 equals 100.0% .damageHeat // Weapon deals Heat/Fire elemental damage (true/false) .damageCold // Weapon deals Cold elemental damage (true/false) .damageLight // Weapon deals Light elemental damage (true/false) .damageLightning // Weapon deals Lightning elemental damage (true/false) .damagePoison // Weapon deals Poison elemental damage (true/false) .damageRain // Weapon deals Rain/Water elemental damage (true/false) .damageSnow // Weapon deals Snow/Ice elemental damage (true/false) Added new UOX.INI setting under [server] to enable/disable shard response to ConnectUO server polling (disabled by default) Sub-commands are no longer included when registering packets to be overloaded via RegisterPacket function, as that part was never fully implemented. Packet-hook scripts can be setup for specific packet IDs, but any sub-command checking will need to be done in the script itself JS Packet Method GetDWord() now uses JS_NewNumberValue instead of INT_TO_JSVAL to read from the socket buffer, to better handle large numbers, which could previously be returned with wrong values. JS Function CalcItemFromSer() now uses a JS_GetStringBytes() and str_value() combo instead of JSVAL_TO_INT() to read the data provided in the function argument. This allows JS scripts to provide item serials to the function directly without needing to split it into four parts first (though that still works) Fixed issue where JS properties for multis didn't always return correct values The 'set command can now be used to set the armour class of items ('set ac #) Reimplemented 'tweak command in JS engine (js/commands/targeting/tweak.js) - can be used to view and modify properties of characters, character skills, items, multis and regions (target ground) Added placeholder packet-hook script (js/server/network/0xf1_connectUoServerPoll.js) to handle responses to ConnectUO server polling. By default this script does nothing, but serves as a placeholder for drop-in replacement scripts generated specifically for each shard by the ConnectUO service. Updated some commands to support an alternate STATIC keyword (can also be ommitted) to add base items: 'add static itemID 'tile static itemID Updated some commands with support for randomization. Provided itemID will be randomized based on provided rndValue: /js/commands/targeting/add.js: 'add itemID rndValue cmdtable.cpp and targeting.cpp: 'tile itemID rndValue 'tile itemID x1 x2 y1 y2 z rndValue Updated js/commands/custom/repeatingcmds.js to support 'm delete as an alias for 'rremove Added 'props as an alias for the 'tweak command Added 'teleport as an alias for the 'tele command (js/commands/targeting/tele.js) Added 'shavehair and 'shavebeard as aliases for 'kill hair and 'kill beard (js/commands/targeting/kill.js) Added 'noinvul and 'mortal aliases for the 'invul false command (js/commands/custom/misc-cmds.js) Added 'immortal and 'invul (without parameter) as aliases for the 'invul true command Added 'bringtopack as an alias of 'movetobag command (js/commands/targeting/movetobag.js) Updated check for cancelling of target cursor in various JS scripts Minor updates to various JS scripts Fixed issue where some item definitions in dfndata/harditems/harditems.dfn and dfndata/items/building/lighting.dfn used comma instead of space as delimiter for the VALUE tag, which thus never got applied Updated all NPC definitions to let NPCs spawn facing in random directions
2021-03-22 05:59:20 +08:00
*vp = JSVAL_NULL;
}
Housing Revamp and more Updated JS SysMessage function to accept up to 10 extra, optional arguments, which can be used with dictionary messages that require additional parameters like %s or %i Added new type of house privilege in cMultiObj.cpp to keep track of friends of the multi - HOUSEPRIV_FRIEND - which is stored during worldsaves as one or more Friend=<player serial> tags in house.wsc Added new type of house privilege in cMultiObj.cpp to keep track of guests of the multi - HOUSEPRIV_GUEST - which is stored during worldsaves as one or more Guest=<player serial> tags in house.wsc When items are created for houses upon house placement, a reference to the multi's serial is now stored in the house sign's MORE property to allow easier tracking of which house a particular sign belongs to Added tracking of new, persistent properties for houses via cMultiObj.cpp/h: lockdowns, secure containers, vendors, guests, friends, owners, ban location, public status, number of visits, timestamps Added a multitude of new methods in cMultiObj.cpp/h to assist in improving the functionality of houses Added new tags for houses in house.dfn (default values applied if tag not specified): MAXSECURECONTAINERS=4 - Max amount of secure containers allowed in a multi MAXLOCKDOWNS=256 - Max amount of lockdowns allowed in a multi MAXVENDORS=10 - Max amount of vendors allowed in a multi MAXBANS=50 - Max amount of bans in a multi's ban list MAXFRIENDS=50 - Max amount of friends in a multi's friend list MAXGUESTS=50 - Max amount of guests in a multi's guest list MAXOWNERS=8 - Max amount of owners and co-owners in a multi's owner list MAXTRASHCONTAINERS=1 - Max amount of trash containers allowed in multi SCRIPT=<scriptID> - Assign a JS script-ID directly to a multi FRONTDOOR - indicates that a door is the front door of a house. Cannot be locked in public houses! INTERIORDOOR - indicates that a door is an interior door of a house. Can be locked in public houses. BANX - Location X offset for multi's ban location, if not used, will try to use SE corner of multi instead BANY - Location Y offset for multi's ban location, if not used, will try to use SE corner of multi instead Added JS Event: onHouseCommand( tSock, multiObj, cmdID ) - For handling spoken house commands via JS scripts attached to multi. Updated JS Events: onEntrance() - can now trigger both for multi being entered and/or object entering onLeaving() - can now trigger both for multi being left and/or object entering onSpeech() - can now also trigger for items (in addition to chars) with event & script attached, if UOX.INI setting ITEMSDETECTSPEECH is enabled Added JS Multi methods: .IsBoat() - Returns whether the item (or multi) is a boat .IsOwner( playerToCheck ) - Returns whether a player is the owner of a multi .IsOnOwnerList( playerToCheck ) - Returns whether a player is on the (co-)owner list of a multi .IsOnFriendList( playerToCheck ) - Returns whether a player is on the friend list of a multi .IsOnGuestList( playerToCheck ) - Returns whether a player is on the guest list of a multi .IsOnBanList( playerToCheck ) - Returns whether a player is on the ban list of a multi .AddToFriendList( playertoAdd ) - Adds player to the friend list of a multi .RemoveFromFriendList( playertoRemove ) - Removes player from the friend list of a multi .AddToGuestList( playertoAdd ) - Adds player to the guest list of a multi .RemoveFromGuestList( playertoRemove ) - Removes player from the guest list of a multi .ClearOwnerList() - Clears all entries from a multi's (co-)owner list .ClearFriendList() - Clears all entries from a multi's friend list .ClearGuestList() - Clears all entries from a multi's guest list .ClearBanList() - Clears all entries from a multi's ban list .SecureContainer( itemToSecure ) - Secures a container in a multi .UnsecureContainer( itemToUnsecure ) - Unsecures a container in a multi .IsSecureContainer( itemToCheck ) - Checks if specified item is a secure container in a multi .LockDownItem( itemToLockDown) - Locks down an item in a multi .ReleaseItem( itemToRelease ) - Releases a locked down item in a multi .KillKeys() - Deletes ALL keys associated with a multi .AddTrashCont( itemToAdd ) - Add trash container to multi's list of trash containers .RemoveTrashCont( itemToRemove ) - Remove trash container from multi's list of trash containers Added JS Item (Multi only) properties: .lockdowns - Get the number of lockdowns in a multi .maxLockdowns - Get/Set the max number of lockdowns allowed in a multi .secureContainers - Get the number of secure containers in a multi .maxSecureContainers - Get/Set the max number of secure containers allowed in a multi .trashContainers - Get the number of trash containers in a multi .maxTrashContainers - Get/Set the max number of trash containers allowed in a multi .friends - Get the number of friends in a multi's friend list .maxFriends - Get/Set the max number of friends allowed in a multi's friend list .guests - Get the number of guests in a multi's guest list .maxGuests - Get/Set the max number of guests allowed in a multi's guest list .owners - Get the number of owners in a multi's owner list .maxOwners - Get/Set the max number of owners allowed in a multi's owner list .bans - Get the number of banned players in a multi's ban list .maxBans - Get/Set the max number of banned players allowed in a multi's ban list .vendors - Get the number of player vendors in a multi .maxVendors - Get the max number of player vendors allowed in a multi .deed - Get the item sectionID for deed used to place multi .isPublic - Get/Set the private/public state of a multi .buildTimestamp - Get the timestamp for when the house was originally placed .tradeTimestamp - Get the timestamp for when the house was last traded to another player .banX - Get/Set the ban location X offset for the multi .banY - Get/Set the ban location Y offset for the multi Added JS Character properties: .multi = Get/Set the multi object the character is in .accountNum = Get the account number the character belongs to .housesOwned = Get a count of houses owned by the character .housesCoOwned = Get a count of houses co-owned by the character Updated JS cBaseObject Methods .FirstItem(), .NextItem() and .FinishedItems() to also support iterating through items in multis Updated JS multi Methods .FirstChar(), .NextChar() and .FinishedChars() to support an additional parameter to specify what kind of characters to loop through: "default" or no parameter - all characters inside the multi "owner" - players on multi's owner list "friend" - players on multi's friend list "guest" - players on multi's guest list "banned" - players on multi's ban list Added new INI tags to a new section of uox.ini called [houses] DECAYTIMERINHOUSE=3600 // Decay timer in seconds for non-locked down items inside houses PROTECTPRIVATEHOUSES=1 // Toggles whether private houses will automatically boot unauthorized visitors (1) or not (0) TRACKHOUSESPERACCOUNT=1 // Toggles whether to track (and restrict) house ownership per account (1) or per character (0) MAXHOUSESOWNABLE=1 // Specifies the max amount of houses a player can own per account/char, depending on how house ownership is tracked MAXHOUSESCOOWNABLE=10 // Specifies the max amount of houses a player can co-own per character CANOWNANDCOOWNHOUSES=1 // Toggles whether players can own and co-own houses at the same time COOWNHOUSESONSAMEACCOUNT=1 // Toggles whether characters on same account as house owner will be treated as co-owners Added new INI tags in [settings] section of uox.ini: ITEMSDETECTSPEECH=0 // If enabled, server will search for nearby items with onSpeech JS event running whenever a character speaks. Disabled by default. MAXPLAYERPACKITEMS=125 // Defines max item capacity for player (and NPC) backpacks. Defaults to 125. Moved most of the existing house functionality to JS and expanded upon it to reach feature parity with houses in regular UO around Publish 15/16, with various extras thrown in for good measure and all functionality being customizable: js/server/house/house.js (15000) - handles detection of house commands and characters entering/leaving houses js/server/house/houseSign.js (15001) - contains and handles all house-related gumps/menus and what is shown when players interact with house sign js/server/house/houseCommands.js (15002) - handles functionality of house commands and other functionality such as transfer of ownership, demolishing house, etc. js/server/house/houseDeed.js (15003) - handles initial rules that allow/disallow placement of additional houses for players All house-related menus now fully handled through JS All house commands and other functionality now fully handled through JS Removed redundant hard-coded house functionality Implemented Co-owners, friends, guests for houses, with access rules in place for entry, lockdowns, house commands, etc. Implemented Private and Public houses Implemented Secure Containers and Trash Barrels Definable max lockdowns, secure containers, player vendors, bans, friends, guests, owners, trash containers and more - per house type JS scripts can now be attached directly to houses Doors in houses can be marked as front doors or interior doors, and will be treated differently with regards to private and public houses Added new item to dfndata/items/containers/misc.dfn - [trashbarrel] Added new JS script (js/items/trashbarrel.js) with trash barrel functionality for houses. Trash barrels that are marked as secure containers are only accessible by owners, co-owners and friends of the house. Various options available at top of script. Updated js/items/axe.js to support chopping up trash barrels and house add-ons in houses owned by the player Fixed an issue with house doors being left behind after demolishing houses while their doors were open Fixed an issue where GMs could be banned from player houses Added Line of Sight checks to speech, to give players some privacy in their own homes Updated house placement code to more accurately check for other multis, dynamic and static objects when placing houses; now requires free space around each house that cannot be blocked by other houses or items that can block player movement, and disallows placement of houses on roads Updated house placement code to move characters blocking house placement to SE corner of the house Updated house placement code to disallow placing houses in guarded regions, or in dungeons Added new DFN tag for regions to enable/disable player houses in specific regions: HOUSING=0/1 Added new region (247) that covers path to Valley of Eodon in Felucca Added new region (248) that covers Valley of Eodon in Ter-Mur, with player housing disabled Added new region (249) that covers entire T2A lands, with player housing disabled Updated SPACEX and SPACEY values for all houses in dfndata/house/house.dfn to match updated house placement code Added new JS property to Regions that can be used to determine or change state of player housing in a region: .canPlaceHouse() Updated rules for usage of dye tubs to dye locked down items; now only house owners or co-owners may dye locked down items Updated rules for usage of the following locked down items in a house, which are now only usable by house owners and co-owners Dyes, Guildstone Deeds, Recall Runes (renaming), Rename Deeds, Townstone Deeds, House Deeds, Boat Models, Player Vendor Deeds, Ore, Hair Dye Updated rules for usage of the following locked down items in a house, which are now only usable by house owners, co-owners and friends: Keys, Dye Tubs, Magic Scrolls, Fireworks Wands, Magic Wands, Smithing Tools, Mining Tools, Fishing Poles Updated item lockdown rules to allow locking down (and releasing) items in a container as long as the container is locked down, and to only allow releasing a locked down container if it's empty of locked down items Updated item lockdown rules to only allow locking down movement-blocking items further than 2 tiles away from doors Updated rules for releasing items in houses - now the house owner can release any locked down items, co-owners can release items locked down by themselves or by friends, while friends can release only items locked down by themselves Added some feedback to player about why their attempted house placement failed Items added by GMs directly into multis will now decay based on the house-specific decay timer instead of the regular one Fixed an issue that could cause items to almost instantly decay after being released from lockdown in a house Placing house add-ons now properly takes into account SPACEX and SPACEY values when checking if they can fit in selected area of houses Re-added SPACEX and SPACEY values for Pentagram and Loom house add-ons House add-ons can now be converted back into house add-on deeds by chopping them with an axe Added new item type - IT_HOUSEADDON (201) - used by house add-ons placed in player houses Fixed a bug where keys would stop working after being added to a keyring, and would turn into blank keys upon release from the keyring Added visitor count for public player houses, which keeps track of how many visits a public house has received, with each player counted max 1 time every 24 hours Fixed an issue with FindPlayersInOldVisrange() where it didn't take into account that players could see buildings further away than the standard update range. This could cause players to see ghost images of buildings if they were at the "right" distance when the building was being demolished Added NODECAY tag to all signs and doors in dfndata/house/house.dfn Added FRONTDOOR or INTERIORDOOR (as appropriate) to all doors in dfndata/house/house.dfn Added BANX and BANY to specify ban location for some houses in dfndata/house/house.dfn instead of relying on finding SE corner automatically Implemented strongboxes (js/server/house/strongbox.js) for co-owners of a house, which can be placed with the house command "i wish to place a strongbox". Max capacity is 25 items Updated 'REMOVE command to take an optional parameter - itemID. If supplied, the command will remove all items with this itemID from a targeted container Fixed a bug when checking if dynamic items were blocking valid spawn locations for NPCs, some function arguments were in the wrong order! Improved code that finds valid spawn locations for items and NPCs spawned via spawn regions. As server gradually builds up lists of valid spawn locations per region over time, it will start using these lists more often, rather than always look for brand new spawn locations. Fixed a bug with CMulHandler::CheckStaticFlag() that prevented NPCs from spawning inside buildings with no static floors! Fixed an issue with repeating commands that prevented GMs from being able to cancel them when using the ClassicUO client Exposed character property .accountNum to JS engine Extended CDataList class to include a Clear() method for clearing lists Updated JS File method .Open() to support an optional, third argument - subFolderName - that defines in which sub-folder of UOX3/shared/ to store/look for a file. If no third argument is supplied, UOX3 will default to using the shared folder itself. Updated JS File method .Length() to return a value of -1 for files that don't exist Added new code function, exposed to JS engine with same parameters, which simply checks if a given tile ID has a specific flag bool CheckTileFlag( UI16 itemID, TILEFLAG flagToCheck ) Added JS function used to find the root container of an item (if any) FindRootContainer( itemSerial ) FindRootContainer( item ) Added new JS function that allows deleting files from UOX3/shared/ folder or subfolders of shared folder. If no subFolderName is provided, looks for file directly in shared folder itself. Restrictions on file- and folder-names apply. bool DeleteFile( fileName, subFolderName ) Added new JS functions for checking if a specific client or server feature is enabled. See documentation for full list of client/server features. GetClientFeature( bitNum ) // Returns true if specified client feature is enabled on server GetServerFeature( bitNum ) // Returns true if specified server feature is enabled on server Added new JS function for returning the value of almost any server setting from UOX.INI GetServerSetting( settingNameInDoubleQuotes ) Updated JS function DoesDynamicBlock() with two new parameters - checkOnlyMultis and checkOnlyNonMultis Updated JS function DoesMapBlock() with two new parameters - checkMultiPlacement and checkForRoad Fixed an issue where a LoS check would prevent players from accessing containers in their own backpack Added new functions in findfuncs.cpp to make it easier to find items near another object or location: findNearbyItems( object, distance ) findNearbyItems( x, y, worldNumber, instanceID, distance ) Added new Item property - maxItems - used by containers to determine their max item capacity Added new Item property - totalItemCount - used to get total item count in a container (including sub-containers) Added check for max item capacity when creating new items that are added to a character's backpack - items will be created below character's feet if backpack is full! Added new DFN tag for items, used by containers to determine item capacity for a given container: MAXITEMS=# // 125 is the default for all containers if not set Added new JS Item properties: .maxItems // gets/sets item capacity for a given container .totalItemCount // gets total item count in a container, including sub-containers Updated item tooltips for containers to show accurate total item count, as well as to display max item capacity Fixed a bug where picking up items from a non-locked down pile of items on the floor inside a multi could cause the remaining pile to be seen as no longer inside the multi, disallowing locking it back down and causing it to decay based on regular decay timer instead of house-specific one Updated JS command set to allow setting poison-level on items ('set poison #) and hunger-level on characters ('set hunger #) Fixed an issue with js/item/food.js that prevented poisoned food from poisoning characters when eaten Fixed an issue with js/skill/poisoning.js that prevented players from poisoning food! Updated various JS scripts and hardcoded targeting functions to disallow the targeting of locked down resources using skills and tools Updated JS Method TextMessage() to support three extra, optional parameters. Note that if one optional parameter is included, all preceding optional parameters are also required! speechTarget - What kind of target is this message intended for? 0 - Only visible for sender and receiver of message 1 - Visible to all players in range 2 - Visible to all NPCs and players in range 3 - Visible to all PCs everywhere + NPCs in range 4 - Visible to all PCs everywhere (broadcast) 5 - Only visible for the receiver of the message speechTargetSerial - The serial of the receiver of the message, used if speechTarget is 0 or 5 speechFontType - The type of font to display the text in. Defaults to normal. 0 - Bold 1 - Normal with shadow 2 - Bold with shadow 3 - Normal 4 - Gothic 5 - Italic 6 - Small, dark 7 - Colourful 8 - Runic (only works with CAPS) 9 - Small, light Added timestamp to worldsaves in console, to make it easier to see when a particular world-save was done Added info about compiler/environment displayed at the top of the UOX3 console during startup Updated dictionary files with new messages primarily related to housing
2020-11-04 02:00:37 +08:00
break;
case CIP_MAXGUESTS:
if( gPriv->GetObjType() == OT_MULTI )
{
*vp = INT_TO_JSVAL(( static_cast<CMultiObj *>( gPriv )->GetMaxGuests() ));
}
0.99.4d Added new option in UOX.INI under [settings] section: MAPDIFFSENABLED=0/1 // If enabled, server will attempt to load diff files, and send "Enable Map-diff files" packet to client to also load these. Disabled by default. Server no longer loads map/statics diff files by default, nor does it send packet to client to request loading these files, as only client versions below 7.0.8.2 will actively load these files. Can be re-enabled with new UOX.INI setting mentioned above! Fixed incorrect ID for gargish dagger in CHandleCombat::getWeaponType() Added missing weapon entries in CHandleCombat::getWeaponType(): bladed whip, barbed whip, spiked whip, gargish talwar Fixed an issue that would show the end part of some tiledata names as garbled text instead of cutting off the text(!) at 20 characters Fixed an issue with advanced character creation template when using ClassicUO client, which sends a profession value of 255 instead of 0 when no profession template has been selected. Fixed an issue where clones of NPCs that can split in combat didn't get the NPC flag correctly set Guild titles are now removed for players who leave their guilds Enabled closing some hard-coded gump menus using right-click (howto, guild, towns, wholist, addmenu, craftmenu, info) Fixed an issue where adding base items using 'add [itemID] would sometimes get false positive hits from harditems.dfn, depending on the length of the itemID Fixed an issue where items added using 'add [itemID] would not get names applied properly from harditems.dfn Item/NPC DFN tag GET can now inherit a random parent by adding additional values separated by spaces. Syntax: GET=parent1 parent2 parent3 (etc) Fixed an issue where NPC backpacks would not have the max item capacity set properly Added new properties for CItem objects (also exposed as JS Item Properties): maxRange // max distance a ranged weapon can fire at (replaces ARCHERRANGE ini setting) baseRange // base distance throwing weapons (when implemented) can be used at Added support for new Item DFN tag that replaces global UOX.INI setting ARCHERRANGE: MAXRANGE=# // Specifies max range of ranged weapon Added support for new Item/NPC DFN tags to support randomizing elemental resistances: RESISTFIRE=#/# # // Set NPC's poison resistance; fixed or random value RESISTCOLD=#/# # // Set NPC's poison resistance; fixed or random value RESISTLIGHTNING=#/# # // Set NPC's poison resistance; fixed or random value RESISTPOISON=#/# # // Set NPC's poison resistance; fixed or random value Added support for two new DFN tags in dfndata/race/races.dfn that can be used to allow/ban lists of equipment for specific races ALLOWEQUIPLIST=# BANEQUIPLIST=# Added support for new section in dfndata/race/races.dfn - [EQUIPLIST #], which can be used to define lists of equipment that is whitelisted or banned for specific races. Fixed a bug that would report incorrect weight in tooltips for Item/NPC spawner objects ScriptSections are now reapplied for items bought by players from NPC vendors Fixed an issue where players could drop an item on the ground and other players would still see the item after it was picked up, because of a failed distance check vs old location coordinates (in pack) instead of vs current location on ground Fixed a bug with players being able to use last-target macro to target objects picked up and held by other players on their cursor Updated all references to "devinelock" to be "divinelock" instead - this includes the name of the JS Item property Fixed house commands triggering (useless) targeting cursors for players onboard boats Changed default statcap in UOX.INI from 325 to 225 Fixed a out-of-range error for players attempting to combine ore inside their own backpack Fixed various issues with distance checks and container checks when using/target objects Added optional 4th "hue" parameter to AddGump JS method Added JS Function to get total amount of accounts on server - GetAccountCount() Added JS Function to get total amount of players online - GetPlayerCount() onSwing JS Event can now trigger in scripts attached to items, not just items attached to characters Added some JS Functions to expose some hard-coded constants to JS scripts: BASEITEMSERIAL() // Base item serial INVALIDSERIAL() // Invalid serial INVALIDID() // Invalid ID INVALIDCOLOUR() // Invalid colour Fixed an issue where JS character property .colour would modify origSkin property instead of colour Fixed an issue where JS character property .guildTitle returned the name of the character instead of the guild title Character JS property .poison can now also be used to set a character's poisoned level, not just read it Exposed Item property to JS engine: .ac // armour class for item (0-128). Primarily used for setting race-restrictions for equippable items, i.e. race X cannot equip items of armour class Y. .def // defensive value of item (Physical resistance post-AoS, AR in older UO) // NOTE: The following properties don't actually do anything yet, but can still be used in custom JS scripts if desired .resistCold // Cold resistance of item 0-1000, where 1000 equals 100.0% .resistHeat // Heat/Fire resistance of item 0-1000, where 1000 equals 100.0% .resistLight // Light resistance of item 0-1000, where 1000 equals 100.0% .resistLightning // Energy/Lightning resistance of item 0-1000, where 1000 equals 100.0% .resistPoison // Poison resistance of item 0-1000, where 1000 equals 100.0% .resistRain // Rain resistance of item 0-1000, where 1000 equals 100.0% .resistSnow // Snow resistance of item 0-1000, where 1000 equals 100.0% .damageHeat // Weapon deals Heat/Fire elemental damage (true/false) .damageCold // Weapon deals Cold elemental damage (true/false) .damageLight // Weapon deals Light elemental damage (true/false) .damageLightning // Weapon deals Lightning elemental damage (true/false) .damagePoison // Weapon deals Poison elemental damage (true/false) .damageRain // Weapon deals Rain/Water elemental damage (true/false) .damageSnow // Weapon deals Snow/Ice elemental damage (true/false) Added new UOX.INI setting under [server] to enable/disable shard response to ConnectUO server polling (disabled by default) Sub-commands are no longer included when registering packets to be overloaded via RegisterPacket function, as that part was never fully implemented. Packet-hook scripts can be setup for specific packet IDs, but any sub-command checking will need to be done in the script itself JS Packet Method GetDWord() now uses JS_NewNumberValue instead of INT_TO_JSVAL to read from the socket buffer, to better handle large numbers, which could previously be returned with wrong values. JS Function CalcItemFromSer() now uses a JS_GetStringBytes() and str_value() combo instead of JSVAL_TO_INT() to read the data provided in the function argument. This allows JS scripts to provide item serials to the function directly without needing to split it into four parts first (though that still works) Fixed issue where JS properties for multis didn't always return correct values The 'set command can now be used to set the armour class of items ('set ac #) Reimplemented 'tweak command in JS engine (js/commands/targeting/tweak.js) - can be used to view and modify properties of characters, character skills, items, multis and regions (target ground) Added placeholder packet-hook script (js/server/network/0xf1_connectUoServerPoll.js) to handle responses to ConnectUO server polling. By default this script does nothing, but serves as a placeholder for drop-in replacement scripts generated specifically for each shard by the ConnectUO service. Updated some commands to support an alternate STATIC keyword (can also be ommitted) to add base items: 'add static itemID 'tile static itemID Updated some commands with support for randomization. Provided itemID will be randomized based on provided rndValue: /js/commands/targeting/add.js: 'add itemID rndValue cmdtable.cpp and targeting.cpp: 'tile itemID rndValue 'tile itemID x1 x2 y1 y2 z rndValue Updated js/commands/custom/repeatingcmds.js to support 'm delete as an alias for 'rremove Added 'props as an alias for the 'tweak command Added 'teleport as an alias for the 'tele command (js/commands/targeting/tele.js) Added 'shavehair and 'shavebeard as aliases for 'kill hair and 'kill beard (js/commands/targeting/kill.js) Added 'noinvul and 'mortal aliases for the 'invul false command (js/commands/custom/misc-cmds.js) Added 'immortal and 'invul (without parameter) as aliases for the 'invul true command Added 'bringtopack as an alias of 'movetobag command (js/commands/targeting/movetobag.js) Updated check for cancelling of target cursor in various JS scripts Minor updates to various JS scripts Fixed issue where some item definitions in dfndata/harditems/harditems.dfn and dfndata/items/building/lighting.dfn used comma instead of space as delimiter for the VALUE tag, which thus never got applied Updated all NPC definitions to let NPCs spawn facing in random directions
2021-03-22 05:59:20 +08:00
else
{
0.99.4d Added new option in UOX.INI under [settings] section: MAPDIFFSENABLED=0/1 // If enabled, server will attempt to load diff files, and send "Enable Map-diff files" packet to client to also load these. Disabled by default. Server no longer loads map/statics diff files by default, nor does it send packet to client to request loading these files, as only client versions below 7.0.8.2 will actively load these files. Can be re-enabled with new UOX.INI setting mentioned above! Fixed incorrect ID for gargish dagger in CHandleCombat::getWeaponType() Added missing weapon entries in CHandleCombat::getWeaponType(): bladed whip, barbed whip, spiked whip, gargish talwar Fixed an issue that would show the end part of some tiledata names as garbled text instead of cutting off the text(!) at 20 characters Fixed an issue with advanced character creation template when using ClassicUO client, which sends a profession value of 255 instead of 0 when no profession template has been selected. Fixed an issue where clones of NPCs that can split in combat didn't get the NPC flag correctly set Guild titles are now removed for players who leave their guilds Enabled closing some hard-coded gump menus using right-click (howto, guild, towns, wholist, addmenu, craftmenu, info) Fixed an issue where adding base items using 'add [itemID] would sometimes get false positive hits from harditems.dfn, depending on the length of the itemID Fixed an issue where items added using 'add [itemID] would not get names applied properly from harditems.dfn Item/NPC DFN tag GET can now inherit a random parent by adding additional values separated by spaces. Syntax: GET=parent1 parent2 parent3 (etc) Fixed an issue where NPC backpacks would not have the max item capacity set properly Added new properties for CItem objects (also exposed as JS Item Properties): maxRange // max distance a ranged weapon can fire at (replaces ARCHERRANGE ini setting) baseRange // base distance throwing weapons (when implemented) can be used at Added support for new Item DFN tag that replaces global UOX.INI setting ARCHERRANGE: MAXRANGE=# // Specifies max range of ranged weapon Added support for new Item/NPC DFN tags to support randomizing elemental resistances: RESISTFIRE=#/# # // Set NPC's poison resistance; fixed or random value RESISTCOLD=#/# # // Set NPC's poison resistance; fixed or random value RESISTLIGHTNING=#/# # // Set NPC's poison resistance; fixed or random value RESISTPOISON=#/# # // Set NPC's poison resistance; fixed or random value Added support for two new DFN tags in dfndata/race/races.dfn that can be used to allow/ban lists of equipment for specific races ALLOWEQUIPLIST=# BANEQUIPLIST=# Added support for new section in dfndata/race/races.dfn - [EQUIPLIST #], which can be used to define lists of equipment that is whitelisted or banned for specific races. Fixed a bug that would report incorrect weight in tooltips for Item/NPC spawner objects ScriptSections are now reapplied for items bought by players from NPC vendors Fixed an issue where players could drop an item on the ground and other players would still see the item after it was picked up, because of a failed distance check vs old location coordinates (in pack) instead of vs current location on ground Fixed a bug with players being able to use last-target macro to target objects picked up and held by other players on their cursor Updated all references to "devinelock" to be "divinelock" instead - this includes the name of the JS Item property Fixed house commands triggering (useless) targeting cursors for players onboard boats Changed default statcap in UOX.INI from 325 to 225 Fixed a out-of-range error for players attempting to combine ore inside their own backpack Fixed various issues with distance checks and container checks when using/target objects Added optional 4th "hue" parameter to AddGump JS method Added JS Function to get total amount of accounts on server - GetAccountCount() Added JS Function to get total amount of players online - GetPlayerCount() onSwing JS Event can now trigger in scripts attached to items, not just items attached to characters Added some JS Functions to expose some hard-coded constants to JS scripts: BASEITEMSERIAL() // Base item serial INVALIDSERIAL() // Invalid serial INVALIDID() // Invalid ID INVALIDCOLOUR() // Invalid colour Fixed an issue where JS character property .colour would modify origSkin property instead of colour Fixed an issue where JS character property .guildTitle returned the name of the character instead of the guild title Character JS property .poison can now also be used to set a character's poisoned level, not just read it Exposed Item property to JS engine: .ac // armour class for item (0-128). Primarily used for setting race-restrictions for equippable items, i.e. race X cannot equip items of armour class Y. .def // defensive value of item (Physical resistance post-AoS, AR in older UO) // NOTE: The following properties don't actually do anything yet, but can still be used in custom JS scripts if desired .resistCold // Cold resistance of item 0-1000, where 1000 equals 100.0% .resistHeat // Heat/Fire resistance of item 0-1000, where 1000 equals 100.0% .resistLight // Light resistance of item 0-1000, where 1000 equals 100.0% .resistLightning // Energy/Lightning resistance of item 0-1000, where 1000 equals 100.0% .resistPoison // Poison resistance of item 0-1000, where 1000 equals 100.0% .resistRain // Rain resistance of item 0-1000, where 1000 equals 100.0% .resistSnow // Snow resistance of item 0-1000, where 1000 equals 100.0% .damageHeat // Weapon deals Heat/Fire elemental damage (true/false) .damageCold // Weapon deals Cold elemental damage (true/false) .damageLight // Weapon deals Light elemental damage (true/false) .damageLightning // Weapon deals Lightning elemental damage (true/false) .damagePoison // Weapon deals Poison elemental damage (true/false) .damageRain // Weapon deals Rain/Water elemental damage (true/false) .damageSnow // Weapon deals Snow/Ice elemental damage (true/false) Added new UOX.INI setting under [server] to enable/disable shard response to ConnectUO server polling (disabled by default) Sub-commands are no longer included when registering packets to be overloaded via RegisterPacket function, as that part was never fully implemented. Packet-hook scripts can be setup for specific packet IDs, but any sub-command checking will need to be done in the script itself JS Packet Method GetDWord() now uses JS_NewNumberValue instead of INT_TO_JSVAL to read from the socket buffer, to better handle large numbers, which could previously be returned with wrong values. JS Function CalcItemFromSer() now uses a JS_GetStringBytes() and str_value() combo instead of JSVAL_TO_INT() to read the data provided in the function argument. This allows JS scripts to provide item serials to the function directly without needing to split it into four parts first (though that still works) Fixed issue where JS properties for multis didn't always return correct values The 'set command can now be used to set the armour class of items ('set ac #) Reimplemented 'tweak command in JS engine (js/commands/targeting/tweak.js) - can be used to view and modify properties of characters, character skills, items, multis and regions (target ground) Added placeholder packet-hook script (js/server/network/0xf1_connectUoServerPoll.js) to handle responses to ConnectUO server polling. By default this script does nothing, but serves as a placeholder for drop-in replacement scripts generated specifically for each shard by the ConnectUO service. Updated some commands to support an alternate STATIC keyword (can also be ommitted) to add base items: 'add static itemID 'tile static itemID Updated some commands with support for randomization. Provided itemID will be randomized based on provided rndValue: /js/commands/targeting/add.js: 'add itemID rndValue cmdtable.cpp and targeting.cpp: 'tile itemID rndValue 'tile itemID x1 x2 y1 y2 z rndValue Updated js/commands/custom/repeatingcmds.js to support 'm delete as an alias for 'rremove Added 'props as an alias for the 'tweak command Added 'teleport as an alias for the 'tele command (js/commands/targeting/tele.js) Added 'shavehair and 'shavebeard as aliases for 'kill hair and 'kill beard (js/commands/targeting/kill.js) Added 'noinvul and 'mortal aliases for the 'invul false command (js/commands/custom/misc-cmds.js) Added 'immortal and 'invul (without parameter) as aliases for the 'invul true command Added 'bringtopack as an alias of 'movetobag command (js/commands/targeting/movetobag.js) Updated check for cancelling of target cursor in various JS scripts Minor updates to various JS scripts Fixed issue where some item definitions in dfndata/harditems/harditems.dfn and dfndata/items/building/lighting.dfn used comma instead of space as delimiter for the VALUE tag, which thus never got applied Updated all NPC definitions to let NPCs spawn facing in random directions
2021-03-22 05:59:20 +08:00
*vp = JSVAL_NULL;
}
Housing Revamp and more Updated JS SysMessage function to accept up to 10 extra, optional arguments, which can be used with dictionary messages that require additional parameters like %s or %i Added new type of house privilege in cMultiObj.cpp to keep track of friends of the multi - HOUSEPRIV_FRIEND - which is stored during worldsaves as one or more Friend=<player serial> tags in house.wsc Added new type of house privilege in cMultiObj.cpp to keep track of guests of the multi - HOUSEPRIV_GUEST - which is stored during worldsaves as one or more Guest=<player serial> tags in house.wsc When items are created for houses upon house placement, a reference to the multi's serial is now stored in the house sign's MORE property to allow easier tracking of which house a particular sign belongs to Added tracking of new, persistent properties for houses via cMultiObj.cpp/h: lockdowns, secure containers, vendors, guests, friends, owners, ban location, public status, number of visits, timestamps Added a multitude of new methods in cMultiObj.cpp/h to assist in improving the functionality of houses Added new tags for houses in house.dfn (default values applied if tag not specified): MAXSECURECONTAINERS=4 - Max amount of secure containers allowed in a multi MAXLOCKDOWNS=256 - Max amount of lockdowns allowed in a multi MAXVENDORS=10 - Max amount of vendors allowed in a multi MAXBANS=50 - Max amount of bans in a multi's ban list MAXFRIENDS=50 - Max amount of friends in a multi's friend list MAXGUESTS=50 - Max amount of guests in a multi's guest list MAXOWNERS=8 - Max amount of owners and co-owners in a multi's owner list MAXTRASHCONTAINERS=1 - Max amount of trash containers allowed in multi SCRIPT=<scriptID> - Assign a JS script-ID directly to a multi FRONTDOOR - indicates that a door is the front door of a house. Cannot be locked in public houses! INTERIORDOOR - indicates that a door is an interior door of a house. Can be locked in public houses. BANX - Location X offset for multi's ban location, if not used, will try to use SE corner of multi instead BANY - Location Y offset for multi's ban location, if not used, will try to use SE corner of multi instead Added JS Event: onHouseCommand( tSock, multiObj, cmdID ) - For handling spoken house commands via JS scripts attached to multi. Updated JS Events: onEntrance() - can now trigger both for multi being entered and/or object entering onLeaving() - can now trigger both for multi being left and/or object entering onSpeech() - can now also trigger for items (in addition to chars) with event & script attached, if UOX.INI setting ITEMSDETECTSPEECH is enabled Added JS Multi methods: .IsBoat() - Returns whether the item (or multi) is a boat .IsOwner( playerToCheck ) - Returns whether a player is the owner of a multi .IsOnOwnerList( playerToCheck ) - Returns whether a player is on the (co-)owner list of a multi .IsOnFriendList( playerToCheck ) - Returns whether a player is on the friend list of a multi .IsOnGuestList( playerToCheck ) - Returns whether a player is on the guest list of a multi .IsOnBanList( playerToCheck ) - Returns whether a player is on the ban list of a multi .AddToFriendList( playertoAdd ) - Adds player to the friend list of a multi .RemoveFromFriendList( playertoRemove ) - Removes player from the friend list of a multi .AddToGuestList( playertoAdd ) - Adds player to the guest list of a multi .RemoveFromGuestList( playertoRemove ) - Removes player from the guest list of a multi .ClearOwnerList() - Clears all entries from a multi's (co-)owner list .ClearFriendList() - Clears all entries from a multi's friend list .ClearGuestList() - Clears all entries from a multi's guest list .ClearBanList() - Clears all entries from a multi's ban list .SecureContainer( itemToSecure ) - Secures a container in a multi .UnsecureContainer( itemToUnsecure ) - Unsecures a container in a multi .IsSecureContainer( itemToCheck ) - Checks if specified item is a secure container in a multi .LockDownItem( itemToLockDown) - Locks down an item in a multi .ReleaseItem( itemToRelease ) - Releases a locked down item in a multi .KillKeys() - Deletes ALL keys associated with a multi .AddTrashCont( itemToAdd ) - Add trash container to multi's list of trash containers .RemoveTrashCont( itemToRemove ) - Remove trash container from multi's list of trash containers Added JS Item (Multi only) properties: .lockdowns - Get the number of lockdowns in a multi .maxLockdowns - Get/Set the max number of lockdowns allowed in a multi .secureContainers - Get the number of secure containers in a multi .maxSecureContainers - Get/Set the max number of secure containers allowed in a multi .trashContainers - Get the number of trash containers in a multi .maxTrashContainers - Get/Set the max number of trash containers allowed in a multi .friends - Get the number of friends in a multi's friend list .maxFriends - Get/Set the max number of friends allowed in a multi's friend list .guests - Get the number of guests in a multi's guest list .maxGuests - Get/Set the max number of guests allowed in a multi's guest list .owners - Get the number of owners in a multi's owner list .maxOwners - Get/Set the max number of owners allowed in a multi's owner list .bans - Get the number of banned players in a multi's ban list .maxBans - Get/Set the max number of banned players allowed in a multi's ban list .vendors - Get the number of player vendors in a multi .maxVendors - Get the max number of player vendors allowed in a multi .deed - Get the item sectionID for deed used to place multi .isPublic - Get/Set the private/public state of a multi .buildTimestamp - Get the timestamp for when the house was originally placed .tradeTimestamp - Get the timestamp for when the house was last traded to another player .banX - Get/Set the ban location X offset for the multi .banY - Get/Set the ban location Y offset for the multi Added JS Character properties: .multi = Get/Set the multi object the character is in .accountNum = Get the account number the character belongs to .housesOwned = Get a count of houses owned by the character .housesCoOwned = Get a count of houses co-owned by the character Updated JS cBaseObject Methods .FirstItem(), .NextItem() and .FinishedItems() to also support iterating through items in multis Updated JS multi Methods .FirstChar(), .NextChar() and .FinishedChars() to support an additional parameter to specify what kind of characters to loop through: "default" or no parameter - all characters inside the multi "owner" - players on multi's owner list "friend" - players on multi's friend list "guest" - players on multi's guest list "banned" - players on multi's ban list Added new INI tags to a new section of uox.ini called [houses] DECAYTIMERINHOUSE=3600 // Decay timer in seconds for non-locked down items inside houses PROTECTPRIVATEHOUSES=1 // Toggles whether private houses will automatically boot unauthorized visitors (1) or not (0) TRACKHOUSESPERACCOUNT=1 // Toggles whether to track (and restrict) house ownership per account (1) or per character (0) MAXHOUSESOWNABLE=1 // Specifies the max amount of houses a player can own per account/char, depending on how house ownership is tracked MAXHOUSESCOOWNABLE=10 // Specifies the max amount of houses a player can co-own per character CANOWNANDCOOWNHOUSES=1 // Toggles whether players can own and co-own houses at the same time COOWNHOUSESONSAMEACCOUNT=1 // Toggles whether characters on same account as house owner will be treated as co-owners Added new INI tags in [settings] section of uox.ini: ITEMSDETECTSPEECH=0 // If enabled, server will search for nearby items with onSpeech JS event running whenever a character speaks. Disabled by default. MAXPLAYERPACKITEMS=125 // Defines max item capacity for player (and NPC) backpacks. Defaults to 125. Moved most of the existing house functionality to JS and expanded upon it to reach feature parity with houses in regular UO around Publish 15/16, with various extras thrown in for good measure and all functionality being customizable: js/server/house/house.js (15000) - handles detection of house commands and characters entering/leaving houses js/server/house/houseSign.js (15001) - contains and handles all house-related gumps/menus and what is shown when players interact with house sign js/server/house/houseCommands.js (15002) - handles functionality of house commands and other functionality such as transfer of ownership, demolishing house, etc. js/server/house/houseDeed.js (15003) - handles initial rules that allow/disallow placement of additional houses for players All house-related menus now fully handled through JS All house commands and other functionality now fully handled through JS Removed redundant hard-coded house functionality Implemented Co-owners, friends, guests for houses, with access rules in place for entry, lockdowns, house commands, etc. Implemented Private and Public houses Implemented Secure Containers and Trash Barrels Definable max lockdowns, secure containers, player vendors, bans, friends, guests, owners, trash containers and more - per house type JS scripts can now be attached directly to houses Doors in houses can be marked as front doors or interior doors, and will be treated differently with regards to private and public houses Added new item to dfndata/items/containers/misc.dfn - [trashbarrel] Added new JS script (js/items/trashbarrel.js) with trash barrel functionality for houses. Trash barrels that are marked as secure containers are only accessible by owners, co-owners and friends of the house. Various options available at top of script. Updated js/items/axe.js to support chopping up trash barrels and house add-ons in houses owned by the player Fixed an issue with house doors being left behind after demolishing houses while their doors were open Fixed an issue where GMs could be banned from player houses Added Line of Sight checks to speech, to give players some privacy in their own homes Updated house placement code to more accurately check for other multis, dynamic and static objects when placing houses; now requires free space around each house that cannot be blocked by other houses or items that can block player movement, and disallows placement of houses on roads Updated house placement code to move characters blocking house placement to SE corner of the house Updated house placement code to disallow placing houses in guarded regions, or in dungeons Added new DFN tag for regions to enable/disable player houses in specific regions: HOUSING=0/1 Added new region (247) that covers path to Valley of Eodon in Felucca Added new region (248) that covers Valley of Eodon in Ter-Mur, with player housing disabled Added new region (249) that covers entire T2A lands, with player housing disabled Updated SPACEX and SPACEY values for all houses in dfndata/house/house.dfn to match updated house placement code Added new JS property to Regions that can be used to determine or change state of player housing in a region: .canPlaceHouse() Updated rules for usage of dye tubs to dye locked down items; now only house owners or co-owners may dye locked down items Updated rules for usage of the following locked down items in a house, which are now only usable by house owners and co-owners Dyes, Guildstone Deeds, Recall Runes (renaming), Rename Deeds, Townstone Deeds, House Deeds, Boat Models, Player Vendor Deeds, Ore, Hair Dye Updated rules for usage of the following locked down items in a house, which are now only usable by house owners, co-owners and friends: Keys, Dye Tubs, Magic Scrolls, Fireworks Wands, Magic Wands, Smithing Tools, Mining Tools, Fishing Poles Updated item lockdown rules to allow locking down (and releasing) items in a container as long as the container is locked down, and to only allow releasing a locked down container if it's empty of locked down items Updated item lockdown rules to only allow locking down movement-blocking items further than 2 tiles away from doors Updated rules for releasing items in houses - now the house owner can release any locked down items, co-owners can release items locked down by themselves or by friends, while friends can release only items locked down by themselves Added some feedback to player about why their attempted house placement failed Items added by GMs directly into multis will now decay based on the house-specific decay timer instead of the regular one Fixed an issue that could cause items to almost instantly decay after being released from lockdown in a house Placing house add-ons now properly takes into account SPACEX and SPACEY values when checking if they can fit in selected area of houses Re-added SPACEX and SPACEY values for Pentagram and Loom house add-ons House add-ons can now be converted back into house add-on deeds by chopping them with an axe Added new item type - IT_HOUSEADDON (201) - used by house add-ons placed in player houses Fixed a bug where keys would stop working after being added to a keyring, and would turn into blank keys upon release from the keyring Added visitor count for public player houses, which keeps track of how many visits a public house has received, with each player counted max 1 time every 24 hours Fixed an issue with FindPlayersInOldVisrange() where it didn't take into account that players could see buildings further away than the standard update range. This could cause players to see ghost images of buildings if they were at the "right" distance when the building was being demolished Added NODECAY tag to all signs and doors in dfndata/house/house.dfn Added FRONTDOOR or INTERIORDOOR (as appropriate) to all doors in dfndata/house/house.dfn Added BANX and BANY to specify ban location for some houses in dfndata/house/house.dfn instead of relying on finding SE corner automatically Implemented strongboxes (js/server/house/strongbox.js) for co-owners of a house, which can be placed with the house command "i wish to place a strongbox". Max capacity is 25 items Updated 'REMOVE command to take an optional parameter - itemID. If supplied, the command will remove all items with this itemID from a targeted container Fixed a bug when checking if dynamic items were blocking valid spawn locations for NPCs, some function arguments were in the wrong order! Improved code that finds valid spawn locations for items and NPCs spawned via spawn regions. As server gradually builds up lists of valid spawn locations per region over time, it will start using these lists more often, rather than always look for brand new spawn locations. Fixed a bug with CMulHandler::CheckStaticFlag() that prevented NPCs from spawning inside buildings with no static floors! Fixed an issue with repeating commands that prevented GMs from being able to cancel them when using the ClassicUO client Exposed character property .accountNum to JS engine Extended CDataList class to include a Clear() method for clearing lists Updated JS File method .Open() to support an optional, third argument - subFolderName - that defines in which sub-folder of UOX3/shared/ to store/look for a file. If no third argument is supplied, UOX3 will default to using the shared folder itself. Updated JS File method .Length() to return a value of -1 for files that don't exist Added new code function, exposed to JS engine with same parameters, which simply checks if a given tile ID has a specific flag bool CheckTileFlag( UI16 itemID, TILEFLAG flagToCheck ) Added JS function used to find the root container of an item (if any) FindRootContainer( itemSerial ) FindRootContainer( item ) Added new JS function that allows deleting files from UOX3/shared/ folder or subfolders of shared folder. If no subFolderName is provided, looks for file directly in shared folder itself. Restrictions on file- and folder-names apply. bool DeleteFile( fileName, subFolderName ) Added new JS functions for checking if a specific client or server feature is enabled. See documentation for full list of client/server features. GetClientFeature( bitNum ) // Returns true if specified client feature is enabled on server GetServerFeature( bitNum ) // Returns true if specified server feature is enabled on server Added new JS function for returning the value of almost any server setting from UOX.INI GetServerSetting( settingNameInDoubleQuotes ) Updated JS function DoesDynamicBlock() with two new parameters - checkOnlyMultis and checkOnlyNonMultis Updated JS function DoesMapBlock() with two new parameters - checkMultiPlacement and checkForRoad Fixed an issue where a LoS check would prevent players from accessing containers in their own backpack Added new functions in findfuncs.cpp to make it easier to find items near another object or location: findNearbyItems( object, distance ) findNearbyItems( x, y, worldNumber, instanceID, distance ) Added new Item property - maxItems - used by containers to determine their max item capacity Added new Item property - totalItemCount - used to get total item count in a container (including sub-containers) Added check for max item capacity when creating new items that are added to a character's backpack - items will be created below character's feet if backpack is full! Added new DFN tag for items, used by containers to determine item capacity for a given container: MAXITEMS=# // 125 is the default for all containers if not set Added new JS Item properties: .maxItems // gets/sets item capacity for a given container .totalItemCount // gets total item count in a container, including sub-containers Updated item tooltips for containers to show accurate total item count, as well as to display max item capacity Fixed a bug where picking up items from a non-locked down pile of items on the floor inside a multi could cause the remaining pile to be seen as no longer inside the multi, disallowing locking it back down and causing it to decay based on regular decay timer instead of house-specific one Updated JS command set to allow setting poison-level on items ('set poison #) and hunger-level on characters ('set hunger #) Fixed an issue with js/item/food.js that prevented poisoned food from poisoning characters when eaten Fixed an issue with js/skill/poisoning.js that prevented players from poisoning food! Updated various JS scripts and hardcoded targeting functions to disallow the targeting of locked down resources using skills and tools Updated JS Method TextMessage() to support three extra, optional parameters. Note that if one optional parameter is included, all preceding optional parameters are also required! speechTarget - What kind of target is this message intended for? 0 - Only visible for sender and receiver of message 1 - Visible to all players in range 2 - Visible to all NPCs and players in range 3 - Visible to all PCs everywhere + NPCs in range 4 - Visible to all PCs everywhere (broadcast) 5 - Only visible for the receiver of the message speechTargetSerial - The serial of the receiver of the message, used if speechTarget is 0 or 5 speechFontType - The type of font to display the text in. Defaults to normal. 0 - Bold 1 - Normal with shadow 2 - Bold with shadow 3 - Normal 4 - Gothic 5 - Italic 6 - Small, dark 7 - Colourful 8 - Runic (only works with CAPS) 9 - Small, light Added timestamp to worldsaves in console, to make it easier to see when a particular world-save was done Added info about compiler/environment displayed at the top of the UOX3 console during startup Updated dictionary files with new messages primarily related to housing
2020-11-04 02:00:37 +08:00
break;
case CIP_OWNERS:
if( gPriv->GetObjType() == OT_MULTI )
{
*vp = INT_TO_JSVAL(( static_cast<CMultiObj *>( gPriv )->GetOwnerCount() ));
}
0.99.4d Added new option in UOX.INI under [settings] section: MAPDIFFSENABLED=0/1 // If enabled, server will attempt to load diff files, and send "Enable Map-diff files" packet to client to also load these. Disabled by default. Server no longer loads map/statics diff files by default, nor does it send packet to client to request loading these files, as only client versions below 7.0.8.2 will actively load these files. Can be re-enabled with new UOX.INI setting mentioned above! Fixed incorrect ID for gargish dagger in CHandleCombat::getWeaponType() Added missing weapon entries in CHandleCombat::getWeaponType(): bladed whip, barbed whip, spiked whip, gargish talwar Fixed an issue that would show the end part of some tiledata names as garbled text instead of cutting off the text(!) at 20 characters Fixed an issue with advanced character creation template when using ClassicUO client, which sends a profession value of 255 instead of 0 when no profession template has been selected. Fixed an issue where clones of NPCs that can split in combat didn't get the NPC flag correctly set Guild titles are now removed for players who leave their guilds Enabled closing some hard-coded gump menus using right-click (howto, guild, towns, wholist, addmenu, craftmenu, info) Fixed an issue where adding base items using 'add [itemID] would sometimes get false positive hits from harditems.dfn, depending on the length of the itemID Fixed an issue where items added using 'add [itemID] would not get names applied properly from harditems.dfn Item/NPC DFN tag GET can now inherit a random parent by adding additional values separated by spaces. Syntax: GET=parent1 parent2 parent3 (etc) Fixed an issue where NPC backpacks would not have the max item capacity set properly Added new properties for CItem objects (also exposed as JS Item Properties): maxRange // max distance a ranged weapon can fire at (replaces ARCHERRANGE ini setting) baseRange // base distance throwing weapons (when implemented) can be used at Added support for new Item DFN tag that replaces global UOX.INI setting ARCHERRANGE: MAXRANGE=# // Specifies max range of ranged weapon Added support for new Item/NPC DFN tags to support randomizing elemental resistances: RESISTFIRE=#/# # // Set NPC's poison resistance; fixed or random value RESISTCOLD=#/# # // Set NPC's poison resistance; fixed or random value RESISTLIGHTNING=#/# # // Set NPC's poison resistance; fixed or random value RESISTPOISON=#/# # // Set NPC's poison resistance; fixed or random value Added support for two new DFN tags in dfndata/race/races.dfn that can be used to allow/ban lists of equipment for specific races ALLOWEQUIPLIST=# BANEQUIPLIST=# Added support for new section in dfndata/race/races.dfn - [EQUIPLIST #], which can be used to define lists of equipment that is whitelisted or banned for specific races. Fixed a bug that would report incorrect weight in tooltips for Item/NPC spawner objects ScriptSections are now reapplied for items bought by players from NPC vendors Fixed an issue where players could drop an item on the ground and other players would still see the item after it was picked up, because of a failed distance check vs old location coordinates (in pack) instead of vs current location on ground Fixed a bug with players being able to use last-target macro to target objects picked up and held by other players on their cursor Updated all references to "devinelock" to be "divinelock" instead - this includes the name of the JS Item property Fixed house commands triggering (useless) targeting cursors for players onboard boats Changed default statcap in UOX.INI from 325 to 225 Fixed a out-of-range error for players attempting to combine ore inside their own backpack Fixed various issues with distance checks and container checks when using/target objects Added optional 4th "hue" parameter to AddGump JS method Added JS Function to get total amount of accounts on server - GetAccountCount() Added JS Function to get total amount of players online - GetPlayerCount() onSwing JS Event can now trigger in scripts attached to items, not just items attached to characters Added some JS Functions to expose some hard-coded constants to JS scripts: BASEITEMSERIAL() // Base item serial INVALIDSERIAL() // Invalid serial INVALIDID() // Invalid ID INVALIDCOLOUR() // Invalid colour Fixed an issue where JS character property .colour would modify origSkin property instead of colour Fixed an issue where JS character property .guildTitle returned the name of the character instead of the guild title Character JS property .poison can now also be used to set a character's poisoned level, not just read it Exposed Item property to JS engine: .ac // armour class for item (0-128). Primarily used for setting race-restrictions for equippable items, i.e. race X cannot equip items of armour class Y. .def // defensive value of item (Physical resistance post-AoS, AR in older UO) // NOTE: The following properties don't actually do anything yet, but can still be used in custom JS scripts if desired .resistCold // Cold resistance of item 0-1000, where 1000 equals 100.0% .resistHeat // Heat/Fire resistance of item 0-1000, where 1000 equals 100.0% .resistLight // Light resistance of item 0-1000, where 1000 equals 100.0% .resistLightning // Energy/Lightning resistance of item 0-1000, where 1000 equals 100.0% .resistPoison // Poison resistance of item 0-1000, where 1000 equals 100.0% .resistRain // Rain resistance of item 0-1000, where 1000 equals 100.0% .resistSnow // Snow resistance of item 0-1000, where 1000 equals 100.0% .damageHeat // Weapon deals Heat/Fire elemental damage (true/false) .damageCold // Weapon deals Cold elemental damage (true/false) .damageLight // Weapon deals Light elemental damage (true/false) .damageLightning // Weapon deals Lightning elemental damage (true/false) .damagePoison // Weapon deals Poison elemental damage (true/false) .damageRain // Weapon deals Rain/Water elemental damage (true/false) .damageSnow // Weapon deals Snow/Ice elemental damage (true/false) Added new UOX.INI setting under [server] to enable/disable shard response to ConnectUO server polling (disabled by default) Sub-commands are no longer included when registering packets to be overloaded via RegisterPacket function, as that part was never fully implemented. Packet-hook scripts can be setup for specific packet IDs, but any sub-command checking will need to be done in the script itself JS Packet Method GetDWord() now uses JS_NewNumberValue instead of INT_TO_JSVAL to read from the socket buffer, to better handle large numbers, which could previously be returned with wrong values. JS Function CalcItemFromSer() now uses a JS_GetStringBytes() and str_value() combo instead of JSVAL_TO_INT() to read the data provided in the function argument. This allows JS scripts to provide item serials to the function directly without needing to split it into four parts first (though that still works) Fixed issue where JS properties for multis didn't always return correct values The 'set command can now be used to set the armour class of items ('set ac #) Reimplemented 'tweak command in JS engine (js/commands/targeting/tweak.js) - can be used to view and modify properties of characters, character skills, items, multis and regions (target ground) Added placeholder packet-hook script (js/server/network/0xf1_connectUoServerPoll.js) to handle responses to ConnectUO server polling. By default this script does nothing, but serves as a placeholder for drop-in replacement scripts generated specifically for each shard by the ConnectUO service. Updated some commands to support an alternate STATIC keyword (can also be ommitted) to add base items: 'add static itemID 'tile static itemID Updated some commands with support for randomization. Provided itemID will be randomized based on provided rndValue: /js/commands/targeting/add.js: 'add itemID rndValue cmdtable.cpp and targeting.cpp: 'tile itemID rndValue 'tile itemID x1 x2 y1 y2 z rndValue Updated js/commands/custom/repeatingcmds.js to support 'm delete as an alias for 'rremove Added 'props as an alias for the 'tweak command Added 'teleport as an alias for the 'tele command (js/commands/targeting/tele.js) Added 'shavehair and 'shavebeard as aliases for 'kill hair and 'kill beard (js/commands/targeting/kill.js) Added 'noinvul and 'mortal aliases for the 'invul false command (js/commands/custom/misc-cmds.js) Added 'immortal and 'invul (without parameter) as aliases for the 'invul true command Added 'bringtopack as an alias of 'movetobag command (js/commands/targeting/movetobag.js) Updated check for cancelling of target cursor in various JS scripts Minor updates to various JS scripts Fixed issue where some item definitions in dfndata/harditems/harditems.dfn and dfndata/items/building/lighting.dfn used comma instead of space as delimiter for the VALUE tag, which thus never got applied Updated all NPC definitions to let NPCs spawn facing in random directions
2021-03-22 05:59:20 +08:00
else
{
0.99.4d Added new option in UOX.INI under [settings] section: MAPDIFFSENABLED=0/1 // If enabled, server will attempt to load diff files, and send "Enable Map-diff files" packet to client to also load these. Disabled by default. Server no longer loads map/statics diff files by default, nor does it send packet to client to request loading these files, as only client versions below 7.0.8.2 will actively load these files. Can be re-enabled with new UOX.INI setting mentioned above! Fixed incorrect ID for gargish dagger in CHandleCombat::getWeaponType() Added missing weapon entries in CHandleCombat::getWeaponType(): bladed whip, barbed whip, spiked whip, gargish talwar Fixed an issue that would show the end part of some tiledata names as garbled text instead of cutting off the text(!) at 20 characters Fixed an issue with advanced character creation template when using ClassicUO client, which sends a profession value of 255 instead of 0 when no profession template has been selected. Fixed an issue where clones of NPCs that can split in combat didn't get the NPC flag correctly set Guild titles are now removed for players who leave their guilds Enabled closing some hard-coded gump menus using right-click (howto, guild, towns, wholist, addmenu, craftmenu, info) Fixed an issue where adding base items using 'add [itemID] would sometimes get false positive hits from harditems.dfn, depending on the length of the itemID Fixed an issue where items added using 'add [itemID] would not get names applied properly from harditems.dfn Item/NPC DFN tag GET can now inherit a random parent by adding additional values separated by spaces. Syntax: GET=parent1 parent2 parent3 (etc) Fixed an issue where NPC backpacks would not have the max item capacity set properly Added new properties for CItem objects (also exposed as JS Item Properties): maxRange // max distance a ranged weapon can fire at (replaces ARCHERRANGE ini setting) baseRange // base distance throwing weapons (when implemented) can be used at Added support for new Item DFN tag that replaces global UOX.INI setting ARCHERRANGE: MAXRANGE=# // Specifies max range of ranged weapon Added support for new Item/NPC DFN tags to support randomizing elemental resistances: RESISTFIRE=#/# # // Set NPC's poison resistance; fixed or random value RESISTCOLD=#/# # // Set NPC's poison resistance; fixed or random value RESISTLIGHTNING=#/# # // Set NPC's poison resistance; fixed or random value RESISTPOISON=#/# # // Set NPC's poison resistance; fixed or random value Added support for two new DFN tags in dfndata/race/races.dfn that can be used to allow/ban lists of equipment for specific races ALLOWEQUIPLIST=# BANEQUIPLIST=# Added support for new section in dfndata/race/races.dfn - [EQUIPLIST #], which can be used to define lists of equipment that is whitelisted or banned for specific races. Fixed a bug that would report incorrect weight in tooltips for Item/NPC spawner objects ScriptSections are now reapplied for items bought by players from NPC vendors Fixed an issue where players could drop an item on the ground and other players would still see the item after it was picked up, because of a failed distance check vs old location coordinates (in pack) instead of vs current location on ground Fixed a bug with players being able to use last-target macro to target objects picked up and held by other players on their cursor Updated all references to "devinelock" to be "divinelock" instead - this includes the name of the JS Item property Fixed house commands triggering (useless) targeting cursors for players onboard boats Changed default statcap in UOX.INI from 325 to 225 Fixed a out-of-range error for players attempting to combine ore inside their own backpack Fixed various issues with distance checks and container checks when using/target objects Added optional 4th "hue" parameter to AddGump JS method Added JS Function to get total amount of accounts on server - GetAccountCount() Added JS Function to get total amount of players online - GetPlayerCount() onSwing JS Event can now trigger in scripts attached to items, not just items attached to characters Added some JS Functions to expose some hard-coded constants to JS scripts: BASEITEMSERIAL() // Base item serial INVALIDSERIAL() // Invalid serial INVALIDID() // Invalid ID INVALIDCOLOUR() // Invalid colour Fixed an issue where JS character property .colour would modify origSkin property instead of colour Fixed an issue where JS character property .guildTitle returned the name of the character instead of the guild title Character JS property .poison can now also be used to set a character's poisoned level, not just read it Exposed Item property to JS engine: .ac // armour class for item (0-128). Primarily used for setting race-restrictions for equippable items, i.e. race X cannot equip items of armour class Y. .def // defensive value of item (Physical resistance post-AoS, AR in older UO) // NOTE: The following properties don't actually do anything yet, but can still be used in custom JS scripts if desired .resistCold // Cold resistance of item 0-1000, where 1000 equals 100.0% .resistHeat // Heat/Fire resistance of item 0-1000, where 1000 equals 100.0% .resistLight // Light resistance of item 0-1000, where 1000 equals 100.0% .resistLightning // Energy/Lightning resistance of item 0-1000, where 1000 equals 100.0% .resistPoison // Poison resistance of item 0-1000, where 1000 equals 100.0% .resistRain // Rain resistance of item 0-1000, where 1000 equals 100.0% .resistSnow // Snow resistance of item 0-1000, where 1000 equals 100.0% .damageHeat // Weapon deals Heat/Fire elemental damage (true/false) .damageCold // Weapon deals Cold elemental damage (true/false) .damageLight // Weapon deals Light elemental damage (true/false) .damageLightning // Weapon deals Lightning elemental damage (true/false) .damagePoison // Weapon deals Poison elemental damage (true/false) .damageRain // Weapon deals Rain/Water elemental damage (true/false) .damageSnow // Weapon deals Snow/Ice elemental damage (true/false) Added new UOX.INI setting under [server] to enable/disable shard response to ConnectUO server polling (disabled by default) Sub-commands are no longer included when registering packets to be overloaded via RegisterPacket function, as that part was never fully implemented. Packet-hook scripts can be setup for specific packet IDs, but any sub-command checking will need to be done in the script itself JS Packet Method GetDWord() now uses JS_NewNumberValue instead of INT_TO_JSVAL to read from the socket buffer, to better handle large numbers, which could previously be returned with wrong values. JS Function CalcItemFromSer() now uses a JS_GetStringBytes() and str_value() combo instead of JSVAL_TO_INT() to read the data provided in the function argument. This allows JS scripts to provide item serials to the function directly without needing to split it into four parts first (though that still works) Fixed issue where JS properties for multis didn't always return correct values The 'set command can now be used to set the armour class of items ('set ac #) Reimplemented 'tweak command in JS engine (js/commands/targeting/tweak.js) - can be used to view and modify properties of characters, character skills, items, multis and regions (target ground) Added placeholder packet-hook script (js/server/network/0xf1_connectUoServerPoll.js) to handle responses to ConnectUO server polling. By default this script does nothing, but serves as a placeholder for drop-in replacement scripts generated specifically for each shard by the ConnectUO service. Updated some commands to support an alternate STATIC keyword (can also be ommitted) to add base items: 'add static itemID 'tile static itemID Updated some commands with support for randomization. Provided itemID will be randomized based on provided rndValue: /js/commands/targeting/add.js: 'add itemID rndValue cmdtable.cpp and targeting.cpp: 'tile itemID rndValue 'tile itemID x1 x2 y1 y2 z rndValue Updated js/commands/custom/repeatingcmds.js to support 'm delete as an alias for 'rremove Added 'props as an alias for the 'tweak command Added 'teleport as an alias for the 'tele command (js/commands/targeting/tele.js) Added 'shavehair and 'shavebeard as aliases for 'kill hair and 'kill beard (js/commands/targeting/kill.js) Added 'noinvul and 'mortal aliases for the 'invul false command (js/commands/custom/misc-cmds.js) Added 'immortal and 'invul (without parameter) as aliases for the 'invul true command Added 'bringtopack as an alias of 'movetobag command (js/commands/targeting/movetobag.js) Updated check for cancelling of target cursor in various JS scripts Minor updates to various JS scripts Fixed issue where some item definitions in dfndata/harditems/harditems.dfn and dfndata/items/building/lighting.dfn used comma instead of space as delimiter for the VALUE tag, which thus never got applied Updated all NPC definitions to let NPCs spawn facing in random directions
2021-03-22 05:59:20 +08:00
*vp = JSVAL_NULL;
}
Housing Revamp and more Updated JS SysMessage function to accept up to 10 extra, optional arguments, which can be used with dictionary messages that require additional parameters like %s or %i Added new type of house privilege in cMultiObj.cpp to keep track of friends of the multi - HOUSEPRIV_FRIEND - which is stored during worldsaves as one or more Friend=<player serial> tags in house.wsc Added new type of house privilege in cMultiObj.cpp to keep track of guests of the multi - HOUSEPRIV_GUEST - which is stored during worldsaves as one or more Guest=<player serial> tags in house.wsc When items are created for houses upon house placement, a reference to the multi's serial is now stored in the house sign's MORE property to allow easier tracking of which house a particular sign belongs to Added tracking of new, persistent properties for houses via cMultiObj.cpp/h: lockdowns, secure containers, vendors, guests, friends, owners, ban location, public status, number of visits, timestamps Added a multitude of new methods in cMultiObj.cpp/h to assist in improving the functionality of houses Added new tags for houses in house.dfn (default values applied if tag not specified): MAXSECURECONTAINERS=4 - Max amount of secure containers allowed in a multi MAXLOCKDOWNS=256 - Max amount of lockdowns allowed in a multi MAXVENDORS=10 - Max amount of vendors allowed in a multi MAXBANS=50 - Max amount of bans in a multi's ban list MAXFRIENDS=50 - Max amount of friends in a multi's friend list MAXGUESTS=50 - Max amount of guests in a multi's guest list MAXOWNERS=8 - Max amount of owners and co-owners in a multi's owner list MAXTRASHCONTAINERS=1 - Max amount of trash containers allowed in multi SCRIPT=<scriptID> - Assign a JS script-ID directly to a multi FRONTDOOR - indicates that a door is the front door of a house. Cannot be locked in public houses! INTERIORDOOR - indicates that a door is an interior door of a house. Can be locked in public houses. BANX - Location X offset for multi's ban location, if not used, will try to use SE corner of multi instead BANY - Location Y offset for multi's ban location, if not used, will try to use SE corner of multi instead Added JS Event: onHouseCommand( tSock, multiObj, cmdID ) - For handling spoken house commands via JS scripts attached to multi. Updated JS Events: onEntrance() - can now trigger both for multi being entered and/or object entering onLeaving() - can now trigger both for multi being left and/or object entering onSpeech() - can now also trigger for items (in addition to chars) with event & script attached, if UOX.INI setting ITEMSDETECTSPEECH is enabled Added JS Multi methods: .IsBoat() - Returns whether the item (or multi) is a boat .IsOwner( playerToCheck ) - Returns whether a player is the owner of a multi .IsOnOwnerList( playerToCheck ) - Returns whether a player is on the (co-)owner list of a multi .IsOnFriendList( playerToCheck ) - Returns whether a player is on the friend list of a multi .IsOnGuestList( playerToCheck ) - Returns whether a player is on the guest list of a multi .IsOnBanList( playerToCheck ) - Returns whether a player is on the ban list of a multi .AddToFriendList( playertoAdd ) - Adds player to the friend list of a multi .RemoveFromFriendList( playertoRemove ) - Removes player from the friend list of a multi .AddToGuestList( playertoAdd ) - Adds player to the guest list of a multi .RemoveFromGuestList( playertoRemove ) - Removes player from the guest list of a multi .ClearOwnerList() - Clears all entries from a multi's (co-)owner list .ClearFriendList() - Clears all entries from a multi's friend list .ClearGuestList() - Clears all entries from a multi's guest list .ClearBanList() - Clears all entries from a multi's ban list .SecureContainer( itemToSecure ) - Secures a container in a multi .UnsecureContainer( itemToUnsecure ) - Unsecures a container in a multi .IsSecureContainer( itemToCheck ) - Checks if specified item is a secure container in a multi .LockDownItem( itemToLockDown) - Locks down an item in a multi .ReleaseItem( itemToRelease ) - Releases a locked down item in a multi .KillKeys() - Deletes ALL keys associated with a multi .AddTrashCont( itemToAdd ) - Add trash container to multi's list of trash containers .RemoveTrashCont( itemToRemove ) - Remove trash container from multi's list of trash containers Added JS Item (Multi only) properties: .lockdowns - Get the number of lockdowns in a multi .maxLockdowns - Get/Set the max number of lockdowns allowed in a multi .secureContainers - Get the number of secure containers in a multi .maxSecureContainers - Get/Set the max number of secure containers allowed in a multi .trashContainers - Get the number of trash containers in a multi .maxTrashContainers - Get/Set the max number of trash containers allowed in a multi .friends - Get the number of friends in a multi's friend list .maxFriends - Get/Set the max number of friends allowed in a multi's friend list .guests - Get the number of guests in a multi's guest list .maxGuests - Get/Set the max number of guests allowed in a multi's guest list .owners - Get the number of owners in a multi's owner list .maxOwners - Get/Set the max number of owners allowed in a multi's owner list .bans - Get the number of banned players in a multi's ban list .maxBans - Get/Set the max number of banned players allowed in a multi's ban list .vendors - Get the number of player vendors in a multi .maxVendors - Get the max number of player vendors allowed in a multi .deed - Get the item sectionID for deed used to place multi .isPublic - Get/Set the private/public state of a multi .buildTimestamp - Get the timestamp for when the house was originally placed .tradeTimestamp - Get the timestamp for when the house was last traded to another player .banX - Get/Set the ban location X offset for the multi .banY - Get/Set the ban location Y offset for the multi Added JS Character properties: .multi = Get/Set the multi object the character is in .accountNum = Get the account number the character belongs to .housesOwned = Get a count of houses owned by the character .housesCoOwned = Get a count of houses co-owned by the character Updated JS cBaseObject Methods .FirstItem(), .NextItem() and .FinishedItems() to also support iterating through items in multis Updated JS multi Methods .FirstChar(), .NextChar() and .FinishedChars() to support an additional parameter to specify what kind of characters to loop through: "default" or no parameter - all characters inside the multi "owner" - players on multi's owner list "friend" - players on multi's friend list "guest" - players on multi's guest list "banned" - players on multi's ban list Added new INI tags to a new section of uox.ini called [houses] DECAYTIMERINHOUSE=3600 // Decay timer in seconds for non-locked down items inside houses PROTECTPRIVATEHOUSES=1 // Toggles whether private houses will automatically boot unauthorized visitors (1) or not (0) TRACKHOUSESPERACCOUNT=1 // Toggles whether to track (and restrict) house ownership per account (1) or per character (0) MAXHOUSESOWNABLE=1 // Specifies the max amount of houses a player can own per account/char, depending on how house ownership is tracked MAXHOUSESCOOWNABLE=10 // Specifies the max amount of houses a player can co-own per character CANOWNANDCOOWNHOUSES=1 // Toggles whether players can own and co-own houses at the same time COOWNHOUSESONSAMEACCOUNT=1 // Toggles whether characters on same account as house owner will be treated as co-owners Added new INI tags in [settings] section of uox.ini: ITEMSDETECTSPEECH=0 // If enabled, server will search for nearby items with onSpeech JS event running whenever a character speaks. Disabled by default. MAXPLAYERPACKITEMS=125 // Defines max item capacity for player (and NPC) backpacks. Defaults to 125. Moved most of the existing house functionality to JS and expanded upon it to reach feature parity with houses in regular UO around Publish 15/16, with various extras thrown in for good measure and all functionality being customizable: js/server/house/house.js (15000) - handles detection of house commands and characters entering/leaving houses js/server/house/houseSign.js (15001) - contains and handles all house-related gumps/menus and what is shown when players interact with house sign js/server/house/houseCommands.js (15002) - handles functionality of house commands and other functionality such as transfer of ownership, demolishing house, etc. js/server/house/houseDeed.js (15003) - handles initial rules that allow/disallow placement of additional houses for players All house-related menus now fully handled through JS All house commands and other functionality now fully handled through JS Removed redundant hard-coded house functionality Implemented Co-owners, friends, guests for houses, with access rules in place for entry, lockdowns, house commands, etc. Implemented Private and Public houses Implemented Secure Containers and Trash Barrels Definable max lockdowns, secure containers, player vendors, bans, friends, guests, owners, trash containers and more - per house type JS scripts can now be attached directly to houses Doors in houses can be marked as front doors or interior doors, and will be treated differently with regards to private and public houses Added new item to dfndata/items/containers/misc.dfn - [trashbarrel] Added new JS script (js/items/trashbarrel.js) with trash barrel functionality for houses. Trash barrels that are marked as secure containers are only accessible by owners, co-owners and friends of the house. Various options available at top of script. Updated js/items/axe.js to support chopping up trash barrels and house add-ons in houses owned by the player Fixed an issue with house doors being left behind after demolishing houses while their doors were open Fixed an issue where GMs could be banned from player houses Added Line of Sight checks to speech, to give players some privacy in their own homes Updated house placement code to more accurately check for other multis, dynamic and static objects when placing houses; now requires free space around each house that cannot be blocked by other houses or items that can block player movement, and disallows placement of houses on roads Updated house placement code to move characters blocking house placement to SE corner of the house Updated house placement code to disallow placing houses in guarded regions, or in dungeons Added new DFN tag for regions to enable/disable player houses in specific regions: HOUSING=0/1 Added new region (247) that covers path to Valley of Eodon in Felucca Added new region (248) that covers Valley of Eodon in Ter-Mur, with player housing disabled Added new region (249) that covers entire T2A lands, with player housing disabled Updated SPACEX and SPACEY values for all houses in dfndata/house/house.dfn to match updated house placement code Added new JS property to Regions that can be used to determine or change state of player housing in a region: .canPlaceHouse() Updated rules for usage of dye tubs to dye locked down items; now only house owners or co-owners may dye locked down items Updated rules for usage of the following locked down items in a house, which are now only usable by house owners and co-owners Dyes, Guildstone Deeds, Recall Runes (renaming), Rename Deeds, Townstone Deeds, House Deeds, Boat Models, Player Vendor Deeds, Ore, Hair Dye Updated rules for usage of the following locked down items in a house, which are now only usable by house owners, co-owners and friends: Keys, Dye Tubs, Magic Scrolls, Fireworks Wands, Magic Wands, Smithing Tools, Mining Tools, Fishing Poles Updated item lockdown rules to allow locking down (and releasing) items in a container as long as the container is locked down, and to only allow releasing a locked down container if it's empty of locked down items Updated item lockdown rules to only allow locking down movement-blocking items further than 2 tiles away from doors Updated rules for releasing items in houses - now the house owner can release any locked down items, co-owners can release items locked down by themselves or by friends, while friends can release only items locked down by themselves Added some feedback to player about why their attempted house placement failed Items added by GMs directly into multis will now decay based on the house-specific decay timer instead of the regular one Fixed an issue that could cause items to almost instantly decay after being released from lockdown in a house Placing house add-ons now properly takes into account SPACEX and SPACEY values when checking if they can fit in selected area of houses Re-added SPACEX and SPACEY values for Pentagram and Loom house add-ons House add-ons can now be converted back into house add-on deeds by chopping them with an axe Added new item type - IT_HOUSEADDON (201) - used by house add-ons placed in player houses Fixed a bug where keys would stop working after being added to a keyring, and would turn into blank keys upon release from the keyring Added visitor count for public player houses, which keeps track of how many visits a public house has received, with each player counted max 1 time every 24 hours Fixed an issue with FindPlayersInOldVisrange() where it didn't take into account that players could see buildings further away than the standard update range. This could cause players to see ghost images of buildings if they were at the "right" distance when the building was being demolished Added NODECAY tag to all signs and doors in dfndata/house/house.dfn Added FRONTDOOR or INTERIORDOOR (as appropriate) to all doors in dfndata/house/house.dfn Added BANX and BANY to specify ban location for some houses in dfndata/house/house.dfn instead of relying on finding SE corner automatically Implemented strongboxes (js/server/house/strongbox.js) for co-owners of a house, which can be placed with the house command "i wish to place a strongbox". Max capacity is 25 items Updated 'REMOVE command to take an optional parameter - itemID. If supplied, the command will remove all items with this itemID from a targeted container Fixed a bug when checking if dynamic items were blocking valid spawn locations for NPCs, some function arguments were in the wrong order! Improved code that finds valid spawn locations for items and NPCs spawned via spawn regions. As server gradually builds up lists of valid spawn locations per region over time, it will start using these lists more often, rather than always look for brand new spawn locations. Fixed a bug with CMulHandler::CheckStaticFlag() that prevented NPCs from spawning inside buildings with no static floors! Fixed an issue with repeating commands that prevented GMs from being able to cancel them when using the ClassicUO client Exposed character property .accountNum to JS engine Extended CDataList class to include a Clear() method for clearing lists Updated JS File method .Open() to support an optional, third argument - subFolderName - that defines in which sub-folder of UOX3/shared/ to store/look for a file. If no third argument is supplied, UOX3 will default to using the shared folder itself. Updated JS File method .Length() to return a value of -1 for files that don't exist Added new code function, exposed to JS engine with same parameters, which simply checks if a given tile ID has a specific flag bool CheckTileFlag( UI16 itemID, TILEFLAG flagToCheck ) Added JS function used to find the root container of an item (if any) FindRootContainer( itemSerial ) FindRootContainer( item ) Added new JS function that allows deleting files from UOX3/shared/ folder or subfolders of shared folder. If no subFolderName is provided, looks for file directly in shared folder itself. Restrictions on file- and folder-names apply. bool DeleteFile( fileName, subFolderName ) Added new JS functions for checking if a specific client or server feature is enabled. See documentation for full list of client/server features. GetClientFeature( bitNum ) // Returns true if specified client feature is enabled on server GetServerFeature( bitNum ) // Returns true if specified server feature is enabled on server Added new JS function for returning the value of almost any server setting from UOX.INI GetServerSetting( settingNameInDoubleQuotes ) Updated JS function DoesDynamicBlock() with two new parameters - checkOnlyMultis and checkOnlyNonMultis Updated JS function DoesMapBlock() with two new parameters - checkMultiPlacement and checkForRoad Fixed an issue where a LoS check would prevent players from accessing containers in their own backpack Added new functions in findfuncs.cpp to make it easier to find items near another object or location: findNearbyItems( object, distance ) findNearbyItems( x, y, worldNumber, instanceID, distance ) Added new Item property - maxItems - used by containers to determine their max item capacity Added new Item property - totalItemCount - used to get total item count in a container (including sub-containers) Added check for max item capacity when creating new items that are added to a character's backpack - items will be created below character's feet if backpack is full! Added new DFN tag for items, used by containers to determine item capacity for a given container: MAXITEMS=# // 125 is the default for all containers if not set Added new JS Item properties: .maxItems // gets/sets item capacity for a given container .totalItemCount // gets total item count in a container, including sub-containers Updated item tooltips for containers to show accurate total item count, as well as to display max item capacity Fixed a bug where picking up items from a non-locked down pile of items on the floor inside a multi could cause the remaining pile to be seen as no longer inside the multi, disallowing locking it back down and causing it to decay based on regular decay timer instead of house-specific one Updated JS command set to allow setting poison-level on items ('set poison #) and hunger-level on characters ('set hunger #) Fixed an issue with js/item/food.js that prevented poisoned food from poisoning characters when eaten Fixed an issue with js/skill/poisoning.js that prevented players from poisoning food! Updated various JS scripts and hardcoded targeting functions to disallow the targeting of locked down resources using skills and tools Updated JS Method TextMessage() to support three extra, optional parameters. Note that if one optional parameter is included, all preceding optional parameters are also required! speechTarget - What kind of target is this message intended for? 0 - Only visible for sender and receiver of message 1 - Visible to all players in range 2 - Visible to all NPCs and players in range 3 - Visible to all PCs everywhere + NPCs in range 4 - Visible to all PCs everywhere (broadcast) 5 - Only visible for the receiver of the message speechTargetSerial - The serial of the receiver of the message, used if speechTarget is 0 or 5 speechFontType - The type of font to display the text in. Defaults to normal. 0 - Bold 1 - Normal with shadow 2 - Bold with shadow 3 - Normal 4 - Gothic 5 - Italic 6 - Small, dark 7 - Colourful 8 - Runic (only works with CAPS) 9 - Small, light Added timestamp to worldsaves in console, to make it easier to see when a particular world-save was done Added info about compiler/environment displayed at the top of the UOX3 console during startup Updated dictionary files with new messages primarily related to housing
2020-11-04 02:00:37 +08:00
break;
case CIP_MAXOWNERS:
if( gPriv->GetObjType() == OT_MULTI )
{
*vp = INT_TO_JSVAL(( static_cast<CMultiObj *>( gPriv )->GetMaxOwners() ));
}
0.99.4d Added new option in UOX.INI under [settings] section: MAPDIFFSENABLED=0/1 // If enabled, server will attempt to load diff files, and send "Enable Map-diff files" packet to client to also load these. Disabled by default. Server no longer loads map/statics diff files by default, nor does it send packet to client to request loading these files, as only client versions below 7.0.8.2 will actively load these files. Can be re-enabled with new UOX.INI setting mentioned above! Fixed incorrect ID for gargish dagger in CHandleCombat::getWeaponType() Added missing weapon entries in CHandleCombat::getWeaponType(): bladed whip, barbed whip, spiked whip, gargish talwar Fixed an issue that would show the end part of some tiledata names as garbled text instead of cutting off the text(!) at 20 characters Fixed an issue with advanced character creation template when using ClassicUO client, which sends a profession value of 255 instead of 0 when no profession template has been selected. Fixed an issue where clones of NPCs that can split in combat didn't get the NPC flag correctly set Guild titles are now removed for players who leave their guilds Enabled closing some hard-coded gump menus using right-click (howto, guild, towns, wholist, addmenu, craftmenu, info) Fixed an issue where adding base items using 'add [itemID] would sometimes get false positive hits from harditems.dfn, depending on the length of the itemID Fixed an issue where items added using 'add [itemID] would not get names applied properly from harditems.dfn Item/NPC DFN tag GET can now inherit a random parent by adding additional values separated by spaces. Syntax: GET=parent1 parent2 parent3 (etc) Fixed an issue where NPC backpacks would not have the max item capacity set properly Added new properties for CItem objects (also exposed as JS Item Properties): maxRange // max distance a ranged weapon can fire at (replaces ARCHERRANGE ini setting) baseRange // base distance throwing weapons (when implemented) can be used at Added support for new Item DFN tag that replaces global UOX.INI setting ARCHERRANGE: MAXRANGE=# // Specifies max range of ranged weapon Added support for new Item/NPC DFN tags to support randomizing elemental resistances: RESISTFIRE=#/# # // Set NPC's poison resistance; fixed or random value RESISTCOLD=#/# # // Set NPC's poison resistance; fixed or random value RESISTLIGHTNING=#/# # // Set NPC's poison resistance; fixed or random value RESISTPOISON=#/# # // Set NPC's poison resistance; fixed or random value Added support for two new DFN tags in dfndata/race/races.dfn that can be used to allow/ban lists of equipment for specific races ALLOWEQUIPLIST=# BANEQUIPLIST=# Added support for new section in dfndata/race/races.dfn - [EQUIPLIST #], which can be used to define lists of equipment that is whitelisted or banned for specific races. Fixed a bug that would report incorrect weight in tooltips for Item/NPC spawner objects ScriptSections are now reapplied for items bought by players from NPC vendors Fixed an issue where players could drop an item on the ground and other players would still see the item after it was picked up, because of a failed distance check vs old location coordinates (in pack) instead of vs current location on ground Fixed a bug with players being able to use last-target macro to target objects picked up and held by other players on their cursor Updated all references to "devinelock" to be "divinelock" instead - this includes the name of the JS Item property Fixed house commands triggering (useless) targeting cursors for players onboard boats Changed default statcap in UOX.INI from 325 to 225 Fixed a out-of-range error for players attempting to combine ore inside their own backpack Fixed various issues with distance checks and container checks when using/target objects Added optional 4th "hue" parameter to AddGump JS method Added JS Function to get total amount of accounts on server - GetAccountCount() Added JS Function to get total amount of players online - GetPlayerCount() onSwing JS Event can now trigger in scripts attached to items, not just items attached to characters Added some JS Functions to expose some hard-coded constants to JS scripts: BASEITEMSERIAL() // Base item serial INVALIDSERIAL() // Invalid serial INVALIDID() // Invalid ID INVALIDCOLOUR() // Invalid colour Fixed an issue where JS character property .colour would modify origSkin property instead of colour Fixed an issue where JS character property .guildTitle returned the name of the character instead of the guild title Character JS property .poison can now also be used to set a character's poisoned level, not just read it Exposed Item property to JS engine: .ac // armour class for item (0-128). Primarily used for setting race-restrictions for equippable items, i.e. race X cannot equip items of armour class Y. .def // defensive value of item (Physical resistance post-AoS, AR in older UO) // NOTE: The following properties don't actually do anything yet, but can still be used in custom JS scripts if desired .resistCold // Cold resistance of item 0-1000, where 1000 equals 100.0% .resistHeat // Heat/Fire resistance of item 0-1000, where 1000 equals 100.0% .resistLight // Light resistance of item 0-1000, where 1000 equals 100.0% .resistLightning // Energy/Lightning resistance of item 0-1000, where 1000 equals 100.0% .resistPoison // Poison resistance of item 0-1000, where 1000 equals 100.0% .resistRain // Rain resistance of item 0-1000, where 1000 equals 100.0% .resistSnow // Snow resistance of item 0-1000, where 1000 equals 100.0% .damageHeat // Weapon deals Heat/Fire elemental damage (true/false) .damageCold // Weapon deals Cold elemental damage (true/false) .damageLight // Weapon deals Light elemental damage (true/false) .damageLightning // Weapon deals Lightning elemental damage (true/false) .damagePoison // Weapon deals Poison elemental damage (true/false) .damageRain // Weapon deals Rain/Water elemental damage (true/false) .damageSnow // Weapon deals Snow/Ice elemental damage (true/false) Added new UOX.INI setting under [server] to enable/disable shard response to ConnectUO server polling (disabled by default) Sub-commands are no longer included when registering packets to be overloaded via RegisterPacket function, as that part was never fully implemented. Packet-hook scripts can be setup for specific packet IDs, but any sub-command checking will need to be done in the script itself JS Packet Method GetDWord() now uses JS_NewNumberValue instead of INT_TO_JSVAL to read from the socket buffer, to better handle large numbers, which could previously be returned with wrong values. JS Function CalcItemFromSer() now uses a JS_GetStringBytes() and str_value() combo instead of JSVAL_TO_INT() to read the data provided in the function argument. This allows JS scripts to provide item serials to the function directly without needing to split it into four parts first (though that still works) Fixed issue where JS properties for multis didn't always return correct values The 'set command can now be used to set the armour class of items ('set ac #) Reimplemented 'tweak command in JS engine (js/commands/targeting/tweak.js) - can be used to view and modify properties of characters, character skills, items, multis and regions (target ground) Added placeholder packet-hook script (js/server/network/0xf1_connectUoServerPoll.js) to handle responses to ConnectUO server polling. By default this script does nothing, but serves as a placeholder for drop-in replacement scripts generated specifically for each shard by the ConnectUO service. Updated some commands to support an alternate STATIC keyword (can also be ommitted) to add base items: 'add static itemID 'tile static itemID Updated some commands with support for randomization. Provided itemID will be randomized based on provided rndValue: /js/commands/targeting/add.js: 'add itemID rndValue cmdtable.cpp and targeting.cpp: 'tile itemID rndValue 'tile itemID x1 x2 y1 y2 z rndValue Updated js/commands/custom/repeatingcmds.js to support 'm delete as an alias for 'rremove Added 'props as an alias for the 'tweak command Added 'teleport as an alias for the 'tele command (js/commands/targeting/tele.js) Added 'shavehair and 'shavebeard as aliases for 'kill hair and 'kill beard (js/commands/targeting/kill.js) Added 'noinvul and 'mortal aliases for the 'invul false command (js/commands/custom/misc-cmds.js) Added 'immortal and 'invul (without parameter) as aliases for the 'invul true command Added 'bringtopack as an alias of 'movetobag command (js/commands/targeting/movetobag.js) Updated check for cancelling of target cursor in various JS scripts Minor updates to various JS scripts Fixed issue where some item definitions in dfndata/harditems/harditems.dfn and dfndata/items/building/lighting.dfn used comma instead of space as delimiter for the VALUE tag, which thus never got applied Updated all NPC definitions to let NPCs spawn facing in random directions
2021-03-22 05:59:20 +08:00
else
{
0.99.4d Added new option in UOX.INI under [settings] section: MAPDIFFSENABLED=0/1 // If enabled, server will attempt to load diff files, and send "Enable Map-diff files" packet to client to also load these. Disabled by default. Server no longer loads map/statics diff files by default, nor does it send packet to client to request loading these files, as only client versions below 7.0.8.2 will actively load these files. Can be re-enabled with new UOX.INI setting mentioned above! Fixed incorrect ID for gargish dagger in CHandleCombat::getWeaponType() Added missing weapon entries in CHandleCombat::getWeaponType(): bladed whip, barbed whip, spiked whip, gargish talwar Fixed an issue that would show the end part of some tiledata names as garbled text instead of cutting off the text(!) at 20 characters Fixed an issue with advanced character creation template when using ClassicUO client, which sends a profession value of 255 instead of 0 when no profession template has been selected. Fixed an issue where clones of NPCs that can split in combat didn't get the NPC flag correctly set Guild titles are now removed for players who leave their guilds Enabled closing some hard-coded gump menus using right-click (howto, guild, towns, wholist, addmenu, craftmenu, info) Fixed an issue where adding base items using 'add [itemID] would sometimes get false positive hits from harditems.dfn, depending on the length of the itemID Fixed an issue where items added using 'add [itemID] would not get names applied properly from harditems.dfn Item/NPC DFN tag GET can now inherit a random parent by adding additional values separated by spaces. Syntax: GET=parent1 parent2 parent3 (etc) Fixed an issue where NPC backpacks would not have the max item capacity set properly Added new properties for CItem objects (also exposed as JS Item Properties): maxRange // max distance a ranged weapon can fire at (replaces ARCHERRANGE ini setting) baseRange // base distance throwing weapons (when implemented) can be used at Added support for new Item DFN tag that replaces global UOX.INI setting ARCHERRANGE: MAXRANGE=# // Specifies max range of ranged weapon Added support for new Item/NPC DFN tags to support randomizing elemental resistances: RESISTFIRE=#/# # // Set NPC's poison resistance; fixed or random value RESISTCOLD=#/# # // Set NPC's poison resistance; fixed or random value RESISTLIGHTNING=#/# # // Set NPC's poison resistance; fixed or random value RESISTPOISON=#/# # // Set NPC's poison resistance; fixed or random value Added support for two new DFN tags in dfndata/race/races.dfn that can be used to allow/ban lists of equipment for specific races ALLOWEQUIPLIST=# BANEQUIPLIST=# Added support for new section in dfndata/race/races.dfn - [EQUIPLIST #], which can be used to define lists of equipment that is whitelisted or banned for specific races. Fixed a bug that would report incorrect weight in tooltips for Item/NPC spawner objects ScriptSections are now reapplied for items bought by players from NPC vendors Fixed an issue where players could drop an item on the ground and other players would still see the item after it was picked up, because of a failed distance check vs old location coordinates (in pack) instead of vs current location on ground Fixed a bug with players being able to use last-target macro to target objects picked up and held by other players on their cursor Updated all references to "devinelock" to be "divinelock" instead - this includes the name of the JS Item property Fixed house commands triggering (useless) targeting cursors for players onboard boats Changed default statcap in UOX.INI from 325 to 225 Fixed a out-of-range error for players attempting to combine ore inside their own backpack Fixed various issues with distance checks and container checks when using/target objects Added optional 4th "hue" parameter to AddGump JS method Added JS Function to get total amount of accounts on server - GetAccountCount() Added JS Function to get total amount of players online - GetPlayerCount() onSwing JS Event can now trigger in scripts attached to items, not just items attached to characters Added some JS Functions to expose some hard-coded constants to JS scripts: BASEITEMSERIAL() // Base item serial INVALIDSERIAL() // Invalid serial INVALIDID() // Invalid ID INVALIDCOLOUR() // Invalid colour Fixed an issue where JS character property .colour would modify origSkin property instead of colour Fixed an issue where JS character property .guildTitle returned the name of the character instead of the guild title Character JS property .poison can now also be used to set a character's poisoned level, not just read it Exposed Item property to JS engine: .ac // armour class for item (0-128). Primarily used for setting race-restrictions for equippable items, i.e. race X cannot equip items of armour class Y. .def // defensive value of item (Physical resistance post-AoS, AR in older UO) // NOTE: The following properties don't actually do anything yet, but can still be used in custom JS scripts if desired .resistCold // Cold resistance of item 0-1000, where 1000 equals 100.0% .resistHeat // Heat/Fire resistance of item 0-1000, where 1000 equals 100.0% .resistLight // Light resistance of item 0-1000, where 1000 equals 100.0% .resistLightning // Energy/Lightning resistance of item 0-1000, where 1000 equals 100.0% .resistPoison // Poison resistance of item 0-1000, where 1000 equals 100.0% .resistRain // Rain resistance of item 0-1000, where 1000 equals 100.0% .resistSnow // Snow resistance of item 0-1000, where 1000 equals 100.0% .damageHeat // Weapon deals Heat/Fire elemental damage (true/false) .damageCold // Weapon deals Cold elemental damage (true/false) .damageLight // Weapon deals Light elemental damage (true/false) .damageLightning // Weapon deals Lightning elemental damage (true/false) .damagePoison // Weapon deals Poison elemental damage (true/false) .damageRain // Weapon deals Rain/Water elemental damage (true/false) .damageSnow // Weapon deals Snow/Ice elemental damage (true/false) Added new UOX.INI setting under [server] to enable/disable shard response to ConnectUO server polling (disabled by default) Sub-commands are no longer included when registering packets to be overloaded via RegisterPacket function, as that part was never fully implemented. Packet-hook scripts can be setup for specific packet IDs, but any sub-command checking will need to be done in the script itself JS Packet Method GetDWord() now uses JS_NewNumberValue instead of INT_TO_JSVAL to read from the socket buffer, to better handle large numbers, which could previously be returned with wrong values. JS Function CalcItemFromSer() now uses a JS_GetStringBytes() and str_value() combo instead of JSVAL_TO_INT() to read the data provided in the function argument. This allows JS scripts to provide item serials to the function directly without needing to split it into four parts first (though that still works) Fixed issue where JS properties for multis didn't always return correct values The 'set command can now be used to set the armour class of items ('set ac #) Reimplemented 'tweak command in JS engine (js/commands/targeting/tweak.js) - can be used to view and modify properties of characters, character skills, items, multis and regions (target ground) Added placeholder packet-hook script (js/server/network/0xf1_connectUoServerPoll.js) to handle responses to ConnectUO server polling. By default this script does nothing, but serves as a placeholder for drop-in replacement scripts generated specifically for each shard by the ConnectUO service. Updated some commands to support an alternate STATIC keyword (can also be ommitted) to add base items: 'add static itemID 'tile static itemID Updated some commands with support for randomization. Provided itemID will be randomized based on provided rndValue: /js/commands/targeting/add.js: 'add itemID rndValue cmdtable.cpp and targeting.cpp: 'tile itemID rndValue 'tile itemID x1 x2 y1 y2 z rndValue Updated js/commands/custom/repeatingcmds.js to support 'm delete as an alias for 'rremove Added 'props as an alias for the 'tweak command Added 'teleport as an alias for the 'tele command (js/commands/targeting/tele.js) Added 'shavehair and 'shavebeard as aliases for 'kill hair and 'kill beard (js/commands/targeting/kill.js) Added 'noinvul and 'mortal aliases for the 'invul false command (js/commands/custom/misc-cmds.js) Added 'immortal and 'invul (without parameter) as aliases for the 'invul true command Added 'bringtopack as an alias of 'movetobag command (js/commands/targeting/movetobag.js) Updated check for cancelling of target cursor in various JS scripts Minor updates to various JS scripts Fixed issue where some item definitions in dfndata/harditems/harditems.dfn and dfndata/items/building/lighting.dfn used comma instead of space as delimiter for the VALUE tag, which thus never got applied Updated all NPC definitions to let NPCs spawn facing in random directions
2021-03-22 05:59:20 +08:00
*vp = JSVAL_NULL;
}
Housing Revamp and more Updated JS SysMessage function to accept up to 10 extra, optional arguments, which can be used with dictionary messages that require additional parameters like %s or %i Added new type of house privilege in cMultiObj.cpp to keep track of friends of the multi - HOUSEPRIV_FRIEND - which is stored during worldsaves as one or more Friend=<player serial> tags in house.wsc Added new type of house privilege in cMultiObj.cpp to keep track of guests of the multi - HOUSEPRIV_GUEST - which is stored during worldsaves as one or more Guest=<player serial> tags in house.wsc When items are created for houses upon house placement, a reference to the multi's serial is now stored in the house sign's MORE property to allow easier tracking of which house a particular sign belongs to Added tracking of new, persistent properties for houses via cMultiObj.cpp/h: lockdowns, secure containers, vendors, guests, friends, owners, ban location, public status, number of visits, timestamps Added a multitude of new methods in cMultiObj.cpp/h to assist in improving the functionality of houses Added new tags for houses in house.dfn (default values applied if tag not specified): MAXSECURECONTAINERS=4 - Max amount of secure containers allowed in a multi MAXLOCKDOWNS=256 - Max amount of lockdowns allowed in a multi MAXVENDORS=10 - Max amount of vendors allowed in a multi MAXBANS=50 - Max amount of bans in a multi's ban list MAXFRIENDS=50 - Max amount of friends in a multi's friend list MAXGUESTS=50 - Max amount of guests in a multi's guest list MAXOWNERS=8 - Max amount of owners and co-owners in a multi's owner list MAXTRASHCONTAINERS=1 - Max amount of trash containers allowed in multi SCRIPT=<scriptID> - Assign a JS script-ID directly to a multi FRONTDOOR - indicates that a door is the front door of a house. Cannot be locked in public houses! INTERIORDOOR - indicates that a door is an interior door of a house. Can be locked in public houses. BANX - Location X offset for multi's ban location, if not used, will try to use SE corner of multi instead BANY - Location Y offset for multi's ban location, if not used, will try to use SE corner of multi instead Added JS Event: onHouseCommand( tSock, multiObj, cmdID ) - For handling spoken house commands via JS scripts attached to multi. Updated JS Events: onEntrance() - can now trigger both for multi being entered and/or object entering onLeaving() - can now trigger both for multi being left and/or object entering onSpeech() - can now also trigger for items (in addition to chars) with event & script attached, if UOX.INI setting ITEMSDETECTSPEECH is enabled Added JS Multi methods: .IsBoat() - Returns whether the item (or multi) is a boat .IsOwner( playerToCheck ) - Returns whether a player is the owner of a multi .IsOnOwnerList( playerToCheck ) - Returns whether a player is on the (co-)owner list of a multi .IsOnFriendList( playerToCheck ) - Returns whether a player is on the friend list of a multi .IsOnGuestList( playerToCheck ) - Returns whether a player is on the guest list of a multi .IsOnBanList( playerToCheck ) - Returns whether a player is on the ban list of a multi .AddToFriendList( playertoAdd ) - Adds player to the friend list of a multi .RemoveFromFriendList( playertoRemove ) - Removes player from the friend list of a multi .AddToGuestList( playertoAdd ) - Adds player to the guest list of a multi .RemoveFromGuestList( playertoRemove ) - Removes player from the guest list of a multi .ClearOwnerList() - Clears all entries from a multi's (co-)owner list .ClearFriendList() - Clears all entries from a multi's friend list .ClearGuestList() - Clears all entries from a multi's guest list .ClearBanList() - Clears all entries from a multi's ban list .SecureContainer( itemToSecure ) - Secures a container in a multi .UnsecureContainer( itemToUnsecure ) - Unsecures a container in a multi .IsSecureContainer( itemToCheck ) - Checks if specified item is a secure container in a multi .LockDownItem( itemToLockDown) - Locks down an item in a multi .ReleaseItem( itemToRelease ) - Releases a locked down item in a multi .KillKeys() - Deletes ALL keys associated with a multi .AddTrashCont( itemToAdd ) - Add trash container to multi's list of trash containers .RemoveTrashCont( itemToRemove ) - Remove trash container from multi's list of trash containers Added JS Item (Multi only) properties: .lockdowns - Get the number of lockdowns in a multi .maxLockdowns - Get/Set the max number of lockdowns allowed in a multi .secureContainers - Get the number of secure containers in a multi .maxSecureContainers - Get/Set the max number of secure containers allowed in a multi .trashContainers - Get the number of trash containers in a multi .maxTrashContainers - Get/Set the max number of trash containers allowed in a multi .friends - Get the number of friends in a multi's friend list .maxFriends - Get/Set the max number of friends allowed in a multi's friend list .guests - Get the number of guests in a multi's guest list .maxGuests - Get/Set the max number of guests allowed in a multi's guest list .owners - Get the number of owners in a multi's owner list .maxOwners - Get/Set the max number of owners allowed in a multi's owner list .bans - Get the number of banned players in a multi's ban list .maxBans - Get/Set the max number of banned players allowed in a multi's ban list .vendors - Get the number of player vendors in a multi .maxVendors - Get the max number of player vendors allowed in a multi .deed - Get the item sectionID for deed used to place multi .isPublic - Get/Set the private/public state of a multi .buildTimestamp - Get the timestamp for when the house was originally placed .tradeTimestamp - Get the timestamp for when the house was last traded to another player .banX - Get/Set the ban location X offset for the multi .banY - Get/Set the ban location Y offset for the multi Added JS Character properties: .multi = Get/Set the multi object the character is in .accountNum = Get the account number the character belongs to .housesOwned = Get a count of houses owned by the character .housesCoOwned = Get a count of houses co-owned by the character Updated JS cBaseObject Methods .FirstItem(), .NextItem() and .FinishedItems() to also support iterating through items in multis Updated JS multi Methods .FirstChar(), .NextChar() and .FinishedChars() to support an additional parameter to specify what kind of characters to loop through: "default" or no parameter - all characters inside the multi "owner" - players on multi's owner list "friend" - players on multi's friend list "guest" - players on multi's guest list "banned" - players on multi's ban list Added new INI tags to a new section of uox.ini called [houses] DECAYTIMERINHOUSE=3600 // Decay timer in seconds for non-locked down items inside houses PROTECTPRIVATEHOUSES=1 // Toggles whether private houses will automatically boot unauthorized visitors (1) or not (0) TRACKHOUSESPERACCOUNT=1 // Toggles whether to track (and restrict) house ownership per account (1) or per character (0) MAXHOUSESOWNABLE=1 // Specifies the max amount of houses a player can own per account/char, depending on how house ownership is tracked MAXHOUSESCOOWNABLE=10 // Specifies the max amount of houses a player can co-own per character CANOWNANDCOOWNHOUSES=1 // Toggles whether players can own and co-own houses at the same time COOWNHOUSESONSAMEACCOUNT=1 // Toggles whether characters on same account as house owner will be treated as co-owners Added new INI tags in [settings] section of uox.ini: ITEMSDETECTSPEECH=0 // If enabled, server will search for nearby items with onSpeech JS event running whenever a character speaks. Disabled by default. MAXPLAYERPACKITEMS=125 // Defines max item capacity for player (and NPC) backpacks. Defaults to 125. Moved most of the existing house functionality to JS and expanded upon it to reach feature parity with houses in regular UO around Publish 15/16, with various extras thrown in for good measure and all functionality being customizable: js/server/house/house.js (15000) - handles detection of house commands and characters entering/leaving houses js/server/house/houseSign.js (15001) - contains and handles all house-related gumps/menus and what is shown when players interact with house sign js/server/house/houseCommands.js (15002) - handles functionality of house commands and other functionality such as transfer of ownership, demolishing house, etc. js/server/house/houseDeed.js (15003) - handles initial rules that allow/disallow placement of additional houses for players All house-related menus now fully handled through JS All house commands and other functionality now fully handled through JS Removed redundant hard-coded house functionality Implemented Co-owners, friends, guests for houses, with access rules in place for entry, lockdowns, house commands, etc. Implemented Private and Public houses Implemented Secure Containers and Trash Barrels Definable max lockdowns, secure containers, player vendors, bans, friends, guests, owners, trash containers and more - per house type JS scripts can now be attached directly to houses Doors in houses can be marked as front doors or interior doors, and will be treated differently with regards to private and public houses Added new item to dfndata/items/containers/misc.dfn - [trashbarrel] Added new JS script (js/items/trashbarrel.js) with trash barrel functionality for houses. Trash barrels that are marked as secure containers are only accessible by owners, co-owners and friends of the house. Various options available at top of script. Updated js/items/axe.js to support chopping up trash barrels and house add-ons in houses owned by the player Fixed an issue with house doors being left behind after demolishing houses while their doors were open Fixed an issue where GMs could be banned from player houses Added Line of Sight checks to speech, to give players some privacy in their own homes Updated house placement code to more accurately check for other multis, dynamic and static objects when placing houses; now requires free space around each house that cannot be blocked by other houses or items that can block player movement, and disallows placement of houses on roads Updated house placement code to move characters blocking house placement to SE corner of the house Updated house placement code to disallow placing houses in guarded regions, or in dungeons Added new DFN tag for regions to enable/disable player houses in specific regions: HOUSING=0/1 Added new region (247) that covers path to Valley of Eodon in Felucca Added new region (248) that covers Valley of Eodon in Ter-Mur, with player housing disabled Added new region (249) that covers entire T2A lands, with player housing disabled Updated SPACEX and SPACEY values for all houses in dfndata/house/house.dfn to match updated house placement code Added new JS property to Regions that can be used to determine or change state of player housing in a region: .canPlaceHouse() Updated rules for usage of dye tubs to dye locked down items; now only house owners or co-owners may dye locked down items Updated rules for usage of the following locked down items in a house, which are now only usable by house owners and co-owners Dyes, Guildstone Deeds, Recall Runes (renaming), Rename Deeds, Townstone Deeds, House Deeds, Boat Models, Player Vendor Deeds, Ore, Hair Dye Updated rules for usage of the following locked down items in a house, which are now only usable by house owners, co-owners and friends: Keys, Dye Tubs, Magic Scrolls, Fireworks Wands, Magic Wands, Smithing Tools, Mining Tools, Fishing Poles Updated item lockdown rules to allow locking down (and releasing) items in a container as long as the container is locked down, and to only allow releasing a locked down container if it's empty of locked down items Updated item lockdown rules to only allow locking down movement-blocking items further than 2 tiles away from doors Updated rules for releasing items in houses - now the house owner can release any locked down items, co-owners can release items locked down by themselves or by friends, while friends can release only items locked down by themselves Added some feedback to player about why their attempted house placement failed Items added by GMs directly into multis will now decay based on the house-specific decay timer instead of the regular one Fixed an issue that could cause items to almost instantly decay after being released from lockdown in a house Placing house add-ons now properly takes into account SPACEX and SPACEY values when checking if they can fit in selected area of houses Re-added SPACEX and SPACEY values for Pentagram and Loom house add-ons House add-ons can now be converted back into house add-on deeds by chopping them with an axe Added new item type - IT_HOUSEADDON (201) - used by house add-ons placed in player houses Fixed a bug where keys would stop working after being added to a keyring, and would turn into blank keys upon release from the keyring Added visitor count for public player houses, which keeps track of how many visits a public house has received, with each player counted max 1 time every 24 hours Fixed an issue with FindPlayersInOldVisrange() where it didn't take into account that players could see buildings further away than the standard update range. This could cause players to see ghost images of buildings if they were at the "right" distance when the building was being demolished Added NODECAY tag to all signs and doors in dfndata/house/house.dfn Added FRONTDOOR or INTERIORDOOR (as appropriate) to all doors in dfndata/house/house.dfn Added BANX and BANY to specify ban location for some houses in dfndata/house/house.dfn instead of relying on finding SE corner automatically Implemented strongboxes (js/server/house/strongbox.js) for co-owners of a house, which can be placed with the house command "i wish to place a strongbox". Max capacity is 25 items Updated 'REMOVE command to take an optional parameter - itemID. If supplied, the command will remove all items with this itemID from a targeted container Fixed a bug when checking if dynamic items were blocking valid spawn locations for NPCs, some function arguments were in the wrong order! Improved code that finds valid spawn locations for items and NPCs spawned via spawn regions. As server gradually builds up lists of valid spawn locations per region over time, it will start using these lists more often, rather than always look for brand new spawn locations. Fixed a bug with CMulHandler::CheckStaticFlag() that prevented NPCs from spawning inside buildings with no static floors! Fixed an issue with repeating commands that prevented GMs from being able to cancel them when using the ClassicUO client Exposed character property .accountNum to JS engine Extended CDataList class to include a Clear() method for clearing lists Updated JS File method .Open() to support an optional, third argument - subFolderName - that defines in which sub-folder of UOX3/shared/ to store/look for a file. If no third argument is supplied, UOX3 will default to using the shared folder itself. Updated JS File method .Length() to return a value of -1 for files that don't exist Added new code function, exposed to JS engine with same parameters, which simply checks if a given tile ID has a specific flag bool CheckTileFlag( UI16 itemID, TILEFLAG flagToCheck ) Added JS function used to find the root container of an item (if any) FindRootContainer( itemSerial ) FindRootContainer( item ) Added new JS function that allows deleting files from UOX3/shared/ folder or subfolders of shared folder. If no subFolderName is provided, looks for file directly in shared folder itself. Restrictions on file- and folder-names apply. bool DeleteFile( fileName, subFolderName ) Added new JS functions for checking if a specific client or server feature is enabled. See documentation for full list of client/server features. GetClientFeature( bitNum ) // Returns true if specified client feature is enabled on server GetServerFeature( bitNum ) // Returns true if specified server feature is enabled on server Added new JS function for returning the value of almost any server setting from UOX.INI GetServerSetting( settingNameInDoubleQuotes ) Updated JS function DoesDynamicBlock() with two new parameters - checkOnlyMultis and checkOnlyNonMultis Updated JS function DoesMapBlock() with two new parameters - checkMultiPlacement and checkForRoad Fixed an issue where a LoS check would prevent players from accessing containers in their own backpack Added new functions in findfuncs.cpp to make it easier to find items near another object or location: findNearbyItems( object, distance ) findNearbyItems( x, y, worldNumber, instanceID, distance ) Added new Item property - maxItems - used by containers to determine their max item capacity Added new Item property - totalItemCount - used to get total item count in a container (including sub-containers) Added check for max item capacity when creating new items that are added to a character's backpack - items will be created below character's feet if backpack is full! Added new DFN tag for items, used by containers to determine item capacity for a given container: MAXITEMS=# // 125 is the default for all containers if not set Added new JS Item properties: .maxItems // gets/sets item capacity for a given container .totalItemCount // gets total item count in a container, including sub-containers Updated item tooltips for containers to show accurate total item count, as well as to display max item capacity Fixed a bug where picking up items from a non-locked down pile of items on the floor inside a multi could cause the remaining pile to be seen as no longer inside the multi, disallowing locking it back down and causing it to decay based on regular decay timer instead of house-specific one Updated JS command set to allow setting poison-level on items ('set poison #) and hunger-level on characters ('set hunger #) Fixed an issue with js/item/food.js that prevented poisoned food from poisoning characters when eaten Fixed an issue with js/skill/poisoning.js that prevented players from poisoning food! Updated various JS scripts and hardcoded targeting functions to disallow the targeting of locked down resources using skills and tools Updated JS Method TextMessage() to support three extra, optional parameters. Note that if one optional parameter is included, all preceding optional parameters are also required! speechTarget - What kind of target is this message intended for? 0 - Only visible for sender and receiver of message 1 - Visible to all players in range 2 - Visible to all NPCs and players in range 3 - Visible to all PCs everywhere + NPCs in range 4 - Visible to all PCs everywhere (broadcast) 5 - Only visible for the receiver of the message speechTargetSerial - The serial of the receiver of the message, used if speechTarget is 0 or 5 speechFontType - The type of font to display the text in. Defaults to normal. 0 - Bold 1 - Normal with shadow 2 - Bold with shadow 3 - Normal 4 - Gothic 5 - Italic 6 - Small, dark 7 - Colourful 8 - Runic (only works with CAPS) 9 - Small, light Added timestamp to worldsaves in console, to make it easier to see when a particular world-save was done Added info about compiler/environment displayed at the top of the UOX3 console during startup Updated dictionary files with new messages primarily related to housing
2020-11-04 02:00:37 +08:00
break;
case CIP_BANS:
if( gPriv->GetObjType() == OT_MULTI )
{
*vp = INT_TO_JSVAL(( static_cast<CMultiObj *>( gPriv )->GetBanCount() ));
}
0.99.4d Added new option in UOX.INI under [settings] section: MAPDIFFSENABLED=0/1 // If enabled, server will attempt to load diff files, and send "Enable Map-diff files" packet to client to also load these. Disabled by default. Server no longer loads map/statics diff files by default, nor does it send packet to client to request loading these files, as only client versions below 7.0.8.2 will actively load these files. Can be re-enabled with new UOX.INI setting mentioned above! Fixed incorrect ID for gargish dagger in CHandleCombat::getWeaponType() Added missing weapon entries in CHandleCombat::getWeaponType(): bladed whip, barbed whip, spiked whip, gargish talwar Fixed an issue that would show the end part of some tiledata names as garbled text instead of cutting off the text(!) at 20 characters Fixed an issue with advanced character creation template when using ClassicUO client, which sends a profession value of 255 instead of 0 when no profession template has been selected. Fixed an issue where clones of NPCs that can split in combat didn't get the NPC flag correctly set Guild titles are now removed for players who leave their guilds Enabled closing some hard-coded gump menus using right-click (howto, guild, towns, wholist, addmenu, craftmenu, info) Fixed an issue where adding base items using 'add [itemID] would sometimes get false positive hits from harditems.dfn, depending on the length of the itemID Fixed an issue where items added using 'add [itemID] would not get names applied properly from harditems.dfn Item/NPC DFN tag GET can now inherit a random parent by adding additional values separated by spaces. Syntax: GET=parent1 parent2 parent3 (etc) Fixed an issue where NPC backpacks would not have the max item capacity set properly Added new properties for CItem objects (also exposed as JS Item Properties): maxRange // max distance a ranged weapon can fire at (replaces ARCHERRANGE ini setting) baseRange // base distance throwing weapons (when implemented) can be used at Added support for new Item DFN tag that replaces global UOX.INI setting ARCHERRANGE: MAXRANGE=# // Specifies max range of ranged weapon Added support for new Item/NPC DFN tags to support randomizing elemental resistances: RESISTFIRE=#/# # // Set NPC's poison resistance; fixed or random value RESISTCOLD=#/# # // Set NPC's poison resistance; fixed or random value RESISTLIGHTNING=#/# # // Set NPC's poison resistance; fixed or random value RESISTPOISON=#/# # // Set NPC's poison resistance; fixed or random value Added support for two new DFN tags in dfndata/race/races.dfn that can be used to allow/ban lists of equipment for specific races ALLOWEQUIPLIST=# BANEQUIPLIST=# Added support for new section in dfndata/race/races.dfn - [EQUIPLIST #], which can be used to define lists of equipment that is whitelisted or banned for specific races. Fixed a bug that would report incorrect weight in tooltips for Item/NPC spawner objects ScriptSections are now reapplied for items bought by players from NPC vendors Fixed an issue where players could drop an item on the ground and other players would still see the item after it was picked up, because of a failed distance check vs old location coordinates (in pack) instead of vs current location on ground Fixed a bug with players being able to use last-target macro to target objects picked up and held by other players on their cursor Updated all references to "devinelock" to be "divinelock" instead - this includes the name of the JS Item property Fixed house commands triggering (useless) targeting cursors for players onboard boats Changed default statcap in UOX.INI from 325 to 225 Fixed a out-of-range error for players attempting to combine ore inside their own backpack Fixed various issues with distance checks and container checks when using/target objects Added optional 4th "hue" parameter to AddGump JS method Added JS Function to get total amount of accounts on server - GetAccountCount() Added JS Function to get total amount of players online - GetPlayerCount() onSwing JS Event can now trigger in scripts attached to items, not just items attached to characters Added some JS Functions to expose some hard-coded constants to JS scripts: BASEITEMSERIAL() // Base item serial INVALIDSERIAL() // Invalid serial INVALIDID() // Invalid ID INVALIDCOLOUR() // Invalid colour Fixed an issue where JS character property .colour would modify origSkin property instead of colour Fixed an issue where JS character property .guildTitle returned the name of the character instead of the guild title Character JS property .poison can now also be used to set a character's poisoned level, not just read it Exposed Item property to JS engine: .ac // armour class for item (0-128). Primarily used for setting race-restrictions for equippable items, i.e. race X cannot equip items of armour class Y. .def // defensive value of item (Physical resistance post-AoS, AR in older UO) // NOTE: The following properties don't actually do anything yet, but can still be used in custom JS scripts if desired .resistCold // Cold resistance of item 0-1000, where 1000 equals 100.0% .resistHeat // Heat/Fire resistance of item 0-1000, where 1000 equals 100.0% .resistLight // Light resistance of item 0-1000, where 1000 equals 100.0% .resistLightning // Energy/Lightning resistance of item 0-1000, where 1000 equals 100.0% .resistPoison // Poison resistance of item 0-1000, where 1000 equals 100.0% .resistRain // Rain resistance of item 0-1000, where 1000 equals 100.0% .resistSnow // Snow resistance of item 0-1000, where 1000 equals 100.0% .damageHeat // Weapon deals Heat/Fire elemental damage (true/false) .damageCold // Weapon deals Cold elemental damage (true/false) .damageLight // Weapon deals Light elemental damage (true/false) .damageLightning // Weapon deals Lightning elemental damage (true/false) .damagePoison // Weapon deals Poison elemental damage (true/false) .damageRain // Weapon deals Rain/Water elemental damage (true/false) .damageSnow // Weapon deals Snow/Ice elemental damage (true/false) Added new UOX.INI setting under [server] to enable/disable shard response to ConnectUO server polling (disabled by default) Sub-commands are no longer included when registering packets to be overloaded via RegisterPacket function, as that part was never fully implemented. Packet-hook scripts can be setup for specific packet IDs, but any sub-command checking will need to be done in the script itself JS Packet Method GetDWord() now uses JS_NewNumberValue instead of INT_TO_JSVAL to read from the socket buffer, to better handle large numbers, which could previously be returned with wrong values. JS Function CalcItemFromSer() now uses a JS_GetStringBytes() and str_value() combo instead of JSVAL_TO_INT() to read the data provided in the function argument. This allows JS scripts to provide item serials to the function directly without needing to split it into four parts first (though that still works) Fixed issue where JS properties for multis didn't always return correct values The 'set command can now be used to set the armour class of items ('set ac #) Reimplemented 'tweak command in JS engine (js/commands/targeting/tweak.js) - can be used to view and modify properties of characters, character skills, items, multis and regions (target ground) Added placeholder packet-hook script (js/server/network/0xf1_connectUoServerPoll.js) to handle responses to ConnectUO server polling. By default this script does nothing, but serves as a placeholder for drop-in replacement scripts generated specifically for each shard by the ConnectUO service. Updated some commands to support an alternate STATIC keyword (can also be ommitted) to add base items: 'add static itemID 'tile static itemID Updated some commands with support for randomization. Provided itemID will be randomized based on provided rndValue: /js/commands/targeting/add.js: 'add itemID rndValue cmdtable.cpp and targeting.cpp: 'tile itemID rndValue 'tile itemID x1 x2 y1 y2 z rndValue Updated js/commands/custom/repeatingcmds.js to support 'm delete as an alias for 'rremove Added 'props as an alias for the 'tweak command Added 'teleport as an alias for the 'tele command (js/commands/targeting/tele.js) Added 'shavehair and 'shavebeard as aliases for 'kill hair and 'kill beard (js/commands/targeting/kill.js) Added 'noinvul and 'mortal aliases for the 'invul false command (js/commands/custom/misc-cmds.js) Added 'immortal and 'invul (without parameter) as aliases for the 'invul true command Added 'bringtopack as an alias of 'movetobag command (js/commands/targeting/movetobag.js) Updated check for cancelling of target cursor in various JS scripts Minor updates to various JS scripts Fixed issue where some item definitions in dfndata/harditems/harditems.dfn and dfndata/items/building/lighting.dfn used comma instead of space as delimiter for the VALUE tag, which thus never got applied Updated all NPC definitions to let NPCs spawn facing in random directions
2021-03-22 05:59:20 +08:00
else
{
0.99.4d Added new option in UOX.INI under [settings] section: MAPDIFFSENABLED=0/1 // If enabled, server will attempt to load diff files, and send "Enable Map-diff files" packet to client to also load these. Disabled by default. Server no longer loads map/statics diff files by default, nor does it send packet to client to request loading these files, as only client versions below 7.0.8.2 will actively load these files. Can be re-enabled with new UOX.INI setting mentioned above! Fixed incorrect ID for gargish dagger in CHandleCombat::getWeaponType() Added missing weapon entries in CHandleCombat::getWeaponType(): bladed whip, barbed whip, spiked whip, gargish talwar Fixed an issue that would show the end part of some tiledata names as garbled text instead of cutting off the text(!) at 20 characters Fixed an issue with advanced character creation template when using ClassicUO client, which sends a profession value of 255 instead of 0 when no profession template has been selected. Fixed an issue where clones of NPCs that can split in combat didn't get the NPC flag correctly set Guild titles are now removed for players who leave their guilds Enabled closing some hard-coded gump menus using right-click (howto, guild, towns, wholist, addmenu, craftmenu, info) Fixed an issue where adding base items using 'add [itemID] would sometimes get false positive hits from harditems.dfn, depending on the length of the itemID Fixed an issue where items added using 'add [itemID] would not get names applied properly from harditems.dfn Item/NPC DFN tag GET can now inherit a random parent by adding additional values separated by spaces. Syntax: GET=parent1 parent2 parent3 (etc) Fixed an issue where NPC backpacks would not have the max item capacity set properly Added new properties for CItem objects (also exposed as JS Item Properties): maxRange // max distance a ranged weapon can fire at (replaces ARCHERRANGE ini setting) baseRange // base distance throwing weapons (when implemented) can be used at Added support for new Item DFN tag that replaces global UOX.INI setting ARCHERRANGE: MAXRANGE=# // Specifies max range of ranged weapon Added support for new Item/NPC DFN tags to support randomizing elemental resistances: RESISTFIRE=#/# # // Set NPC's poison resistance; fixed or random value RESISTCOLD=#/# # // Set NPC's poison resistance; fixed or random value RESISTLIGHTNING=#/# # // Set NPC's poison resistance; fixed or random value RESISTPOISON=#/# # // Set NPC's poison resistance; fixed or random value Added support for two new DFN tags in dfndata/race/races.dfn that can be used to allow/ban lists of equipment for specific races ALLOWEQUIPLIST=# BANEQUIPLIST=# Added support for new section in dfndata/race/races.dfn - [EQUIPLIST #], which can be used to define lists of equipment that is whitelisted or banned for specific races. Fixed a bug that would report incorrect weight in tooltips for Item/NPC spawner objects ScriptSections are now reapplied for items bought by players from NPC vendors Fixed an issue where players could drop an item on the ground and other players would still see the item after it was picked up, because of a failed distance check vs old location coordinates (in pack) instead of vs current location on ground Fixed a bug with players being able to use last-target macro to target objects picked up and held by other players on their cursor Updated all references to "devinelock" to be "divinelock" instead - this includes the name of the JS Item property Fixed house commands triggering (useless) targeting cursors for players onboard boats Changed default statcap in UOX.INI from 325 to 225 Fixed a out-of-range error for players attempting to combine ore inside their own backpack Fixed various issues with distance checks and container checks when using/target objects Added optional 4th "hue" parameter to AddGump JS method Added JS Function to get total amount of accounts on server - GetAccountCount() Added JS Function to get total amount of players online - GetPlayerCount() onSwing JS Event can now trigger in scripts attached to items, not just items attached to characters Added some JS Functions to expose some hard-coded constants to JS scripts: BASEITEMSERIAL() // Base item serial INVALIDSERIAL() // Invalid serial INVALIDID() // Invalid ID INVALIDCOLOUR() // Invalid colour Fixed an issue where JS character property .colour would modify origSkin property instead of colour Fixed an issue where JS character property .guildTitle returned the name of the character instead of the guild title Character JS property .poison can now also be used to set a character's poisoned level, not just read it Exposed Item property to JS engine: .ac // armour class for item (0-128). Primarily used for setting race-restrictions for equippable items, i.e. race X cannot equip items of armour class Y. .def // defensive value of item (Physical resistance post-AoS, AR in older UO) // NOTE: The following properties don't actually do anything yet, but can still be used in custom JS scripts if desired .resistCold // Cold resistance of item 0-1000, where 1000 equals 100.0% .resistHeat // Heat/Fire resistance of item 0-1000, where 1000 equals 100.0% .resistLight // Light resistance of item 0-1000, where 1000 equals 100.0% .resistLightning // Energy/Lightning resistance of item 0-1000, where 1000 equals 100.0% .resistPoison // Poison resistance of item 0-1000, where 1000 equals 100.0% .resistRain // Rain resistance of item 0-1000, where 1000 equals 100.0% .resistSnow // Snow resistance of item 0-1000, where 1000 equals 100.0% .damageHeat // Weapon deals Heat/Fire elemental damage (true/false) .damageCold // Weapon deals Cold elemental damage (true/false) .damageLight // Weapon deals Light elemental damage (true/false) .damageLightning // Weapon deals Lightning elemental damage (true/false) .damagePoison // Weapon deals Poison elemental damage (true/false) .damageRain // Weapon deals Rain/Water elemental damage (true/false) .damageSnow // Weapon deals Snow/Ice elemental damage (true/false) Added new UOX.INI setting under [server] to enable/disable shard response to ConnectUO server polling (disabled by default) Sub-commands are no longer included when registering packets to be overloaded via RegisterPacket function, as that part was never fully implemented. Packet-hook scripts can be setup for specific packet IDs, but any sub-command checking will need to be done in the script itself JS Packet Method GetDWord() now uses JS_NewNumberValue instead of INT_TO_JSVAL to read from the socket buffer, to better handle large numbers, which could previously be returned with wrong values. JS Function CalcItemFromSer() now uses a JS_GetStringBytes() and str_value() combo instead of JSVAL_TO_INT() to read the data provided in the function argument. This allows JS scripts to provide item serials to the function directly without needing to split it into four parts first (though that still works) Fixed issue where JS properties for multis didn't always return correct values The 'set command can now be used to set the armour class of items ('set ac #) Reimplemented 'tweak command in JS engine (js/commands/targeting/tweak.js) - can be used to view and modify properties of characters, character skills, items, multis and regions (target ground) Added placeholder packet-hook script (js/server/network/0xf1_connectUoServerPoll.js) to handle responses to ConnectUO server polling. By default this script does nothing, but serves as a placeholder for drop-in replacement scripts generated specifically for each shard by the ConnectUO service. Updated some commands to support an alternate STATIC keyword (can also be ommitted) to add base items: 'add static itemID 'tile static itemID Updated some commands with support for randomization. Provided itemID will be randomized based on provided rndValue: /js/commands/targeting/add.js: 'add itemID rndValue cmdtable.cpp and targeting.cpp: 'tile itemID rndValue 'tile itemID x1 x2 y1 y2 z rndValue Updated js/commands/custom/repeatingcmds.js to support 'm delete as an alias for 'rremove Added 'props as an alias for the 'tweak command Added 'teleport as an alias for the 'tele command (js/commands/targeting/tele.js) Added 'shavehair and 'shavebeard as aliases for 'kill hair and 'kill beard (js/commands/targeting/kill.js) Added 'noinvul and 'mortal aliases for the 'invul false command (js/commands/custom/misc-cmds.js) Added 'immortal and 'invul (without parameter) as aliases for the 'invul true command Added 'bringtopack as an alias of 'movetobag command (js/commands/targeting/movetobag.js) Updated check for cancelling of target cursor in various JS scripts Minor updates to various JS scripts Fixed issue where some item definitions in dfndata/harditems/harditems.dfn and dfndata/items/building/lighting.dfn used comma instead of space as delimiter for the VALUE tag, which thus never got applied Updated all NPC definitions to let NPCs spawn facing in random directions
2021-03-22 05:59:20 +08:00
*vp = JSVAL_NULL;
}
Housing Revamp and more Updated JS SysMessage function to accept up to 10 extra, optional arguments, which can be used with dictionary messages that require additional parameters like %s or %i Added new type of house privilege in cMultiObj.cpp to keep track of friends of the multi - HOUSEPRIV_FRIEND - which is stored during worldsaves as one or more Friend=<player serial> tags in house.wsc Added new type of house privilege in cMultiObj.cpp to keep track of guests of the multi - HOUSEPRIV_GUEST - which is stored during worldsaves as one or more Guest=<player serial> tags in house.wsc When items are created for houses upon house placement, a reference to the multi's serial is now stored in the house sign's MORE property to allow easier tracking of which house a particular sign belongs to Added tracking of new, persistent properties for houses via cMultiObj.cpp/h: lockdowns, secure containers, vendors, guests, friends, owners, ban location, public status, number of visits, timestamps Added a multitude of new methods in cMultiObj.cpp/h to assist in improving the functionality of houses Added new tags for houses in house.dfn (default values applied if tag not specified): MAXSECURECONTAINERS=4 - Max amount of secure containers allowed in a multi MAXLOCKDOWNS=256 - Max amount of lockdowns allowed in a multi MAXVENDORS=10 - Max amount of vendors allowed in a multi MAXBANS=50 - Max amount of bans in a multi's ban list MAXFRIENDS=50 - Max amount of friends in a multi's friend list MAXGUESTS=50 - Max amount of guests in a multi's guest list MAXOWNERS=8 - Max amount of owners and co-owners in a multi's owner list MAXTRASHCONTAINERS=1 - Max amount of trash containers allowed in multi SCRIPT=<scriptID> - Assign a JS script-ID directly to a multi FRONTDOOR - indicates that a door is the front door of a house. Cannot be locked in public houses! INTERIORDOOR - indicates that a door is an interior door of a house. Can be locked in public houses. BANX - Location X offset for multi's ban location, if not used, will try to use SE corner of multi instead BANY - Location Y offset for multi's ban location, if not used, will try to use SE corner of multi instead Added JS Event: onHouseCommand( tSock, multiObj, cmdID ) - For handling spoken house commands via JS scripts attached to multi. Updated JS Events: onEntrance() - can now trigger both for multi being entered and/or object entering onLeaving() - can now trigger both for multi being left and/or object entering onSpeech() - can now also trigger for items (in addition to chars) with event & script attached, if UOX.INI setting ITEMSDETECTSPEECH is enabled Added JS Multi methods: .IsBoat() - Returns whether the item (or multi) is a boat .IsOwner( playerToCheck ) - Returns whether a player is the owner of a multi .IsOnOwnerList( playerToCheck ) - Returns whether a player is on the (co-)owner list of a multi .IsOnFriendList( playerToCheck ) - Returns whether a player is on the friend list of a multi .IsOnGuestList( playerToCheck ) - Returns whether a player is on the guest list of a multi .IsOnBanList( playerToCheck ) - Returns whether a player is on the ban list of a multi .AddToFriendList( playertoAdd ) - Adds player to the friend list of a multi .RemoveFromFriendList( playertoRemove ) - Removes player from the friend list of a multi .AddToGuestList( playertoAdd ) - Adds player to the guest list of a multi .RemoveFromGuestList( playertoRemove ) - Removes player from the guest list of a multi .ClearOwnerList() - Clears all entries from a multi's (co-)owner list .ClearFriendList() - Clears all entries from a multi's friend list .ClearGuestList() - Clears all entries from a multi's guest list .ClearBanList() - Clears all entries from a multi's ban list .SecureContainer( itemToSecure ) - Secures a container in a multi .UnsecureContainer( itemToUnsecure ) - Unsecures a container in a multi .IsSecureContainer( itemToCheck ) - Checks if specified item is a secure container in a multi .LockDownItem( itemToLockDown) - Locks down an item in a multi .ReleaseItem( itemToRelease ) - Releases a locked down item in a multi .KillKeys() - Deletes ALL keys associated with a multi .AddTrashCont( itemToAdd ) - Add trash container to multi's list of trash containers .RemoveTrashCont( itemToRemove ) - Remove trash container from multi's list of trash containers Added JS Item (Multi only) properties: .lockdowns - Get the number of lockdowns in a multi .maxLockdowns - Get/Set the max number of lockdowns allowed in a multi .secureContainers - Get the number of secure containers in a multi .maxSecureContainers - Get/Set the max number of secure containers allowed in a multi .trashContainers - Get the number of trash containers in a multi .maxTrashContainers - Get/Set the max number of trash containers allowed in a multi .friends - Get the number of friends in a multi's friend list .maxFriends - Get/Set the max number of friends allowed in a multi's friend list .guests - Get the number of guests in a multi's guest list .maxGuests - Get/Set the max number of guests allowed in a multi's guest list .owners - Get the number of owners in a multi's owner list .maxOwners - Get/Set the max number of owners allowed in a multi's owner list .bans - Get the number of banned players in a multi's ban list .maxBans - Get/Set the max number of banned players allowed in a multi's ban list .vendors - Get the number of player vendors in a multi .maxVendors - Get the max number of player vendors allowed in a multi .deed - Get the item sectionID for deed used to place multi .isPublic - Get/Set the private/public state of a multi .buildTimestamp - Get the timestamp for when the house was originally placed .tradeTimestamp - Get the timestamp for when the house was last traded to another player .banX - Get/Set the ban location X offset for the multi .banY - Get/Set the ban location Y offset for the multi Added JS Character properties: .multi = Get/Set the multi object the character is in .accountNum = Get the account number the character belongs to .housesOwned = Get a count of houses owned by the character .housesCoOwned = Get a count of houses co-owned by the character Updated JS cBaseObject Methods .FirstItem(), .NextItem() and .FinishedItems() to also support iterating through items in multis Updated JS multi Methods .FirstChar(), .NextChar() and .FinishedChars() to support an additional parameter to specify what kind of characters to loop through: "default" or no parameter - all characters inside the multi "owner" - players on multi's owner list "friend" - players on multi's friend list "guest" - players on multi's guest list "banned" - players on multi's ban list Added new INI tags to a new section of uox.ini called [houses] DECAYTIMERINHOUSE=3600 // Decay timer in seconds for non-locked down items inside houses PROTECTPRIVATEHOUSES=1 // Toggles whether private houses will automatically boot unauthorized visitors (1) or not (0) TRACKHOUSESPERACCOUNT=1 // Toggles whether to track (and restrict) house ownership per account (1) or per character (0) MAXHOUSESOWNABLE=1 // Specifies the max amount of houses a player can own per account/char, depending on how house ownership is tracked MAXHOUSESCOOWNABLE=10 // Specifies the max amount of houses a player can co-own per character CANOWNANDCOOWNHOUSES=1 // Toggles whether players can own and co-own houses at the same time COOWNHOUSESONSAMEACCOUNT=1 // Toggles whether characters on same account as house owner will be treated as co-owners Added new INI tags in [settings] section of uox.ini: ITEMSDETECTSPEECH=0 // If enabled, server will search for nearby items with onSpeech JS event running whenever a character speaks. Disabled by default. MAXPLAYERPACKITEMS=125 // Defines max item capacity for player (and NPC) backpacks. Defaults to 125. Moved most of the existing house functionality to JS and expanded upon it to reach feature parity with houses in regular UO around Publish 15/16, with various extras thrown in for good measure and all functionality being customizable: js/server/house/house.js (15000) - handles detection of house commands and characters entering/leaving houses js/server/house/houseSign.js (15001) - contains and handles all house-related gumps/menus and what is shown when players interact with house sign js/server/house/houseCommands.js (15002) - handles functionality of house commands and other functionality such as transfer of ownership, demolishing house, etc. js/server/house/houseDeed.js (15003) - handles initial rules that allow/disallow placement of additional houses for players All house-related menus now fully handled through JS All house commands and other functionality now fully handled through JS Removed redundant hard-coded house functionality Implemented Co-owners, friends, guests for houses, with access rules in place for entry, lockdowns, house commands, etc. Implemented Private and Public houses Implemented Secure Containers and Trash Barrels Definable max lockdowns, secure containers, player vendors, bans, friends, guests, owners, trash containers and more - per house type JS scripts can now be attached directly to houses Doors in houses can be marked as front doors or interior doors, and will be treated differently with regards to private and public houses Added new item to dfndata/items/containers/misc.dfn - [trashbarrel] Added new JS script (js/items/trashbarrel.js) with trash barrel functionality for houses. Trash barrels that are marked as secure containers are only accessible by owners, co-owners and friends of the house. Various options available at top of script. Updated js/items/axe.js to support chopping up trash barrels and house add-ons in houses owned by the player Fixed an issue with house doors being left behind after demolishing houses while their doors were open Fixed an issue where GMs could be banned from player houses Added Line of Sight checks to speech, to give players some privacy in their own homes Updated house placement code to more accurately check for other multis, dynamic and static objects when placing houses; now requires free space around each house that cannot be blocked by other houses or items that can block player movement, and disallows placement of houses on roads Updated house placement code to move characters blocking house placement to SE corner of the house Updated house placement code to disallow placing houses in guarded regions, or in dungeons Added new DFN tag for regions to enable/disable player houses in specific regions: HOUSING=0/1 Added new region (247) that covers path to Valley of Eodon in Felucca Added new region (248) that covers Valley of Eodon in Ter-Mur, with player housing disabled Added new region (249) that covers entire T2A lands, with player housing disabled Updated SPACEX and SPACEY values for all houses in dfndata/house/house.dfn to match updated house placement code Added new JS property to Regions that can be used to determine or change state of player housing in a region: .canPlaceHouse() Updated rules for usage of dye tubs to dye locked down items; now only house owners or co-owners may dye locked down items Updated rules for usage of the following locked down items in a house, which are now only usable by house owners and co-owners Dyes, Guildstone Deeds, Recall Runes (renaming), Rename Deeds, Townstone Deeds, House Deeds, Boat Models, Player Vendor Deeds, Ore, Hair Dye Updated rules for usage of the following locked down items in a house, which are now only usable by house owners, co-owners and friends: Keys, Dye Tubs, Magic Scrolls, Fireworks Wands, Magic Wands, Smithing Tools, Mining Tools, Fishing Poles Updated item lockdown rules to allow locking down (and releasing) items in a container as long as the container is locked down, and to only allow releasing a locked down container if it's empty of locked down items Updated item lockdown rules to only allow locking down movement-blocking items further than 2 tiles away from doors Updated rules for releasing items in houses - now the house owner can release any locked down items, co-owners can release items locked down by themselves or by friends, while friends can release only items locked down by themselves Added some feedback to player about why their attempted house placement failed Items added by GMs directly into multis will now decay based on the house-specific decay timer instead of the regular one Fixed an issue that could cause items to almost instantly decay after being released from lockdown in a house Placing house add-ons now properly takes into account SPACEX and SPACEY values when checking if they can fit in selected area of houses Re-added SPACEX and SPACEY values for Pentagram and Loom house add-ons House add-ons can now be converted back into house add-on deeds by chopping them with an axe Added new item type - IT_HOUSEADDON (201) - used by house add-ons placed in player houses Fixed a bug where keys would stop working after being added to a keyring, and would turn into blank keys upon release from the keyring Added visitor count for public player houses, which keeps track of how many visits a public house has received, with each player counted max 1 time every 24 hours Fixed an issue with FindPlayersInOldVisrange() where it didn't take into account that players could see buildings further away than the standard update range. This could cause players to see ghost images of buildings if they were at the "right" distance when the building was being demolished Added NODECAY tag to all signs and doors in dfndata/house/house.dfn Added FRONTDOOR or INTERIORDOOR (as appropriate) to all doors in dfndata/house/house.dfn Added BANX and BANY to specify ban location for some houses in dfndata/house/house.dfn instead of relying on finding SE corner automatically Implemented strongboxes (js/server/house/strongbox.js) for co-owners of a house, which can be placed with the house command "i wish to place a strongbox". Max capacity is 25 items Updated 'REMOVE command to take an optional parameter - itemID. If supplied, the command will remove all items with this itemID from a targeted container Fixed a bug when checking if dynamic items were blocking valid spawn locations for NPCs, some function arguments were in the wrong order! Improved code that finds valid spawn locations for items and NPCs spawned via spawn regions. As server gradually builds up lists of valid spawn locations per region over time, it will start using these lists more often, rather than always look for brand new spawn locations. Fixed a bug with CMulHandler::CheckStaticFlag() that prevented NPCs from spawning inside buildings with no static floors! Fixed an issue with repeating commands that prevented GMs from being able to cancel them when using the ClassicUO client Exposed character property .accountNum to JS engine Extended CDataList class to include a Clear() method for clearing lists Updated JS File method .Open() to support an optional, third argument - subFolderName - that defines in which sub-folder of UOX3/shared/ to store/look for a file. If no third argument is supplied, UOX3 will default to using the shared folder itself. Updated JS File method .Length() to return a value of -1 for files that don't exist Added new code function, exposed to JS engine with same parameters, which simply checks if a given tile ID has a specific flag bool CheckTileFlag( UI16 itemID, TILEFLAG flagToCheck ) Added JS function used to find the root container of an item (if any) FindRootContainer( itemSerial ) FindRootContainer( item ) Added new JS function that allows deleting files from UOX3/shared/ folder or subfolders of shared folder. If no subFolderName is provided, looks for file directly in shared folder itself. Restrictions on file- and folder-names apply. bool DeleteFile( fileName, subFolderName ) Added new JS functions for checking if a specific client or server feature is enabled. See documentation for full list of client/server features. GetClientFeature( bitNum ) // Returns true if specified client feature is enabled on server GetServerFeature( bitNum ) // Returns true if specified server feature is enabled on server Added new JS function for returning the value of almost any server setting from UOX.INI GetServerSetting( settingNameInDoubleQuotes ) Updated JS function DoesDynamicBlock() with two new parameters - checkOnlyMultis and checkOnlyNonMultis Updated JS function DoesMapBlock() with two new parameters - checkMultiPlacement and checkForRoad Fixed an issue where a LoS check would prevent players from accessing containers in their own backpack Added new functions in findfuncs.cpp to make it easier to find items near another object or location: findNearbyItems( object, distance ) findNearbyItems( x, y, worldNumber, instanceID, distance ) Added new Item property - maxItems - used by containers to determine their max item capacity Added new Item property - totalItemCount - used to get total item count in a container (including sub-containers) Added check for max item capacity when creating new items that are added to a character's backpack - items will be created below character's feet if backpack is full! Added new DFN tag for items, used by containers to determine item capacity for a given container: MAXITEMS=# // 125 is the default for all containers if not set Added new JS Item properties: .maxItems // gets/sets item capacity for a given container .totalItemCount // gets total item count in a container, including sub-containers Updated item tooltips for containers to show accurate total item count, as well as to display max item capacity Fixed a bug where picking up items from a non-locked down pile of items on the floor inside a multi could cause the remaining pile to be seen as no longer inside the multi, disallowing locking it back down and causing it to decay based on regular decay timer instead of house-specific one Updated JS command set to allow setting poison-level on items ('set poison #) and hunger-level on characters ('set hunger #) Fixed an issue with js/item/food.js that prevented poisoned food from poisoning characters when eaten Fixed an issue with js/skill/poisoning.js that prevented players from poisoning food! Updated various JS scripts and hardcoded targeting functions to disallow the targeting of locked down resources using skills and tools Updated JS Method TextMessage() to support three extra, optional parameters. Note that if one optional parameter is included, all preceding optional parameters are also required! speechTarget - What kind of target is this message intended for? 0 - Only visible for sender and receiver of message 1 - Visible to all players in range 2 - Visible to all NPCs and players in range 3 - Visible to all PCs everywhere + NPCs in range 4 - Visible to all PCs everywhere (broadcast) 5 - Only visible for the receiver of the message speechTargetSerial - The serial of the receiver of the message, used if speechTarget is 0 or 5 speechFontType - The type of font to display the text in. Defaults to normal. 0 - Bold 1 - Normal with shadow 2 - Bold with shadow 3 - Normal 4 - Gothic 5 - Italic 6 - Small, dark 7 - Colourful 8 - Runic (only works with CAPS) 9 - Small, light Added timestamp to worldsaves in console, to make it easier to see when a particular world-save was done Added info about compiler/environment displayed at the top of the UOX3 console during startup Updated dictionary files with new messages primarily related to housing
2020-11-04 02:00:37 +08:00
break;
case CIP_MAXBANS:
if( gPriv->GetObjType() == OT_MULTI )
{
*vp = INT_TO_JSVAL(( static_cast<CMultiObj *>( gPriv )->GetMaxBans() ));
}
0.99.4d Added new option in UOX.INI under [settings] section: MAPDIFFSENABLED=0/1 // If enabled, server will attempt to load diff files, and send "Enable Map-diff files" packet to client to also load these. Disabled by default. Server no longer loads map/statics diff files by default, nor does it send packet to client to request loading these files, as only client versions below 7.0.8.2 will actively load these files. Can be re-enabled with new UOX.INI setting mentioned above! Fixed incorrect ID for gargish dagger in CHandleCombat::getWeaponType() Added missing weapon entries in CHandleCombat::getWeaponType(): bladed whip, barbed whip, spiked whip, gargish talwar Fixed an issue that would show the end part of some tiledata names as garbled text instead of cutting off the text(!) at 20 characters Fixed an issue with advanced character creation template when using ClassicUO client, which sends a profession value of 255 instead of 0 when no profession template has been selected. Fixed an issue where clones of NPCs that can split in combat didn't get the NPC flag correctly set Guild titles are now removed for players who leave their guilds Enabled closing some hard-coded gump menus using right-click (howto, guild, towns, wholist, addmenu, craftmenu, info) Fixed an issue where adding base items using 'add [itemID] would sometimes get false positive hits from harditems.dfn, depending on the length of the itemID Fixed an issue where items added using 'add [itemID] would not get names applied properly from harditems.dfn Item/NPC DFN tag GET can now inherit a random parent by adding additional values separated by spaces. Syntax: GET=parent1 parent2 parent3 (etc) Fixed an issue where NPC backpacks would not have the max item capacity set properly Added new properties for CItem objects (also exposed as JS Item Properties): maxRange // max distance a ranged weapon can fire at (replaces ARCHERRANGE ini setting) baseRange // base distance throwing weapons (when implemented) can be used at Added support for new Item DFN tag that replaces global UOX.INI setting ARCHERRANGE: MAXRANGE=# // Specifies max range of ranged weapon Added support for new Item/NPC DFN tags to support randomizing elemental resistances: RESISTFIRE=#/# # // Set NPC's poison resistance; fixed or random value RESISTCOLD=#/# # // Set NPC's poison resistance; fixed or random value RESISTLIGHTNING=#/# # // Set NPC's poison resistance; fixed or random value RESISTPOISON=#/# # // Set NPC's poison resistance; fixed or random value Added support for two new DFN tags in dfndata/race/races.dfn that can be used to allow/ban lists of equipment for specific races ALLOWEQUIPLIST=# BANEQUIPLIST=# Added support for new section in dfndata/race/races.dfn - [EQUIPLIST #], which can be used to define lists of equipment that is whitelisted or banned for specific races. Fixed a bug that would report incorrect weight in tooltips for Item/NPC spawner objects ScriptSections are now reapplied for items bought by players from NPC vendors Fixed an issue where players could drop an item on the ground and other players would still see the item after it was picked up, because of a failed distance check vs old location coordinates (in pack) instead of vs current location on ground Fixed a bug with players being able to use last-target macro to target objects picked up and held by other players on their cursor Updated all references to "devinelock" to be "divinelock" instead - this includes the name of the JS Item property Fixed house commands triggering (useless) targeting cursors for players onboard boats Changed default statcap in UOX.INI from 325 to 225 Fixed a out-of-range error for players attempting to combine ore inside their own backpack Fixed various issues with distance checks and container checks when using/target objects Added optional 4th "hue" parameter to AddGump JS method Added JS Function to get total amount of accounts on server - GetAccountCount() Added JS Function to get total amount of players online - GetPlayerCount() onSwing JS Event can now trigger in scripts attached to items, not just items attached to characters Added some JS Functions to expose some hard-coded constants to JS scripts: BASEITEMSERIAL() // Base item serial INVALIDSERIAL() // Invalid serial INVALIDID() // Invalid ID INVALIDCOLOUR() // Invalid colour Fixed an issue where JS character property .colour would modify origSkin property instead of colour Fixed an issue where JS character property .guildTitle returned the name of the character instead of the guild title Character JS property .poison can now also be used to set a character's poisoned level, not just read it Exposed Item property to JS engine: .ac // armour class for item (0-128). Primarily used for setting race-restrictions for equippable items, i.e. race X cannot equip items of armour class Y. .def // defensive value of item (Physical resistance post-AoS, AR in older UO) // NOTE: The following properties don't actually do anything yet, but can still be used in custom JS scripts if desired .resistCold // Cold resistance of item 0-1000, where 1000 equals 100.0% .resistHeat // Heat/Fire resistance of item 0-1000, where 1000 equals 100.0% .resistLight // Light resistance of item 0-1000, where 1000 equals 100.0% .resistLightning // Energy/Lightning resistance of item 0-1000, where 1000 equals 100.0% .resistPoison // Poison resistance of item 0-1000, where 1000 equals 100.0% .resistRain // Rain resistance of item 0-1000, where 1000 equals 100.0% .resistSnow // Snow resistance of item 0-1000, where 1000 equals 100.0% .damageHeat // Weapon deals Heat/Fire elemental damage (true/false) .damageCold // Weapon deals Cold elemental damage (true/false) .damageLight // Weapon deals Light elemental damage (true/false) .damageLightning // Weapon deals Lightning elemental damage (true/false) .damagePoison // Weapon deals Poison elemental damage (true/false) .damageRain // Weapon deals Rain/Water elemental damage (true/false) .damageSnow // Weapon deals Snow/Ice elemental damage (true/false) Added new UOX.INI setting under [server] to enable/disable shard response to ConnectUO server polling (disabled by default) Sub-commands are no longer included when registering packets to be overloaded via RegisterPacket function, as that part was never fully implemented. Packet-hook scripts can be setup for specific packet IDs, but any sub-command checking will need to be done in the script itself JS Packet Method GetDWord() now uses JS_NewNumberValue instead of INT_TO_JSVAL to read from the socket buffer, to better handle large numbers, which could previously be returned with wrong values. JS Function CalcItemFromSer() now uses a JS_GetStringBytes() and str_value() combo instead of JSVAL_TO_INT() to read the data provided in the function argument. This allows JS scripts to provide item serials to the function directly without needing to split it into four parts first (though that still works) Fixed issue where JS properties for multis didn't always return correct values The 'set command can now be used to set the armour class of items ('set ac #) Reimplemented 'tweak command in JS engine (js/commands/targeting/tweak.js) - can be used to view and modify properties of characters, character skills, items, multis and regions (target ground) Added placeholder packet-hook script (js/server/network/0xf1_connectUoServerPoll.js) to handle responses to ConnectUO server polling. By default this script does nothing, but serves as a placeholder for drop-in replacement scripts generated specifically for each shard by the ConnectUO service. Updated some commands to support an alternate STATIC keyword (can also be ommitted) to add base items: 'add static itemID 'tile static itemID Updated some commands with support for randomization. Provided itemID will be randomized based on provided rndValue: /js/commands/targeting/add.js: 'add itemID rndValue cmdtable.cpp and targeting.cpp: 'tile itemID rndValue 'tile itemID x1 x2 y1 y2 z rndValue Updated js/commands/custom/repeatingcmds.js to support 'm delete as an alias for 'rremove Added 'props as an alias for the 'tweak command Added 'teleport as an alias for the 'tele command (js/commands/targeting/tele.js) Added 'shavehair and 'shavebeard as aliases for 'kill hair and 'kill beard (js/commands/targeting/kill.js) Added 'noinvul and 'mortal aliases for the 'invul false command (js/commands/custom/misc-cmds.js) Added 'immortal and 'invul (without parameter) as aliases for the 'invul true command Added 'bringtopack as an alias of 'movetobag command (js/commands/targeting/movetobag.js) Updated check for cancelling of target cursor in various JS scripts Minor updates to various JS scripts Fixed issue where some item definitions in dfndata/harditems/harditems.dfn and dfndata/items/building/lighting.dfn used comma instead of space as delimiter for the VALUE tag, which thus never got applied Updated all NPC definitions to let NPCs spawn facing in random directions
2021-03-22 05:59:20 +08:00
else
{
0.99.4d Added new option in UOX.INI under [settings] section: MAPDIFFSENABLED=0/1 // If enabled, server will attempt to load diff files, and send "Enable Map-diff files" packet to client to also load these. Disabled by default. Server no longer loads map/statics diff files by default, nor does it send packet to client to request loading these files, as only client versions below 7.0.8.2 will actively load these files. Can be re-enabled with new UOX.INI setting mentioned above! Fixed incorrect ID for gargish dagger in CHandleCombat::getWeaponType() Added missing weapon entries in CHandleCombat::getWeaponType(): bladed whip, barbed whip, spiked whip, gargish talwar Fixed an issue that would show the end part of some tiledata names as garbled text instead of cutting off the text(!) at 20 characters Fixed an issue with advanced character creation template when using ClassicUO client, which sends a profession value of 255 instead of 0 when no profession template has been selected. Fixed an issue where clones of NPCs that can split in combat didn't get the NPC flag correctly set Guild titles are now removed for players who leave their guilds Enabled closing some hard-coded gump menus using right-click (howto, guild, towns, wholist, addmenu, craftmenu, info) Fixed an issue where adding base items using 'add [itemID] would sometimes get false positive hits from harditems.dfn, depending on the length of the itemID Fixed an issue where items added using 'add [itemID] would not get names applied properly from harditems.dfn Item/NPC DFN tag GET can now inherit a random parent by adding additional values separated by spaces. Syntax: GET=parent1 parent2 parent3 (etc) Fixed an issue where NPC backpacks would not have the max item capacity set properly Added new properties for CItem objects (also exposed as JS Item Properties): maxRange // max distance a ranged weapon can fire at (replaces ARCHERRANGE ini setting) baseRange // base distance throwing weapons (when implemented) can be used at Added support for new Item DFN tag that replaces global UOX.INI setting ARCHERRANGE: MAXRANGE=# // Specifies max range of ranged weapon Added support for new Item/NPC DFN tags to support randomizing elemental resistances: RESISTFIRE=#/# # // Set NPC's poison resistance; fixed or random value RESISTCOLD=#/# # // Set NPC's poison resistance; fixed or random value RESISTLIGHTNING=#/# # // Set NPC's poison resistance; fixed or random value RESISTPOISON=#/# # // Set NPC's poison resistance; fixed or random value Added support for two new DFN tags in dfndata/race/races.dfn that can be used to allow/ban lists of equipment for specific races ALLOWEQUIPLIST=# BANEQUIPLIST=# Added support for new section in dfndata/race/races.dfn - [EQUIPLIST #], which can be used to define lists of equipment that is whitelisted or banned for specific races. Fixed a bug that would report incorrect weight in tooltips for Item/NPC spawner objects ScriptSections are now reapplied for items bought by players from NPC vendors Fixed an issue where players could drop an item on the ground and other players would still see the item after it was picked up, because of a failed distance check vs old location coordinates (in pack) instead of vs current location on ground Fixed a bug with players being able to use last-target macro to target objects picked up and held by other players on their cursor Updated all references to "devinelock" to be "divinelock" instead - this includes the name of the JS Item property Fixed house commands triggering (useless) targeting cursors for players onboard boats Changed default statcap in UOX.INI from 325 to 225 Fixed a out-of-range error for players attempting to combine ore inside their own backpack Fixed various issues with distance checks and container checks when using/target objects Added optional 4th "hue" parameter to AddGump JS method Added JS Function to get total amount of accounts on server - GetAccountCount() Added JS Function to get total amount of players online - GetPlayerCount() onSwing JS Event can now trigger in scripts attached to items, not just items attached to characters Added some JS Functions to expose some hard-coded constants to JS scripts: BASEITEMSERIAL() // Base item serial INVALIDSERIAL() // Invalid serial INVALIDID() // Invalid ID INVALIDCOLOUR() // Invalid colour Fixed an issue where JS character property .colour would modify origSkin property instead of colour Fixed an issue where JS character property .guildTitle returned the name of the character instead of the guild title Character JS property .poison can now also be used to set a character's poisoned level, not just read it Exposed Item property to JS engine: .ac // armour class for item (0-128). Primarily used for setting race-restrictions for equippable items, i.e. race X cannot equip items of armour class Y. .def // defensive value of item (Physical resistance post-AoS, AR in older UO) // NOTE: The following properties don't actually do anything yet, but can still be used in custom JS scripts if desired .resistCold // Cold resistance of item 0-1000, where 1000 equals 100.0% .resistHeat // Heat/Fire resistance of item 0-1000, where 1000 equals 100.0% .resistLight // Light resistance of item 0-1000, where 1000 equals 100.0% .resistLightning // Energy/Lightning resistance of item 0-1000, where 1000 equals 100.0% .resistPoison // Poison resistance of item 0-1000, where 1000 equals 100.0% .resistRain // Rain resistance of item 0-1000, where 1000 equals 100.0% .resistSnow // Snow resistance of item 0-1000, where 1000 equals 100.0% .damageHeat // Weapon deals Heat/Fire elemental damage (true/false) .damageCold // Weapon deals Cold elemental damage (true/false) .damageLight // Weapon deals Light elemental damage (true/false) .damageLightning // Weapon deals Lightning elemental damage (true/false) .damagePoison // Weapon deals Poison elemental damage (true/false) .damageRain // Weapon deals Rain/Water elemental damage (true/false) .damageSnow // Weapon deals Snow/Ice elemental damage (true/false) Added new UOX.INI setting under [server] to enable/disable shard response to ConnectUO server polling (disabled by default) Sub-commands are no longer included when registering packets to be overloaded via RegisterPacket function, as that part was never fully implemented. Packet-hook scripts can be setup for specific packet IDs, but any sub-command checking will need to be done in the script itself JS Packet Method GetDWord() now uses JS_NewNumberValue instead of INT_TO_JSVAL to read from the socket buffer, to better handle large numbers, which could previously be returned with wrong values. JS Function CalcItemFromSer() now uses a JS_GetStringBytes() and str_value() combo instead of JSVAL_TO_INT() to read the data provided in the function argument. This allows JS scripts to provide item serials to the function directly without needing to split it into four parts first (though that still works) Fixed issue where JS properties for multis didn't always return correct values The 'set command can now be used to set the armour class of items ('set ac #) Reimplemented 'tweak command in JS engine (js/commands/targeting/tweak.js) - can be used to view and modify properties of characters, character skills, items, multis and regions (target ground) Added placeholder packet-hook script (js/server/network/0xf1_connectUoServerPoll.js) to handle responses to ConnectUO server polling. By default this script does nothing, but serves as a placeholder for drop-in replacement scripts generated specifically for each shard by the ConnectUO service. Updated some commands to support an alternate STATIC keyword (can also be ommitted) to add base items: 'add static itemID 'tile static itemID Updated some commands with support for randomization. Provided itemID will be randomized based on provided rndValue: /js/commands/targeting/add.js: 'add itemID rndValue cmdtable.cpp and targeting.cpp: 'tile itemID rndValue 'tile itemID x1 x2 y1 y2 z rndValue Updated js/commands/custom/repeatingcmds.js to support 'm delete as an alias for 'rremove Added 'props as an alias for the 'tweak command Added 'teleport as an alias for the 'tele command (js/commands/targeting/tele.js) Added 'shavehair and 'shavebeard as aliases for 'kill hair and 'kill beard (js/commands/targeting/kill.js) Added 'noinvul and 'mortal aliases for the 'invul false command (js/commands/custom/misc-cmds.js) Added 'immortal and 'invul (without parameter) as aliases for the 'invul true command Added 'bringtopack as an alias of 'movetobag command (js/commands/targeting/movetobag.js) Updated check for cancelling of target cursor in various JS scripts Minor updates to various JS scripts Fixed issue where some item definitions in dfndata/harditems/harditems.dfn and dfndata/items/building/lighting.dfn used comma instead of space as delimiter for the VALUE tag, which thus never got applied Updated all NPC definitions to let NPCs spawn facing in random directions
2021-03-22 05:59:20 +08:00
*vp = JSVAL_NULL;
}
Housing Revamp and more Updated JS SysMessage function to accept up to 10 extra, optional arguments, which can be used with dictionary messages that require additional parameters like %s or %i Added new type of house privilege in cMultiObj.cpp to keep track of friends of the multi - HOUSEPRIV_FRIEND - which is stored during worldsaves as one or more Friend=<player serial> tags in house.wsc Added new type of house privilege in cMultiObj.cpp to keep track of guests of the multi - HOUSEPRIV_GUEST - which is stored during worldsaves as one or more Guest=<player serial> tags in house.wsc When items are created for houses upon house placement, a reference to the multi's serial is now stored in the house sign's MORE property to allow easier tracking of which house a particular sign belongs to Added tracking of new, persistent properties for houses via cMultiObj.cpp/h: lockdowns, secure containers, vendors, guests, friends, owners, ban location, public status, number of visits, timestamps Added a multitude of new methods in cMultiObj.cpp/h to assist in improving the functionality of houses Added new tags for houses in house.dfn (default values applied if tag not specified): MAXSECURECONTAINERS=4 - Max amount of secure containers allowed in a multi MAXLOCKDOWNS=256 - Max amount of lockdowns allowed in a multi MAXVENDORS=10 - Max amount of vendors allowed in a multi MAXBANS=50 - Max amount of bans in a multi's ban list MAXFRIENDS=50 - Max amount of friends in a multi's friend list MAXGUESTS=50 - Max amount of guests in a multi's guest list MAXOWNERS=8 - Max amount of owners and co-owners in a multi's owner list MAXTRASHCONTAINERS=1 - Max amount of trash containers allowed in multi SCRIPT=<scriptID> - Assign a JS script-ID directly to a multi FRONTDOOR - indicates that a door is the front door of a house. Cannot be locked in public houses! INTERIORDOOR - indicates that a door is an interior door of a house. Can be locked in public houses. BANX - Location X offset for multi's ban location, if not used, will try to use SE corner of multi instead BANY - Location Y offset for multi's ban location, if not used, will try to use SE corner of multi instead Added JS Event: onHouseCommand( tSock, multiObj, cmdID ) - For handling spoken house commands via JS scripts attached to multi. Updated JS Events: onEntrance() - can now trigger both for multi being entered and/or object entering onLeaving() - can now trigger both for multi being left and/or object entering onSpeech() - can now also trigger for items (in addition to chars) with event & script attached, if UOX.INI setting ITEMSDETECTSPEECH is enabled Added JS Multi methods: .IsBoat() - Returns whether the item (or multi) is a boat .IsOwner( playerToCheck ) - Returns whether a player is the owner of a multi .IsOnOwnerList( playerToCheck ) - Returns whether a player is on the (co-)owner list of a multi .IsOnFriendList( playerToCheck ) - Returns whether a player is on the friend list of a multi .IsOnGuestList( playerToCheck ) - Returns whether a player is on the guest list of a multi .IsOnBanList( playerToCheck ) - Returns whether a player is on the ban list of a multi .AddToFriendList( playertoAdd ) - Adds player to the friend list of a multi .RemoveFromFriendList( playertoRemove ) - Removes player from the friend list of a multi .AddToGuestList( playertoAdd ) - Adds player to the guest list of a multi .RemoveFromGuestList( playertoRemove ) - Removes player from the guest list of a multi .ClearOwnerList() - Clears all entries from a multi's (co-)owner list .ClearFriendList() - Clears all entries from a multi's friend list .ClearGuestList() - Clears all entries from a multi's guest list .ClearBanList() - Clears all entries from a multi's ban list .SecureContainer( itemToSecure ) - Secures a container in a multi .UnsecureContainer( itemToUnsecure ) - Unsecures a container in a multi .IsSecureContainer( itemToCheck ) - Checks if specified item is a secure container in a multi .LockDownItem( itemToLockDown) - Locks down an item in a multi .ReleaseItem( itemToRelease ) - Releases a locked down item in a multi .KillKeys() - Deletes ALL keys associated with a multi .AddTrashCont( itemToAdd ) - Add trash container to multi's list of trash containers .RemoveTrashCont( itemToRemove ) - Remove trash container from multi's list of trash containers Added JS Item (Multi only) properties: .lockdowns - Get the number of lockdowns in a multi .maxLockdowns - Get/Set the max number of lockdowns allowed in a multi .secureContainers - Get the number of secure containers in a multi .maxSecureContainers - Get/Set the max number of secure containers allowed in a multi .trashContainers - Get the number of trash containers in a multi .maxTrashContainers - Get/Set the max number of trash containers allowed in a multi .friends - Get the number of friends in a multi's friend list .maxFriends - Get/Set the max number of friends allowed in a multi's friend list .guests - Get the number of guests in a multi's guest list .maxGuests - Get/Set the max number of guests allowed in a multi's guest list .owners - Get the number of owners in a multi's owner list .maxOwners - Get/Set the max number of owners allowed in a multi's owner list .bans - Get the number of banned players in a multi's ban list .maxBans - Get/Set the max number of banned players allowed in a multi's ban list .vendors - Get the number of player vendors in a multi .maxVendors - Get the max number of player vendors allowed in a multi .deed - Get the item sectionID for deed used to place multi .isPublic - Get/Set the private/public state of a multi .buildTimestamp - Get the timestamp for when the house was originally placed .tradeTimestamp - Get the timestamp for when the house was last traded to another player .banX - Get/Set the ban location X offset for the multi .banY - Get/Set the ban location Y offset for the multi Added JS Character properties: .multi = Get/Set the multi object the character is in .accountNum = Get the account number the character belongs to .housesOwned = Get a count of houses owned by the character .housesCoOwned = Get a count of houses co-owned by the character Updated JS cBaseObject Methods .FirstItem(), .NextItem() and .FinishedItems() to also support iterating through items in multis Updated JS multi Methods .FirstChar(), .NextChar() and .FinishedChars() to support an additional parameter to specify what kind of characters to loop through: "default" or no parameter - all characters inside the multi "owner" - players on multi's owner list "friend" - players on multi's friend list "guest" - players on multi's guest list "banned" - players on multi's ban list Added new INI tags to a new section of uox.ini called [houses] DECAYTIMERINHOUSE=3600 // Decay timer in seconds for non-locked down items inside houses PROTECTPRIVATEHOUSES=1 // Toggles whether private houses will automatically boot unauthorized visitors (1) or not (0) TRACKHOUSESPERACCOUNT=1 // Toggles whether to track (and restrict) house ownership per account (1) or per character (0) MAXHOUSESOWNABLE=1 // Specifies the max amount of houses a player can own per account/char, depending on how house ownership is tracked MAXHOUSESCOOWNABLE=10 // Specifies the max amount of houses a player can co-own per character CANOWNANDCOOWNHOUSES=1 // Toggles whether players can own and co-own houses at the same time COOWNHOUSESONSAMEACCOUNT=1 // Toggles whether characters on same account as house owner will be treated as co-owners Added new INI tags in [settings] section of uox.ini: ITEMSDETECTSPEECH=0 // If enabled, server will search for nearby items with onSpeech JS event running whenever a character speaks. Disabled by default. MAXPLAYERPACKITEMS=125 // Defines max item capacity for player (and NPC) backpacks. Defaults to 125. Moved most of the existing house functionality to JS and expanded upon it to reach feature parity with houses in regular UO around Publish 15/16, with various extras thrown in for good measure and all functionality being customizable: js/server/house/house.js (15000) - handles detection of house commands and characters entering/leaving houses js/server/house/houseSign.js (15001) - contains and handles all house-related gumps/menus and what is shown when players interact with house sign js/server/house/houseCommands.js (15002) - handles functionality of house commands and other functionality such as transfer of ownership, demolishing house, etc. js/server/house/houseDeed.js (15003) - handles initial rules that allow/disallow placement of additional houses for players All house-related menus now fully handled through JS All house commands and other functionality now fully handled through JS Removed redundant hard-coded house functionality Implemented Co-owners, friends, guests for houses, with access rules in place for entry, lockdowns, house commands, etc. Implemented Private and Public houses Implemented Secure Containers and Trash Barrels Definable max lockdowns, secure containers, player vendors, bans, friends, guests, owners, trash containers and more - per house type JS scripts can now be attached directly to houses Doors in houses can be marked as front doors or interior doors, and will be treated differently with regards to private and public houses Added new item to dfndata/items/containers/misc.dfn - [trashbarrel] Added new JS script (js/items/trashbarrel.js) with trash barrel functionality for houses. Trash barrels that are marked as secure containers are only accessible by owners, co-owners and friends of the house. Various options available at top of script. Updated js/items/axe.js to support chopping up trash barrels and house add-ons in houses owned by the player Fixed an issue with house doors being left behind after demolishing houses while their doors were open Fixed an issue where GMs could be banned from player houses Added Line of Sight checks to speech, to give players some privacy in their own homes Updated house placement code to more accurately check for other multis, dynamic and static objects when placing houses; now requires free space around each house that cannot be blocked by other houses or items that can block player movement, and disallows placement of houses on roads Updated house placement code to move characters blocking house placement to SE corner of the house Updated house placement code to disallow placing houses in guarded regions, or in dungeons Added new DFN tag for regions to enable/disable player houses in specific regions: HOUSING=0/1 Added new region (247) that covers path to Valley of Eodon in Felucca Added new region (248) that covers Valley of Eodon in Ter-Mur, with player housing disabled Added new region (249) that covers entire T2A lands, with player housing disabled Updated SPACEX and SPACEY values for all houses in dfndata/house/house.dfn to match updated house placement code Added new JS property to Regions that can be used to determine or change state of player housing in a region: .canPlaceHouse() Updated rules for usage of dye tubs to dye locked down items; now only house owners or co-owners may dye locked down items Updated rules for usage of the following locked down items in a house, which are now only usable by house owners and co-owners Dyes, Guildstone Deeds, Recall Runes (renaming), Rename Deeds, Townstone Deeds, House Deeds, Boat Models, Player Vendor Deeds, Ore, Hair Dye Updated rules for usage of the following locked down items in a house, which are now only usable by house owners, co-owners and friends: Keys, Dye Tubs, Magic Scrolls, Fireworks Wands, Magic Wands, Smithing Tools, Mining Tools, Fishing Poles Updated item lockdown rules to allow locking down (and releasing) items in a container as long as the container is locked down, and to only allow releasing a locked down container if it's empty of locked down items Updated item lockdown rules to only allow locking down movement-blocking items further than 2 tiles away from doors Updated rules for releasing items in houses - now the house owner can release any locked down items, co-owners can release items locked down by themselves or by friends, while friends can release only items locked down by themselves Added some feedback to player about why their attempted house placement failed Items added by GMs directly into multis will now decay based on the house-specific decay timer instead of the regular one Fixed an issue that could cause items to almost instantly decay after being released from lockdown in a house Placing house add-ons now properly takes into account SPACEX and SPACEY values when checking if they can fit in selected area of houses Re-added SPACEX and SPACEY values for Pentagram and Loom house add-ons House add-ons can now be converted back into house add-on deeds by chopping them with an axe Added new item type - IT_HOUSEADDON (201) - used by house add-ons placed in player houses Fixed a bug where keys would stop working after being added to a keyring, and would turn into blank keys upon release from the keyring Added visitor count for public player houses, which keeps track of how many visits a public house has received, with each player counted max 1 time every 24 hours Fixed an issue with FindPlayersInOldVisrange() where it didn't take into account that players could see buildings further away than the standard update range. This could cause players to see ghost images of buildings if they were at the "right" distance when the building was being demolished Added NODECAY tag to all signs and doors in dfndata/house/house.dfn Added FRONTDOOR or INTERIORDOOR (as appropriate) to all doors in dfndata/house/house.dfn Added BANX and BANY to specify ban location for some houses in dfndata/house/house.dfn instead of relying on finding SE corner automatically Implemented strongboxes (js/server/house/strongbox.js) for co-owners of a house, which can be placed with the house command "i wish to place a strongbox". Max capacity is 25 items Updated 'REMOVE command to take an optional parameter - itemID. If supplied, the command will remove all items with this itemID from a targeted container Fixed a bug when checking if dynamic items were blocking valid spawn locations for NPCs, some function arguments were in the wrong order! Improved code that finds valid spawn locations for items and NPCs spawned via spawn regions. As server gradually builds up lists of valid spawn locations per region over time, it will start using these lists more often, rather than always look for brand new spawn locations. Fixed a bug with CMulHandler::CheckStaticFlag() that prevented NPCs from spawning inside buildings with no static floors! Fixed an issue with repeating commands that prevented GMs from being able to cancel them when using the ClassicUO client Exposed character property .accountNum to JS engine Extended CDataList class to include a Clear() method for clearing lists Updated JS File method .Open() to support an optional, third argument - subFolderName - that defines in which sub-folder of UOX3/shared/ to store/look for a file. If no third argument is supplied, UOX3 will default to using the shared folder itself. Updated JS File method .Length() to return a value of -1 for files that don't exist Added new code function, exposed to JS engine with same parameters, which simply checks if a given tile ID has a specific flag bool CheckTileFlag( UI16 itemID, TILEFLAG flagToCheck ) Added JS function used to find the root container of an item (if any) FindRootContainer( itemSerial ) FindRootContainer( item ) Added new JS function that allows deleting files from UOX3/shared/ folder or subfolders of shared folder. If no subFolderName is provided, looks for file directly in shared folder itself. Restrictions on file- and folder-names apply. bool DeleteFile( fileName, subFolderName ) Added new JS functions for checking if a specific client or server feature is enabled. See documentation for full list of client/server features. GetClientFeature( bitNum ) // Returns true if specified client feature is enabled on server GetServerFeature( bitNum ) // Returns true if specified server feature is enabled on server Added new JS function for returning the value of almost any server setting from UOX.INI GetServerSetting( settingNameInDoubleQuotes ) Updated JS function DoesDynamicBlock() with two new parameters - checkOnlyMultis and checkOnlyNonMultis Updated JS function DoesMapBlock() with two new parameters - checkMultiPlacement and checkForRoad Fixed an issue where a LoS check would prevent players from accessing containers in their own backpack Added new functions in findfuncs.cpp to make it easier to find items near another object or location: findNearbyItems( object, distance ) findNearbyItems( x, y, worldNumber, instanceID, distance ) Added new Item property - maxItems - used by containers to determine their max item capacity Added new Item property - totalItemCount - used to get total item count in a container (including sub-containers) Added check for max item capacity when creating new items that are added to a character's backpack - items will be created below character's feet if backpack is full! Added new DFN tag for items, used by containers to determine item capacity for a given container: MAXITEMS=# // 125 is the default for all containers if not set Added new JS Item properties: .maxItems // gets/sets item capacity for a given container .totalItemCount // gets total item count in a container, including sub-containers Updated item tooltips for containers to show accurate total item count, as well as to display max item capacity Fixed a bug where picking up items from a non-locked down pile of items on the floor inside a multi could cause the remaining pile to be seen as no longer inside the multi, disallowing locking it back down and causing it to decay based on regular decay timer instead of house-specific one Updated JS command set to allow setting poison-level on items ('set poison #) and hunger-level on characters ('set hunger #) Fixed an issue with js/item/food.js that prevented poisoned food from poisoning characters when eaten Fixed an issue with js/skill/poisoning.js that prevented players from poisoning food! Updated various JS scripts and hardcoded targeting functions to disallow the targeting of locked down resources using skills and tools Updated JS Method TextMessage() to support three extra, optional parameters. Note that if one optional parameter is included, all preceding optional parameters are also required! speechTarget - What kind of target is this message intended for? 0 - Only visible for sender and receiver of message 1 - Visible to all players in range 2 - Visible to all NPCs and players in range 3 - Visible to all PCs everywhere + NPCs in range 4 - Visible to all PCs everywhere (broadcast) 5 - Only visible for the receiver of the message speechTargetSerial - The serial of the receiver of the message, used if speechTarget is 0 or 5 speechFontType - The type of font to display the text in. Defaults to normal. 0 - Bold 1 - Normal with shadow 2 - Bold with shadow 3 - Normal 4 - Gothic 5 - Italic 6 - Small, dark 7 - Colourful 8 - Runic (only works with CAPS) 9 - Small, light Added timestamp to worldsaves in console, to make it easier to see when a particular world-save was done Added info about compiler/environment displayed at the top of the UOX3 console during startup Updated dictionary files with new messages primarily related to housing
2020-11-04 02:00:37 +08:00
break;
case CIP_VENDORS:
if( gPriv->GetObjType() == OT_MULTI )
{
*vp = INT_TO_JSVAL(( static_cast<CMultiObj *>( gPriv )->GetVendorCount() ));
}
0.99.4d Added new option in UOX.INI under [settings] section: MAPDIFFSENABLED=0/1 // If enabled, server will attempt to load diff files, and send "Enable Map-diff files" packet to client to also load these. Disabled by default. Server no longer loads map/statics diff files by default, nor does it send packet to client to request loading these files, as only client versions below 7.0.8.2 will actively load these files. Can be re-enabled with new UOX.INI setting mentioned above! Fixed incorrect ID for gargish dagger in CHandleCombat::getWeaponType() Added missing weapon entries in CHandleCombat::getWeaponType(): bladed whip, barbed whip, spiked whip, gargish talwar Fixed an issue that would show the end part of some tiledata names as garbled text instead of cutting off the text(!) at 20 characters Fixed an issue with advanced character creation template when using ClassicUO client, which sends a profession value of 255 instead of 0 when no profession template has been selected. Fixed an issue where clones of NPCs that can split in combat didn't get the NPC flag correctly set Guild titles are now removed for players who leave their guilds Enabled closing some hard-coded gump menus using right-click (howto, guild, towns, wholist, addmenu, craftmenu, info) Fixed an issue where adding base items using 'add [itemID] would sometimes get false positive hits from harditems.dfn, depending on the length of the itemID Fixed an issue where items added using 'add [itemID] would not get names applied properly from harditems.dfn Item/NPC DFN tag GET can now inherit a random parent by adding additional values separated by spaces. Syntax: GET=parent1 parent2 parent3 (etc) Fixed an issue where NPC backpacks would not have the max item capacity set properly Added new properties for CItem objects (also exposed as JS Item Properties): maxRange // max distance a ranged weapon can fire at (replaces ARCHERRANGE ini setting) baseRange // base distance throwing weapons (when implemented) can be used at Added support for new Item DFN tag that replaces global UOX.INI setting ARCHERRANGE: MAXRANGE=# // Specifies max range of ranged weapon Added support for new Item/NPC DFN tags to support randomizing elemental resistances: RESISTFIRE=#/# # // Set NPC's poison resistance; fixed or random value RESISTCOLD=#/# # // Set NPC's poison resistance; fixed or random value RESISTLIGHTNING=#/# # // Set NPC's poison resistance; fixed or random value RESISTPOISON=#/# # // Set NPC's poison resistance; fixed or random value Added support for two new DFN tags in dfndata/race/races.dfn that can be used to allow/ban lists of equipment for specific races ALLOWEQUIPLIST=# BANEQUIPLIST=# Added support for new section in dfndata/race/races.dfn - [EQUIPLIST #], which can be used to define lists of equipment that is whitelisted or banned for specific races. Fixed a bug that would report incorrect weight in tooltips for Item/NPC spawner objects ScriptSections are now reapplied for items bought by players from NPC vendors Fixed an issue where players could drop an item on the ground and other players would still see the item after it was picked up, because of a failed distance check vs old location coordinates (in pack) instead of vs current location on ground Fixed a bug with players being able to use last-target macro to target objects picked up and held by other players on their cursor Updated all references to "devinelock" to be "divinelock" instead - this includes the name of the JS Item property Fixed house commands triggering (useless) targeting cursors for players onboard boats Changed default statcap in UOX.INI from 325 to 225 Fixed a out-of-range error for players attempting to combine ore inside their own backpack Fixed various issues with distance checks and container checks when using/target objects Added optional 4th "hue" parameter to AddGump JS method Added JS Function to get total amount of accounts on server - GetAccountCount() Added JS Function to get total amount of players online - GetPlayerCount() onSwing JS Event can now trigger in scripts attached to items, not just items attached to characters Added some JS Functions to expose some hard-coded constants to JS scripts: BASEITEMSERIAL() // Base item serial INVALIDSERIAL() // Invalid serial INVALIDID() // Invalid ID INVALIDCOLOUR() // Invalid colour Fixed an issue where JS character property .colour would modify origSkin property instead of colour Fixed an issue where JS character property .guildTitle returned the name of the character instead of the guild title Character JS property .poison can now also be used to set a character's poisoned level, not just read it Exposed Item property to JS engine: .ac // armour class for item (0-128). Primarily used for setting race-restrictions for equippable items, i.e. race X cannot equip items of armour class Y. .def // defensive value of item (Physical resistance post-AoS, AR in older UO) // NOTE: The following properties don't actually do anything yet, but can still be used in custom JS scripts if desired .resistCold // Cold resistance of item 0-1000, where 1000 equals 100.0% .resistHeat // Heat/Fire resistance of item 0-1000, where 1000 equals 100.0% .resistLight // Light resistance of item 0-1000, where 1000 equals 100.0% .resistLightning // Energy/Lightning resistance of item 0-1000, where 1000 equals 100.0% .resistPoison // Poison resistance of item 0-1000, where 1000 equals 100.0% .resistRain // Rain resistance of item 0-1000, where 1000 equals 100.0% .resistSnow // Snow resistance of item 0-1000, where 1000 equals 100.0% .damageHeat // Weapon deals Heat/Fire elemental damage (true/false) .damageCold // Weapon deals Cold elemental damage (true/false) .damageLight // Weapon deals Light elemental damage (true/false) .damageLightning // Weapon deals Lightning elemental damage (true/false) .damagePoison // Weapon deals Poison elemental damage (true/false) .damageRain // Weapon deals Rain/Water elemental damage (true/false) .damageSnow // Weapon deals Snow/Ice elemental damage (true/false) Added new UOX.INI setting under [server] to enable/disable shard response to ConnectUO server polling (disabled by default) Sub-commands are no longer included when registering packets to be overloaded via RegisterPacket function, as that part was never fully implemented. Packet-hook scripts can be setup for specific packet IDs, but any sub-command checking will need to be done in the script itself JS Packet Method GetDWord() now uses JS_NewNumberValue instead of INT_TO_JSVAL to read from the socket buffer, to better handle large numbers, which could previously be returned with wrong values. JS Function CalcItemFromSer() now uses a JS_GetStringBytes() and str_value() combo instead of JSVAL_TO_INT() to read the data provided in the function argument. This allows JS scripts to provide item serials to the function directly without needing to split it into four parts first (though that still works) Fixed issue where JS properties for multis didn't always return correct values The 'set command can now be used to set the armour class of items ('set ac #) Reimplemented 'tweak command in JS engine (js/commands/targeting/tweak.js) - can be used to view and modify properties of characters, character skills, items, multis and regions (target ground) Added placeholder packet-hook script (js/server/network/0xf1_connectUoServerPoll.js) to handle responses to ConnectUO server polling. By default this script does nothing, but serves as a placeholder for drop-in replacement scripts generated specifically for each shard by the ConnectUO service. Updated some commands to support an alternate STATIC keyword (can also be ommitted) to add base items: 'add static itemID 'tile static itemID Updated some commands with support for randomization. Provided itemID will be randomized based on provided rndValue: /js/commands/targeting/add.js: 'add itemID rndValue cmdtable.cpp and targeting.cpp: 'tile itemID rndValue 'tile itemID x1 x2 y1 y2 z rndValue Updated js/commands/custom/repeatingcmds.js to support 'm delete as an alias for 'rremove Added 'props as an alias for the 'tweak command Added 'teleport as an alias for the 'tele command (js/commands/targeting/tele.js) Added 'shavehair and 'shavebeard as aliases for 'kill hair and 'kill beard (js/commands/targeting/kill.js) Added 'noinvul and 'mortal aliases for the 'invul false command (js/commands/custom/misc-cmds.js) Added 'immortal and 'invul (without parameter) as aliases for the 'invul true command Added 'bringtopack as an alias of 'movetobag command (js/commands/targeting/movetobag.js) Updated check for cancelling of target cursor in various JS scripts Minor updates to various JS scripts Fixed issue where some item definitions in dfndata/harditems/harditems.dfn and dfndata/items/building/lighting.dfn used comma instead of space as delimiter for the VALUE tag, which thus never got applied Updated all NPC definitions to let NPCs spawn facing in random directions
2021-03-22 05:59:20 +08:00
else
{
0.99.4d Added new option in UOX.INI under [settings] section: MAPDIFFSENABLED=0/1 // If enabled, server will attempt to load diff files, and send "Enable Map-diff files" packet to client to also load these. Disabled by default. Server no longer loads map/statics diff files by default, nor does it send packet to client to request loading these files, as only client versions below 7.0.8.2 will actively load these files. Can be re-enabled with new UOX.INI setting mentioned above! Fixed incorrect ID for gargish dagger in CHandleCombat::getWeaponType() Added missing weapon entries in CHandleCombat::getWeaponType(): bladed whip, barbed whip, spiked whip, gargish talwar Fixed an issue that would show the end part of some tiledata names as garbled text instead of cutting off the text(!) at 20 characters Fixed an issue with advanced character creation template when using ClassicUO client, which sends a profession value of 255 instead of 0 when no profession template has been selected. Fixed an issue where clones of NPCs that can split in combat didn't get the NPC flag correctly set Guild titles are now removed for players who leave their guilds Enabled closing some hard-coded gump menus using right-click (howto, guild, towns, wholist, addmenu, craftmenu, info) Fixed an issue where adding base items using 'add [itemID] would sometimes get false positive hits from harditems.dfn, depending on the length of the itemID Fixed an issue where items added using 'add [itemID] would not get names applied properly from harditems.dfn Item/NPC DFN tag GET can now inherit a random parent by adding additional values separated by spaces. Syntax: GET=parent1 parent2 parent3 (etc) Fixed an issue where NPC backpacks would not have the max item capacity set properly Added new properties for CItem objects (also exposed as JS Item Properties): maxRange // max distance a ranged weapon can fire at (replaces ARCHERRANGE ini setting) baseRange // base distance throwing weapons (when implemented) can be used at Added support for new Item DFN tag that replaces global UOX.INI setting ARCHERRANGE: MAXRANGE=# // Specifies max range of ranged weapon Added support for new Item/NPC DFN tags to support randomizing elemental resistances: RESISTFIRE=#/# # // Set NPC's poison resistance; fixed or random value RESISTCOLD=#/# # // Set NPC's poison resistance; fixed or random value RESISTLIGHTNING=#/# # // Set NPC's poison resistance; fixed or random value RESISTPOISON=#/# # // Set NPC's poison resistance; fixed or random value Added support for two new DFN tags in dfndata/race/races.dfn that can be used to allow/ban lists of equipment for specific races ALLOWEQUIPLIST=# BANEQUIPLIST=# Added support for new section in dfndata/race/races.dfn - [EQUIPLIST #], which can be used to define lists of equipment that is whitelisted or banned for specific races. Fixed a bug that would report incorrect weight in tooltips for Item/NPC spawner objects ScriptSections are now reapplied for items bought by players from NPC vendors Fixed an issue where players could drop an item on the ground and other players would still see the item after it was picked up, because of a failed distance check vs old location coordinates (in pack) instead of vs current location on ground Fixed a bug with players being able to use last-target macro to target objects picked up and held by other players on their cursor Updated all references to "devinelock" to be "divinelock" instead - this includes the name of the JS Item property Fixed house commands triggering (useless) targeting cursors for players onboard boats Changed default statcap in UOX.INI from 325 to 225 Fixed a out-of-range error for players attempting to combine ore inside their own backpack Fixed various issues with distance checks and container checks when using/target objects Added optional 4th "hue" parameter to AddGump JS method Added JS Function to get total amount of accounts on server - GetAccountCount() Added JS Function to get total amount of players online - GetPlayerCount() onSwing JS Event can now trigger in scripts attached to items, not just items attached to characters Added some JS Functions to expose some hard-coded constants to JS scripts: BASEITEMSERIAL() // Base item serial INVALIDSERIAL() // Invalid serial INVALIDID() // Invalid ID INVALIDCOLOUR() // Invalid colour Fixed an issue where JS character property .colour would modify origSkin property instead of colour Fixed an issue where JS character property .guildTitle returned the name of the character instead of the guild title Character JS property .poison can now also be used to set a character's poisoned level, not just read it Exposed Item property to JS engine: .ac // armour class for item (0-128). Primarily used for setting race-restrictions for equippable items, i.e. race X cannot equip items of armour class Y. .def // defensive value of item (Physical resistance post-AoS, AR in older UO) // NOTE: The following properties don't actually do anything yet, but can still be used in custom JS scripts if desired .resistCold // Cold resistance of item 0-1000, where 1000 equals 100.0% .resistHeat // Heat/Fire resistance of item 0-1000, where 1000 equals 100.0% .resistLight // Light resistance of item 0-1000, where 1000 equals 100.0% .resistLightning // Energy/Lightning resistance of item 0-1000, where 1000 equals 100.0% .resistPoison // Poison resistance of item 0-1000, where 1000 equals 100.0% .resistRain // Rain resistance of item 0-1000, where 1000 equals 100.0% .resistSnow // Snow resistance of item 0-1000, where 1000 equals 100.0% .damageHeat // Weapon deals Heat/Fire elemental damage (true/false) .damageCold // Weapon deals Cold elemental damage (true/false) .damageLight // Weapon deals Light elemental damage (true/false) .damageLightning // Weapon deals Lightning elemental damage (true/false) .damagePoison // Weapon deals Poison elemental damage (true/false) .damageRain // Weapon deals Rain/Water elemental damage (true/false) .damageSnow // Weapon deals Snow/Ice elemental damage (true/false) Added new UOX.INI setting under [server] to enable/disable shard response to ConnectUO server polling (disabled by default) Sub-commands are no longer included when registering packets to be overloaded via RegisterPacket function, as that part was never fully implemented. Packet-hook scripts can be setup for specific packet IDs, but any sub-command checking will need to be done in the script itself JS Packet Method GetDWord() now uses JS_NewNumberValue instead of INT_TO_JSVAL to read from the socket buffer, to better handle large numbers, which could previously be returned with wrong values. JS Function CalcItemFromSer() now uses a JS_GetStringBytes() and str_value() combo instead of JSVAL_TO_INT() to read the data provided in the function argument. This allows JS scripts to provide item serials to the function directly without needing to split it into four parts first (though that still works) Fixed issue where JS properties for multis didn't always return correct values The 'set command can now be used to set the armour class of items ('set ac #) Reimplemented 'tweak command in JS engine (js/commands/targeting/tweak.js) - can be used to view and modify properties of characters, character skills, items, multis and regions (target ground) Added placeholder packet-hook script (js/server/network/0xf1_connectUoServerPoll.js) to handle responses to ConnectUO server polling. By default this script does nothing, but serves as a placeholder for drop-in replacement scripts generated specifically for each shard by the ConnectUO service. Updated some commands to support an alternate STATIC keyword (can also be ommitted) to add base items: 'add static itemID 'tile static itemID Updated some commands with support for randomization. Provided itemID will be randomized based on provided rndValue: /js/commands/targeting/add.js: 'add itemID rndValue cmdtable.cpp and targeting.cpp: 'tile itemID rndValue 'tile itemID x1 x2 y1 y2 z rndValue Updated js/commands/custom/repeatingcmds.js to support 'm delete as an alias for 'rremove Added 'props as an alias for the 'tweak command Added 'teleport as an alias for the 'tele command (js/commands/targeting/tele.js) Added 'shavehair and 'shavebeard as aliases for 'kill hair and 'kill beard (js/commands/targeting/kill.js) Added 'noinvul and 'mortal aliases for the 'invul false command (js/commands/custom/misc-cmds.js) Added 'immortal and 'invul (without parameter) as aliases for the 'invul true command Added 'bringtopack as an alias of 'movetobag command (js/commands/targeting/movetobag.js) Updated check for cancelling of target cursor in various JS scripts Minor updates to various JS scripts Fixed issue where some item definitions in dfndata/harditems/harditems.dfn and dfndata/items/building/lighting.dfn used comma instead of space as delimiter for the VALUE tag, which thus never got applied Updated all NPC definitions to let NPCs spawn facing in random directions
2021-03-22 05:59:20 +08:00
*vp = JSVAL_NULL;
}
Housing Revamp and more Updated JS SysMessage function to accept up to 10 extra, optional arguments, which can be used with dictionary messages that require additional parameters like %s or %i Added new type of house privilege in cMultiObj.cpp to keep track of friends of the multi - HOUSEPRIV_FRIEND - which is stored during worldsaves as one or more Friend=<player serial> tags in house.wsc Added new type of house privilege in cMultiObj.cpp to keep track of guests of the multi - HOUSEPRIV_GUEST - which is stored during worldsaves as one or more Guest=<player serial> tags in house.wsc When items are created for houses upon house placement, a reference to the multi's serial is now stored in the house sign's MORE property to allow easier tracking of which house a particular sign belongs to Added tracking of new, persistent properties for houses via cMultiObj.cpp/h: lockdowns, secure containers, vendors, guests, friends, owners, ban location, public status, number of visits, timestamps Added a multitude of new methods in cMultiObj.cpp/h to assist in improving the functionality of houses Added new tags for houses in house.dfn (default values applied if tag not specified): MAXSECURECONTAINERS=4 - Max amount of secure containers allowed in a multi MAXLOCKDOWNS=256 - Max amount of lockdowns allowed in a multi MAXVENDORS=10 - Max amount of vendors allowed in a multi MAXBANS=50 - Max amount of bans in a multi's ban list MAXFRIENDS=50 - Max amount of friends in a multi's friend list MAXGUESTS=50 - Max amount of guests in a multi's guest list MAXOWNERS=8 - Max amount of owners and co-owners in a multi's owner list MAXTRASHCONTAINERS=1 - Max amount of trash containers allowed in multi SCRIPT=<scriptID> - Assign a JS script-ID directly to a multi FRONTDOOR - indicates that a door is the front door of a house. Cannot be locked in public houses! INTERIORDOOR - indicates that a door is an interior door of a house. Can be locked in public houses. BANX - Location X offset for multi's ban location, if not used, will try to use SE corner of multi instead BANY - Location Y offset for multi's ban location, if not used, will try to use SE corner of multi instead Added JS Event: onHouseCommand( tSock, multiObj, cmdID ) - For handling spoken house commands via JS scripts attached to multi. Updated JS Events: onEntrance() - can now trigger both for multi being entered and/or object entering onLeaving() - can now trigger both for multi being left and/or object entering onSpeech() - can now also trigger for items (in addition to chars) with event & script attached, if UOX.INI setting ITEMSDETECTSPEECH is enabled Added JS Multi methods: .IsBoat() - Returns whether the item (or multi) is a boat .IsOwner( playerToCheck ) - Returns whether a player is the owner of a multi .IsOnOwnerList( playerToCheck ) - Returns whether a player is on the (co-)owner list of a multi .IsOnFriendList( playerToCheck ) - Returns whether a player is on the friend list of a multi .IsOnGuestList( playerToCheck ) - Returns whether a player is on the guest list of a multi .IsOnBanList( playerToCheck ) - Returns whether a player is on the ban list of a multi .AddToFriendList( playertoAdd ) - Adds player to the friend list of a multi .RemoveFromFriendList( playertoRemove ) - Removes player from the friend list of a multi .AddToGuestList( playertoAdd ) - Adds player to the guest list of a multi .RemoveFromGuestList( playertoRemove ) - Removes player from the guest list of a multi .ClearOwnerList() - Clears all entries from a multi's (co-)owner list .ClearFriendList() - Clears all entries from a multi's friend list .ClearGuestList() - Clears all entries from a multi's guest list .ClearBanList() - Clears all entries from a multi's ban list .SecureContainer( itemToSecure ) - Secures a container in a multi .UnsecureContainer( itemToUnsecure ) - Unsecures a container in a multi .IsSecureContainer( itemToCheck ) - Checks if specified item is a secure container in a multi .LockDownItem( itemToLockDown) - Locks down an item in a multi .ReleaseItem( itemToRelease ) - Releases a locked down item in a multi .KillKeys() - Deletes ALL keys associated with a multi .AddTrashCont( itemToAdd ) - Add trash container to multi's list of trash containers .RemoveTrashCont( itemToRemove ) - Remove trash container from multi's list of trash containers Added JS Item (Multi only) properties: .lockdowns - Get the number of lockdowns in a multi .maxLockdowns - Get/Set the max number of lockdowns allowed in a multi .secureContainers - Get the number of secure containers in a multi .maxSecureContainers - Get/Set the max number of secure containers allowed in a multi .trashContainers - Get the number of trash containers in a multi .maxTrashContainers - Get/Set the max number of trash containers allowed in a multi .friends - Get the number of friends in a multi's friend list .maxFriends - Get/Set the max number of friends allowed in a multi's friend list .guests - Get the number of guests in a multi's guest list .maxGuests - Get/Set the max number of guests allowed in a multi's guest list .owners - Get the number of owners in a multi's owner list .maxOwners - Get/Set the max number of owners allowed in a multi's owner list .bans - Get the number of banned players in a multi's ban list .maxBans - Get/Set the max number of banned players allowed in a multi's ban list .vendors - Get the number of player vendors in a multi .maxVendors - Get the max number of player vendors allowed in a multi .deed - Get the item sectionID for deed used to place multi .isPublic - Get/Set the private/public state of a multi .buildTimestamp - Get the timestamp for when the house was originally placed .tradeTimestamp - Get the timestamp for when the house was last traded to another player .banX - Get/Set the ban location X offset for the multi .banY - Get/Set the ban location Y offset for the multi Added JS Character properties: .multi = Get/Set the multi object the character is in .accountNum = Get the account number the character belongs to .housesOwned = Get a count of houses owned by the character .housesCoOwned = Get a count of houses co-owned by the character Updated JS cBaseObject Methods .FirstItem(), .NextItem() and .FinishedItems() to also support iterating through items in multis Updated JS multi Methods .FirstChar(), .NextChar() and .FinishedChars() to support an additional parameter to specify what kind of characters to loop through: "default" or no parameter - all characters inside the multi "owner" - players on multi's owner list "friend" - players on multi's friend list "guest" - players on multi's guest list "banned" - players on multi's ban list Added new INI tags to a new section of uox.ini called [houses] DECAYTIMERINHOUSE=3600 // Decay timer in seconds for non-locked down items inside houses PROTECTPRIVATEHOUSES=1 // Toggles whether private houses will automatically boot unauthorized visitors (1) or not (0) TRACKHOUSESPERACCOUNT=1 // Toggles whether to track (and restrict) house ownership per account (1) or per character (0) MAXHOUSESOWNABLE=1 // Specifies the max amount of houses a player can own per account/char, depending on how house ownership is tracked MAXHOUSESCOOWNABLE=10 // Specifies the max amount of houses a player can co-own per character CANOWNANDCOOWNHOUSES=1 // Toggles whether players can own and co-own houses at the same time COOWNHOUSESONSAMEACCOUNT=1 // Toggles whether characters on same account as house owner will be treated as co-owners Added new INI tags in [settings] section of uox.ini: ITEMSDETECTSPEECH=0 // If enabled, server will search for nearby items with onSpeech JS event running whenever a character speaks. Disabled by default. MAXPLAYERPACKITEMS=125 // Defines max item capacity for player (and NPC) backpacks. Defaults to 125. Moved most of the existing house functionality to JS and expanded upon it to reach feature parity with houses in regular UO around Publish 15/16, with various extras thrown in for good measure and all functionality being customizable: js/server/house/house.js (15000) - handles detection of house commands and characters entering/leaving houses js/server/house/houseSign.js (15001) - contains and handles all house-related gumps/menus and what is shown when players interact with house sign js/server/house/houseCommands.js (15002) - handles functionality of house commands and other functionality such as transfer of ownership, demolishing house, etc. js/server/house/houseDeed.js (15003) - handles initial rules that allow/disallow placement of additional houses for players All house-related menus now fully handled through JS All house commands and other functionality now fully handled through JS Removed redundant hard-coded house functionality Implemented Co-owners, friends, guests for houses, with access rules in place for entry, lockdowns, house commands, etc. Implemented Private and Public houses Implemented Secure Containers and Trash Barrels Definable max lockdowns, secure containers, player vendors, bans, friends, guests, owners, trash containers and more - per house type JS scripts can now be attached directly to houses Doors in houses can be marked as front doors or interior doors, and will be treated differently with regards to private and public houses Added new item to dfndata/items/containers/misc.dfn - [trashbarrel] Added new JS script (js/items/trashbarrel.js) with trash barrel functionality for houses. Trash barrels that are marked as secure containers are only accessible by owners, co-owners and friends of the house. Various options available at top of script. Updated js/items/axe.js to support chopping up trash barrels and house add-ons in houses owned by the player Fixed an issue with house doors being left behind after demolishing houses while their doors were open Fixed an issue where GMs could be banned from player houses Added Line of Sight checks to speech, to give players some privacy in their own homes Updated house placement code to more accurately check for other multis, dynamic and static objects when placing houses; now requires free space around each house that cannot be blocked by other houses or items that can block player movement, and disallows placement of houses on roads Updated house placement code to move characters blocking house placement to SE corner of the house Updated house placement code to disallow placing houses in guarded regions, or in dungeons Added new DFN tag for regions to enable/disable player houses in specific regions: HOUSING=0/1 Added new region (247) that covers path to Valley of Eodon in Felucca Added new region (248) that covers Valley of Eodon in Ter-Mur, with player housing disabled Added new region (249) that covers entire T2A lands, with player housing disabled Updated SPACEX and SPACEY values for all houses in dfndata/house/house.dfn to match updated house placement code Added new JS property to Regions that can be used to determine or change state of player housing in a region: .canPlaceHouse() Updated rules for usage of dye tubs to dye locked down items; now only house owners or co-owners may dye locked down items Updated rules for usage of the following locked down items in a house, which are now only usable by house owners and co-owners Dyes, Guildstone Deeds, Recall Runes (renaming), Rename Deeds, Townstone Deeds, House Deeds, Boat Models, Player Vendor Deeds, Ore, Hair Dye Updated rules for usage of the following locked down items in a house, which are now only usable by house owners, co-owners and friends: Keys, Dye Tubs, Magic Scrolls, Fireworks Wands, Magic Wands, Smithing Tools, Mining Tools, Fishing Poles Updated item lockdown rules to allow locking down (and releasing) items in a container as long as the container is locked down, and to only allow releasing a locked down container if it's empty of locked down items Updated item lockdown rules to only allow locking down movement-blocking items further than 2 tiles away from doors Updated rules for releasing items in houses - now the house owner can release any locked down items, co-owners can release items locked down by themselves or by friends, while friends can release only items locked down by themselves Added some feedback to player about why their attempted house placement failed Items added by GMs directly into multis will now decay based on the house-specific decay timer instead of the regular one Fixed an issue that could cause items to almost instantly decay after being released from lockdown in a house Placing house add-ons now properly takes into account SPACEX and SPACEY values when checking if they can fit in selected area of houses Re-added SPACEX and SPACEY values for Pentagram and Loom house add-ons House add-ons can now be converted back into house add-on deeds by chopping them with an axe Added new item type - IT_HOUSEADDON (201) - used by house add-ons placed in player houses Fixed a bug where keys would stop working after being added to a keyring, and would turn into blank keys upon release from the keyring Added visitor count for public player houses, which keeps track of how many visits a public house has received, with each player counted max 1 time every 24 hours Fixed an issue with FindPlayersInOldVisrange() where it didn't take into account that players could see buildings further away than the standard update range. This could cause players to see ghost images of buildings if they were at the "right" distance when the building was being demolished Added NODECAY tag to all signs and doors in dfndata/house/house.dfn Added FRONTDOOR or INTERIORDOOR (as appropriate) to all doors in dfndata/house/house.dfn Added BANX and BANY to specify ban location for some houses in dfndata/house/house.dfn instead of relying on finding SE corner automatically Implemented strongboxes (js/server/house/strongbox.js) for co-owners of a house, which can be placed with the house command "i wish to place a strongbox". Max capacity is 25 items Updated 'REMOVE command to take an optional parameter - itemID. If supplied, the command will remove all items with this itemID from a targeted container Fixed a bug when checking if dynamic items were blocking valid spawn locations for NPCs, some function arguments were in the wrong order! Improved code that finds valid spawn locations for items and NPCs spawned via spawn regions. As server gradually builds up lists of valid spawn locations per region over time, it will start using these lists more often, rather than always look for brand new spawn locations. Fixed a bug with CMulHandler::CheckStaticFlag() that prevented NPCs from spawning inside buildings with no static floors! Fixed an issue with repeating commands that prevented GMs from being able to cancel them when using the ClassicUO client Exposed character property .accountNum to JS engine Extended CDataList class to include a Clear() method for clearing lists Updated JS File method .Open() to support an optional, third argument - subFolderName - that defines in which sub-folder of UOX3/shared/ to store/look for a file. If no third argument is supplied, UOX3 will default to using the shared folder itself. Updated JS File method .Length() to return a value of -1 for files that don't exist Added new code function, exposed to JS engine with same parameters, which simply checks if a given tile ID has a specific flag bool CheckTileFlag( UI16 itemID, TILEFLAG flagToCheck ) Added JS function used to find the root container of an item (if any) FindRootContainer( itemSerial ) FindRootContainer( item ) Added new JS function that allows deleting files from UOX3/shared/ folder or subfolders of shared folder. If no subFolderName is provided, looks for file directly in shared folder itself. Restrictions on file- and folder-names apply. bool DeleteFile( fileName, subFolderName ) Added new JS functions for checking if a specific client or server feature is enabled. See documentation for full list of client/server features. GetClientFeature( bitNum ) // Returns true if specified client feature is enabled on server GetServerFeature( bitNum ) // Returns true if specified server feature is enabled on server Added new JS function for returning the value of almost any server setting from UOX.INI GetServerSetting( settingNameInDoubleQuotes ) Updated JS function DoesDynamicBlock() with two new parameters - checkOnlyMultis and checkOnlyNonMultis Updated JS function DoesMapBlock() with two new parameters - checkMultiPlacement and checkForRoad Fixed an issue where a LoS check would prevent players from accessing containers in their own backpack Added new functions in findfuncs.cpp to make it easier to find items near another object or location: findNearbyItems( object, distance ) findNearbyItems( x, y, worldNumber, instanceID, distance ) Added new Item property - maxItems - used by containers to determine their max item capacity Added new Item property - totalItemCount - used to get total item count in a container (including sub-containers) Added check for max item capacity when creating new items that are added to a character's backpack - items will be created below character's feet if backpack is full! Added new DFN tag for items, used by containers to determine item capacity for a given container: MAXITEMS=# // 125 is the default for all containers if not set Added new JS Item properties: .maxItems // gets/sets item capacity for a given container .totalItemCount // gets total item count in a container, including sub-containers Updated item tooltips for containers to show accurate total item count, as well as to display max item capacity Fixed a bug where picking up items from a non-locked down pile of items on the floor inside a multi could cause the remaining pile to be seen as no longer inside the multi, disallowing locking it back down and causing it to decay based on regular decay timer instead of house-specific one Updated JS command set to allow setting poison-level on items ('set poison #) and hunger-level on characters ('set hunger #) Fixed an issue with js/item/food.js that prevented poisoned food from poisoning characters when eaten Fixed an issue with js/skill/poisoning.js that prevented players from poisoning food! Updated various JS scripts and hardcoded targeting functions to disallow the targeting of locked down resources using skills and tools Updated JS Method TextMessage() to support three extra, optional parameters. Note that if one optional parameter is included, all preceding optional parameters are also required! speechTarget - What kind of target is this message intended for? 0 - Only visible for sender and receiver of message 1 - Visible to all players in range 2 - Visible to all NPCs and players in range 3 - Visible to all PCs everywhere + NPCs in range 4 - Visible to all PCs everywhere (broadcast) 5 - Only visible for the receiver of the message speechTargetSerial - The serial of the receiver of the message, used if speechTarget is 0 or 5 speechFontType - The type of font to display the text in. Defaults to normal. 0 - Bold 1 - Normal with shadow 2 - Bold with shadow 3 - Normal 4 - Gothic 5 - Italic 6 - Small, dark 7 - Colourful 8 - Runic (only works with CAPS) 9 - Small, light Added timestamp to worldsaves in console, to make it easier to see when a particular world-save was done Added info about compiler/environment displayed at the top of the UOX3 console during startup Updated dictionary files with new messages primarily related to housing
2020-11-04 02:00:37 +08:00
break;
case CIP_MAXVENDORS:
if( gPriv->GetObjType() == OT_MULTI )
{
*vp = INT_TO_JSVAL(( static_cast<CMultiObj *>( gPriv )->GetMaxVendors() ));
}
0.99.4d Added new option in UOX.INI under [settings] section: MAPDIFFSENABLED=0/1 // If enabled, server will attempt to load diff files, and send "Enable Map-diff files" packet to client to also load these. Disabled by default. Server no longer loads map/statics diff files by default, nor does it send packet to client to request loading these files, as only client versions below 7.0.8.2 will actively load these files. Can be re-enabled with new UOX.INI setting mentioned above! Fixed incorrect ID for gargish dagger in CHandleCombat::getWeaponType() Added missing weapon entries in CHandleCombat::getWeaponType(): bladed whip, barbed whip, spiked whip, gargish talwar Fixed an issue that would show the end part of some tiledata names as garbled text instead of cutting off the text(!) at 20 characters Fixed an issue with advanced character creation template when using ClassicUO client, which sends a profession value of 255 instead of 0 when no profession template has been selected. Fixed an issue where clones of NPCs that can split in combat didn't get the NPC flag correctly set Guild titles are now removed for players who leave their guilds Enabled closing some hard-coded gump menus using right-click (howto, guild, towns, wholist, addmenu, craftmenu, info) Fixed an issue where adding base items using 'add [itemID] would sometimes get false positive hits from harditems.dfn, depending on the length of the itemID Fixed an issue where items added using 'add [itemID] would not get names applied properly from harditems.dfn Item/NPC DFN tag GET can now inherit a random parent by adding additional values separated by spaces. Syntax: GET=parent1 parent2 parent3 (etc) Fixed an issue where NPC backpacks would not have the max item capacity set properly Added new properties for CItem objects (also exposed as JS Item Properties): maxRange // max distance a ranged weapon can fire at (replaces ARCHERRANGE ini setting) baseRange // base distance throwing weapons (when implemented) can be used at Added support for new Item DFN tag that replaces global UOX.INI setting ARCHERRANGE: MAXRANGE=# // Specifies max range of ranged weapon Added support for new Item/NPC DFN tags to support randomizing elemental resistances: RESISTFIRE=#/# # // Set NPC's poison resistance; fixed or random value RESISTCOLD=#/# # // Set NPC's poison resistance; fixed or random value RESISTLIGHTNING=#/# # // Set NPC's poison resistance; fixed or random value RESISTPOISON=#/# # // Set NPC's poison resistance; fixed or random value Added support for two new DFN tags in dfndata/race/races.dfn that can be used to allow/ban lists of equipment for specific races ALLOWEQUIPLIST=# BANEQUIPLIST=# Added support for new section in dfndata/race/races.dfn - [EQUIPLIST #], which can be used to define lists of equipment that is whitelisted or banned for specific races. Fixed a bug that would report incorrect weight in tooltips for Item/NPC spawner objects ScriptSections are now reapplied for items bought by players from NPC vendors Fixed an issue where players could drop an item on the ground and other players would still see the item after it was picked up, because of a failed distance check vs old location coordinates (in pack) instead of vs current location on ground Fixed a bug with players being able to use last-target macro to target objects picked up and held by other players on their cursor Updated all references to "devinelock" to be "divinelock" instead - this includes the name of the JS Item property Fixed house commands triggering (useless) targeting cursors for players onboard boats Changed default statcap in UOX.INI from 325 to 225 Fixed a out-of-range error for players attempting to combine ore inside their own backpack Fixed various issues with distance checks and container checks when using/target objects Added optional 4th "hue" parameter to AddGump JS method Added JS Function to get total amount of accounts on server - GetAccountCount() Added JS Function to get total amount of players online - GetPlayerCount() onSwing JS Event can now trigger in scripts attached to items, not just items attached to characters Added some JS Functions to expose some hard-coded constants to JS scripts: BASEITEMSERIAL() // Base item serial INVALIDSERIAL() // Invalid serial INVALIDID() // Invalid ID INVALIDCOLOUR() // Invalid colour Fixed an issue where JS character property .colour would modify origSkin property instead of colour Fixed an issue where JS character property .guildTitle returned the name of the character instead of the guild title Character JS property .poison can now also be used to set a character's poisoned level, not just read it Exposed Item property to JS engine: .ac // armour class for item (0-128). Primarily used for setting race-restrictions for equippable items, i.e. race X cannot equip items of armour class Y. .def // defensive value of item (Physical resistance post-AoS, AR in older UO) // NOTE: The following properties don't actually do anything yet, but can still be used in custom JS scripts if desired .resistCold // Cold resistance of item 0-1000, where 1000 equals 100.0% .resistHeat // Heat/Fire resistance of item 0-1000, where 1000 equals 100.0% .resistLight // Light resistance of item 0-1000, where 1000 equals 100.0% .resistLightning // Energy/Lightning resistance of item 0-1000, where 1000 equals 100.0% .resistPoison // Poison resistance of item 0-1000, where 1000 equals 100.0% .resistRain // Rain resistance of item 0-1000, where 1000 equals 100.0% .resistSnow // Snow resistance of item 0-1000, where 1000 equals 100.0% .damageHeat // Weapon deals Heat/Fire elemental damage (true/false) .damageCold // Weapon deals Cold elemental damage (true/false) .damageLight // Weapon deals Light elemental damage (true/false) .damageLightning // Weapon deals Lightning elemental damage (true/false) .damagePoison // Weapon deals Poison elemental damage (true/false) .damageRain // Weapon deals Rain/Water elemental damage (true/false) .damageSnow // Weapon deals Snow/Ice elemental damage (true/false) Added new UOX.INI setting under [server] to enable/disable shard response to ConnectUO server polling (disabled by default) Sub-commands are no longer included when registering packets to be overloaded via RegisterPacket function, as that part was never fully implemented. Packet-hook scripts can be setup for specific packet IDs, but any sub-command checking will need to be done in the script itself JS Packet Method GetDWord() now uses JS_NewNumberValue instead of INT_TO_JSVAL to read from the socket buffer, to better handle large numbers, which could previously be returned with wrong values. JS Function CalcItemFromSer() now uses a JS_GetStringBytes() and str_value() combo instead of JSVAL_TO_INT() to read the data provided in the function argument. This allows JS scripts to provide item serials to the function directly without needing to split it into four parts first (though that still works) Fixed issue where JS properties for multis didn't always return correct values The 'set command can now be used to set the armour class of items ('set ac #) Reimplemented 'tweak command in JS engine (js/commands/targeting/tweak.js) - can be used to view and modify properties of characters, character skills, items, multis and regions (target ground) Added placeholder packet-hook script (js/server/network/0xf1_connectUoServerPoll.js) to handle responses to ConnectUO server polling. By default this script does nothing, but serves as a placeholder for drop-in replacement scripts generated specifically for each shard by the ConnectUO service. Updated some commands to support an alternate STATIC keyword (can also be ommitted) to add base items: 'add static itemID 'tile static itemID Updated some commands with support for randomization. Provided itemID will be randomized based on provided rndValue: /js/commands/targeting/add.js: 'add itemID rndValue cmdtable.cpp and targeting.cpp: 'tile itemID rndValue 'tile itemID x1 x2 y1 y2 z rndValue Updated js/commands/custom/repeatingcmds.js to support 'm delete as an alias for 'rremove Added 'props as an alias for the 'tweak command Added 'teleport as an alias for the 'tele command (js/commands/targeting/tele.js) Added 'shavehair and 'shavebeard as aliases for 'kill hair and 'kill beard (js/commands/targeting/kill.js) Added 'noinvul and 'mortal aliases for the 'invul false command (js/commands/custom/misc-cmds.js) Added 'immortal and 'invul (without parameter) as aliases for the 'invul true command Added 'bringtopack as an alias of 'movetobag command (js/commands/targeting/movetobag.js) Updated check for cancelling of target cursor in various JS scripts Minor updates to various JS scripts Fixed issue where some item definitions in dfndata/harditems/harditems.dfn and dfndata/items/building/lighting.dfn used comma instead of space as delimiter for the VALUE tag, which thus never got applied Updated all NPC definitions to let NPCs spawn facing in random directions
2021-03-22 05:59:20 +08:00
else
{
0.99.4d Added new option in UOX.INI under [settings] section: MAPDIFFSENABLED=0/1 // If enabled, server will attempt to load diff files, and send "Enable Map-diff files" packet to client to also load these. Disabled by default. Server no longer loads map/statics diff files by default, nor does it send packet to client to request loading these files, as only client versions below 7.0.8.2 will actively load these files. Can be re-enabled with new UOX.INI setting mentioned above! Fixed incorrect ID for gargish dagger in CHandleCombat::getWeaponType() Added missing weapon entries in CHandleCombat::getWeaponType(): bladed whip, barbed whip, spiked whip, gargish talwar Fixed an issue that would show the end part of some tiledata names as garbled text instead of cutting off the text(!) at 20 characters Fixed an issue with advanced character creation template when using ClassicUO client, which sends a profession value of 255 instead of 0 when no profession template has been selected. Fixed an issue where clones of NPCs that can split in combat didn't get the NPC flag correctly set Guild titles are now removed for players who leave their guilds Enabled closing some hard-coded gump menus using right-click (howto, guild, towns, wholist, addmenu, craftmenu, info) Fixed an issue where adding base items using 'add [itemID] would sometimes get false positive hits from harditems.dfn, depending on the length of the itemID Fixed an issue where items added using 'add [itemID] would not get names applied properly from harditems.dfn Item/NPC DFN tag GET can now inherit a random parent by adding additional values separated by spaces. Syntax: GET=parent1 parent2 parent3 (etc) Fixed an issue where NPC backpacks would not have the max item capacity set properly Added new properties for CItem objects (also exposed as JS Item Properties): maxRange // max distance a ranged weapon can fire at (replaces ARCHERRANGE ini setting) baseRange // base distance throwing weapons (when implemented) can be used at Added support for new Item DFN tag that replaces global UOX.INI setting ARCHERRANGE: MAXRANGE=# // Specifies max range of ranged weapon Added support for new Item/NPC DFN tags to support randomizing elemental resistances: RESISTFIRE=#/# # // Set NPC's poison resistance; fixed or random value RESISTCOLD=#/# # // Set NPC's poison resistance; fixed or random value RESISTLIGHTNING=#/# # // Set NPC's poison resistance; fixed or random value RESISTPOISON=#/# # // Set NPC's poison resistance; fixed or random value Added support for two new DFN tags in dfndata/race/races.dfn that can be used to allow/ban lists of equipment for specific races ALLOWEQUIPLIST=# BANEQUIPLIST=# Added support for new section in dfndata/race/races.dfn - [EQUIPLIST #], which can be used to define lists of equipment that is whitelisted or banned for specific races. Fixed a bug that would report incorrect weight in tooltips for Item/NPC spawner objects ScriptSections are now reapplied for items bought by players from NPC vendors Fixed an issue where players could drop an item on the ground and other players would still see the item after it was picked up, because of a failed distance check vs old location coordinates (in pack) instead of vs current location on ground Fixed a bug with players being able to use last-target macro to target objects picked up and held by other players on their cursor Updated all references to "devinelock" to be "divinelock" instead - this includes the name of the JS Item property Fixed house commands triggering (useless) targeting cursors for players onboard boats Changed default statcap in UOX.INI from 325 to 225 Fixed a out-of-range error for players attempting to combine ore inside their own backpack Fixed various issues with distance checks and container checks when using/target objects Added optional 4th "hue" parameter to AddGump JS method Added JS Function to get total amount of accounts on server - GetAccountCount() Added JS Function to get total amount of players online - GetPlayerCount() onSwing JS Event can now trigger in scripts attached to items, not just items attached to characters Added some JS Functions to expose some hard-coded constants to JS scripts: BASEITEMSERIAL() // Base item serial INVALIDSERIAL() // Invalid serial INVALIDID() // Invalid ID INVALIDCOLOUR() // Invalid colour Fixed an issue where JS character property .colour would modify origSkin property instead of colour Fixed an issue where JS character property .guildTitle returned the name of the character instead of the guild title Character JS property .poison can now also be used to set a character's poisoned level, not just read it Exposed Item property to JS engine: .ac // armour class for item (0-128). Primarily used for setting race-restrictions for equippable items, i.e. race X cannot equip items of armour class Y. .def // defensive value of item (Physical resistance post-AoS, AR in older UO) // NOTE: The following properties don't actually do anything yet, but can still be used in custom JS scripts if desired .resistCold // Cold resistance of item 0-1000, where 1000 equals 100.0% .resistHeat // Heat/Fire resistance of item 0-1000, where 1000 equals 100.0% .resistLight // Light resistance of item 0-1000, where 1000 equals 100.0% .resistLightning // Energy/Lightning resistance of item 0-1000, where 1000 equals 100.0% .resistPoison // Poison resistance of item 0-1000, where 1000 equals 100.0% .resistRain // Rain resistance of item 0-1000, where 1000 equals 100.0% .resistSnow // Snow resistance of item 0-1000, where 1000 equals 100.0% .damageHeat // Weapon deals Heat/Fire elemental damage (true/false) .damageCold // Weapon deals Cold elemental damage (true/false) .damageLight // Weapon deals Light elemental damage (true/false) .damageLightning // Weapon deals Lightning elemental damage (true/false) .damagePoison // Weapon deals Poison elemental damage (true/false) .damageRain // Weapon deals Rain/Water elemental damage (true/false) .damageSnow // Weapon deals Snow/Ice elemental damage (true/false) Added new UOX.INI setting under [server] to enable/disable shard response to ConnectUO server polling (disabled by default) Sub-commands are no longer included when registering packets to be overloaded via RegisterPacket function, as that part was never fully implemented. Packet-hook scripts can be setup for specific packet IDs, but any sub-command checking will need to be done in the script itself JS Packet Method GetDWord() now uses JS_NewNumberValue instead of INT_TO_JSVAL to read from the socket buffer, to better handle large numbers, which could previously be returned with wrong values. JS Function CalcItemFromSer() now uses a JS_GetStringBytes() and str_value() combo instead of JSVAL_TO_INT() to read the data provided in the function argument. This allows JS scripts to provide item serials to the function directly without needing to split it into four parts first (though that still works) Fixed issue where JS properties for multis didn't always return correct values The 'set command can now be used to set the armour class of items ('set ac #) Reimplemented 'tweak command in JS engine (js/commands/targeting/tweak.js) - can be used to view and modify properties of characters, character skills, items, multis and regions (target ground) Added placeholder packet-hook script (js/server/network/0xf1_connectUoServerPoll.js) to handle responses to ConnectUO server polling. By default this script does nothing, but serves as a placeholder for drop-in replacement scripts generated specifically for each shard by the ConnectUO service. Updated some commands to support an alternate STATIC keyword (can also be ommitted) to add base items: 'add static itemID 'tile static itemID Updated some commands with support for randomization. Provided itemID will be randomized based on provided rndValue: /js/commands/targeting/add.js: 'add itemID rndValue cmdtable.cpp and targeting.cpp: 'tile itemID rndValue 'tile itemID x1 x2 y1 y2 z rndValue Updated js/commands/custom/repeatingcmds.js to support 'm delete as an alias for 'rremove Added 'props as an alias for the 'tweak command Added 'teleport as an alias for the 'tele command (js/commands/targeting/tele.js) Added 'shavehair and 'shavebeard as aliases for 'kill hair and 'kill beard (js/commands/targeting/kill.js) Added 'noinvul and 'mortal aliases for the 'invul false command (js/commands/custom/misc-cmds.js) Added 'immortal and 'invul (without parameter) as aliases for the 'invul true command Added 'bringtopack as an alias of 'movetobag command (js/commands/targeting/movetobag.js) Updated check for cancelling of target cursor in various JS scripts Minor updates to various JS scripts Fixed issue where some item definitions in dfndata/harditems/harditems.dfn and dfndata/items/building/lighting.dfn used comma instead of space as delimiter for the VALUE tag, which thus never got applied Updated all NPC definitions to let NPCs spawn facing in random directions
2021-03-22 05:59:20 +08:00
*vp = JSVAL_NULL;
}
Housing Revamp and more Updated JS SysMessage function to accept up to 10 extra, optional arguments, which can be used with dictionary messages that require additional parameters like %s or %i Added new type of house privilege in cMultiObj.cpp to keep track of friends of the multi - HOUSEPRIV_FRIEND - which is stored during worldsaves as one or more Friend=<player serial> tags in house.wsc Added new type of house privilege in cMultiObj.cpp to keep track of guests of the multi - HOUSEPRIV_GUEST - which is stored during worldsaves as one or more Guest=<player serial> tags in house.wsc When items are created for houses upon house placement, a reference to the multi's serial is now stored in the house sign's MORE property to allow easier tracking of which house a particular sign belongs to Added tracking of new, persistent properties for houses via cMultiObj.cpp/h: lockdowns, secure containers, vendors, guests, friends, owners, ban location, public status, number of visits, timestamps Added a multitude of new methods in cMultiObj.cpp/h to assist in improving the functionality of houses Added new tags for houses in house.dfn (default values applied if tag not specified): MAXSECURECONTAINERS=4 - Max amount of secure containers allowed in a multi MAXLOCKDOWNS=256 - Max amount of lockdowns allowed in a multi MAXVENDORS=10 - Max amount of vendors allowed in a multi MAXBANS=50 - Max amount of bans in a multi's ban list MAXFRIENDS=50 - Max amount of friends in a multi's friend list MAXGUESTS=50 - Max amount of guests in a multi's guest list MAXOWNERS=8 - Max amount of owners and co-owners in a multi's owner list MAXTRASHCONTAINERS=1 - Max amount of trash containers allowed in multi SCRIPT=<scriptID> - Assign a JS script-ID directly to a multi FRONTDOOR - indicates that a door is the front door of a house. Cannot be locked in public houses! INTERIORDOOR - indicates that a door is an interior door of a house. Can be locked in public houses. BANX - Location X offset for multi's ban location, if not used, will try to use SE corner of multi instead BANY - Location Y offset for multi's ban location, if not used, will try to use SE corner of multi instead Added JS Event: onHouseCommand( tSock, multiObj, cmdID ) - For handling spoken house commands via JS scripts attached to multi. Updated JS Events: onEntrance() - can now trigger both for multi being entered and/or object entering onLeaving() - can now trigger both for multi being left and/or object entering onSpeech() - can now also trigger for items (in addition to chars) with event & script attached, if UOX.INI setting ITEMSDETECTSPEECH is enabled Added JS Multi methods: .IsBoat() - Returns whether the item (or multi) is a boat .IsOwner( playerToCheck ) - Returns whether a player is the owner of a multi .IsOnOwnerList( playerToCheck ) - Returns whether a player is on the (co-)owner list of a multi .IsOnFriendList( playerToCheck ) - Returns whether a player is on the friend list of a multi .IsOnGuestList( playerToCheck ) - Returns whether a player is on the guest list of a multi .IsOnBanList( playerToCheck ) - Returns whether a player is on the ban list of a multi .AddToFriendList( playertoAdd ) - Adds player to the friend list of a multi .RemoveFromFriendList( playertoRemove ) - Removes player from the friend list of a multi .AddToGuestList( playertoAdd ) - Adds player to the guest list of a multi .RemoveFromGuestList( playertoRemove ) - Removes player from the guest list of a multi .ClearOwnerList() - Clears all entries from a multi's (co-)owner list .ClearFriendList() - Clears all entries from a multi's friend list .ClearGuestList() - Clears all entries from a multi's guest list .ClearBanList() - Clears all entries from a multi's ban list .SecureContainer( itemToSecure ) - Secures a container in a multi .UnsecureContainer( itemToUnsecure ) - Unsecures a container in a multi .IsSecureContainer( itemToCheck ) - Checks if specified item is a secure container in a multi .LockDownItem( itemToLockDown) - Locks down an item in a multi .ReleaseItem( itemToRelease ) - Releases a locked down item in a multi .KillKeys() - Deletes ALL keys associated with a multi .AddTrashCont( itemToAdd ) - Add trash container to multi's list of trash containers .RemoveTrashCont( itemToRemove ) - Remove trash container from multi's list of trash containers Added JS Item (Multi only) properties: .lockdowns - Get the number of lockdowns in a multi .maxLockdowns - Get/Set the max number of lockdowns allowed in a multi .secureContainers - Get the number of secure containers in a multi .maxSecureContainers - Get/Set the max number of secure containers allowed in a multi .trashContainers - Get the number of trash containers in a multi .maxTrashContainers - Get/Set the max number of trash containers allowed in a multi .friends - Get the number of friends in a multi's friend list .maxFriends - Get/Set the max number of friends allowed in a multi's friend list .guests - Get the number of guests in a multi's guest list .maxGuests - Get/Set the max number of guests allowed in a multi's guest list .owners - Get the number of owners in a multi's owner list .maxOwners - Get/Set the max number of owners allowed in a multi's owner list .bans - Get the number of banned players in a multi's ban list .maxBans - Get/Set the max number of banned players allowed in a multi's ban list .vendors - Get the number of player vendors in a multi .maxVendors - Get the max number of player vendors allowed in a multi .deed - Get the item sectionID for deed used to place multi .isPublic - Get/Set the private/public state of a multi .buildTimestamp - Get the timestamp for when the house was originally placed .tradeTimestamp - Get the timestamp for when the house was last traded to another player .banX - Get/Set the ban location X offset for the multi .banY - Get/Set the ban location Y offset for the multi Added JS Character properties: .multi = Get/Set the multi object the character is in .accountNum = Get the account number the character belongs to .housesOwned = Get a count of houses owned by the character .housesCoOwned = Get a count of houses co-owned by the character Updated JS cBaseObject Methods .FirstItem(), .NextItem() and .FinishedItems() to also support iterating through items in multis Updated JS multi Methods .FirstChar(), .NextChar() and .FinishedChars() to support an additional parameter to specify what kind of characters to loop through: "default" or no parameter - all characters inside the multi "owner" - players on multi's owner list "friend" - players on multi's friend list "guest" - players on multi's guest list "banned" - players on multi's ban list Added new INI tags to a new section of uox.ini called [houses] DECAYTIMERINHOUSE=3600 // Decay timer in seconds for non-locked down items inside houses PROTECTPRIVATEHOUSES=1 // Toggles whether private houses will automatically boot unauthorized visitors (1) or not (0) TRACKHOUSESPERACCOUNT=1 // Toggles whether to track (and restrict) house ownership per account (1) or per character (0) MAXHOUSESOWNABLE=1 // Specifies the max amount of houses a player can own per account/char, depending on how house ownership is tracked MAXHOUSESCOOWNABLE=10 // Specifies the max amount of houses a player can co-own per character CANOWNANDCOOWNHOUSES=1 // Toggles whether players can own and co-own houses at the same time COOWNHOUSESONSAMEACCOUNT=1 // Toggles whether characters on same account as house owner will be treated as co-owners Added new INI tags in [settings] section of uox.ini: ITEMSDETECTSPEECH=0 // If enabled, server will search for nearby items with onSpeech JS event running whenever a character speaks. Disabled by default. MAXPLAYERPACKITEMS=125 // Defines max item capacity for player (and NPC) backpacks. Defaults to 125. Moved most of the existing house functionality to JS and expanded upon it to reach feature parity with houses in regular UO around Publish 15/16, with various extras thrown in for good measure and all functionality being customizable: js/server/house/house.js (15000) - handles detection of house commands and characters entering/leaving houses js/server/house/houseSign.js (15001) - contains and handles all house-related gumps/menus and what is shown when players interact with house sign js/server/house/houseCommands.js (15002) - handles functionality of house commands and other functionality such as transfer of ownership, demolishing house, etc. js/server/house/houseDeed.js (15003) - handles initial rules that allow/disallow placement of additional houses for players All house-related menus now fully handled through JS All house commands and other functionality now fully handled through JS Removed redundant hard-coded house functionality Implemented Co-owners, friends, guests for houses, with access rules in place for entry, lockdowns, house commands, etc. Implemented Private and Public houses Implemented Secure Containers and Trash Barrels Definable max lockdowns, secure containers, player vendors, bans, friends, guests, owners, trash containers and more - per house type JS scripts can now be attached directly to houses Doors in houses can be marked as front doors or interior doors, and will be treated differently with regards to private and public houses Added new item to dfndata/items/containers/misc.dfn - [trashbarrel] Added new JS script (js/items/trashbarrel.js) with trash barrel functionality for houses. Trash barrels that are marked as secure containers are only accessible by owners, co-owners and friends of the house. Various options available at top of script. Updated js/items/axe.js to support chopping up trash barrels and house add-ons in houses owned by the player Fixed an issue with house doors being left behind after demolishing houses while their doors were open Fixed an issue where GMs could be banned from player houses Added Line of Sight checks to speech, to give players some privacy in their own homes Updated house placement code to more accurately check for other multis, dynamic and static objects when placing houses; now requires free space around each house that cannot be blocked by other houses or items that can block player movement, and disallows placement of houses on roads Updated house placement code to move characters blocking house placement to SE corner of the house Updated house placement code to disallow placing houses in guarded regions, or in dungeons Added new DFN tag for regions to enable/disable player houses in specific regions: HOUSING=0/1 Added new region (247) that covers path to Valley of Eodon in Felucca Added new region (248) that covers Valley of Eodon in Ter-Mur, with player housing disabled Added new region (249) that covers entire T2A lands, with player housing disabled Updated SPACEX and SPACEY values for all houses in dfndata/house/house.dfn to match updated house placement code Added new JS property to Regions that can be used to determine or change state of player housing in a region: .canPlaceHouse() Updated rules for usage of dye tubs to dye locked down items; now only house owners or co-owners may dye locked down items Updated rules for usage of the following locked down items in a house, which are now only usable by house owners and co-owners Dyes, Guildstone Deeds, Recall Runes (renaming), Rename Deeds, Townstone Deeds, House Deeds, Boat Models, Player Vendor Deeds, Ore, Hair Dye Updated rules for usage of the following locked down items in a house, which are now only usable by house owners, co-owners and friends: Keys, Dye Tubs, Magic Scrolls, Fireworks Wands, Magic Wands, Smithing Tools, Mining Tools, Fishing Poles Updated item lockdown rules to allow locking down (and releasing) items in a container as long as the container is locked down, and to only allow releasing a locked down container if it's empty of locked down items Updated item lockdown rules to only allow locking down movement-blocking items further than 2 tiles away from doors Updated rules for releasing items in houses - now the house owner can release any locked down items, co-owners can release items locked down by themselves or by friends, while friends can release only items locked down by themselves Added some feedback to player about why their attempted house placement failed Items added by GMs directly into multis will now decay based on the house-specific decay timer instead of the regular one Fixed an issue that could cause items to almost instantly decay after being released from lockdown in a house Placing house add-ons now properly takes into account SPACEX and SPACEY values when checking if they can fit in selected area of houses Re-added SPACEX and SPACEY values for Pentagram and Loom house add-ons House add-ons can now be converted back into house add-on deeds by chopping them with an axe Added new item type - IT_HOUSEADDON (201) - used by house add-ons placed in player houses Fixed a bug where keys would stop working after being added to a keyring, and would turn into blank keys upon release from the keyring Added visitor count for public player houses, which keeps track of how many visits a public house has received, with each player counted max 1 time every 24 hours Fixed an issue with FindPlayersInOldVisrange() where it didn't take into account that players could see buildings further away than the standard update range. This could cause players to see ghost images of buildings if they were at the "right" distance when the building was being demolished Added NODECAY tag to all signs and doors in dfndata/house/house.dfn Added FRONTDOOR or INTERIORDOOR (as appropriate) to all doors in dfndata/house/house.dfn Added BANX and BANY to specify ban location for some houses in dfndata/house/house.dfn instead of relying on finding SE corner automatically Implemented strongboxes (js/server/house/strongbox.js) for co-owners of a house, which can be placed with the house command "i wish to place a strongbox". Max capacity is 25 items Updated 'REMOVE command to take an optional parameter - itemID. If supplied, the command will remove all items with this itemID from a targeted container Fixed a bug when checking if dynamic items were blocking valid spawn locations for NPCs, some function arguments were in the wrong order! Improved code that finds valid spawn locations for items and NPCs spawned via spawn regions. As server gradually builds up lists of valid spawn locations per region over time, it will start using these lists more often, rather than always look for brand new spawn locations. Fixed a bug with CMulHandler::CheckStaticFlag() that prevented NPCs from spawning inside buildings with no static floors! Fixed an issue with repeating commands that prevented GMs from being able to cancel them when using the ClassicUO client Exposed character property .accountNum to JS engine Extended CDataList class to include a Clear() method for clearing lists Updated JS File method .Open() to support an optional, third argument - subFolderName - that defines in which sub-folder of UOX3/shared/ to store/look for a file. If no third argument is supplied, UOX3 will default to using the shared folder itself. Updated JS File method .Length() to return a value of -1 for files that don't exist Added new code function, exposed to JS engine with same parameters, which simply checks if a given tile ID has a specific flag bool CheckTileFlag( UI16 itemID, TILEFLAG flagToCheck ) Added JS function used to find the root container of an item (if any) FindRootContainer( itemSerial ) FindRootContainer( item ) Added new JS function that allows deleting files from UOX3/shared/ folder or subfolders of shared folder. If no subFolderName is provided, looks for file directly in shared folder itself. Restrictions on file- and folder-names apply. bool DeleteFile( fileName, subFolderName ) Added new JS functions for checking if a specific client or server feature is enabled. See documentation for full list of client/server features. GetClientFeature( bitNum ) // Returns true if specified client feature is enabled on server GetServerFeature( bitNum ) // Returns true if specified server feature is enabled on server Added new JS function for returning the value of almost any server setting from UOX.INI GetServerSetting( settingNameInDoubleQuotes ) Updated JS function DoesDynamicBlock() with two new parameters - checkOnlyMultis and checkOnlyNonMultis Updated JS function DoesMapBlock() with two new parameters - checkMultiPlacement and checkForRoad Fixed an issue where a LoS check would prevent players from accessing containers in their own backpack Added new functions in findfuncs.cpp to make it easier to find items near another object or location: findNearbyItems( object, distance ) findNearbyItems( x, y, worldNumber, instanceID, distance ) Added new Item property - maxItems - used by containers to determine their max item capacity Added new Item property - totalItemCount - used to get total item count in a container (including sub-containers) Added check for max item capacity when creating new items that are added to a character's backpack - items will be created below character's feet if backpack is full! Added new DFN tag for items, used by containers to determine item capacity for a given container: MAXITEMS=# // 125 is the default for all containers if not set Added new JS Item properties: .maxItems // gets/sets item capacity for a given container .totalItemCount // gets total item count in a container, including sub-containers Updated item tooltips for containers to show accurate total item count, as well as to display max item capacity Fixed a bug where picking up items from a non-locked down pile of items on the floor inside a multi could cause the remaining pile to be seen as no longer inside the multi, disallowing locking it back down and causing it to decay based on regular decay timer instead of house-specific one Updated JS command set to allow setting poison-level on items ('set poison #) and hunger-level on characters ('set hunger #) Fixed an issue with js/item/food.js that prevented poisoned food from poisoning characters when eaten Fixed an issue with js/skill/poisoning.js that prevented players from poisoning food! Updated various JS scripts and hardcoded targeting functions to disallow the targeting of locked down resources using skills and tools Updated JS Method TextMessage() to support three extra, optional parameters. Note that if one optional parameter is included, all preceding optional parameters are also required! speechTarget - What kind of target is this message intended for? 0 - Only visible for sender and receiver of message 1 - Visible to all players in range 2 - Visible to all NPCs and players in range 3 - Visible to all PCs everywhere + NPCs in range 4 - Visible to all PCs everywhere (broadcast) 5 - Only visible for the receiver of the message speechTargetSerial - The serial of the receiver of the message, used if speechTarget is 0 or 5 speechFontType - The type of font to display the text in. Defaults to normal. 0 - Bold 1 - Normal with shadow 2 - Bold with shadow 3 - Normal 4 - Gothic 5 - Italic 6 - Small, dark 7 - Colourful 8 - Runic (only works with CAPS) 9 - Small, light Added timestamp to worldsaves in console, to make it easier to see when a particular world-save was done Added info about compiler/environment displayed at the top of the UOX3 console during startup Updated dictionary files with new messages primarily related to housing
2020-11-04 02:00:37 +08:00
break;
case CIP_DEED:
if( gPriv->GetObjType() == OT_MULTI )
{
tString = JS_NewStringCopyZ( cx, ( static_cast<CMultiObj *>( gPriv ))->GetDeed().c_str() );
Housing Revamp and more Updated JS SysMessage function to accept up to 10 extra, optional arguments, which can be used with dictionary messages that require additional parameters like %s or %i Added new type of house privilege in cMultiObj.cpp to keep track of friends of the multi - HOUSEPRIV_FRIEND - which is stored during worldsaves as one or more Friend=<player serial> tags in house.wsc Added new type of house privilege in cMultiObj.cpp to keep track of guests of the multi - HOUSEPRIV_GUEST - which is stored during worldsaves as one or more Guest=<player serial> tags in house.wsc When items are created for houses upon house placement, a reference to the multi's serial is now stored in the house sign's MORE property to allow easier tracking of which house a particular sign belongs to Added tracking of new, persistent properties for houses via cMultiObj.cpp/h: lockdowns, secure containers, vendors, guests, friends, owners, ban location, public status, number of visits, timestamps Added a multitude of new methods in cMultiObj.cpp/h to assist in improving the functionality of houses Added new tags for houses in house.dfn (default values applied if tag not specified): MAXSECURECONTAINERS=4 - Max amount of secure containers allowed in a multi MAXLOCKDOWNS=256 - Max amount of lockdowns allowed in a multi MAXVENDORS=10 - Max amount of vendors allowed in a multi MAXBANS=50 - Max amount of bans in a multi's ban list MAXFRIENDS=50 - Max amount of friends in a multi's friend list MAXGUESTS=50 - Max amount of guests in a multi's guest list MAXOWNERS=8 - Max amount of owners and co-owners in a multi's owner list MAXTRASHCONTAINERS=1 - Max amount of trash containers allowed in multi SCRIPT=<scriptID> - Assign a JS script-ID directly to a multi FRONTDOOR - indicates that a door is the front door of a house. Cannot be locked in public houses! INTERIORDOOR - indicates that a door is an interior door of a house. Can be locked in public houses. BANX - Location X offset for multi's ban location, if not used, will try to use SE corner of multi instead BANY - Location Y offset for multi's ban location, if not used, will try to use SE corner of multi instead Added JS Event: onHouseCommand( tSock, multiObj, cmdID ) - For handling spoken house commands via JS scripts attached to multi. Updated JS Events: onEntrance() - can now trigger both for multi being entered and/or object entering onLeaving() - can now trigger both for multi being left and/or object entering onSpeech() - can now also trigger for items (in addition to chars) with event & script attached, if UOX.INI setting ITEMSDETECTSPEECH is enabled Added JS Multi methods: .IsBoat() - Returns whether the item (or multi) is a boat .IsOwner( playerToCheck ) - Returns whether a player is the owner of a multi .IsOnOwnerList( playerToCheck ) - Returns whether a player is on the (co-)owner list of a multi .IsOnFriendList( playerToCheck ) - Returns whether a player is on the friend list of a multi .IsOnGuestList( playerToCheck ) - Returns whether a player is on the guest list of a multi .IsOnBanList( playerToCheck ) - Returns whether a player is on the ban list of a multi .AddToFriendList( playertoAdd ) - Adds player to the friend list of a multi .RemoveFromFriendList( playertoRemove ) - Removes player from the friend list of a multi .AddToGuestList( playertoAdd ) - Adds player to the guest list of a multi .RemoveFromGuestList( playertoRemove ) - Removes player from the guest list of a multi .ClearOwnerList() - Clears all entries from a multi's (co-)owner list .ClearFriendList() - Clears all entries from a multi's friend list .ClearGuestList() - Clears all entries from a multi's guest list .ClearBanList() - Clears all entries from a multi's ban list .SecureContainer( itemToSecure ) - Secures a container in a multi .UnsecureContainer( itemToUnsecure ) - Unsecures a container in a multi .IsSecureContainer( itemToCheck ) - Checks if specified item is a secure container in a multi .LockDownItem( itemToLockDown) - Locks down an item in a multi .ReleaseItem( itemToRelease ) - Releases a locked down item in a multi .KillKeys() - Deletes ALL keys associated with a multi .AddTrashCont( itemToAdd ) - Add trash container to multi's list of trash containers .RemoveTrashCont( itemToRemove ) - Remove trash container from multi's list of trash containers Added JS Item (Multi only) properties: .lockdowns - Get the number of lockdowns in a multi .maxLockdowns - Get/Set the max number of lockdowns allowed in a multi .secureContainers - Get the number of secure containers in a multi .maxSecureContainers - Get/Set the max number of secure containers allowed in a multi .trashContainers - Get the number of trash containers in a multi .maxTrashContainers - Get/Set the max number of trash containers allowed in a multi .friends - Get the number of friends in a multi's friend list .maxFriends - Get/Set the max number of friends allowed in a multi's friend list .guests - Get the number of guests in a multi's guest list .maxGuests - Get/Set the max number of guests allowed in a multi's guest list .owners - Get the number of owners in a multi's owner list .maxOwners - Get/Set the max number of owners allowed in a multi's owner list .bans - Get the number of banned players in a multi's ban list .maxBans - Get/Set the max number of banned players allowed in a multi's ban list .vendors - Get the number of player vendors in a multi .maxVendors - Get the max number of player vendors allowed in a multi .deed - Get the item sectionID for deed used to place multi .isPublic - Get/Set the private/public state of a multi .buildTimestamp - Get the timestamp for when the house was originally placed .tradeTimestamp - Get the timestamp for when the house was last traded to another player .banX - Get/Set the ban location X offset for the multi .banY - Get/Set the ban location Y offset for the multi Added JS Character properties: .multi = Get/Set the multi object the character is in .accountNum = Get the account number the character belongs to .housesOwned = Get a count of houses owned by the character .housesCoOwned = Get a count of houses co-owned by the character Updated JS cBaseObject Methods .FirstItem(), .NextItem() and .FinishedItems() to also support iterating through items in multis Updated JS multi Methods .FirstChar(), .NextChar() and .FinishedChars() to support an additional parameter to specify what kind of characters to loop through: "default" or no parameter - all characters inside the multi "owner" - players on multi's owner list "friend" - players on multi's friend list "guest" - players on multi's guest list "banned" - players on multi's ban list Added new INI tags to a new section of uox.ini called [houses] DECAYTIMERINHOUSE=3600 // Decay timer in seconds for non-locked down items inside houses PROTECTPRIVATEHOUSES=1 // Toggles whether private houses will automatically boot unauthorized visitors (1) or not (0) TRACKHOUSESPERACCOUNT=1 // Toggles whether to track (and restrict) house ownership per account (1) or per character (0) MAXHOUSESOWNABLE=1 // Specifies the max amount of houses a player can own per account/char, depending on how house ownership is tracked MAXHOUSESCOOWNABLE=10 // Specifies the max amount of houses a player can co-own per character CANOWNANDCOOWNHOUSES=1 // Toggles whether players can own and co-own houses at the same time COOWNHOUSESONSAMEACCOUNT=1 // Toggles whether characters on same account as house owner will be treated as co-owners Added new INI tags in [settings] section of uox.ini: ITEMSDETECTSPEECH=0 // If enabled, server will search for nearby items with onSpeech JS event running whenever a character speaks. Disabled by default. MAXPLAYERPACKITEMS=125 // Defines max item capacity for player (and NPC) backpacks. Defaults to 125. Moved most of the existing house functionality to JS and expanded upon it to reach feature parity with houses in regular UO around Publish 15/16, with various extras thrown in for good measure and all functionality being customizable: js/server/house/house.js (15000) - handles detection of house commands and characters entering/leaving houses js/server/house/houseSign.js (15001) - contains and handles all house-related gumps/menus and what is shown when players interact with house sign js/server/house/houseCommands.js (15002) - handles functionality of house commands and other functionality such as transfer of ownership, demolishing house, etc. js/server/house/houseDeed.js (15003) - handles initial rules that allow/disallow placement of additional houses for players All house-related menus now fully handled through JS All house commands and other functionality now fully handled through JS Removed redundant hard-coded house functionality Implemented Co-owners, friends, guests for houses, with access rules in place for entry, lockdowns, house commands, etc. Implemented Private and Public houses Implemented Secure Containers and Trash Barrels Definable max lockdowns, secure containers, player vendors, bans, friends, guests, owners, trash containers and more - per house type JS scripts can now be attached directly to houses Doors in houses can be marked as front doors or interior doors, and will be treated differently with regards to private and public houses Added new item to dfndata/items/containers/misc.dfn - [trashbarrel] Added new JS script (js/items/trashbarrel.js) with trash barrel functionality for houses. Trash barrels that are marked as secure containers are only accessible by owners, co-owners and friends of the house. Various options available at top of script. Updated js/items/axe.js to support chopping up trash barrels and house add-ons in houses owned by the player Fixed an issue with house doors being left behind after demolishing houses while their doors were open Fixed an issue where GMs could be banned from player houses Added Line of Sight checks to speech, to give players some privacy in their own homes Updated house placement code to more accurately check for other multis, dynamic and static objects when placing houses; now requires free space around each house that cannot be blocked by other houses or items that can block player movement, and disallows placement of houses on roads Updated house placement code to move characters blocking house placement to SE corner of the house Updated house placement code to disallow placing houses in guarded regions, or in dungeons Added new DFN tag for regions to enable/disable player houses in specific regions: HOUSING=0/1 Added new region (247) that covers path to Valley of Eodon in Felucca Added new region (248) that covers Valley of Eodon in Ter-Mur, with player housing disabled Added new region (249) that covers entire T2A lands, with player housing disabled Updated SPACEX and SPACEY values for all houses in dfndata/house/house.dfn to match updated house placement code Added new JS property to Regions that can be used to determine or change state of player housing in a region: .canPlaceHouse() Updated rules for usage of dye tubs to dye locked down items; now only house owners or co-owners may dye locked down items Updated rules for usage of the following locked down items in a house, which are now only usable by house owners and co-owners Dyes, Guildstone Deeds, Recall Runes (renaming), Rename Deeds, Townstone Deeds, House Deeds, Boat Models, Player Vendor Deeds, Ore, Hair Dye Updated rules for usage of the following locked down items in a house, which are now only usable by house owners, co-owners and friends: Keys, Dye Tubs, Magic Scrolls, Fireworks Wands, Magic Wands, Smithing Tools, Mining Tools, Fishing Poles Updated item lockdown rules to allow locking down (and releasing) items in a container as long as the container is locked down, and to only allow releasing a locked down container if it's empty of locked down items Updated item lockdown rules to only allow locking down movement-blocking items further than 2 tiles away from doors Updated rules for releasing items in houses - now the house owner can release any locked down items, co-owners can release items locked down by themselves or by friends, while friends can release only items locked down by themselves Added some feedback to player about why their attempted house placement failed Items added by GMs directly into multis will now decay based on the house-specific decay timer instead of the regular one Fixed an issue that could cause items to almost instantly decay after being released from lockdown in a house Placing house add-ons now properly takes into account SPACEX and SPACEY values when checking if they can fit in selected area of houses Re-added SPACEX and SPACEY values for Pentagram and Loom house add-ons House add-ons can now be converted back into house add-on deeds by chopping them with an axe Added new item type - IT_HOUSEADDON (201) - used by house add-ons placed in player houses Fixed a bug where keys would stop working after being added to a keyring, and would turn into blank keys upon release from the keyring Added visitor count for public player houses, which keeps track of how many visits a public house has received, with each player counted max 1 time every 24 hours Fixed an issue with FindPlayersInOldVisrange() where it didn't take into account that players could see buildings further away than the standard update range. This could cause players to see ghost images of buildings if they were at the "right" distance when the building was being demolished Added NODECAY tag to all signs and doors in dfndata/house/house.dfn Added FRONTDOOR or INTERIORDOOR (as appropriate) to all doors in dfndata/house/house.dfn Added BANX and BANY to specify ban location for some houses in dfndata/house/house.dfn instead of relying on finding SE corner automatically Implemented strongboxes (js/server/house/strongbox.js) for co-owners of a house, which can be placed with the house command "i wish to place a strongbox". Max capacity is 25 items Updated 'REMOVE command to take an optional parameter - itemID. If supplied, the command will remove all items with this itemID from a targeted container Fixed a bug when checking if dynamic items were blocking valid spawn locations for NPCs, some function arguments were in the wrong order! Improved code that finds valid spawn locations for items and NPCs spawned via spawn regions. As server gradually builds up lists of valid spawn locations per region over time, it will start using these lists more often, rather than always look for brand new spawn locations. Fixed a bug with CMulHandler::CheckStaticFlag() that prevented NPCs from spawning inside buildings with no static floors! Fixed an issue with repeating commands that prevented GMs from being able to cancel them when using the ClassicUO client Exposed character property .accountNum to JS engine Extended CDataList class to include a Clear() method for clearing lists Updated JS File method .Open() to support an optional, third argument - subFolderName - that defines in which sub-folder of UOX3/shared/ to store/look for a file. If no third argument is supplied, UOX3 will default to using the shared folder itself. Updated JS File method .Length() to return a value of -1 for files that don't exist Added new code function, exposed to JS engine with same parameters, which simply checks if a given tile ID has a specific flag bool CheckTileFlag( UI16 itemID, TILEFLAG flagToCheck ) Added JS function used to find the root container of an item (if any) FindRootContainer( itemSerial ) FindRootContainer( item ) Added new JS function that allows deleting files from UOX3/shared/ folder or subfolders of shared folder. If no subFolderName is provided, looks for file directly in shared folder itself. Restrictions on file- and folder-names apply. bool DeleteFile( fileName, subFolderName ) Added new JS functions for checking if a specific client or server feature is enabled. See documentation for full list of client/server features. GetClientFeature( bitNum ) // Returns true if specified client feature is enabled on server GetServerFeature( bitNum ) // Returns true if specified server feature is enabled on server Added new JS function for returning the value of almost any server setting from UOX.INI GetServerSetting( settingNameInDoubleQuotes ) Updated JS function DoesDynamicBlock() with two new parameters - checkOnlyMultis and checkOnlyNonMultis Updated JS function DoesMapBlock() with two new parameters - checkMultiPlacement and checkForRoad Fixed an issue where a LoS check would prevent players from accessing containers in their own backpack Added new functions in findfuncs.cpp to make it easier to find items near another object or location: findNearbyItems( object, distance ) findNearbyItems( x, y, worldNumber, instanceID, distance ) Added new Item property - maxItems - used by containers to determine their max item capacity Added new Item property - totalItemCount - used to get total item count in a container (including sub-containers) Added check for max item capacity when creating new items that are added to a character's backpack - items will be created below character's feet if backpack is full! Added new DFN tag for items, used by containers to determine item capacity for a given container: MAXITEMS=# // 125 is the default for all containers if not set Added new JS Item properties: .maxItems // gets/sets item capacity for a given container .totalItemCount // gets total item count in a container, including sub-containers Updated item tooltips for containers to show accurate total item count, as well as to display max item capacity Fixed a bug where picking up items from a non-locked down pile of items on the floor inside a multi could cause the remaining pile to be seen as no longer inside the multi, disallowing locking it back down and causing it to decay based on regular decay timer instead of house-specific one Updated JS command set to allow setting poison-level on items ('set poison #) and hunger-level on characters ('set hunger #) Fixed an issue with js/item/food.js that prevented poisoned food from poisoning characters when eaten Fixed an issue with js/skill/poisoning.js that prevented players from poisoning food! Updated various JS scripts and hardcoded targeting functions to disallow the targeting of locked down resources using skills and tools Updated JS Method TextMessage() to support three extra, optional parameters. Note that if one optional parameter is included, all preceding optional parameters are also required! speechTarget - What kind of target is this message intended for? 0 - Only visible for sender and receiver of message 1 - Visible to all players in range 2 - Visible to all NPCs and players in range 3 - Visible to all PCs everywhere + NPCs in range 4 - Visible to all PCs everywhere (broadcast) 5 - Only visible for the receiver of the message speechTargetSerial - The serial of the receiver of the message, used if speechTarget is 0 or 5 speechFontType - The type of font to display the text in. Defaults to normal. 0 - Bold 1 - Normal with shadow 2 - Bold with shadow 3 - Normal 4 - Gothic 5 - Italic 6 - Small, dark 7 - Colourful 8 - Runic (only works with CAPS) 9 - Small, light Added timestamp to worldsaves in console, to make it easier to see when a particular world-save was done Added info about compiler/environment displayed at the top of the UOX3 console during startup Updated dictionary files with new messages primarily related to housing
2020-11-04 02:00:37 +08:00
*vp = STRING_TO_JSVAL( tString );
}
0.99.4d Added new option in UOX.INI under [settings] section: MAPDIFFSENABLED=0/1 // If enabled, server will attempt to load diff files, and send "Enable Map-diff files" packet to client to also load these. Disabled by default. Server no longer loads map/statics diff files by default, nor does it send packet to client to request loading these files, as only client versions below 7.0.8.2 will actively load these files. Can be re-enabled with new UOX.INI setting mentioned above! Fixed incorrect ID for gargish dagger in CHandleCombat::getWeaponType() Added missing weapon entries in CHandleCombat::getWeaponType(): bladed whip, barbed whip, spiked whip, gargish talwar Fixed an issue that would show the end part of some tiledata names as garbled text instead of cutting off the text(!) at 20 characters Fixed an issue with advanced character creation template when using ClassicUO client, which sends a profession value of 255 instead of 0 when no profession template has been selected. Fixed an issue where clones of NPCs that can split in combat didn't get the NPC flag correctly set Guild titles are now removed for players who leave their guilds Enabled closing some hard-coded gump menus using right-click (howto, guild, towns, wholist, addmenu, craftmenu, info) Fixed an issue where adding base items using 'add [itemID] would sometimes get false positive hits from harditems.dfn, depending on the length of the itemID Fixed an issue where items added using 'add [itemID] would not get names applied properly from harditems.dfn Item/NPC DFN tag GET can now inherit a random parent by adding additional values separated by spaces. Syntax: GET=parent1 parent2 parent3 (etc) Fixed an issue where NPC backpacks would not have the max item capacity set properly Added new properties for CItem objects (also exposed as JS Item Properties): maxRange // max distance a ranged weapon can fire at (replaces ARCHERRANGE ini setting) baseRange // base distance throwing weapons (when implemented) can be used at Added support for new Item DFN tag that replaces global UOX.INI setting ARCHERRANGE: MAXRANGE=# // Specifies max range of ranged weapon Added support for new Item/NPC DFN tags to support randomizing elemental resistances: RESISTFIRE=#/# # // Set NPC's poison resistance; fixed or random value RESISTCOLD=#/# # // Set NPC's poison resistance; fixed or random value RESISTLIGHTNING=#/# # // Set NPC's poison resistance; fixed or random value RESISTPOISON=#/# # // Set NPC's poison resistance; fixed or random value Added support for two new DFN tags in dfndata/race/races.dfn that can be used to allow/ban lists of equipment for specific races ALLOWEQUIPLIST=# BANEQUIPLIST=# Added support for new section in dfndata/race/races.dfn - [EQUIPLIST #], which can be used to define lists of equipment that is whitelisted or banned for specific races. Fixed a bug that would report incorrect weight in tooltips for Item/NPC spawner objects ScriptSections are now reapplied for items bought by players from NPC vendors Fixed an issue where players could drop an item on the ground and other players would still see the item after it was picked up, because of a failed distance check vs old location coordinates (in pack) instead of vs current location on ground Fixed a bug with players being able to use last-target macro to target objects picked up and held by other players on their cursor Updated all references to "devinelock" to be "divinelock" instead - this includes the name of the JS Item property Fixed house commands triggering (useless) targeting cursors for players onboard boats Changed default statcap in UOX.INI from 325 to 225 Fixed a out-of-range error for players attempting to combine ore inside their own backpack Fixed various issues with distance checks and container checks when using/target objects Added optional 4th "hue" parameter to AddGump JS method Added JS Function to get total amount of accounts on server - GetAccountCount() Added JS Function to get total amount of players online - GetPlayerCount() onSwing JS Event can now trigger in scripts attached to items, not just items attached to characters Added some JS Functions to expose some hard-coded constants to JS scripts: BASEITEMSERIAL() // Base item serial INVALIDSERIAL() // Invalid serial INVALIDID() // Invalid ID INVALIDCOLOUR() // Invalid colour Fixed an issue where JS character property .colour would modify origSkin property instead of colour Fixed an issue where JS character property .guildTitle returned the name of the character instead of the guild title Character JS property .poison can now also be used to set a character's poisoned level, not just read it Exposed Item property to JS engine: .ac // armour class for item (0-128). Primarily used for setting race-restrictions for equippable items, i.e. race X cannot equip items of armour class Y. .def // defensive value of item (Physical resistance post-AoS, AR in older UO) // NOTE: The following properties don't actually do anything yet, but can still be used in custom JS scripts if desired .resistCold // Cold resistance of item 0-1000, where 1000 equals 100.0% .resistHeat // Heat/Fire resistance of item 0-1000, where 1000 equals 100.0% .resistLight // Light resistance of item 0-1000, where 1000 equals 100.0% .resistLightning // Energy/Lightning resistance of item 0-1000, where 1000 equals 100.0% .resistPoison // Poison resistance of item 0-1000, where 1000 equals 100.0% .resistRain // Rain resistance of item 0-1000, where 1000 equals 100.0% .resistSnow // Snow resistance of item 0-1000, where 1000 equals 100.0% .damageHeat // Weapon deals Heat/Fire elemental damage (true/false) .damageCold // Weapon deals Cold elemental damage (true/false) .damageLight // Weapon deals Light elemental damage (true/false) .damageLightning // Weapon deals Lightning elemental damage (true/false) .damagePoison // Weapon deals Poison elemental damage (true/false) .damageRain // Weapon deals Rain/Water elemental damage (true/false) .damageSnow // Weapon deals Snow/Ice elemental damage (true/false) Added new UOX.INI setting under [server] to enable/disable shard response to ConnectUO server polling (disabled by default) Sub-commands are no longer included when registering packets to be overloaded via RegisterPacket function, as that part was never fully implemented. Packet-hook scripts can be setup for specific packet IDs, but any sub-command checking will need to be done in the script itself JS Packet Method GetDWord() now uses JS_NewNumberValue instead of INT_TO_JSVAL to read from the socket buffer, to better handle large numbers, which could previously be returned with wrong values. JS Function CalcItemFromSer() now uses a JS_GetStringBytes() and str_value() combo instead of JSVAL_TO_INT() to read the data provided in the function argument. This allows JS scripts to provide item serials to the function directly without needing to split it into four parts first (though that still works) Fixed issue where JS properties for multis didn't always return correct values The 'set command can now be used to set the armour class of items ('set ac #) Reimplemented 'tweak command in JS engine (js/commands/targeting/tweak.js) - can be used to view and modify properties of characters, character skills, items, multis and regions (target ground) Added placeholder packet-hook script (js/server/network/0xf1_connectUoServerPoll.js) to handle responses to ConnectUO server polling. By default this script does nothing, but serves as a placeholder for drop-in replacement scripts generated specifically for each shard by the ConnectUO service. Updated some commands to support an alternate STATIC keyword (can also be ommitted) to add base items: 'add static itemID 'tile static itemID Updated some commands with support for randomization. Provided itemID will be randomized based on provided rndValue: /js/commands/targeting/add.js: 'add itemID rndValue cmdtable.cpp and targeting.cpp: 'tile itemID rndValue 'tile itemID x1 x2 y1 y2 z rndValue Updated js/commands/custom/repeatingcmds.js to support 'm delete as an alias for 'rremove Added 'props as an alias for the 'tweak command Added 'teleport as an alias for the 'tele command (js/commands/targeting/tele.js) Added 'shavehair and 'shavebeard as aliases for 'kill hair and 'kill beard (js/commands/targeting/kill.js) Added 'noinvul and 'mortal aliases for the 'invul false command (js/commands/custom/misc-cmds.js) Added 'immortal and 'invul (without parameter) as aliases for the 'invul true command Added 'bringtopack as an alias of 'movetobag command (js/commands/targeting/movetobag.js) Updated check for cancelling of target cursor in various JS scripts Minor updates to various JS scripts Fixed issue where some item definitions in dfndata/harditems/harditems.dfn and dfndata/items/building/lighting.dfn used comma instead of space as delimiter for the VALUE tag, which thus never got applied Updated all NPC definitions to let NPCs spawn facing in random directions
2021-03-22 05:59:20 +08:00
else
{
0.99.4d Added new option in UOX.INI under [settings] section: MAPDIFFSENABLED=0/1 // If enabled, server will attempt to load diff files, and send "Enable Map-diff files" packet to client to also load these. Disabled by default. Server no longer loads map/statics diff files by default, nor does it send packet to client to request loading these files, as only client versions below 7.0.8.2 will actively load these files. Can be re-enabled with new UOX.INI setting mentioned above! Fixed incorrect ID for gargish dagger in CHandleCombat::getWeaponType() Added missing weapon entries in CHandleCombat::getWeaponType(): bladed whip, barbed whip, spiked whip, gargish talwar Fixed an issue that would show the end part of some tiledata names as garbled text instead of cutting off the text(!) at 20 characters Fixed an issue with advanced character creation template when using ClassicUO client, which sends a profession value of 255 instead of 0 when no profession template has been selected. Fixed an issue where clones of NPCs that can split in combat didn't get the NPC flag correctly set Guild titles are now removed for players who leave their guilds Enabled closing some hard-coded gump menus using right-click (howto, guild, towns, wholist, addmenu, craftmenu, info) Fixed an issue where adding base items using 'add [itemID] would sometimes get false positive hits from harditems.dfn, depending on the length of the itemID Fixed an issue where items added using 'add [itemID] would not get names applied properly from harditems.dfn Item/NPC DFN tag GET can now inherit a random parent by adding additional values separated by spaces. Syntax: GET=parent1 parent2 parent3 (etc) Fixed an issue where NPC backpacks would not have the max item capacity set properly Added new properties for CItem objects (also exposed as JS Item Properties): maxRange // max distance a ranged weapon can fire at (replaces ARCHERRANGE ini setting) baseRange // base distance throwing weapons (when implemented) can be used at Added support for new Item DFN tag that replaces global UOX.INI setting ARCHERRANGE: MAXRANGE=# // Specifies max range of ranged weapon Added support for new Item/NPC DFN tags to support randomizing elemental resistances: RESISTFIRE=#/# # // Set NPC's poison resistance; fixed or random value RESISTCOLD=#/# # // Set NPC's poison resistance; fixed or random value RESISTLIGHTNING=#/# # // Set NPC's poison resistance; fixed or random value RESISTPOISON=#/# # // Set NPC's poison resistance; fixed or random value Added support for two new DFN tags in dfndata/race/races.dfn that can be used to allow/ban lists of equipment for specific races ALLOWEQUIPLIST=# BANEQUIPLIST=# Added support for new section in dfndata/race/races.dfn - [EQUIPLIST #], which can be used to define lists of equipment that is whitelisted or banned for specific races. Fixed a bug that would report incorrect weight in tooltips for Item/NPC spawner objects ScriptSections are now reapplied for items bought by players from NPC vendors Fixed an issue where players could drop an item on the ground and other players would still see the item after it was picked up, because of a failed distance check vs old location coordinates (in pack) instead of vs current location on ground Fixed a bug with players being able to use last-target macro to target objects picked up and held by other players on their cursor Updated all references to "devinelock" to be "divinelock" instead - this includes the name of the JS Item property Fixed house commands triggering (useless) targeting cursors for players onboard boats Changed default statcap in UOX.INI from 325 to 225 Fixed a out-of-range error for players attempting to combine ore inside their own backpack Fixed various issues with distance checks and container checks when using/target objects Added optional 4th "hue" parameter to AddGump JS method Added JS Function to get total amount of accounts on server - GetAccountCount() Added JS Function to get total amount of players online - GetPlayerCount() onSwing JS Event can now trigger in scripts attached to items, not just items attached to characters Added some JS Functions to expose some hard-coded constants to JS scripts: BASEITEMSERIAL() // Base item serial INVALIDSERIAL() // Invalid serial INVALIDID() // Invalid ID INVALIDCOLOUR() // Invalid colour Fixed an issue where JS character property .colour would modify origSkin property instead of colour Fixed an issue where JS character property .guildTitle returned the name of the character instead of the guild title Character JS property .poison can now also be used to set a character's poisoned level, not just read it Exposed Item property to JS engine: .ac // armour class for item (0-128). Primarily used for setting race-restrictions for equippable items, i.e. race X cannot equip items of armour class Y. .def // defensive value of item (Physical resistance post-AoS, AR in older UO) // NOTE: The following properties don't actually do anything yet, but can still be used in custom JS scripts if desired .resistCold // Cold resistance of item 0-1000, where 1000 equals 100.0% .resistHeat // Heat/Fire resistance of item 0-1000, where 1000 equals 100.0% .resistLight // Light resistance of item 0-1000, where 1000 equals 100.0% .resistLightning // Energy/Lightning resistance of item 0-1000, where 1000 equals 100.0% .resistPoison // Poison resistance of item 0-1000, where 1000 equals 100.0% .resistRain // Rain resistance of item 0-1000, where 1000 equals 100.0% .resistSnow // Snow resistance of item 0-1000, where 1000 equals 100.0% .damageHeat // Weapon deals Heat/Fire elemental damage (true/false) .damageCold // Weapon deals Cold elemental damage (true/false) .damageLight // Weapon deals Light elemental damage (true/false) .damageLightning // Weapon deals Lightning elemental damage (true/false) .damagePoison // Weapon deals Poison elemental damage (true/false) .damageRain // Weapon deals Rain/Water elemental damage (true/false) .damageSnow // Weapon deals Snow/Ice elemental damage (true/false) Added new UOX.INI setting under [server] to enable/disable shard response to ConnectUO server polling (disabled by default) Sub-commands are no longer included when registering packets to be overloaded via RegisterPacket function, as that part was never fully implemented. Packet-hook scripts can be setup for specific packet IDs, but any sub-command checking will need to be done in the script itself JS Packet Method GetDWord() now uses JS_NewNumberValue instead of INT_TO_JSVAL to read from the socket buffer, to better handle large numbers, which could previously be returned with wrong values. JS Function CalcItemFromSer() now uses a JS_GetStringBytes() and str_value() combo instead of JSVAL_TO_INT() to read the data provided in the function argument. This allows JS scripts to provide item serials to the function directly without needing to split it into four parts first (though that still works) Fixed issue where JS properties for multis didn't always return correct values The 'set command can now be used to set the armour class of items ('set ac #) Reimplemented 'tweak command in JS engine (js/commands/targeting/tweak.js) - can be used to view and modify properties of characters, character skills, items, multis and regions (target ground) Added placeholder packet-hook script (js/server/network/0xf1_connectUoServerPoll.js) to handle responses to ConnectUO server polling. By default this script does nothing, but serves as a placeholder for drop-in replacement scripts generated specifically for each shard by the ConnectUO service. Updated some commands to support an alternate STATIC keyword (can also be ommitted) to add base items: 'add static itemID 'tile static itemID Updated some commands with support for randomization. Provided itemID will be randomized based on provided rndValue: /js/commands/targeting/add.js: 'add itemID rndValue cmdtable.cpp and targeting.cpp: 'tile itemID rndValue 'tile itemID x1 x2 y1 y2 z rndValue Updated js/commands/custom/repeatingcmds.js to support 'm delete as an alias for 'rremove Added 'props as an alias for the 'tweak command Added 'teleport as an alias for the 'tele command (js/commands/targeting/tele.js) Added 'shavehair and 'shavebeard as aliases for 'kill hair and 'kill beard (js/commands/targeting/kill.js) Added 'noinvul and 'mortal aliases for the 'invul false command (js/commands/custom/misc-cmds.js) Added 'immortal and 'invul (without parameter) as aliases for the 'invul true command Added 'bringtopack as an alias of 'movetobag command (js/commands/targeting/movetobag.js) Updated check for cancelling of target cursor in various JS scripts Minor updates to various JS scripts Fixed issue where some item definitions in dfndata/harditems/harditems.dfn and dfndata/items/building/lighting.dfn used comma instead of space as delimiter for the VALUE tag, which thus never got applied Updated all NPC definitions to let NPCs spawn facing in random directions
2021-03-22 05:59:20 +08:00
*vp = JSVAL_NULL;
}
Housing Revamp and more Updated JS SysMessage function to accept up to 10 extra, optional arguments, which can be used with dictionary messages that require additional parameters like %s or %i Added new type of house privilege in cMultiObj.cpp to keep track of friends of the multi - HOUSEPRIV_FRIEND - which is stored during worldsaves as one or more Friend=<player serial> tags in house.wsc Added new type of house privilege in cMultiObj.cpp to keep track of guests of the multi - HOUSEPRIV_GUEST - which is stored during worldsaves as one or more Guest=<player serial> tags in house.wsc When items are created for houses upon house placement, a reference to the multi's serial is now stored in the house sign's MORE property to allow easier tracking of which house a particular sign belongs to Added tracking of new, persistent properties for houses via cMultiObj.cpp/h: lockdowns, secure containers, vendors, guests, friends, owners, ban location, public status, number of visits, timestamps Added a multitude of new methods in cMultiObj.cpp/h to assist in improving the functionality of houses Added new tags for houses in house.dfn (default values applied if tag not specified): MAXSECURECONTAINERS=4 - Max amount of secure containers allowed in a multi MAXLOCKDOWNS=256 - Max amount of lockdowns allowed in a multi MAXVENDORS=10 - Max amount of vendors allowed in a multi MAXBANS=50 - Max amount of bans in a multi's ban list MAXFRIENDS=50 - Max amount of friends in a multi's friend list MAXGUESTS=50 - Max amount of guests in a multi's guest list MAXOWNERS=8 - Max amount of owners and co-owners in a multi's owner list MAXTRASHCONTAINERS=1 - Max amount of trash containers allowed in multi SCRIPT=<scriptID> - Assign a JS script-ID directly to a multi FRONTDOOR - indicates that a door is the front door of a house. Cannot be locked in public houses! INTERIORDOOR - indicates that a door is an interior door of a house. Can be locked in public houses. BANX - Location X offset for multi's ban location, if not used, will try to use SE corner of multi instead BANY - Location Y offset for multi's ban location, if not used, will try to use SE corner of multi instead Added JS Event: onHouseCommand( tSock, multiObj, cmdID ) - For handling spoken house commands via JS scripts attached to multi. Updated JS Events: onEntrance() - can now trigger both for multi being entered and/or object entering onLeaving() - can now trigger both for multi being left and/or object entering onSpeech() - can now also trigger for items (in addition to chars) with event & script attached, if UOX.INI setting ITEMSDETECTSPEECH is enabled Added JS Multi methods: .IsBoat() - Returns whether the item (or multi) is a boat .IsOwner( playerToCheck ) - Returns whether a player is the owner of a multi .IsOnOwnerList( playerToCheck ) - Returns whether a player is on the (co-)owner list of a multi .IsOnFriendList( playerToCheck ) - Returns whether a player is on the friend list of a multi .IsOnGuestList( playerToCheck ) - Returns whether a player is on the guest list of a multi .IsOnBanList( playerToCheck ) - Returns whether a player is on the ban list of a multi .AddToFriendList( playertoAdd ) - Adds player to the friend list of a multi .RemoveFromFriendList( playertoRemove ) - Removes player from the friend list of a multi .AddToGuestList( playertoAdd ) - Adds player to the guest list of a multi .RemoveFromGuestList( playertoRemove ) - Removes player from the guest list of a multi .ClearOwnerList() - Clears all entries from a multi's (co-)owner list .ClearFriendList() - Clears all entries from a multi's friend list .ClearGuestList() - Clears all entries from a multi's guest list .ClearBanList() - Clears all entries from a multi's ban list .SecureContainer( itemToSecure ) - Secures a container in a multi .UnsecureContainer( itemToUnsecure ) - Unsecures a container in a multi .IsSecureContainer( itemToCheck ) - Checks if specified item is a secure container in a multi .LockDownItem( itemToLockDown) - Locks down an item in a multi .ReleaseItem( itemToRelease ) - Releases a locked down item in a multi .KillKeys() - Deletes ALL keys associated with a multi .AddTrashCont( itemToAdd ) - Add trash container to multi's list of trash containers .RemoveTrashCont( itemToRemove ) - Remove trash container from multi's list of trash containers Added JS Item (Multi only) properties: .lockdowns - Get the number of lockdowns in a multi .maxLockdowns - Get/Set the max number of lockdowns allowed in a multi .secureContainers - Get the number of secure containers in a multi .maxSecureContainers - Get/Set the max number of secure containers allowed in a multi .trashContainers - Get the number of trash containers in a multi .maxTrashContainers - Get/Set the max number of trash containers allowed in a multi .friends - Get the number of friends in a multi's friend list .maxFriends - Get/Set the max number of friends allowed in a multi's friend list .guests - Get the number of guests in a multi's guest list .maxGuests - Get/Set the max number of guests allowed in a multi's guest list .owners - Get the number of owners in a multi's owner list .maxOwners - Get/Set the max number of owners allowed in a multi's owner list .bans - Get the number of banned players in a multi's ban list .maxBans - Get/Set the max number of banned players allowed in a multi's ban list .vendors - Get the number of player vendors in a multi .maxVendors - Get the max number of player vendors allowed in a multi .deed - Get the item sectionID for deed used to place multi .isPublic - Get/Set the private/public state of a multi .buildTimestamp - Get the timestamp for when the house was originally placed .tradeTimestamp - Get the timestamp for when the house was last traded to another player .banX - Get/Set the ban location X offset for the multi .banY - Get/Set the ban location Y offset for the multi Added JS Character properties: .multi = Get/Set the multi object the character is in .accountNum = Get the account number the character belongs to .housesOwned = Get a count of houses owned by the character .housesCoOwned = Get a count of houses co-owned by the character Updated JS cBaseObject Methods .FirstItem(), .NextItem() and .FinishedItems() to also support iterating through items in multis Updated JS multi Methods .FirstChar(), .NextChar() and .FinishedChars() to support an additional parameter to specify what kind of characters to loop through: "default" or no parameter - all characters inside the multi "owner" - players on multi's owner list "friend" - players on multi's friend list "guest" - players on multi's guest list "banned" - players on multi's ban list Added new INI tags to a new section of uox.ini called [houses] DECAYTIMERINHOUSE=3600 // Decay timer in seconds for non-locked down items inside houses PROTECTPRIVATEHOUSES=1 // Toggles whether private houses will automatically boot unauthorized visitors (1) or not (0) TRACKHOUSESPERACCOUNT=1 // Toggles whether to track (and restrict) house ownership per account (1) or per character (0) MAXHOUSESOWNABLE=1 // Specifies the max amount of houses a player can own per account/char, depending on how house ownership is tracked MAXHOUSESCOOWNABLE=10 // Specifies the max amount of houses a player can co-own per character CANOWNANDCOOWNHOUSES=1 // Toggles whether players can own and co-own houses at the same time COOWNHOUSESONSAMEACCOUNT=1 // Toggles whether characters on same account as house owner will be treated as co-owners Added new INI tags in [settings] section of uox.ini: ITEMSDETECTSPEECH=0 // If enabled, server will search for nearby items with onSpeech JS event running whenever a character speaks. Disabled by default. MAXPLAYERPACKITEMS=125 // Defines max item capacity for player (and NPC) backpacks. Defaults to 125. Moved most of the existing house functionality to JS and expanded upon it to reach feature parity with houses in regular UO around Publish 15/16, with various extras thrown in for good measure and all functionality being customizable: js/server/house/house.js (15000) - handles detection of house commands and characters entering/leaving houses js/server/house/houseSign.js (15001) - contains and handles all house-related gumps/menus and what is shown when players interact with house sign js/server/house/houseCommands.js (15002) - handles functionality of house commands and other functionality such as transfer of ownership, demolishing house, etc. js/server/house/houseDeed.js (15003) - handles initial rules that allow/disallow placement of additional houses for players All house-related menus now fully handled through JS All house commands and other functionality now fully handled through JS Removed redundant hard-coded house functionality Implemented Co-owners, friends, guests for houses, with access rules in place for entry, lockdowns, house commands, etc. Implemented Private and Public houses Implemented Secure Containers and Trash Barrels Definable max lockdowns, secure containers, player vendors, bans, friends, guests, owners, trash containers and more - per house type JS scripts can now be attached directly to houses Doors in houses can be marked as front doors or interior doors, and will be treated differently with regards to private and public houses Added new item to dfndata/items/containers/misc.dfn - [trashbarrel] Added new JS script (js/items/trashbarrel.js) with trash barrel functionality for houses. Trash barrels that are marked as secure containers are only accessible by owners, co-owners and friends of the house. Various options available at top of script. Updated js/items/axe.js to support chopping up trash barrels and house add-ons in houses owned by the player Fixed an issue with house doors being left behind after demolishing houses while their doors were open Fixed an issue where GMs could be banned from player houses Added Line of Sight checks to speech, to give players some privacy in their own homes Updated house placement code to more accurately check for other multis, dynamic and static objects when placing houses; now requires free space around each house that cannot be blocked by other houses or items that can block player movement, and disallows placement of houses on roads Updated house placement code to move characters blocking house placement to SE corner of the house Updated house placement code to disallow placing houses in guarded regions, or in dungeons Added new DFN tag for regions to enable/disable player houses in specific regions: HOUSING=0/1 Added new region (247) that covers path to Valley of Eodon in Felucca Added new region (248) that covers Valley of Eodon in Ter-Mur, with player housing disabled Added new region (249) that covers entire T2A lands, with player housing disabled Updated SPACEX and SPACEY values for all houses in dfndata/house/house.dfn to match updated house placement code Added new JS property to Regions that can be used to determine or change state of player housing in a region: .canPlaceHouse() Updated rules for usage of dye tubs to dye locked down items; now only house owners or co-owners may dye locked down items Updated rules for usage of the following locked down items in a house, which are now only usable by house owners and co-owners Dyes, Guildstone Deeds, Recall Runes (renaming), Rename Deeds, Townstone Deeds, House Deeds, Boat Models, Player Vendor Deeds, Ore, Hair Dye Updated rules for usage of the following locked down items in a house, which are now only usable by house owners, co-owners and friends: Keys, Dye Tubs, Magic Scrolls, Fireworks Wands, Magic Wands, Smithing Tools, Mining Tools, Fishing Poles Updated item lockdown rules to allow locking down (and releasing) items in a container as long as the container is locked down, and to only allow releasing a locked down container if it's empty of locked down items Updated item lockdown rules to only allow locking down movement-blocking items further than 2 tiles away from doors Updated rules for releasing items in houses - now the house owner can release any locked down items, co-owners can release items locked down by themselves or by friends, while friends can release only items locked down by themselves Added some feedback to player about why their attempted house placement failed Items added by GMs directly into multis will now decay based on the house-specific decay timer instead of the regular one Fixed an issue that could cause items to almost instantly decay after being released from lockdown in a house Placing house add-ons now properly takes into account SPACEX and SPACEY values when checking if they can fit in selected area of houses Re-added SPACEX and SPACEY values for Pentagram and Loom house add-ons House add-ons can now be converted back into house add-on deeds by chopping them with an axe Added new item type - IT_HOUSEADDON (201) - used by house add-ons placed in player houses Fixed a bug where keys would stop working after being added to a keyring, and would turn into blank keys upon release from the keyring Added visitor count for public player houses, which keeps track of how many visits a public house has received, with each player counted max 1 time every 24 hours Fixed an issue with FindPlayersInOldVisrange() where it didn't take into account that players could see buildings further away than the standard update range. This could cause players to see ghost images of buildings if they were at the "right" distance when the building was being demolished Added NODECAY tag to all signs and doors in dfndata/house/house.dfn Added FRONTDOOR or INTERIORDOOR (as appropriate) to all doors in dfndata/house/house.dfn Added BANX and BANY to specify ban location for some houses in dfndata/house/house.dfn instead of relying on finding SE corner automatically Implemented strongboxes (js/server/house/strongbox.js) for co-owners of a house, which can be placed with the house command "i wish to place a strongbox". Max capacity is 25 items Updated 'REMOVE command to take an optional parameter - itemID. If supplied, the command will remove all items with this itemID from a targeted container Fixed a bug when checking if dynamic items were blocking valid spawn locations for NPCs, some function arguments were in the wrong order! Improved code that finds valid spawn locations for items and NPCs spawned via spawn regions. As server gradually builds up lists of valid spawn locations per region over time, it will start using these lists more often, rather than always look for brand new spawn locations. Fixed a bug with CMulHandler::CheckStaticFlag() that prevented NPCs from spawning inside buildings with no static floors! Fixed an issue with repeating commands that prevented GMs from being able to cancel them when using the ClassicUO client Exposed character property .accountNum to JS engine Extended CDataList class to include a Clear() method for clearing lists Updated JS File method .Open() to support an optional, third argument - subFolderName - that defines in which sub-folder of UOX3/shared/ to store/look for a file. If no third argument is supplied, UOX3 will default to using the shared folder itself. Updated JS File method .Length() to return a value of -1 for files that don't exist Added new code function, exposed to JS engine with same parameters, which simply checks if a given tile ID has a specific flag bool CheckTileFlag( UI16 itemID, TILEFLAG flagToCheck ) Added JS function used to find the root container of an item (if any) FindRootContainer( itemSerial ) FindRootContainer( item ) Added new JS function that allows deleting files from UOX3/shared/ folder or subfolders of shared folder. If no subFolderName is provided, looks for file directly in shared folder itself. Restrictions on file- and folder-names apply. bool DeleteFile( fileName, subFolderName ) Added new JS functions for checking if a specific client or server feature is enabled. See documentation for full list of client/server features. GetClientFeature( bitNum ) // Returns true if specified client feature is enabled on server GetServerFeature( bitNum ) // Returns true if specified server feature is enabled on server Added new JS function for returning the value of almost any server setting from UOX.INI GetServerSetting( settingNameInDoubleQuotes ) Updated JS function DoesDynamicBlock() with two new parameters - checkOnlyMultis and checkOnlyNonMultis Updated JS function DoesMapBlock() with two new parameters - checkMultiPlacement and checkForRoad Fixed an issue where a LoS check would prevent players from accessing containers in their own backpack Added new functions in findfuncs.cpp to make it easier to find items near another object or location: findNearbyItems( object, distance ) findNearbyItems( x, y, worldNumber, instanceID, distance ) Added new Item property - maxItems - used by containers to determine their max item capacity Added new Item property - totalItemCount - used to get total item count in a container (including sub-containers) Added check for max item capacity when creating new items that are added to a character's backpack - items will be created below character's feet if backpack is full! Added new DFN tag for items, used by containers to determine item capacity for a given container: MAXITEMS=# // 125 is the default for all containers if not set Added new JS Item properties: .maxItems // gets/sets item capacity for a given container .totalItemCount // gets total item count in a container, including sub-containers Updated item tooltips for containers to show accurate total item count, as well as to display max item capacity Fixed a bug where picking up items from a non-locked down pile of items on the floor inside a multi could cause the remaining pile to be seen as no longer inside the multi, disallowing locking it back down and causing it to decay based on regular decay timer instead of house-specific one Updated JS command set to allow setting poison-level on items ('set poison #) and hunger-level on characters ('set hunger #) Fixed an issue with js/item/food.js that prevented poisoned food from poisoning characters when eaten Fixed an issue with js/skill/poisoning.js that prevented players from poisoning food! Updated various JS scripts and hardcoded targeting functions to disallow the targeting of locked down resources using skills and tools Updated JS Method TextMessage() to support three extra, optional parameters. Note that if one optional parameter is included, all preceding optional parameters are also required! speechTarget - What kind of target is this message intended for? 0 - Only visible for sender and receiver of message 1 - Visible to all players in range 2 - Visible to all NPCs and players in range 3 - Visible to all PCs everywhere + NPCs in range 4 - Visible to all PCs everywhere (broadcast) 5 - Only visible for the receiver of the message speechTargetSerial - The serial of the receiver of the message, used if speechTarget is 0 or 5 speechFontType - The type of font to display the text in. Defaults to normal. 0 - Bold 1 - Normal with shadow 2 - Bold with shadow 3 - Normal 4 - Gothic 5 - Italic 6 - Small, dark 7 - Colourful 8 - Runic (only works with CAPS) 9 - Small, light Added timestamp to worldsaves in console, to make it easier to see when a particular world-save was done Added info about compiler/environment displayed at the top of the UOX3 console during startup Updated dictionary files with new messages primarily related to housing
2020-11-04 02:00:37 +08:00
break;
case CIP_ISPUBLIC:
if( gPriv->GetObjType() == OT_MULTI )
{
*vp = BOOLEAN_TO_JSVAL(( static_cast<CMultiObj *>( gPriv )->GetPublicStatus() ));
}
0.99.4d Added new option in UOX.INI under [settings] section: MAPDIFFSENABLED=0/1 // If enabled, server will attempt to load diff files, and send "Enable Map-diff files" packet to client to also load these. Disabled by default. Server no longer loads map/statics diff files by default, nor does it send packet to client to request loading these files, as only client versions below 7.0.8.2 will actively load these files. Can be re-enabled with new UOX.INI setting mentioned above! Fixed incorrect ID for gargish dagger in CHandleCombat::getWeaponType() Added missing weapon entries in CHandleCombat::getWeaponType(): bladed whip, barbed whip, spiked whip, gargish talwar Fixed an issue that would show the end part of some tiledata names as garbled text instead of cutting off the text(!) at 20 characters Fixed an issue with advanced character creation template when using ClassicUO client, which sends a profession value of 255 instead of 0 when no profession template has been selected. Fixed an issue where clones of NPCs that can split in combat didn't get the NPC flag correctly set Guild titles are now removed for players who leave their guilds Enabled closing some hard-coded gump menus using right-click (howto, guild, towns, wholist, addmenu, craftmenu, info) Fixed an issue where adding base items using 'add [itemID] would sometimes get false positive hits from harditems.dfn, depending on the length of the itemID Fixed an issue where items added using 'add [itemID] would not get names applied properly from harditems.dfn Item/NPC DFN tag GET can now inherit a random parent by adding additional values separated by spaces. Syntax: GET=parent1 parent2 parent3 (etc) Fixed an issue where NPC backpacks would not have the max item capacity set properly Added new properties for CItem objects (also exposed as JS Item Properties): maxRange // max distance a ranged weapon can fire at (replaces ARCHERRANGE ini setting) baseRange // base distance throwing weapons (when implemented) can be used at Added support for new Item DFN tag that replaces global UOX.INI setting ARCHERRANGE: MAXRANGE=# // Specifies max range of ranged weapon Added support for new Item/NPC DFN tags to support randomizing elemental resistances: RESISTFIRE=#/# # // Set NPC's poison resistance; fixed or random value RESISTCOLD=#/# # // Set NPC's poison resistance; fixed or random value RESISTLIGHTNING=#/# # // Set NPC's poison resistance; fixed or random value RESISTPOISON=#/# # // Set NPC's poison resistance; fixed or random value Added support for two new DFN tags in dfndata/race/races.dfn that can be used to allow/ban lists of equipment for specific races ALLOWEQUIPLIST=# BANEQUIPLIST=# Added support for new section in dfndata/race/races.dfn - [EQUIPLIST #], which can be used to define lists of equipment that is whitelisted or banned for specific races. Fixed a bug that would report incorrect weight in tooltips for Item/NPC spawner objects ScriptSections are now reapplied for items bought by players from NPC vendors Fixed an issue where players could drop an item on the ground and other players would still see the item after it was picked up, because of a failed distance check vs old location coordinates (in pack) instead of vs current location on ground Fixed a bug with players being able to use last-target macro to target objects picked up and held by other players on their cursor Updated all references to "devinelock" to be "divinelock" instead - this includes the name of the JS Item property Fixed house commands triggering (useless) targeting cursors for players onboard boats Changed default statcap in UOX.INI from 325 to 225 Fixed a out-of-range error for players attempting to combine ore inside their own backpack Fixed various issues with distance checks and container checks when using/target objects Added optional 4th "hue" parameter to AddGump JS method Added JS Function to get total amount of accounts on server - GetAccountCount() Added JS Function to get total amount of players online - GetPlayerCount() onSwing JS Event can now trigger in scripts attached to items, not just items attached to characters Added some JS Functions to expose some hard-coded constants to JS scripts: BASEITEMSERIAL() // Base item serial INVALIDSERIAL() // Invalid serial INVALIDID() // Invalid ID INVALIDCOLOUR() // Invalid colour Fixed an issue where JS character property .colour would modify origSkin property instead of colour Fixed an issue where JS character property .guildTitle returned the name of the character instead of the guild title Character JS property .poison can now also be used to set a character's poisoned level, not just read it Exposed Item property to JS engine: .ac // armour class for item (0-128). Primarily used for setting race-restrictions for equippable items, i.e. race X cannot equip items of armour class Y. .def // defensive value of item (Physical resistance post-AoS, AR in older UO) // NOTE: The following properties don't actually do anything yet, but can still be used in custom JS scripts if desired .resistCold // Cold resistance of item 0-1000, where 1000 equals 100.0% .resistHeat // Heat/Fire resistance of item 0-1000, where 1000 equals 100.0% .resistLight // Light resistance of item 0-1000, where 1000 equals 100.0% .resistLightning // Energy/Lightning resistance of item 0-1000, where 1000 equals 100.0% .resistPoison // Poison resistance of item 0-1000, where 1000 equals 100.0% .resistRain // Rain resistance of item 0-1000, where 1000 equals 100.0% .resistSnow // Snow resistance of item 0-1000, where 1000 equals 100.0% .damageHeat // Weapon deals Heat/Fire elemental damage (true/false) .damageCold // Weapon deals Cold elemental damage (true/false) .damageLight // Weapon deals Light elemental damage (true/false) .damageLightning // Weapon deals Lightning elemental damage (true/false) .damagePoison // Weapon deals Poison elemental damage (true/false) .damageRain // Weapon deals Rain/Water elemental damage (true/false) .damageSnow // Weapon deals Snow/Ice elemental damage (true/false) Added new UOX.INI setting under [server] to enable/disable shard response to ConnectUO server polling (disabled by default) Sub-commands are no longer included when registering packets to be overloaded via RegisterPacket function, as that part was never fully implemented. Packet-hook scripts can be setup for specific packet IDs, but any sub-command checking will need to be done in the script itself JS Packet Method GetDWord() now uses JS_NewNumberValue instead of INT_TO_JSVAL to read from the socket buffer, to better handle large numbers, which could previously be returned with wrong values. JS Function CalcItemFromSer() now uses a JS_GetStringBytes() and str_value() combo instead of JSVAL_TO_INT() to read the data provided in the function argument. This allows JS scripts to provide item serials to the function directly without needing to split it into four parts first (though that still works) Fixed issue where JS properties for multis didn't always return correct values The 'set command can now be used to set the armour class of items ('set ac #) Reimplemented 'tweak command in JS engine (js/commands/targeting/tweak.js) - can be used to view and modify properties of characters, character skills, items, multis and regions (target ground) Added placeholder packet-hook script (js/server/network/0xf1_connectUoServerPoll.js) to handle responses to ConnectUO server polling. By default this script does nothing, but serves as a placeholder for drop-in replacement scripts generated specifically for each shard by the ConnectUO service. Updated some commands to support an alternate STATIC keyword (can also be ommitted) to add base items: 'add static itemID 'tile static itemID Updated some commands with support for randomization. Provided itemID will be randomized based on provided rndValue: /js/commands/targeting/add.js: 'add itemID rndValue cmdtable.cpp and targeting.cpp: 'tile itemID rndValue 'tile itemID x1 x2 y1 y2 z rndValue Updated js/commands/custom/repeatingcmds.js to support 'm delete as an alias for 'rremove Added 'props as an alias for the 'tweak command Added 'teleport as an alias for the 'tele command (js/commands/targeting/tele.js) Added 'shavehair and 'shavebeard as aliases for 'kill hair and 'kill beard (js/commands/targeting/kill.js) Added 'noinvul and 'mortal aliases for the 'invul false command (js/commands/custom/misc-cmds.js) Added 'immortal and 'invul (without parameter) as aliases for the 'invul true command Added 'bringtopack as an alias of 'movetobag command (js/commands/targeting/movetobag.js) Updated check for cancelling of target cursor in various JS scripts Minor updates to various JS scripts Fixed issue where some item definitions in dfndata/harditems/harditems.dfn and dfndata/items/building/lighting.dfn used comma instead of space as delimiter for the VALUE tag, which thus never got applied Updated all NPC definitions to let NPCs spawn facing in random directions
2021-03-22 05:59:20 +08:00
else
{
0.99.4d Added new option in UOX.INI under [settings] section: MAPDIFFSENABLED=0/1 // If enabled, server will attempt to load diff files, and send "Enable Map-diff files" packet to client to also load these. Disabled by default. Server no longer loads map/statics diff files by default, nor does it send packet to client to request loading these files, as only client versions below 7.0.8.2 will actively load these files. Can be re-enabled with new UOX.INI setting mentioned above! Fixed incorrect ID for gargish dagger in CHandleCombat::getWeaponType() Added missing weapon entries in CHandleCombat::getWeaponType(): bladed whip, barbed whip, spiked whip, gargish talwar Fixed an issue that would show the end part of some tiledata names as garbled text instead of cutting off the text(!) at 20 characters Fixed an issue with advanced character creation template when using ClassicUO client, which sends a profession value of 255 instead of 0 when no profession template has been selected. Fixed an issue where clones of NPCs that can split in combat didn't get the NPC flag correctly set Guild titles are now removed for players who leave their guilds Enabled closing some hard-coded gump menus using right-click (howto, guild, towns, wholist, addmenu, craftmenu, info) Fixed an issue where adding base items using 'add [itemID] would sometimes get false positive hits from harditems.dfn, depending on the length of the itemID Fixed an issue where items added using 'add [itemID] would not get names applied properly from harditems.dfn Item/NPC DFN tag GET can now inherit a random parent by adding additional values separated by spaces. Syntax: GET=parent1 parent2 parent3 (etc) Fixed an issue where NPC backpacks would not have the max item capacity set properly Added new properties for CItem objects (also exposed as JS Item Properties): maxRange // max distance a ranged weapon can fire at (replaces ARCHERRANGE ini setting) baseRange // base distance throwing weapons (when implemented) can be used at Added support for new Item DFN tag that replaces global UOX.INI setting ARCHERRANGE: MAXRANGE=# // Specifies max range of ranged weapon Added support for new Item/NPC DFN tags to support randomizing elemental resistances: RESISTFIRE=#/# # // Set NPC's poison resistance; fixed or random value RESISTCOLD=#/# # // Set NPC's poison resistance; fixed or random value RESISTLIGHTNING=#/# # // Set NPC's poison resistance; fixed or random value RESISTPOISON=#/# # // Set NPC's poison resistance; fixed or random value Added support for two new DFN tags in dfndata/race/races.dfn that can be used to allow/ban lists of equipment for specific races ALLOWEQUIPLIST=# BANEQUIPLIST=# Added support for new section in dfndata/race/races.dfn - [EQUIPLIST #], which can be used to define lists of equipment that is whitelisted or banned for specific races. Fixed a bug that would report incorrect weight in tooltips for Item/NPC spawner objects ScriptSections are now reapplied for items bought by players from NPC vendors Fixed an issue where players could drop an item on the ground and other players would still see the item after it was picked up, because of a failed distance check vs old location coordinates (in pack) instead of vs current location on ground Fixed a bug with players being able to use last-target macro to target objects picked up and held by other players on their cursor Updated all references to "devinelock" to be "divinelock" instead - this includes the name of the JS Item property Fixed house commands triggering (useless) targeting cursors for players onboard boats Changed default statcap in UOX.INI from 325 to 225 Fixed a out-of-range error for players attempting to combine ore inside their own backpack Fixed various issues with distance checks and container checks when using/target objects Added optional 4th "hue" parameter to AddGump JS method Added JS Function to get total amount of accounts on server - GetAccountCount() Added JS Function to get total amount of players online - GetPlayerCount() onSwing JS Event can now trigger in scripts attached to items, not just items attached to characters Added some JS Functions to expose some hard-coded constants to JS scripts: BASEITEMSERIAL() // Base item serial INVALIDSERIAL() // Invalid serial INVALIDID() // Invalid ID INVALIDCOLOUR() // Invalid colour Fixed an issue where JS character property .colour would modify origSkin property instead of colour Fixed an issue where JS character property .guildTitle returned the name of the character instead of the guild title Character JS property .poison can now also be used to set a character's poisoned level, not just read it Exposed Item property to JS engine: .ac // armour class for item (0-128). Primarily used for setting race-restrictions for equippable items, i.e. race X cannot equip items of armour class Y. .def // defensive value of item (Physical resistance post-AoS, AR in older UO) // NOTE: The following properties don't actually do anything yet, but can still be used in custom JS scripts if desired .resistCold // Cold resistance of item 0-1000, where 1000 equals 100.0% .resistHeat // Heat/Fire resistance of item 0-1000, where 1000 equals 100.0% .resistLight // Light resistance of item 0-1000, where 1000 equals 100.0% .resistLightning // Energy/Lightning resistance of item 0-1000, where 1000 equals 100.0% .resistPoison // Poison resistance of item 0-1000, where 1000 equals 100.0% .resistRain // Rain resistance of item 0-1000, where 1000 equals 100.0% .resistSnow // Snow resistance of item 0-1000, where 1000 equals 100.0% .damageHeat // Weapon deals Heat/Fire elemental damage (true/false) .damageCold // Weapon deals Cold elemental damage (true/false) .damageLight // Weapon deals Light elemental damage (true/false) .damageLightning // Weapon deals Lightning elemental damage (true/false) .damagePoison // Weapon deals Poison elemental damage (true/false) .damageRain // Weapon deals Rain/Water elemental damage (true/false) .damageSnow // Weapon deals Snow/Ice elemental damage (true/false) Added new UOX.INI setting under [server] to enable/disable shard response to ConnectUO server polling (disabled by default) Sub-commands are no longer included when registering packets to be overloaded via RegisterPacket function, as that part was never fully implemented. Packet-hook scripts can be setup for specific packet IDs, but any sub-command checking will need to be done in the script itself JS Packet Method GetDWord() now uses JS_NewNumberValue instead of INT_TO_JSVAL to read from the socket buffer, to better handle large numbers, which could previously be returned with wrong values. JS Function CalcItemFromSer() now uses a JS_GetStringBytes() and str_value() combo instead of JSVAL_TO_INT() to read the data provided in the function argument. This allows JS scripts to provide item serials to the function directly without needing to split it into four parts first (though that still works) Fixed issue where JS properties for multis didn't always return correct values The 'set command can now be used to set the armour class of items ('set ac #) Reimplemented 'tweak command in JS engine (js/commands/targeting/tweak.js) - can be used to view and modify properties of characters, character skills, items, multis and regions (target ground) Added placeholder packet-hook script (js/server/network/0xf1_connectUoServerPoll.js) to handle responses to ConnectUO server polling. By default this script does nothing, but serves as a placeholder for drop-in replacement scripts generated specifically for each shard by the ConnectUO service. Updated some commands to support an alternate STATIC keyword (can also be ommitted) to add base items: 'add static itemID 'tile static itemID Updated some commands with support for randomization. Provided itemID will be randomized based on provided rndValue: /js/commands/targeting/add.js: 'add itemID rndValue cmdtable.cpp and targeting.cpp: 'tile itemID rndValue 'tile itemID x1 x2 y1 y2 z rndValue Updated js/commands/custom/repeatingcmds.js to support 'm delete as an alias for 'rremove Added 'props as an alias for the 'tweak command Added 'teleport as an alias for the 'tele command (js/commands/targeting/tele.js) Added 'shavehair and 'shavebeard as aliases for 'kill hair and 'kill beard (js/commands/targeting/kill.js) Added 'noinvul and 'mortal aliases for the 'invul false command (js/commands/custom/misc-cmds.js) Added 'immortal and 'invul (without parameter) as aliases for the 'invul true command Added 'bringtopack as an alias of 'movetobag command (js/commands/targeting/movetobag.js) Updated check for cancelling of target cursor in various JS scripts Minor updates to various JS scripts Fixed issue where some item definitions in dfndata/harditems/harditems.dfn and dfndata/items/building/lighting.dfn used comma instead of space as delimiter for the VALUE tag, which thus never got applied Updated all NPC definitions to let NPCs spawn facing in random directions
2021-03-22 05:59:20 +08:00
*vp = JSVAL_NULL;
}
Housing Revamp and more Updated JS SysMessage function to accept up to 10 extra, optional arguments, which can be used with dictionary messages that require additional parameters like %s or %i Added new type of house privilege in cMultiObj.cpp to keep track of friends of the multi - HOUSEPRIV_FRIEND - which is stored during worldsaves as one or more Friend=<player serial> tags in house.wsc Added new type of house privilege in cMultiObj.cpp to keep track of guests of the multi - HOUSEPRIV_GUEST - which is stored during worldsaves as one or more Guest=<player serial> tags in house.wsc When items are created for houses upon house placement, a reference to the multi's serial is now stored in the house sign's MORE property to allow easier tracking of which house a particular sign belongs to Added tracking of new, persistent properties for houses via cMultiObj.cpp/h: lockdowns, secure containers, vendors, guests, friends, owners, ban location, public status, number of visits, timestamps Added a multitude of new methods in cMultiObj.cpp/h to assist in improving the functionality of houses Added new tags for houses in house.dfn (default values applied if tag not specified): MAXSECURECONTAINERS=4 - Max amount of secure containers allowed in a multi MAXLOCKDOWNS=256 - Max amount of lockdowns allowed in a multi MAXVENDORS=10 - Max amount of vendors allowed in a multi MAXBANS=50 - Max amount of bans in a multi's ban list MAXFRIENDS=50 - Max amount of friends in a multi's friend list MAXGUESTS=50 - Max amount of guests in a multi's guest list MAXOWNERS=8 - Max amount of owners and co-owners in a multi's owner list MAXTRASHCONTAINERS=1 - Max amount of trash containers allowed in multi SCRIPT=<scriptID> - Assign a JS script-ID directly to a multi FRONTDOOR - indicates that a door is the front door of a house. Cannot be locked in public houses! INTERIORDOOR - indicates that a door is an interior door of a house. Can be locked in public houses. BANX - Location X offset for multi's ban location, if not used, will try to use SE corner of multi instead BANY - Location Y offset for multi's ban location, if not used, will try to use SE corner of multi instead Added JS Event: onHouseCommand( tSock, multiObj, cmdID ) - For handling spoken house commands via JS scripts attached to multi. Updated JS Events: onEntrance() - can now trigger both for multi being entered and/or object entering onLeaving() - can now trigger both for multi being left and/or object entering onSpeech() - can now also trigger for items (in addition to chars) with event & script attached, if UOX.INI setting ITEMSDETECTSPEECH is enabled Added JS Multi methods: .IsBoat() - Returns whether the item (or multi) is a boat .IsOwner( playerToCheck ) - Returns whether a player is the owner of a multi .IsOnOwnerList( playerToCheck ) - Returns whether a player is on the (co-)owner list of a multi .IsOnFriendList( playerToCheck ) - Returns whether a player is on the friend list of a multi .IsOnGuestList( playerToCheck ) - Returns whether a player is on the guest list of a multi .IsOnBanList( playerToCheck ) - Returns whether a player is on the ban list of a multi .AddToFriendList( playertoAdd ) - Adds player to the friend list of a multi .RemoveFromFriendList( playertoRemove ) - Removes player from the friend list of a multi .AddToGuestList( playertoAdd ) - Adds player to the guest list of a multi .RemoveFromGuestList( playertoRemove ) - Removes player from the guest list of a multi .ClearOwnerList() - Clears all entries from a multi's (co-)owner list .ClearFriendList() - Clears all entries from a multi's friend list .ClearGuestList() - Clears all entries from a multi's guest list .ClearBanList() - Clears all entries from a multi's ban list .SecureContainer( itemToSecure ) - Secures a container in a multi .UnsecureContainer( itemToUnsecure ) - Unsecures a container in a multi .IsSecureContainer( itemToCheck ) - Checks if specified item is a secure container in a multi .LockDownItem( itemToLockDown) - Locks down an item in a multi .ReleaseItem( itemToRelease ) - Releases a locked down item in a multi .KillKeys() - Deletes ALL keys associated with a multi .AddTrashCont( itemToAdd ) - Add trash container to multi's list of trash containers .RemoveTrashCont( itemToRemove ) - Remove trash container from multi's list of trash containers Added JS Item (Multi only) properties: .lockdowns - Get the number of lockdowns in a multi .maxLockdowns - Get/Set the max number of lockdowns allowed in a multi .secureContainers - Get the number of secure containers in a multi .maxSecureContainers - Get/Set the max number of secure containers allowed in a multi .trashContainers - Get the number of trash containers in a multi .maxTrashContainers - Get/Set the max number of trash containers allowed in a multi .friends - Get the number of friends in a multi's friend list .maxFriends - Get/Set the max number of friends allowed in a multi's friend list .guests - Get the number of guests in a multi's guest list .maxGuests - Get/Set the max number of guests allowed in a multi's guest list .owners - Get the number of owners in a multi's owner list .maxOwners - Get/Set the max number of owners allowed in a multi's owner list .bans - Get the number of banned players in a multi's ban list .maxBans - Get/Set the max number of banned players allowed in a multi's ban list .vendors - Get the number of player vendors in a multi .maxVendors - Get the max number of player vendors allowed in a multi .deed - Get the item sectionID for deed used to place multi .isPublic - Get/Set the private/public state of a multi .buildTimestamp - Get the timestamp for when the house was originally placed .tradeTimestamp - Get the timestamp for when the house was last traded to another player .banX - Get/Set the ban location X offset for the multi .banY - Get/Set the ban location Y offset for the multi Added JS Character properties: .multi = Get/Set the multi object the character is in .accountNum = Get the account number the character belongs to .housesOwned = Get a count of houses owned by the character .housesCoOwned = Get a count of houses co-owned by the character Updated JS cBaseObject Methods .FirstItem(), .NextItem() and .FinishedItems() to also support iterating through items in multis Updated JS multi Methods .FirstChar(), .NextChar() and .FinishedChars() to support an additional parameter to specify what kind of characters to loop through: "default" or no parameter - all characters inside the multi "owner" - players on multi's owner list "friend" - players on multi's friend list "guest" - players on multi's guest list "banned" - players on multi's ban list Added new INI tags to a new section of uox.ini called [houses] DECAYTIMERINHOUSE=3600 // Decay timer in seconds for non-locked down items inside houses PROTECTPRIVATEHOUSES=1 // Toggles whether private houses will automatically boot unauthorized visitors (1) or not (0) TRACKHOUSESPERACCOUNT=1 // Toggles whether to track (and restrict) house ownership per account (1) or per character (0) MAXHOUSESOWNABLE=1 // Specifies the max amount of houses a player can own per account/char, depending on how house ownership is tracked MAXHOUSESCOOWNABLE=10 // Specifies the max amount of houses a player can co-own per character CANOWNANDCOOWNHOUSES=1 // Toggles whether players can own and co-own houses at the same time COOWNHOUSESONSAMEACCOUNT=1 // Toggles whether characters on same account as house owner will be treated as co-owners Added new INI tags in [settings] section of uox.ini: ITEMSDETECTSPEECH=0 // If enabled, server will search for nearby items with onSpeech JS event running whenever a character speaks. Disabled by default. MAXPLAYERPACKITEMS=125 // Defines max item capacity for player (and NPC) backpacks. Defaults to 125. Moved most of the existing house functionality to JS and expanded upon it to reach feature parity with houses in regular UO around Publish 15/16, with various extras thrown in for good measure and all functionality being customizable: js/server/house/house.js (15000) - handles detection of house commands and characters entering/leaving houses js/server/house/houseSign.js (15001) - contains and handles all house-related gumps/menus and what is shown when players interact with house sign js/server/house/houseCommands.js (15002) - handles functionality of house commands and other functionality such as transfer of ownership, demolishing house, etc. js/server/house/houseDeed.js (15003) - handles initial rules that allow/disallow placement of additional houses for players All house-related menus now fully handled through JS All house commands and other functionality now fully handled through JS Removed redundant hard-coded house functionality Implemented Co-owners, friends, guests for houses, with access rules in place for entry, lockdowns, house commands, etc. Implemented Private and Public houses Implemented Secure Containers and Trash Barrels Definable max lockdowns, secure containers, player vendors, bans, friends, guests, owners, trash containers and more - per house type JS scripts can now be attached directly to houses Doors in houses can be marked as front doors or interior doors, and will be treated differently with regards to private and public houses Added new item to dfndata/items/containers/misc.dfn - [trashbarrel] Added new JS script (js/items/trashbarrel.js) with trash barrel functionality for houses. Trash barrels that are marked as secure containers are only accessible by owners, co-owners and friends of the house. Various options available at top of script. Updated js/items/axe.js to support chopping up trash barrels and house add-ons in houses owned by the player Fixed an issue with house doors being left behind after demolishing houses while their doors were open Fixed an issue where GMs could be banned from player houses Added Line of Sight checks to speech, to give players some privacy in their own homes Updated house placement code to more accurately check for other multis, dynamic and static objects when placing houses; now requires free space around each house that cannot be blocked by other houses or items that can block player movement, and disallows placement of houses on roads Updated house placement code to move characters blocking house placement to SE corner of the house Updated house placement code to disallow placing houses in guarded regions, or in dungeons Added new DFN tag for regions to enable/disable player houses in specific regions: HOUSING=0/1 Added new region (247) that covers path to Valley of Eodon in Felucca Added new region (248) that covers Valley of Eodon in Ter-Mur, with player housing disabled Added new region (249) that covers entire T2A lands, with player housing disabled Updated SPACEX and SPACEY values for all houses in dfndata/house/house.dfn to match updated house placement code Added new JS property to Regions that can be used to determine or change state of player housing in a region: .canPlaceHouse() Updated rules for usage of dye tubs to dye locked down items; now only house owners or co-owners may dye locked down items Updated rules for usage of the following locked down items in a house, which are now only usable by house owners and co-owners Dyes, Guildstone Deeds, Recall Runes (renaming), Rename Deeds, Townstone Deeds, House Deeds, Boat Models, Player Vendor Deeds, Ore, Hair Dye Updated rules for usage of the following locked down items in a house, which are now only usable by house owners, co-owners and friends: Keys, Dye Tubs, Magic Scrolls, Fireworks Wands, Magic Wands, Smithing Tools, Mining Tools, Fishing Poles Updated item lockdown rules to allow locking down (and releasing) items in a container as long as the container is locked down, and to only allow releasing a locked down container if it's empty of locked down items Updated item lockdown rules to only allow locking down movement-blocking items further than 2 tiles away from doors Updated rules for releasing items in houses - now the house owner can release any locked down items, co-owners can release items locked down by themselves or by friends, while friends can release only items locked down by themselves Added some feedback to player about why their attempted house placement failed Items added by GMs directly into multis will now decay based on the house-specific decay timer instead of the regular one Fixed an issue that could cause items to almost instantly decay after being released from lockdown in a house Placing house add-ons now properly takes into account SPACEX and SPACEY values when checking if they can fit in selected area of houses Re-added SPACEX and SPACEY values for Pentagram and Loom house add-ons House add-ons can now be converted back into house add-on deeds by chopping them with an axe Added new item type - IT_HOUSEADDON (201) - used by house add-ons placed in player houses Fixed a bug where keys would stop working after being added to a keyring, and would turn into blank keys upon release from the keyring Added visitor count for public player houses, which keeps track of how many visits a public house has received, with each player counted max 1 time every 24 hours Fixed an issue with FindPlayersInOldVisrange() where it didn't take into account that players could see buildings further away than the standard update range. This could cause players to see ghost images of buildings if they were at the "right" distance when the building was being demolished Added NODECAY tag to all signs and doors in dfndata/house/house.dfn Added FRONTDOOR or INTERIORDOOR (as appropriate) to all doors in dfndata/house/house.dfn Added BANX and BANY to specify ban location for some houses in dfndata/house/house.dfn instead of relying on finding SE corner automatically Implemented strongboxes (js/server/house/strongbox.js) for co-owners of a house, which can be placed with the house command "i wish to place a strongbox". Max capacity is 25 items Updated 'REMOVE command to take an optional parameter - itemID. If supplied, the command will remove all items with this itemID from a targeted container Fixed a bug when checking if dynamic items were blocking valid spawn locations for NPCs, some function arguments were in the wrong order! Improved code that finds valid spawn locations for items and NPCs spawned via spawn regions. As server gradually builds up lists of valid spawn locations per region over time, it will start using these lists more often, rather than always look for brand new spawn locations. Fixed a bug with CMulHandler::CheckStaticFlag() that prevented NPCs from spawning inside buildings with no static floors! Fixed an issue with repeating commands that prevented GMs from being able to cancel them when using the ClassicUO client Exposed character property .accountNum to JS engine Extended CDataList class to include a Clear() method for clearing lists Updated JS File method .Open() to support an optional, third argument - subFolderName - that defines in which sub-folder of UOX3/shared/ to store/look for a file. If no third argument is supplied, UOX3 will default to using the shared folder itself. Updated JS File method .Length() to return a value of -1 for files that don't exist Added new code function, exposed to JS engine with same parameters, which simply checks if a given tile ID has a specific flag bool CheckTileFlag( UI16 itemID, TILEFLAG flagToCheck ) Added JS function used to find the root container of an item (if any) FindRootContainer( itemSerial ) FindRootContainer( item ) Added new JS function that allows deleting files from UOX3/shared/ folder or subfolders of shared folder. If no subFolderName is provided, looks for file directly in shared folder itself. Restrictions on file- and folder-names apply. bool DeleteFile( fileName, subFolderName ) Added new JS functions for checking if a specific client or server feature is enabled. See documentation for full list of client/server features. GetClientFeature( bitNum ) // Returns true if specified client feature is enabled on server GetServerFeature( bitNum ) // Returns true if specified server feature is enabled on server Added new JS function for returning the value of almost any server setting from UOX.INI GetServerSetting( settingNameInDoubleQuotes ) Updated JS function DoesDynamicBlock() with two new parameters - checkOnlyMultis and checkOnlyNonMultis Updated JS function DoesMapBlock() with two new parameters - checkMultiPlacement and checkForRoad Fixed an issue where a LoS check would prevent players from accessing containers in their own backpack Added new functions in findfuncs.cpp to make it easier to find items near another object or location: findNearbyItems( object, distance ) findNearbyItems( x, y, worldNumber, instanceID, distance ) Added new Item property - maxItems - used by containers to determine their max item capacity Added new Item property - totalItemCount - used to get total item count in a container (including sub-containers) Added check for max item capacity when creating new items that are added to a character's backpack - items will be created below character's feet if backpack is full! Added new DFN tag for items, used by containers to determine item capacity for a given container: MAXITEMS=# // 125 is the default for all containers if not set Added new JS Item properties: .maxItems // gets/sets item capacity for a given container .totalItemCount // gets total item count in a container, including sub-containers Updated item tooltips for containers to show accurate total item count, as well as to display max item capacity Fixed a bug where picking up items from a non-locked down pile of items on the floor inside a multi could cause the remaining pile to be seen as no longer inside the multi, disallowing locking it back down and causing it to decay based on regular decay timer instead of house-specific one Updated JS command set to allow setting poison-level on items ('set poison #) and hunger-level on characters ('set hunger #) Fixed an issue with js/item/food.js that prevented poisoned food from poisoning characters when eaten Fixed an issue with js/skill/poisoning.js that prevented players from poisoning food! Updated various JS scripts and hardcoded targeting functions to disallow the targeting of locked down resources using skills and tools Updated JS Method TextMessage() to support three extra, optional parameters. Note that if one optional parameter is included, all preceding optional parameters are also required! speechTarget - What kind of target is this message intended for? 0 - Only visible for sender and receiver of message 1 - Visible to all players in range 2 - Visible to all NPCs and players in range 3 - Visible to all PCs everywhere + NPCs in range 4 - Visible to all PCs everywhere (broadcast) 5 - Only visible for the receiver of the message speechTargetSerial - The serial of the receiver of the message, used if speechTarget is 0 or 5 speechFontType - The type of font to display the text in. Defaults to normal. 0 - Bold 1 - Normal with shadow 2 - Bold with shadow 3 - Normal 4 - Gothic 5 - Italic 6 - Small, dark 7 - Colourful 8 - Runic (only works with CAPS) 9 - Small, light Added timestamp to worldsaves in console, to make it easier to see when a particular world-save was done Added info about compiler/environment displayed at the top of the UOX3 console during startup Updated dictionary files with new messages primarily related to housing
2020-11-04 02:00:37 +08:00
break;
case CIP_BUILDTIMESTAMP:
if( gPriv->GetObjType() == OT_MULTI )
{
tString = JS_NewStringCopyZ( cx, ( static_cast<CMultiObj *>( gPriv ))->GetBuildTimestamp().c_str() );
Housing Revamp and more Updated JS SysMessage function to accept up to 10 extra, optional arguments, which can be used with dictionary messages that require additional parameters like %s or %i Added new type of house privilege in cMultiObj.cpp to keep track of friends of the multi - HOUSEPRIV_FRIEND - which is stored during worldsaves as one or more Friend=<player serial> tags in house.wsc Added new type of house privilege in cMultiObj.cpp to keep track of guests of the multi - HOUSEPRIV_GUEST - which is stored during worldsaves as one or more Guest=<player serial> tags in house.wsc When items are created for houses upon house placement, a reference to the multi's serial is now stored in the house sign's MORE property to allow easier tracking of which house a particular sign belongs to Added tracking of new, persistent properties for houses via cMultiObj.cpp/h: lockdowns, secure containers, vendors, guests, friends, owners, ban location, public status, number of visits, timestamps Added a multitude of new methods in cMultiObj.cpp/h to assist in improving the functionality of houses Added new tags for houses in house.dfn (default values applied if tag not specified): MAXSECURECONTAINERS=4 - Max amount of secure containers allowed in a multi MAXLOCKDOWNS=256 - Max amount of lockdowns allowed in a multi MAXVENDORS=10 - Max amount of vendors allowed in a multi MAXBANS=50 - Max amount of bans in a multi's ban list MAXFRIENDS=50 - Max amount of friends in a multi's friend list MAXGUESTS=50 - Max amount of guests in a multi's guest list MAXOWNERS=8 - Max amount of owners and co-owners in a multi's owner list MAXTRASHCONTAINERS=1 - Max amount of trash containers allowed in multi SCRIPT=<scriptID> - Assign a JS script-ID directly to a multi FRONTDOOR - indicates that a door is the front door of a house. Cannot be locked in public houses! INTERIORDOOR - indicates that a door is an interior door of a house. Can be locked in public houses. BANX - Location X offset for multi's ban location, if not used, will try to use SE corner of multi instead BANY - Location Y offset for multi's ban location, if not used, will try to use SE corner of multi instead Added JS Event: onHouseCommand( tSock, multiObj, cmdID ) - For handling spoken house commands via JS scripts attached to multi. Updated JS Events: onEntrance() - can now trigger both for multi being entered and/or object entering onLeaving() - can now trigger both for multi being left and/or object entering onSpeech() - can now also trigger for items (in addition to chars) with event & script attached, if UOX.INI setting ITEMSDETECTSPEECH is enabled Added JS Multi methods: .IsBoat() - Returns whether the item (or multi) is a boat .IsOwner( playerToCheck ) - Returns whether a player is the owner of a multi .IsOnOwnerList( playerToCheck ) - Returns whether a player is on the (co-)owner list of a multi .IsOnFriendList( playerToCheck ) - Returns whether a player is on the friend list of a multi .IsOnGuestList( playerToCheck ) - Returns whether a player is on the guest list of a multi .IsOnBanList( playerToCheck ) - Returns whether a player is on the ban list of a multi .AddToFriendList( playertoAdd ) - Adds player to the friend list of a multi .RemoveFromFriendList( playertoRemove ) - Removes player from the friend list of a multi .AddToGuestList( playertoAdd ) - Adds player to the guest list of a multi .RemoveFromGuestList( playertoRemove ) - Removes player from the guest list of a multi .ClearOwnerList() - Clears all entries from a multi's (co-)owner list .ClearFriendList() - Clears all entries from a multi's friend list .ClearGuestList() - Clears all entries from a multi's guest list .ClearBanList() - Clears all entries from a multi's ban list .SecureContainer( itemToSecure ) - Secures a container in a multi .UnsecureContainer( itemToUnsecure ) - Unsecures a container in a multi .IsSecureContainer( itemToCheck ) - Checks if specified item is a secure container in a multi .LockDownItem( itemToLockDown) - Locks down an item in a multi .ReleaseItem( itemToRelease ) - Releases a locked down item in a multi .KillKeys() - Deletes ALL keys associated with a multi .AddTrashCont( itemToAdd ) - Add trash container to multi's list of trash containers .RemoveTrashCont( itemToRemove ) - Remove trash container from multi's list of trash containers Added JS Item (Multi only) properties: .lockdowns - Get the number of lockdowns in a multi .maxLockdowns - Get/Set the max number of lockdowns allowed in a multi .secureContainers - Get the number of secure containers in a multi .maxSecureContainers - Get/Set the max number of secure containers allowed in a multi .trashContainers - Get the number of trash containers in a multi .maxTrashContainers - Get/Set the max number of trash containers allowed in a multi .friends - Get the number of friends in a multi's friend list .maxFriends - Get/Set the max number of friends allowed in a multi's friend list .guests - Get the number of guests in a multi's guest list .maxGuests - Get/Set the max number of guests allowed in a multi's guest list .owners - Get the number of owners in a multi's owner list .maxOwners - Get/Set the max number of owners allowed in a multi's owner list .bans - Get the number of banned players in a multi's ban list .maxBans - Get/Set the max number of banned players allowed in a multi's ban list .vendors - Get the number of player vendors in a multi .maxVendors - Get the max number of player vendors allowed in a multi .deed - Get the item sectionID for deed used to place multi .isPublic - Get/Set the private/public state of a multi .buildTimestamp - Get the timestamp for when the house was originally placed .tradeTimestamp - Get the timestamp for when the house was last traded to another player .banX - Get/Set the ban location X offset for the multi .banY - Get/Set the ban location Y offset for the multi Added JS Character properties: .multi = Get/Set the multi object the character is in .accountNum = Get the account number the character belongs to .housesOwned = Get a count of houses owned by the character .housesCoOwned = Get a count of houses co-owned by the character Updated JS cBaseObject Methods .FirstItem(), .NextItem() and .FinishedItems() to also support iterating through items in multis Updated JS multi Methods .FirstChar(), .NextChar() and .FinishedChars() to support an additional parameter to specify what kind of characters to loop through: "default" or no parameter - all characters inside the multi "owner" - players on multi's owner list "friend" - players on multi's friend list "guest" - players on multi's guest list "banned" - players on multi's ban list Added new INI tags to a new section of uox.ini called [houses] DECAYTIMERINHOUSE=3600 // Decay timer in seconds for non-locked down items inside houses PROTECTPRIVATEHOUSES=1 // Toggles whether private houses will automatically boot unauthorized visitors (1) or not (0) TRACKHOUSESPERACCOUNT=1 // Toggles whether to track (and restrict) house ownership per account (1) or per character (0) MAXHOUSESOWNABLE=1 // Specifies the max amount of houses a player can own per account/char, depending on how house ownership is tracked MAXHOUSESCOOWNABLE=10 // Specifies the max amount of houses a player can co-own per character CANOWNANDCOOWNHOUSES=1 // Toggles whether players can own and co-own houses at the same time COOWNHOUSESONSAMEACCOUNT=1 // Toggles whether characters on same account as house owner will be treated as co-owners Added new INI tags in [settings] section of uox.ini: ITEMSDETECTSPEECH=0 // If enabled, server will search for nearby items with onSpeech JS event running whenever a character speaks. Disabled by default. MAXPLAYERPACKITEMS=125 // Defines max item capacity for player (and NPC) backpacks. Defaults to 125. Moved most of the existing house functionality to JS and expanded upon it to reach feature parity with houses in regular UO around Publish 15/16, with various extras thrown in for good measure and all functionality being customizable: js/server/house/house.js (15000) - handles detection of house commands and characters entering/leaving houses js/server/house/houseSign.js (15001) - contains and handles all house-related gumps/menus and what is shown when players interact with house sign js/server/house/houseCommands.js (15002) - handles functionality of house commands and other functionality such as transfer of ownership, demolishing house, etc. js/server/house/houseDeed.js (15003) - handles initial rules that allow/disallow placement of additional houses for players All house-related menus now fully handled through JS All house commands and other functionality now fully handled through JS Removed redundant hard-coded house functionality Implemented Co-owners, friends, guests for houses, with access rules in place for entry, lockdowns, house commands, etc. Implemented Private and Public houses Implemented Secure Containers and Trash Barrels Definable max lockdowns, secure containers, player vendors, bans, friends, guests, owners, trash containers and more - per house type JS scripts can now be attached directly to houses Doors in houses can be marked as front doors or interior doors, and will be treated differently with regards to private and public houses Added new item to dfndata/items/containers/misc.dfn - [trashbarrel] Added new JS script (js/items/trashbarrel.js) with trash barrel functionality for houses. Trash barrels that are marked as secure containers are only accessible by owners, co-owners and friends of the house. Various options available at top of script. Updated js/items/axe.js to support chopping up trash barrels and house add-ons in houses owned by the player Fixed an issue with house doors being left behind after demolishing houses while their doors were open Fixed an issue where GMs could be banned from player houses Added Line of Sight checks to speech, to give players some privacy in their own homes Updated house placement code to more accurately check for other multis, dynamic and static objects when placing houses; now requires free space around each house that cannot be blocked by other houses or items that can block player movement, and disallows placement of houses on roads Updated house placement code to move characters blocking house placement to SE corner of the house Updated house placement code to disallow placing houses in guarded regions, or in dungeons Added new DFN tag for regions to enable/disable player houses in specific regions: HOUSING=0/1 Added new region (247) that covers path to Valley of Eodon in Felucca Added new region (248) that covers Valley of Eodon in Ter-Mur, with player housing disabled Added new region (249) that covers entire T2A lands, with player housing disabled Updated SPACEX and SPACEY values for all houses in dfndata/house/house.dfn to match updated house placement code Added new JS property to Regions that can be used to determine or change state of player housing in a region: .canPlaceHouse() Updated rules for usage of dye tubs to dye locked down items; now only house owners or co-owners may dye locked down items Updated rules for usage of the following locked down items in a house, which are now only usable by house owners and co-owners Dyes, Guildstone Deeds, Recall Runes (renaming), Rename Deeds, Townstone Deeds, House Deeds, Boat Models, Player Vendor Deeds, Ore, Hair Dye Updated rules for usage of the following locked down items in a house, which are now only usable by house owners, co-owners and friends: Keys, Dye Tubs, Magic Scrolls, Fireworks Wands, Magic Wands, Smithing Tools, Mining Tools, Fishing Poles Updated item lockdown rules to allow locking down (and releasing) items in a container as long as the container is locked down, and to only allow releasing a locked down container if it's empty of locked down items Updated item lockdown rules to only allow locking down movement-blocking items further than 2 tiles away from doors Updated rules for releasing items in houses - now the house owner can release any locked down items, co-owners can release items locked down by themselves or by friends, while friends can release only items locked down by themselves Added some feedback to player about why their attempted house placement failed Items added by GMs directly into multis will now decay based on the house-specific decay timer instead of the regular one Fixed an issue that could cause items to almost instantly decay after being released from lockdown in a house Placing house add-ons now properly takes into account SPACEX and SPACEY values when checking if they can fit in selected area of houses Re-added SPACEX and SPACEY values for Pentagram and Loom house add-ons House add-ons can now be converted back into house add-on deeds by chopping them with an axe Added new item type - IT_HOUSEADDON (201) - used by house add-ons placed in player houses Fixed a bug where keys would stop working after being added to a keyring, and would turn into blank keys upon release from the keyring Added visitor count for public player houses, which keeps track of how many visits a public house has received, with each player counted max 1 time every 24 hours Fixed an issue with FindPlayersInOldVisrange() where it didn't take into account that players could see buildings further away than the standard update range. This could cause players to see ghost images of buildings if they were at the "right" distance when the building was being demolished Added NODECAY tag to all signs and doors in dfndata/house/house.dfn Added FRONTDOOR or INTERIORDOOR (as appropriate) to all doors in dfndata/house/house.dfn Added BANX and BANY to specify ban location for some houses in dfndata/house/house.dfn instead of relying on finding SE corner automatically Implemented strongboxes (js/server/house/strongbox.js) for co-owners of a house, which can be placed with the house command "i wish to place a strongbox". Max capacity is 25 items Updated 'REMOVE command to take an optional parameter - itemID. If supplied, the command will remove all items with this itemID from a targeted container Fixed a bug when checking if dynamic items were blocking valid spawn locations for NPCs, some function arguments were in the wrong order! Improved code that finds valid spawn locations for items and NPCs spawned via spawn regions. As server gradually builds up lists of valid spawn locations per region over time, it will start using these lists more often, rather than always look for brand new spawn locations. Fixed a bug with CMulHandler::CheckStaticFlag() that prevented NPCs from spawning inside buildings with no static floors! Fixed an issue with repeating commands that prevented GMs from being able to cancel them when using the ClassicUO client Exposed character property .accountNum to JS engine Extended CDataList class to include a Clear() method for clearing lists Updated JS File method .Open() to support an optional, third argument - subFolderName - that defines in which sub-folder of UOX3/shared/ to store/look for a file. If no third argument is supplied, UOX3 will default to using the shared folder itself. Updated JS File method .Length() to return a value of -1 for files that don't exist Added new code function, exposed to JS engine with same parameters, which simply checks if a given tile ID has a specific flag bool CheckTileFlag( UI16 itemID, TILEFLAG flagToCheck ) Added JS function used to find the root container of an item (if any) FindRootContainer( itemSerial ) FindRootContainer( item ) Added new JS function that allows deleting files from UOX3/shared/ folder or subfolders of shared folder. If no subFolderName is provided, looks for file directly in shared folder itself. Restrictions on file- and folder-names apply. bool DeleteFile( fileName, subFolderName ) Added new JS functions for checking if a specific client or server feature is enabled. See documentation for full list of client/server features. GetClientFeature( bitNum ) // Returns true if specified client feature is enabled on server GetServerFeature( bitNum ) // Returns true if specified server feature is enabled on server Added new JS function for returning the value of almost any server setting from UOX.INI GetServerSetting( settingNameInDoubleQuotes ) Updated JS function DoesDynamicBlock() with two new parameters - checkOnlyMultis and checkOnlyNonMultis Updated JS function DoesMapBlock() with two new parameters - checkMultiPlacement and checkForRoad Fixed an issue where a LoS check would prevent players from accessing containers in their own backpack Added new functions in findfuncs.cpp to make it easier to find items near another object or location: findNearbyItems( object, distance ) findNearbyItems( x, y, worldNumber, instanceID, distance ) Added new Item property - maxItems - used by containers to determine their max item capacity Added new Item property - totalItemCount - used to get total item count in a container (including sub-containers) Added check for max item capacity when creating new items that are added to a character's backpack - items will be created below character's feet if backpack is full! Added new DFN tag for items, used by containers to determine item capacity for a given container: MAXITEMS=# // 125 is the default for all containers if not set Added new JS Item properties: .maxItems // gets/sets item capacity for a given container .totalItemCount // gets total item count in a container, including sub-containers Updated item tooltips for containers to show accurate total item count, as well as to display max item capacity Fixed a bug where picking up items from a non-locked down pile of items on the floor inside a multi could cause the remaining pile to be seen as no longer inside the multi, disallowing locking it back down and causing it to decay based on regular decay timer instead of house-specific one Updated JS command set to allow setting poison-level on items ('set poison #) and hunger-level on characters ('set hunger #) Fixed an issue with js/item/food.js that prevented poisoned food from poisoning characters when eaten Fixed an issue with js/skill/poisoning.js that prevented players from poisoning food! Updated various JS scripts and hardcoded targeting functions to disallow the targeting of locked down resources using skills and tools Updated JS Method TextMessage() to support three extra, optional parameters. Note that if one optional parameter is included, all preceding optional parameters are also required! speechTarget - What kind of target is this message intended for? 0 - Only visible for sender and receiver of message 1 - Visible to all players in range 2 - Visible to all NPCs and players in range 3 - Visible to all PCs everywhere + NPCs in range 4 - Visible to all PCs everywhere (broadcast) 5 - Only visible for the receiver of the message speechTargetSerial - The serial of the receiver of the message, used if speechTarget is 0 or 5 speechFontType - The type of font to display the text in. Defaults to normal. 0 - Bold 1 - Normal with shadow 2 - Bold with shadow 3 - Normal 4 - Gothic 5 - Italic 6 - Small, dark 7 - Colourful 8 - Runic (only works with CAPS) 9 - Small, light Added timestamp to worldsaves in console, to make it easier to see when a particular world-save was done Added info about compiler/environment displayed at the top of the UOX3 console during startup Updated dictionary files with new messages primarily related to housing
2020-11-04 02:00:37 +08:00
*vp = STRING_TO_JSVAL( tString );
}
0.99.4d Added new option in UOX.INI under [settings] section: MAPDIFFSENABLED=0/1 // If enabled, server will attempt to load diff files, and send "Enable Map-diff files" packet to client to also load these. Disabled by default. Server no longer loads map/statics diff files by default, nor does it send packet to client to request loading these files, as only client versions below 7.0.8.2 will actively load these files. Can be re-enabled with new UOX.INI setting mentioned above! Fixed incorrect ID for gargish dagger in CHandleCombat::getWeaponType() Added missing weapon entries in CHandleCombat::getWeaponType(): bladed whip, barbed whip, spiked whip, gargish talwar Fixed an issue that would show the end part of some tiledata names as garbled text instead of cutting off the text(!) at 20 characters Fixed an issue with advanced character creation template when using ClassicUO client, which sends a profession value of 255 instead of 0 when no profession template has been selected. Fixed an issue where clones of NPCs that can split in combat didn't get the NPC flag correctly set Guild titles are now removed for players who leave their guilds Enabled closing some hard-coded gump menus using right-click (howto, guild, towns, wholist, addmenu, craftmenu, info) Fixed an issue where adding base items using 'add [itemID] would sometimes get false positive hits from harditems.dfn, depending on the length of the itemID Fixed an issue where items added using 'add [itemID] would not get names applied properly from harditems.dfn Item/NPC DFN tag GET can now inherit a random parent by adding additional values separated by spaces. Syntax: GET=parent1 parent2 parent3 (etc) Fixed an issue where NPC backpacks would not have the max item capacity set properly Added new properties for CItem objects (also exposed as JS Item Properties): maxRange // max distance a ranged weapon can fire at (replaces ARCHERRANGE ini setting) baseRange // base distance throwing weapons (when implemented) can be used at Added support for new Item DFN tag that replaces global UOX.INI setting ARCHERRANGE: MAXRANGE=# // Specifies max range of ranged weapon Added support for new Item/NPC DFN tags to support randomizing elemental resistances: RESISTFIRE=#/# # // Set NPC's poison resistance; fixed or random value RESISTCOLD=#/# # // Set NPC's poison resistance; fixed or random value RESISTLIGHTNING=#/# # // Set NPC's poison resistance; fixed or random value RESISTPOISON=#/# # // Set NPC's poison resistance; fixed or random value Added support for two new DFN tags in dfndata/race/races.dfn that can be used to allow/ban lists of equipment for specific races ALLOWEQUIPLIST=# BANEQUIPLIST=# Added support for new section in dfndata/race/races.dfn - [EQUIPLIST #], which can be used to define lists of equipment that is whitelisted or banned for specific races. Fixed a bug that would report incorrect weight in tooltips for Item/NPC spawner objects ScriptSections are now reapplied for items bought by players from NPC vendors Fixed an issue where players could drop an item on the ground and other players would still see the item after it was picked up, because of a failed distance check vs old location coordinates (in pack) instead of vs current location on ground Fixed a bug with players being able to use last-target macro to target objects picked up and held by other players on their cursor Updated all references to "devinelock" to be "divinelock" instead - this includes the name of the JS Item property Fixed house commands triggering (useless) targeting cursors for players onboard boats Changed default statcap in UOX.INI from 325 to 225 Fixed a out-of-range error for players attempting to combine ore inside their own backpack Fixed various issues with distance checks and container checks when using/target objects Added optional 4th "hue" parameter to AddGump JS method Added JS Function to get total amount of accounts on server - GetAccountCount() Added JS Function to get total amount of players online - GetPlayerCount() onSwing JS Event can now trigger in scripts attached to items, not just items attached to characters Added some JS Functions to expose some hard-coded constants to JS scripts: BASEITEMSERIAL() // Base item serial INVALIDSERIAL() // Invalid serial INVALIDID() // Invalid ID INVALIDCOLOUR() // Invalid colour Fixed an issue where JS character property .colour would modify origSkin property instead of colour Fixed an issue where JS character property .guildTitle returned the name of the character instead of the guild title Character JS property .poison can now also be used to set a character's poisoned level, not just read it Exposed Item property to JS engine: .ac // armour class for item (0-128). Primarily used for setting race-restrictions for equippable items, i.e. race X cannot equip items of armour class Y. .def // defensive value of item (Physical resistance post-AoS, AR in older UO) // NOTE: The following properties don't actually do anything yet, but can still be used in custom JS scripts if desired .resistCold // Cold resistance of item 0-1000, where 1000 equals 100.0% .resistHeat // Heat/Fire resistance of item 0-1000, where 1000 equals 100.0% .resistLight // Light resistance of item 0-1000, where 1000 equals 100.0% .resistLightning // Energy/Lightning resistance of item 0-1000, where 1000 equals 100.0% .resistPoison // Poison resistance of item 0-1000, where 1000 equals 100.0% .resistRain // Rain resistance of item 0-1000, where 1000 equals 100.0% .resistSnow // Snow resistance of item 0-1000, where 1000 equals 100.0% .damageHeat // Weapon deals Heat/Fire elemental damage (true/false) .damageCold // Weapon deals Cold elemental damage (true/false) .damageLight // Weapon deals Light elemental damage (true/false) .damageLightning // Weapon deals Lightning elemental damage (true/false) .damagePoison // Weapon deals Poison elemental damage (true/false) .damageRain // Weapon deals Rain/Water elemental damage (true/false) .damageSnow // Weapon deals Snow/Ice elemental damage (true/false) Added new UOX.INI setting under [server] to enable/disable shard response to ConnectUO server polling (disabled by default) Sub-commands are no longer included when registering packets to be overloaded via RegisterPacket function, as that part was never fully implemented. Packet-hook scripts can be setup for specific packet IDs, but any sub-command checking will need to be done in the script itself JS Packet Method GetDWord() now uses JS_NewNumberValue instead of INT_TO_JSVAL to read from the socket buffer, to better handle large numbers, which could previously be returned with wrong values. JS Function CalcItemFromSer() now uses a JS_GetStringBytes() and str_value() combo instead of JSVAL_TO_INT() to read the data provided in the function argument. This allows JS scripts to provide item serials to the function directly without needing to split it into four parts first (though that still works) Fixed issue where JS properties for multis didn't always return correct values The 'set command can now be used to set the armour class of items ('set ac #) Reimplemented 'tweak command in JS engine (js/commands/targeting/tweak.js) - can be used to view and modify properties of characters, character skills, items, multis and regions (target ground) Added placeholder packet-hook script (js/server/network/0xf1_connectUoServerPoll.js) to handle responses to ConnectUO server polling. By default this script does nothing, but serves as a placeholder for drop-in replacement scripts generated specifically for each shard by the ConnectUO service. Updated some commands to support an alternate STATIC keyword (can also be ommitted) to add base items: 'add static itemID 'tile static itemID Updated some commands with support for randomization. Provided itemID will be randomized based on provided rndValue: /js/commands/targeting/add.js: 'add itemID rndValue cmdtable.cpp and targeting.cpp: 'tile itemID rndValue 'tile itemID x1 x2 y1 y2 z rndValue Updated js/commands/custom/repeatingcmds.js to support 'm delete as an alias for 'rremove Added 'props as an alias for the 'tweak command Added 'teleport as an alias for the 'tele command (js/commands/targeting/tele.js) Added 'shavehair and 'shavebeard as aliases for 'kill hair and 'kill beard (js/commands/targeting/kill.js) Added 'noinvul and 'mortal aliases for the 'invul false command (js/commands/custom/misc-cmds.js) Added 'immortal and 'invul (without parameter) as aliases for the 'invul true command Added 'bringtopack as an alias of 'movetobag command (js/commands/targeting/movetobag.js) Updated check for cancelling of target cursor in various JS scripts Minor updates to various JS scripts Fixed issue where some item definitions in dfndata/harditems/harditems.dfn and dfndata/items/building/lighting.dfn used comma instead of space as delimiter for the VALUE tag, which thus never got applied Updated all NPC definitions to let NPCs spawn facing in random directions
2021-03-22 05:59:20 +08:00
else
{
0.99.4d Added new option in UOX.INI under [settings] section: MAPDIFFSENABLED=0/1 // If enabled, server will attempt to load diff files, and send "Enable Map-diff files" packet to client to also load these. Disabled by default. Server no longer loads map/statics diff files by default, nor does it send packet to client to request loading these files, as only client versions below 7.0.8.2 will actively load these files. Can be re-enabled with new UOX.INI setting mentioned above! Fixed incorrect ID for gargish dagger in CHandleCombat::getWeaponType() Added missing weapon entries in CHandleCombat::getWeaponType(): bladed whip, barbed whip, spiked whip, gargish talwar Fixed an issue that would show the end part of some tiledata names as garbled text instead of cutting off the text(!) at 20 characters Fixed an issue with advanced character creation template when using ClassicUO client, which sends a profession value of 255 instead of 0 when no profession template has been selected. Fixed an issue where clones of NPCs that can split in combat didn't get the NPC flag correctly set Guild titles are now removed for players who leave their guilds Enabled closing some hard-coded gump menus using right-click (howto, guild, towns, wholist, addmenu, craftmenu, info) Fixed an issue where adding base items using 'add [itemID] would sometimes get false positive hits from harditems.dfn, depending on the length of the itemID Fixed an issue where items added using 'add [itemID] would not get names applied properly from harditems.dfn Item/NPC DFN tag GET can now inherit a random parent by adding additional values separated by spaces. Syntax: GET=parent1 parent2 parent3 (etc) Fixed an issue where NPC backpacks would not have the max item capacity set properly Added new properties for CItem objects (also exposed as JS Item Properties): maxRange // max distance a ranged weapon can fire at (replaces ARCHERRANGE ini setting) baseRange // base distance throwing weapons (when implemented) can be used at Added support for new Item DFN tag that replaces global UOX.INI setting ARCHERRANGE: MAXRANGE=# // Specifies max range of ranged weapon Added support for new Item/NPC DFN tags to support randomizing elemental resistances: RESISTFIRE=#/# # // Set NPC's poison resistance; fixed or random value RESISTCOLD=#/# # // Set NPC's poison resistance; fixed or random value RESISTLIGHTNING=#/# # // Set NPC's poison resistance; fixed or random value RESISTPOISON=#/# # // Set NPC's poison resistance; fixed or random value Added support for two new DFN tags in dfndata/race/races.dfn that can be used to allow/ban lists of equipment for specific races ALLOWEQUIPLIST=# BANEQUIPLIST=# Added support for new section in dfndata/race/races.dfn - [EQUIPLIST #], which can be used to define lists of equipment that is whitelisted or banned for specific races. Fixed a bug that would report incorrect weight in tooltips for Item/NPC spawner objects ScriptSections are now reapplied for items bought by players from NPC vendors Fixed an issue where players could drop an item on the ground and other players would still see the item after it was picked up, because of a failed distance check vs old location coordinates (in pack) instead of vs current location on ground Fixed a bug with players being able to use last-target macro to target objects picked up and held by other players on their cursor Updated all references to "devinelock" to be "divinelock" instead - this includes the name of the JS Item property Fixed house commands triggering (useless) targeting cursors for players onboard boats Changed default statcap in UOX.INI from 325 to 225 Fixed a out-of-range error for players attempting to combine ore inside their own backpack Fixed various issues with distance checks and container checks when using/target objects Added optional 4th "hue" parameter to AddGump JS method Added JS Function to get total amount of accounts on server - GetAccountCount() Added JS Function to get total amount of players online - GetPlayerCount() onSwing JS Event can now trigger in scripts attached to items, not just items attached to characters Added some JS Functions to expose some hard-coded constants to JS scripts: BASEITEMSERIAL() // Base item serial INVALIDSERIAL() // Invalid serial INVALIDID() // Invalid ID INVALIDCOLOUR() // Invalid colour Fixed an issue where JS character property .colour would modify origSkin property instead of colour Fixed an issue where JS character property .guildTitle returned the name of the character instead of the guild title Character JS property .poison can now also be used to set a character's poisoned level, not just read it Exposed Item property to JS engine: .ac // armour class for item (0-128). Primarily used for setting race-restrictions for equippable items, i.e. race X cannot equip items of armour class Y. .def // defensive value of item (Physical resistance post-AoS, AR in older UO) // NOTE: The following properties don't actually do anything yet, but can still be used in custom JS scripts if desired .resistCold // Cold resistance of item 0-1000, where 1000 equals 100.0% .resistHeat // Heat/Fire resistance of item 0-1000, where 1000 equals 100.0% .resistLight // Light resistance of item 0-1000, where 1000 equals 100.0% .resistLightning // Energy/Lightning resistance of item 0-1000, where 1000 equals 100.0% .resistPoison // Poison resistance of item 0-1000, where 1000 equals 100.0% .resistRain // Rain resistance of item 0-1000, where 1000 equals 100.0% .resistSnow // Snow resistance of item 0-1000, where 1000 equals 100.0% .damageHeat // Weapon deals Heat/Fire elemental damage (true/false) .damageCold // Weapon deals Cold elemental damage (true/false) .damageLight // Weapon deals Light elemental damage (true/false) .damageLightning // Weapon deals Lightning elemental damage (true/false) .damagePoison // Weapon deals Poison elemental damage (true/false) .damageRain // Weapon deals Rain/Water elemental damage (true/false) .damageSnow // Weapon deals Snow/Ice elemental damage (true/false) Added new UOX.INI setting under [server] to enable/disable shard response to ConnectUO server polling (disabled by default) Sub-commands are no longer included when registering packets to be overloaded via RegisterPacket function, as that part was never fully implemented. Packet-hook scripts can be setup for specific packet IDs, but any sub-command checking will need to be done in the script itself JS Packet Method GetDWord() now uses JS_NewNumberValue instead of INT_TO_JSVAL to read from the socket buffer, to better handle large numbers, which could previously be returned with wrong values. JS Function CalcItemFromSer() now uses a JS_GetStringBytes() and str_value() combo instead of JSVAL_TO_INT() to read the data provided in the function argument. This allows JS scripts to provide item serials to the function directly without needing to split it into four parts first (though that still works) Fixed issue where JS properties for multis didn't always return correct values The 'set command can now be used to set the armour class of items ('set ac #) Reimplemented 'tweak command in JS engine (js/commands/targeting/tweak.js) - can be used to view and modify properties of characters, character skills, items, multis and regions (target ground) Added placeholder packet-hook script (js/server/network/0xf1_connectUoServerPoll.js) to handle responses to ConnectUO server polling. By default this script does nothing, but serves as a placeholder for drop-in replacement scripts generated specifically for each shard by the ConnectUO service. Updated some commands to support an alternate STATIC keyword (can also be ommitted) to add base items: 'add static itemID 'tile static itemID Updated some commands with support for randomization. Provided itemID will be randomized based on provided rndValue: /js/commands/targeting/add.js: 'add itemID rndValue cmdtable.cpp and targeting.cpp: 'tile itemID rndValue 'tile itemID x1 x2 y1 y2 z rndValue Updated js/commands/custom/repeatingcmds.js to support 'm delete as an alias for 'rremove Added 'props as an alias for the 'tweak command Added 'teleport as an alias for the 'tele command (js/commands/targeting/tele.js) Added 'shavehair and 'shavebeard as aliases for 'kill hair and 'kill beard (js/commands/targeting/kill.js) Added 'noinvul and 'mortal aliases for the 'invul false command (js/commands/custom/misc-cmds.js) Added 'immortal and 'invul (without parameter) as aliases for the 'invul true command Added 'bringtopack as an alias of 'movetobag command (js/commands/targeting/movetobag.js) Updated check for cancelling of target cursor in various JS scripts Minor updates to various JS scripts Fixed issue where some item definitions in dfndata/harditems/harditems.dfn and dfndata/items/building/lighting.dfn used comma instead of space as delimiter for the VALUE tag, which thus never got applied Updated all NPC definitions to let NPCs spawn facing in random directions
2021-03-22 05:59:20 +08:00
*vp = JSVAL_NULL;
}
Housing Revamp and more Updated JS SysMessage function to accept up to 10 extra, optional arguments, which can be used with dictionary messages that require additional parameters like %s or %i Added new type of house privilege in cMultiObj.cpp to keep track of friends of the multi - HOUSEPRIV_FRIEND - which is stored during worldsaves as one or more Friend=<player serial> tags in house.wsc Added new type of house privilege in cMultiObj.cpp to keep track of guests of the multi - HOUSEPRIV_GUEST - which is stored during worldsaves as one or more Guest=<player serial> tags in house.wsc When items are created for houses upon house placement, a reference to the multi's serial is now stored in the house sign's MORE property to allow easier tracking of which house a particular sign belongs to Added tracking of new, persistent properties for houses via cMultiObj.cpp/h: lockdowns, secure containers, vendors, guests, friends, owners, ban location, public status, number of visits, timestamps Added a multitude of new methods in cMultiObj.cpp/h to assist in improving the functionality of houses Added new tags for houses in house.dfn (default values applied if tag not specified): MAXSECURECONTAINERS=4 - Max amount of secure containers allowed in a multi MAXLOCKDOWNS=256 - Max amount of lockdowns allowed in a multi MAXVENDORS=10 - Max amount of vendors allowed in a multi MAXBANS=50 - Max amount of bans in a multi's ban list MAXFRIENDS=50 - Max amount of friends in a multi's friend list MAXGUESTS=50 - Max amount of guests in a multi's guest list MAXOWNERS=8 - Max amount of owners and co-owners in a multi's owner list MAXTRASHCONTAINERS=1 - Max amount of trash containers allowed in multi SCRIPT=<scriptID> - Assign a JS script-ID directly to a multi FRONTDOOR - indicates that a door is the front door of a house. Cannot be locked in public houses! INTERIORDOOR - indicates that a door is an interior door of a house. Can be locked in public houses. BANX - Location X offset for multi's ban location, if not used, will try to use SE corner of multi instead BANY - Location Y offset for multi's ban location, if not used, will try to use SE corner of multi instead Added JS Event: onHouseCommand( tSock, multiObj, cmdID ) - For handling spoken house commands via JS scripts attached to multi. Updated JS Events: onEntrance() - can now trigger both for multi being entered and/or object entering onLeaving() - can now trigger both for multi being left and/or object entering onSpeech() - can now also trigger for items (in addition to chars) with event & script attached, if UOX.INI setting ITEMSDETECTSPEECH is enabled Added JS Multi methods: .IsBoat() - Returns whether the item (or multi) is a boat .IsOwner( playerToCheck ) - Returns whether a player is the owner of a multi .IsOnOwnerList( playerToCheck ) - Returns whether a player is on the (co-)owner list of a multi .IsOnFriendList( playerToCheck ) - Returns whether a player is on the friend list of a multi .IsOnGuestList( playerToCheck ) - Returns whether a player is on the guest list of a multi .IsOnBanList( playerToCheck ) - Returns whether a player is on the ban list of a multi .AddToFriendList( playertoAdd ) - Adds player to the friend list of a multi .RemoveFromFriendList( playertoRemove ) - Removes player from the friend list of a multi .AddToGuestList( playertoAdd ) - Adds player to the guest list of a multi .RemoveFromGuestList( playertoRemove ) - Removes player from the guest list of a multi .ClearOwnerList() - Clears all entries from a multi's (co-)owner list .ClearFriendList() - Clears all entries from a multi's friend list .ClearGuestList() - Clears all entries from a multi's guest list .ClearBanList() - Clears all entries from a multi's ban list .SecureContainer( itemToSecure ) - Secures a container in a multi .UnsecureContainer( itemToUnsecure ) - Unsecures a container in a multi .IsSecureContainer( itemToCheck ) - Checks if specified item is a secure container in a multi .LockDownItem( itemToLockDown) - Locks down an item in a multi .ReleaseItem( itemToRelease ) - Releases a locked down item in a multi .KillKeys() - Deletes ALL keys associated with a multi .AddTrashCont( itemToAdd ) - Add trash container to multi's list of trash containers .RemoveTrashCont( itemToRemove ) - Remove trash container from multi's list of trash containers Added JS Item (Multi only) properties: .lockdowns - Get the number of lockdowns in a multi .maxLockdowns - Get/Set the max number of lockdowns allowed in a multi .secureContainers - Get the number of secure containers in a multi .maxSecureContainers - Get/Set the max number of secure containers allowed in a multi .trashContainers - Get the number of trash containers in a multi .maxTrashContainers - Get/Set the max number of trash containers allowed in a multi .friends - Get the number of friends in a multi's friend list .maxFriends - Get/Set the max number of friends allowed in a multi's friend list .guests - Get the number of guests in a multi's guest list .maxGuests - Get/Set the max number of guests allowed in a multi's guest list .owners - Get the number of owners in a multi's owner list .maxOwners - Get/Set the max number of owners allowed in a multi's owner list .bans - Get the number of banned players in a multi's ban list .maxBans - Get/Set the max number of banned players allowed in a multi's ban list .vendors - Get the number of player vendors in a multi .maxVendors - Get the max number of player vendors allowed in a multi .deed - Get the item sectionID for deed used to place multi .isPublic - Get/Set the private/public state of a multi .buildTimestamp - Get the timestamp for when the house was originally placed .tradeTimestamp - Get the timestamp for when the house was last traded to another player .banX - Get/Set the ban location X offset for the multi .banY - Get/Set the ban location Y offset for the multi Added JS Character properties: .multi = Get/Set the multi object the character is in .accountNum = Get the account number the character belongs to .housesOwned = Get a count of houses owned by the character .housesCoOwned = Get a count of houses co-owned by the character Updated JS cBaseObject Methods .FirstItem(), .NextItem() and .FinishedItems() to also support iterating through items in multis Updated JS multi Methods .FirstChar(), .NextChar() and .FinishedChars() to support an additional parameter to specify what kind of characters to loop through: "default" or no parameter - all characters inside the multi "owner" - players on multi's owner list "friend" - players on multi's friend list "guest" - players on multi's guest list "banned" - players on multi's ban list Added new INI tags to a new section of uox.ini called [houses] DECAYTIMERINHOUSE=3600 // Decay timer in seconds for non-locked down items inside houses PROTECTPRIVATEHOUSES=1 // Toggles whether private houses will automatically boot unauthorized visitors (1) or not (0) TRACKHOUSESPERACCOUNT=1 // Toggles whether to track (and restrict) house ownership per account (1) or per character (0) MAXHOUSESOWNABLE=1 // Specifies the max amount of houses a player can own per account/char, depending on how house ownership is tracked MAXHOUSESCOOWNABLE=10 // Specifies the max amount of houses a player can co-own per character CANOWNANDCOOWNHOUSES=1 // Toggles whether players can own and co-own houses at the same time COOWNHOUSESONSAMEACCOUNT=1 // Toggles whether characters on same account as house owner will be treated as co-owners Added new INI tags in [settings] section of uox.ini: ITEMSDETECTSPEECH=0 // If enabled, server will search for nearby items with onSpeech JS event running whenever a character speaks. Disabled by default. MAXPLAYERPACKITEMS=125 // Defines max item capacity for player (and NPC) backpacks. Defaults to 125. Moved most of the existing house functionality to JS and expanded upon it to reach feature parity with houses in regular UO around Publish 15/16, with various extras thrown in for good measure and all functionality being customizable: js/server/house/house.js (15000) - handles detection of house commands and characters entering/leaving houses js/server/house/houseSign.js (15001) - contains and handles all house-related gumps/menus and what is shown when players interact with house sign js/server/house/houseCommands.js (15002) - handles functionality of house commands and other functionality such as transfer of ownership, demolishing house, etc. js/server/house/houseDeed.js (15003) - handles initial rules that allow/disallow placement of additional houses for players All house-related menus now fully handled through JS All house commands and other functionality now fully handled through JS Removed redundant hard-coded house functionality Implemented Co-owners, friends, guests for houses, with access rules in place for entry, lockdowns, house commands, etc. Implemented Private and Public houses Implemented Secure Containers and Trash Barrels Definable max lockdowns, secure containers, player vendors, bans, friends, guests, owners, trash containers and more - per house type JS scripts can now be attached directly to houses Doors in houses can be marked as front doors or interior doors, and will be treated differently with regards to private and public houses Added new item to dfndata/items/containers/misc.dfn - [trashbarrel] Added new JS script (js/items/trashbarrel.js) with trash barrel functionality for houses. Trash barrels that are marked as secure containers are only accessible by owners, co-owners and friends of the house. Various options available at top of script. Updated js/items/axe.js to support chopping up trash barrels and house add-ons in houses owned by the player Fixed an issue with house doors being left behind after demolishing houses while their doors were open Fixed an issue where GMs could be banned from player houses Added Line of Sight checks to speech, to give players some privacy in their own homes Updated house placement code to more accurately check for other multis, dynamic and static objects when placing houses; now requires free space around each house that cannot be blocked by other houses or items that can block player movement, and disallows placement of houses on roads Updated house placement code to move characters blocking house placement to SE corner of the house Updated house placement code to disallow placing houses in guarded regions, or in dungeons Added new DFN tag for regions to enable/disable player houses in specific regions: HOUSING=0/1 Added new region (247) that covers path to Valley of Eodon in Felucca Added new region (248) that covers Valley of Eodon in Ter-Mur, with player housing disabled Added new region (249) that covers entire T2A lands, with player housing disabled Updated SPACEX and SPACEY values for all houses in dfndata/house/house.dfn to match updated house placement code Added new JS property to Regions that can be used to determine or change state of player housing in a region: .canPlaceHouse() Updated rules for usage of dye tubs to dye locked down items; now only house owners or co-owners may dye locked down items Updated rules for usage of the following locked down items in a house, which are now only usable by house owners and co-owners Dyes, Guildstone Deeds, Recall Runes (renaming), Rename Deeds, Townstone Deeds, House Deeds, Boat Models, Player Vendor Deeds, Ore, Hair Dye Updated rules for usage of the following locked down items in a house, which are now only usable by house owners, co-owners and friends: Keys, Dye Tubs, Magic Scrolls, Fireworks Wands, Magic Wands, Smithing Tools, Mining Tools, Fishing Poles Updated item lockdown rules to allow locking down (and releasing) items in a container as long as the container is locked down, and to only allow releasing a locked down container if it's empty of locked down items Updated item lockdown rules to only allow locking down movement-blocking items further than 2 tiles away from doors Updated rules for releasing items in houses - now the house owner can release any locked down items, co-owners can release items locked down by themselves or by friends, while friends can release only items locked down by themselves Added some feedback to player about why their attempted house placement failed Items added by GMs directly into multis will now decay based on the house-specific decay timer instead of the regular one Fixed an issue that could cause items to almost instantly decay after being released from lockdown in a house Placing house add-ons now properly takes into account SPACEX and SPACEY values when checking if they can fit in selected area of houses Re-added SPACEX and SPACEY values for Pentagram and Loom house add-ons House add-ons can now be converted back into house add-on deeds by chopping them with an axe Added new item type - IT_HOUSEADDON (201) - used by house add-ons placed in player houses Fixed a bug where keys would stop working after being added to a keyring, and would turn into blank keys upon release from the keyring Added visitor count for public player houses, which keeps track of how many visits a public house has received, with each player counted max 1 time every 24 hours Fixed an issue with FindPlayersInOldVisrange() where it didn't take into account that players could see buildings further away than the standard update range. This could cause players to see ghost images of buildings if they were at the "right" distance when the building was being demolished Added NODECAY tag to all signs and doors in dfndata/house/house.dfn Added FRONTDOOR or INTERIORDOOR (as appropriate) to all doors in dfndata/house/house.dfn Added BANX and BANY to specify ban location for some houses in dfndata/house/house.dfn instead of relying on finding SE corner automatically Implemented strongboxes (js/server/house/strongbox.js) for co-owners of a house, which can be placed with the house command "i wish to place a strongbox". Max capacity is 25 items Updated 'REMOVE command to take an optional parameter - itemID. If supplied, the command will remove all items with this itemID from a targeted container Fixed a bug when checking if dynamic items were blocking valid spawn locations for NPCs, some function arguments were in the wrong order! Improved code that finds valid spawn locations for items and NPCs spawned via spawn regions. As server gradually builds up lists of valid spawn locations per region over time, it will start using these lists more often, rather than always look for brand new spawn locations. Fixed a bug with CMulHandler::CheckStaticFlag() that prevented NPCs from spawning inside buildings with no static floors! Fixed an issue with repeating commands that prevented GMs from being able to cancel them when using the ClassicUO client Exposed character property .accountNum to JS engine Extended CDataList class to include a Clear() method for clearing lists Updated JS File method .Open() to support an optional, third argument - subFolderName - that defines in which sub-folder of UOX3/shared/ to store/look for a file. If no third argument is supplied, UOX3 will default to using the shared folder itself. Updated JS File method .Length() to return a value of -1 for files that don't exist Added new code function, exposed to JS engine with same parameters, which simply checks if a given tile ID has a specific flag bool CheckTileFlag( UI16 itemID, TILEFLAG flagToCheck ) Added JS function used to find the root container of an item (if any) FindRootContainer( itemSerial ) FindRootContainer( item ) Added new JS function that allows deleting files from UOX3/shared/ folder or subfolders of shared folder. If no subFolderName is provided, looks for file directly in shared folder itself. Restrictions on file- and folder-names apply. bool DeleteFile( fileName, subFolderName ) Added new JS functions for checking if a specific client or server feature is enabled. See documentation for full list of client/server features. GetClientFeature( bitNum ) // Returns true if specified client feature is enabled on server GetServerFeature( bitNum ) // Returns true if specified server feature is enabled on server Added new JS function for returning the value of almost any server setting from UOX.INI GetServerSetting( settingNameInDoubleQuotes ) Updated JS function DoesDynamicBlock() with two new parameters - checkOnlyMultis and checkOnlyNonMultis Updated JS function DoesMapBlock() with two new parameters - checkMultiPlacement and checkForRoad Fixed an issue where a LoS check would prevent players from accessing containers in their own backpack Added new functions in findfuncs.cpp to make it easier to find items near another object or location: findNearbyItems( object, distance ) findNearbyItems( x, y, worldNumber, instanceID, distance ) Added new Item property - maxItems - used by containers to determine their max item capacity Added new Item property - totalItemCount - used to get total item count in a container (including sub-containers) Added check for max item capacity when creating new items that are added to a character's backpack - items will be created below character's feet if backpack is full! Added new DFN tag for items, used by containers to determine item capacity for a given container: MAXITEMS=# // 125 is the default for all containers if not set Added new JS Item properties: .maxItems // gets/sets item capacity for a given container .totalItemCount // gets total item count in a container, including sub-containers Updated item tooltips for containers to show accurate total item count, as well as to display max item capacity Fixed a bug where picking up items from a non-locked down pile of items on the floor inside a multi could cause the remaining pile to be seen as no longer inside the multi, disallowing locking it back down and causing it to decay based on regular decay timer instead of house-specific one Updated JS command set to allow setting poison-level on items ('set poison #) and hunger-level on characters ('set hunger #) Fixed an issue with js/item/food.js that prevented poisoned food from poisoning characters when eaten Fixed an issue with js/skill/poisoning.js that prevented players from poisoning food! Updated various JS scripts and hardcoded targeting functions to disallow the targeting of locked down resources using skills and tools Updated JS Method TextMessage() to support three extra, optional parameters. Note that if one optional parameter is included, all preceding optional parameters are also required! speechTarget - What kind of target is this message intended for? 0 - Only visible for sender and receiver of message 1 - Visible to all players in range 2 - Visible to all NPCs and players in range 3 - Visible to all PCs everywhere + NPCs in range 4 - Visible to all PCs everywhere (broadcast) 5 - Only visible for the receiver of the message speechTargetSerial - The serial of the receiver of the message, used if speechTarget is 0 or 5 speechFontType - The type of font to display the text in. Defaults to normal. 0 - Bold 1 - Normal with shadow 2 - Bold with shadow 3 - Normal 4 - Gothic 5 - Italic 6 - Small, dark 7 - Colourful 8 - Runic (only works with CAPS) 9 - Small, light Added timestamp to worldsaves in console, to make it easier to see when a particular world-save was done Added info about compiler/environment displayed at the top of the UOX3 console during startup Updated dictionary files with new messages primarily related to housing
2020-11-04 02:00:37 +08:00
break;
case CIP_TRADETIMESTAMP:
if( gPriv->GetObjType() == OT_MULTI )
{
tString = JS_NewStringCopyZ( cx, ( static_cast<CMultiObj *>( gPriv ))->GetTradeTimestamp().c_str() );
Housing Revamp and more Updated JS SysMessage function to accept up to 10 extra, optional arguments, which can be used with dictionary messages that require additional parameters like %s or %i Added new type of house privilege in cMultiObj.cpp to keep track of friends of the multi - HOUSEPRIV_FRIEND - which is stored during worldsaves as one or more Friend=<player serial> tags in house.wsc Added new type of house privilege in cMultiObj.cpp to keep track of guests of the multi - HOUSEPRIV_GUEST - which is stored during worldsaves as one or more Guest=<player serial> tags in house.wsc When items are created for houses upon house placement, a reference to the multi's serial is now stored in the house sign's MORE property to allow easier tracking of which house a particular sign belongs to Added tracking of new, persistent properties for houses via cMultiObj.cpp/h: lockdowns, secure containers, vendors, guests, friends, owners, ban location, public status, number of visits, timestamps Added a multitude of new methods in cMultiObj.cpp/h to assist in improving the functionality of houses Added new tags for houses in house.dfn (default values applied if tag not specified): MAXSECURECONTAINERS=4 - Max amount of secure containers allowed in a multi MAXLOCKDOWNS=256 - Max amount of lockdowns allowed in a multi MAXVENDORS=10 - Max amount of vendors allowed in a multi MAXBANS=50 - Max amount of bans in a multi's ban list MAXFRIENDS=50 - Max amount of friends in a multi's friend list MAXGUESTS=50 - Max amount of guests in a multi's guest list MAXOWNERS=8 - Max amount of owners and co-owners in a multi's owner list MAXTRASHCONTAINERS=1 - Max amount of trash containers allowed in multi SCRIPT=<scriptID> - Assign a JS script-ID directly to a multi FRONTDOOR - indicates that a door is the front door of a house. Cannot be locked in public houses! INTERIORDOOR - indicates that a door is an interior door of a house. Can be locked in public houses. BANX - Location X offset for multi's ban location, if not used, will try to use SE corner of multi instead BANY - Location Y offset for multi's ban location, if not used, will try to use SE corner of multi instead Added JS Event: onHouseCommand( tSock, multiObj, cmdID ) - For handling spoken house commands via JS scripts attached to multi. Updated JS Events: onEntrance() - can now trigger both for multi being entered and/or object entering onLeaving() - can now trigger both for multi being left and/or object entering onSpeech() - can now also trigger for items (in addition to chars) with event & script attached, if UOX.INI setting ITEMSDETECTSPEECH is enabled Added JS Multi methods: .IsBoat() - Returns whether the item (or multi) is a boat .IsOwner( playerToCheck ) - Returns whether a player is the owner of a multi .IsOnOwnerList( playerToCheck ) - Returns whether a player is on the (co-)owner list of a multi .IsOnFriendList( playerToCheck ) - Returns whether a player is on the friend list of a multi .IsOnGuestList( playerToCheck ) - Returns whether a player is on the guest list of a multi .IsOnBanList( playerToCheck ) - Returns whether a player is on the ban list of a multi .AddToFriendList( playertoAdd ) - Adds player to the friend list of a multi .RemoveFromFriendList( playertoRemove ) - Removes player from the friend list of a multi .AddToGuestList( playertoAdd ) - Adds player to the guest list of a multi .RemoveFromGuestList( playertoRemove ) - Removes player from the guest list of a multi .ClearOwnerList() - Clears all entries from a multi's (co-)owner list .ClearFriendList() - Clears all entries from a multi's friend list .ClearGuestList() - Clears all entries from a multi's guest list .ClearBanList() - Clears all entries from a multi's ban list .SecureContainer( itemToSecure ) - Secures a container in a multi .UnsecureContainer( itemToUnsecure ) - Unsecures a container in a multi .IsSecureContainer( itemToCheck ) - Checks if specified item is a secure container in a multi .LockDownItem( itemToLockDown) - Locks down an item in a multi .ReleaseItem( itemToRelease ) - Releases a locked down item in a multi .KillKeys() - Deletes ALL keys associated with a multi .AddTrashCont( itemToAdd ) - Add trash container to multi's list of trash containers .RemoveTrashCont( itemToRemove ) - Remove trash container from multi's list of trash containers Added JS Item (Multi only) properties: .lockdowns - Get the number of lockdowns in a multi .maxLockdowns - Get/Set the max number of lockdowns allowed in a multi .secureContainers - Get the number of secure containers in a multi .maxSecureContainers - Get/Set the max number of secure containers allowed in a multi .trashContainers - Get the number of trash containers in a multi .maxTrashContainers - Get/Set the max number of trash containers allowed in a multi .friends - Get the number of friends in a multi's friend list .maxFriends - Get/Set the max number of friends allowed in a multi's friend list .guests - Get the number of guests in a multi's guest list .maxGuests - Get/Set the max number of guests allowed in a multi's guest list .owners - Get the number of owners in a multi's owner list .maxOwners - Get/Set the max number of owners allowed in a multi's owner list .bans - Get the number of banned players in a multi's ban list .maxBans - Get/Set the max number of banned players allowed in a multi's ban list .vendors - Get the number of player vendors in a multi .maxVendors - Get the max number of player vendors allowed in a multi .deed - Get the item sectionID for deed used to place multi .isPublic - Get/Set the private/public state of a multi .buildTimestamp - Get the timestamp for when the house was originally placed .tradeTimestamp - Get the timestamp for when the house was last traded to another player .banX - Get/Set the ban location X offset for the multi .banY - Get/Set the ban location Y offset for the multi Added JS Character properties: .multi = Get/Set the multi object the character is in .accountNum = Get the account number the character belongs to .housesOwned = Get a count of houses owned by the character .housesCoOwned = Get a count of houses co-owned by the character Updated JS cBaseObject Methods .FirstItem(), .NextItem() and .FinishedItems() to also support iterating through items in multis Updated JS multi Methods .FirstChar(), .NextChar() and .FinishedChars() to support an additional parameter to specify what kind of characters to loop through: "default" or no parameter - all characters inside the multi "owner" - players on multi's owner list "friend" - players on multi's friend list "guest" - players on multi's guest list "banned" - players on multi's ban list Added new INI tags to a new section of uox.ini called [houses] DECAYTIMERINHOUSE=3600 // Decay timer in seconds for non-locked down items inside houses PROTECTPRIVATEHOUSES=1 // Toggles whether private houses will automatically boot unauthorized visitors (1) or not (0) TRACKHOUSESPERACCOUNT=1 // Toggles whether to track (and restrict) house ownership per account (1) or per character (0) MAXHOUSESOWNABLE=1 // Specifies the max amount of houses a player can own per account/char, depending on how house ownership is tracked MAXHOUSESCOOWNABLE=10 // Specifies the max amount of houses a player can co-own per character CANOWNANDCOOWNHOUSES=1 // Toggles whether players can own and co-own houses at the same time COOWNHOUSESONSAMEACCOUNT=1 // Toggles whether characters on same account as house owner will be treated as co-owners Added new INI tags in [settings] section of uox.ini: ITEMSDETECTSPEECH=0 // If enabled, server will search for nearby items with onSpeech JS event running whenever a character speaks. Disabled by default. MAXPLAYERPACKITEMS=125 // Defines max item capacity for player (and NPC) backpacks. Defaults to 125. Moved most of the existing house functionality to JS and expanded upon it to reach feature parity with houses in regular UO around Publish 15/16, with various extras thrown in for good measure and all functionality being customizable: js/server/house/house.js (15000) - handles detection of house commands and characters entering/leaving houses js/server/house/houseSign.js (15001) - contains and handles all house-related gumps/menus and what is shown when players interact with house sign js/server/house/houseCommands.js (15002) - handles functionality of house commands and other functionality such as transfer of ownership, demolishing house, etc. js/server/house/houseDeed.js (15003) - handles initial rules that allow/disallow placement of additional houses for players All house-related menus now fully handled through JS All house commands and other functionality now fully handled through JS Removed redundant hard-coded house functionality Implemented Co-owners, friends, guests for houses, with access rules in place for entry, lockdowns, house commands, etc. Implemented Private and Public houses Implemented Secure Containers and Trash Barrels Definable max lockdowns, secure containers, player vendors, bans, friends, guests, owners, trash containers and more - per house type JS scripts can now be attached directly to houses Doors in houses can be marked as front doors or interior doors, and will be treated differently with regards to private and public houses Added new item to dfndata/items/containers/misc.dfn - [trashbarrel] Added new JS script (js/items/trashbarrel.js) with trash barrel functionality for houses. Trash barrels that are marked as secure containers are only accessible by owners, co-owners and friends of the house. Various options available at top of script. Updated js/items/axe.js to support chopping up trash barrels and house add-ons in houses owned by the player Fixed an issue with house doors being left behind after demolishing houses while their doors were open Fixed an issue where GMs could be banned from player houses Added Line of Sight checks to speech, to give players some privacy in their own homes Updated house placement code to more accurately check for other multis, dynamic and static objects when placing houses; now requires free space around each house that cannot be blocked by other houses or items that can block player movement, and disallows placement of houses on roads Updated house placement code to move characters blocking house placement to SE corner of the house Updated house placement code to disallow placing houses in guarded regions, or in dungeons Added new DFN tag for regions to enable/disable player houses in specific regions: HOUSING=0/1 Added new region (247) that covers path to Valley of Eodon in Felucca Added new region (248) that covers Valley of Eodon in Ter-Mur, with player housing disabled Added new region (249) that covers entire T2A lands, with player housing disabled Updated SPACEX and SPACEY values for all houses in dfndata/house/house.dfn to match updated house placement code Added new JS property to Regions that can be used to determine or change state of player housing in a region: .canPlaceHouse() Updated rules for usage of dye tubs to dye locked down items; now only house owners or co-owners may dye locked down items Updated rules for usage of the following locked down items in a house, which are now only usable by house owners and co-owners Dyes, Guildstone Deeds, Recall Runes (renaming), Rename Deeds, Townstone Deeds, House Deeds, Boat Models, Player Vendor Deeds, Ore, Hair Dye Updated rules for usage of the following locked down items in a house, which are now only usable by house owners, co-owners and friends: Keys, Dye Tubs, Magic Scrolls, Fireworks Wands, Magic Wands, Smithing Tools, Mining Tools, Fishing Poles Updated item lockdown rules to allow locking down (and releasing) items in a container as long as the container is locked down, and to only allow releasing a locked down container if it's empty of locked down items Updated item lockdown rules to only allow locking down movement-blocking items further than 2 tiles away from doors Updated rules for releasing items in houses - now the house owner can release any locked down items, co-owners can release items locked down by themselves or by friends, while friends can release only items locked down by themselves Added some feedback to player about why their attempted house placement failed Items added by GMs directly into multis will now decay based on the house-specific decay timer instead of the regular one Fixed an issue that could cause items to almost instantly decay after being released from lockdown in a house Placing house add-ons now properly takes into account SPACEX and SPACEY values when checking if they can fit in selected area of houses Re-added SPACEX and SPACEY values for Pentagram and Loom house add-ons House add-ons can now be converted back into house add-on deeds by chopping them with an axe Added new item type - IT_HOUSEADDON (201) - used by house add-ons placed in player houses Fixed a bug where keys would stop working after being added to a keyring, and would turn into blank keys upon release from the keyring Added visitor count for public player houses, which keeps track of how many visits a public house has received, with each player counted max 1 time every 24 hours Fixed an issue with FindPlayersInOldVisrange() where it didn't take into account that players could see buildings further away than the standard update range. This could cause players to see ghost images of buildings if they were at the "right" distance when the building was being demolished Added NODECAY tag to all signs and doors in dfndata/house/house.dfn Added FRONTDOOR or INTERIORDOOR (as appropriate) to all doors in dfndata/house/house.dfn Added BANX and BANY to specify ban location for some houses in dfndata/house/house.dfn instead of relying on finding SE corner automatically Implemented strongboxes (js/server/house/strongbox.js) for co-owners of a house, which can be placed with the house command "i wish to place a strongbox". Max capacity is 25 items Updated 'REMOVE command to take an optional parameter - itemID. If supplied, the command will remove all items with this itemID from a targeted container Fixed a bug when checking if dynamic items were blocking valid spawn locations for NPCs, some function arguments were in the wrong order! Improved code that finds valid spawn locations for items and NPCs spawned via spawn regions. As server gradually builds up lists of valid spawn locations per region over time, it will start using these lists more often, rather than always look for brand new spawn locations. Fixed a bug with CMulHandler::CheckStaticFlag() that prevented NPCs from spawning inside buildings with no static floors! Fixed an issue with repeating commands that prevented GMs from being able to cancel them when using the ClassicUO client Exposed character property .accountNum to JS engine Extended CDataList class to include a Clear() method for clearing lists Updated JS File method .Open() to support an optional, third argument - subFolderName - that defines in which sub-folder of UOX3/shared/ to store/look for a file. If no third argument is supplied, UOX3 will default to using the shared folder itself. Updated JS File method .Length() to return a value of -1 for files that don't exist Added new code function, exposed to JS engine with same parameters, which simply checks if a given tile ID has a specific flag bool CheckTileFlag( UI16 itemID, TILEFLAG flagToCheck ) Added JS function used to find the root container of an item (if any) FindRootContainer( itemSerial ) FindRootContainer( item ) Added new JS function that allows deleting files from UOX3/shared/ folder or subfolders of shared folder. If no subFolderName is provided, looks for file directly in shared folder itself. Restrictions on file- and folder-names apply. bool DeleteFile( fileName, subFolderName ) Added new JS functions for checking if a specific client or server feature is enabled. See documentation for full list of client/server features. GetClientFeature( bitNum ) // Returns true if specified client feature is enabled on server GetServerFeature( bitNum ) // Returns true if specified server feature is enabled on server Added new JS function for returning the value of almost any server setting from UOX.INI GetServerSetting( settingNameInDoubleQuotes ) Updated JS function DoesDynamicBlock() with two new parameters - checkOnlyMultis and checkOnlyNonMultis Updated JS function DoesMapBlock() with two new parameters - checkMultiPlacement and checkForRoad Fixed an issue where a LoS check would prevent players from accessing containers in their own backpack Added new functions in findfuncs.cpp to make it easier to find items near another object or location: findNearbyItems( object, distance ) findNearbyItems( x, y, worldNumber, instanceID, distance ) Added new Item property - maxItems - used by containers to determine their max item capacity Added new Item property - totalItemCount - used to get total item count in a container (including sub-containers) Added check for max item capacity when creating new items that are added to a character's backpack - items will be created below character's feet if backpack is full! Added new DFN tag for items, used by containers to determine item capacity for a given container: MAXITEMS=# // 125 is the default for all containers if not set Added new JS Item properties: .maxItems // gets/sets item capacity for a given container .totalItemCount // gets total item count in a container, including sub-containers Updated item tooltips for containers to show accurate total item count, as well as to display max item capacity Fixed a bug where picking up items from a non-locked down pile of items on the floor inside a multi could cause the remaining pile to be seen as no longer inside the multi, disallowing locking it back down and causing it to decay based on regular decay timer instead of house-specific one Updated JS command set to allow setting poison-level on items ('set poison #) and hunger-level on characters ('set hunger #) Fixed an issue with js/item/food.js that prevented poisoned food from poisoning characters when eaten Fixed an issue with js/skill/poisoning.js that prevented players from poisoning food! Updated various JS scripts and hardcoded targeting functions to disallow the targeting of locked down resources using skills and tools Updated JS Method TextMessage() to support three extra, optional parameters. Note that if one optional parameter is included, all preceding optional parameters are also required! speechTarget - What kind of target is this message intended for? 0 - Only visible for sender and receiver of message 1 - Visible to all players in range 2 - Visible to all NPCs and players in range 3 - Visible to all PCs everywhere + NPCs in range 4 - Visible to all PCs everywhere (broadcast) 5 - Only visible for the receiver of the message speechTargetSerial - The serial of the receiver of the message, used if speechTarget is 0 or 5 speechFontType - The type of font to display the text in. Defaults to normal. 0 - Bold 1 - Normal with shadow 2 - Bold with shadow 3 - Normal 4 - Gothic 5 - Italic 6 - Small, dark 7 - Colourful 8 - Runic (only works with CAPS) 9 - Small, light Added timestamp to worldsaves in console, to make it easier to see when a particular world-save was done Added info about compiler/environment displayed at the top of the UOX3 console during startup Updated dictionary files with new messages primarily related to housing
2020-11-04 02:00:37 +08:00
*vp = STRING_TO_JSVAL( tString );
}
0.99.4d Added new option in UOX.INI under [settings] section: MAPDIFFSENABLED=0/1 // If enabled, server will attempt to load diff files, and send "Enable Map-diff files" packet to client to also load these. Disabled by default. Server no longer loads map/statics diff files by default, nor does it send packet to client to request loading these files, as only client versions below 7.0.8.2 will actively load these files. Can be re-enabled with new UOX.INI setting mentioned above! Fixed incorrect ID for gargish dagger in CHandleCombat::getWeaponType() Added missing weapon entries in CHandleCombat::getWeaponType(): bladed whip, barbed whip, spiked whip, gargish talwar Fixed an issue that would show the end part of some tiledata names as garbled text instead of cutting off the text(!) at 20 characters Fixed an issue with advanced character creation template when using ClassicUO client, which sends a profession value of 255 instead of 0 when no profession template has been selected. Fixed an issue where clones of NPCs that can split in combat didn't get the NPC flag correctly set Guild titles are now removed for players who leave their guilds Enabled closing some hard-coded gump menus using right-click (howto, guild, towns, wholist, addmenu, craftmenu, info) Fixed an issue where adding base items using 'add [itemID] would sometimes get false positive hits from harditems.dfn, depending on the length of the itemID Fixed an issue where items added using 'add [itemID] would not get names applied properly from harditems.dfn Item/NPC DFN tag GET can now inherit a random parent by adding additional values separated by spaces. Syntax: GET=parent1 parent2 parent3 (etc) Fixed an issue where NPC backpacks would not have the max item capacity set properly Added new properties for CItem objects (also exposed as JS Item Properties): maxRange // max distance a ranged weapon can fire at (replaces ARCHERRANGE ini setting) baseRange // base distance throwing weapons (when implemented) can be used at Added support for new Item DFN tag that replaces global UOX.INI setting ARCHERRANGE: MAXRANGE=# // Specifies max range of ranged weapon Added support for new Item/NPC DFN tags to support randomizing elemental resistances: RESISTFIRE=#/# # // Set NPC's poison resistance; fixed or random value RESISTCOLD=#/# # // Set NPC's poison resistance; fixed or random value RESISTLIGHTNING=#/# # // Set NPC's poison resistance; fixed or random value RESISTPOISON=#/# # // Set NPC's poison resistance; fixed or random value Added support for two new DFN tags in dfndata/race/races.dfn that can be used to allow/ban lists of equipment for specific races ALLOWEQUIPLIST=# BANEQUIPLIST=# Added support for new section in dfndata/race/races.dfn - [EQUIPLIST #], which can be used to define lists of equipment that is whitelisted or banned for specific races. Fixed a bug that would report incorrect weight in tooltips for Item/NPC spawner objects ScriptSections are now reapplied for items bought by players from NPC vendors Fixed an issue where players could drop an item on the ground and other players would still see the item after it was picked up, because of a failed distance check vs old location coordinates (in pack) instead of vs current location on ground Fixed a bug with players being able to use last-target macro to target objects picked up and held by other players on their cursor Updated all references to "devinelock" to be "divinelock" instead - this includes the name of the JS Item property Fixed house commands triggering (useless) targeting cursors for players onboard boats Changed default statcap in UOX.INI from 325 to 225 Fixed a out-of-range error for players attempting to combine ore inside their own backpack Fixed various issues with distance checks and container checks when using/target objects Added optional 4th "hue" parameter to AddGump JS method Added JS Function to get total amount of accounts on server - GetAccountCount() Added JS Function to get total amount of players online - GetPlayerCount() onSwing JS Event can now trigger in scripts attached to items, not just items attached to characters Added some JS Functions to expose some hard-coded constants to JS scripts: BASEITEMSERIAL() // Base item serial INVALIDSERIAL() // Invalid serial INVALIDID() // Invalid ID INVALIDCOLOUR() // Invalid colour Fixed an issue where JS character property .colour would modify origSkin property instead of colour Fixed an issue where JS character property .guildTitle returned the name of the character instead of the guild title Character JS property .poison can now also be used to set a character's poisoned level, not just read it Exposed Item property to JS engine: .ac // armour class for item (0-128). Primarily used for setting race-restrictions for equippable items, i.e. race X cannot equip items of armour class Y. .def // defensive value of item (Physical resistance post-AoS, AR in older UO) // NOTE: The following properties don't actually do anything yet, but can still be used in custom JS scripts if desired .resistCold // Cold resistance of item 0-1000, where 1000 equals 100.0% .resistHeat // Heat/Fire resistance of item 0-1000, where 1000 equals 100.0% .resistLight // Light resistance of item 0-1000, where 1000 equals 100.0% .resistLightning // Energy/Lightning resistance of item 0-1000, where 1000 equals 100.0% .resistPoison // Poison resistance of item 0-1000, where 1000 equals 100.0% .resistRain // Rain resistance of item 0-1000, where 1000 equals 100.0% .resistSnow // Snow resistance of item 0-1000, where 1000 equals 100.0% .damageHeat // Weapon deals Heat/Fire elemental damage (true/false) .damageCold // Weapon deals Cold elemental damage (true/false) .damageLight // Weapon deals Light elemental damage (true/false) .damageLightning // Weapon deals Lightning elemental damage (true/false) .damagePoison // Weapon deals Poison elemental damage (true/false) .damageRain // Weapon deals Rain/Water elemental damage (true/false) .damageSnow // Weapon deals Snow/Ice elemental damage (true/false) Added new UOX.INI setting under [server] to enable/disable shard response to ConnectUO server polling (disabled by default) Sub-commands are no longer included when registering packets to be overloaded via RegisterPacket function, as that part was never fully implemented. Packet-hook scripts can be setup for specific packet IDs, but any sub-command checking will need to be done in the script itself JS Packet Method GetDWord() now uses JS_NewNumberValue instead of INT_TO_JSVAL to read from the socket buffer, to better handle large numbers, which could previously be returned with wrong values. JS Function CalcItemFromSer() now uses a JS_GetStringBytes() and str_value() combo instead of JSVAL_TO_INT() to read the data provided in the function argument. This allows JS scripts to provide item serials to the function directly without needing to split it into four parts first (though that still works) Fixed issue where JS properties for multis didn't always return correct values The 'set command can now be used to set the armour class of items ('set ac #) Reimplemented 'tweak command in JS engine (js/commands/targeting/tweak.js) - can be used to view and modify properties of characters, character skills, items, multis and regions (target ground) Added placeholder packet-hook script (js/server/network/0xf1_connectUoServerPoll.js) to handle responses to ConnectUO server polling. By default this script does nothing, but serves as a placeholder for drop-in replacement scripts generated specifically for each shard by the ConnectUO service. Updated some commands to support an alternate STATIC keyword (can also be ommitted) to add base items: 'add static itemID 'tile static itemID Updated some commands with support for randomization. Provided itemID will be randomized based on provided rndValue: /js/commands/targeting/add.js: 'add itemID rndValue cmdtable.cpp and targeting.cpp: 'tile itemID rndValue 'tile itemID x1 x2 y1 y2 z rndValue Updated js/commands/custom/repeatingcmds.js to support 'm delete as an alias for 'rremove Added 'props as an alias for the 'tweak command Added 'teleport as an alias for the 'tele command (js/commands/targeting/tele.js) Added 'shavehair and 'shavebeard as aliases for 'kill hair and 'kill beard (js/commands/targeting/kill.js) Added 'noinvul and 'mortal aliases for the 'invul false command (js/commands/custom/misc-cmds.js) Added 'immortal and 'invul (without parameter) as aliases for the 'invul true command Added 'bringtopack as an alias of 'movetobag command (js/commands/targeting/movetobag.js) Updated check for cancelling of target cursor in various JS scripts Minor updates to various JS scripts Fixed issue where some item definitions in dfndata/harditems/harditems.dfn and dfndata/items/building/lighting.dfn used comma instead of space as delimiter for the VALUE tag, which thus never got applied Updated all NPC definitions to let NPCs spawn facing in random directions
2021-03-22 05:59:20 +08:00
else
{
0.99.4d Added new option in UOX.INI under [settings] section: MAPDIFFSENABLED=0/1 // If enabled, server will attempt to load diff files, and send "Enable Map-diff files" packet to client to also load these. Disabled by default. Server no longer loads map/statics diff files by default, nor does it send packet to client to request loading these files, as only client versions below 7.0.8.2 will actively load these files. Can be re-enabled with new UOX.INI setting mentioned above! Fixed incorrect ID for gargish dagger in CHandleCombat::getWeaponType() Added missing weapon entries in CHandleCombat::getWeaponType(): bladed whip, barbed whip, spiked whip, gargish talwar Fixed an issue that would show the end part of some tiledata names as garbled text instead of cutting off the text(!) at 20 characters Fixed an issue with advanced character creation template when using ClassicUO client, which sends a profession value of 255 instead of 0 when no profession template has been selected. Fixed an issue where clones of NPCs that can split in combat didn't get the NPC flag correctly set Guild titles are now removed for players who leave their guilds Enabled closing some hard-coded gump menus using right-click (howto, guild, towns, wholist, addmenu, craftmenu, info) Fixed an issue where adding base items using 'add [itemID] would sometimes get false positive hits from harditems.dfn, depending on the length of the itemID Fixed an issue where items added using 'add [itemID] would not get names applied properly from harditems.dfn Item/NPC DFN tag GET can now inherit a random parent by adding additional values separated by spaces. Syntax: GET=parent1 parent2 parent3 (etc) Fixed an issue where NPC backpacks would not have the max item capacity set properly Added new properties for CItem objects (also exposed as JS Item Properties): maxRange // max distance a ranged weapon can fire at (replaces ARCHERRANGE ini setting) baseRange // base distance throwing weapons (when implemented) can be used at Added support for new Item DFN tag that replaces global UOX.INI setting ARCHERRANGE: MAXRANGE=# // Specifies max range of ranged weapon Added support for new Item/NPC DFN tags to support randomizing elemental resistances: RESISTFIRE=#/# # // Set NPC's poison resistance; fixed or random value RESISTCOLD=#/# # // Set NPC's poison resistance; fixed or random value RESISTLIGHTNING=#/# # // Set NPC's poison resistance; fixed or random value RESISTPOISON=#/# # // Set NPC's poison resistance; fixed or random value Added support for two new DFN tags in dfndata/race/races.dfn that can be used to allow/ban lists of equipment for specific races ALLOWEQUIPLIST=# BANEQUIPLIST=# Added support for new section in dfndata/race/races.dfn - [EQUIPLIST #], which can be used to define lists of equipment that is whitelisted or banned for specific races. Fixed a bug that would report incorrect weight in tooltips for Item/NPC spawner objects ScriptSections are now reapplied for items bought by players from NPC vendors Fixed an issue where players could drop an item on the ground and other players would still see the item after it was picked up, because of a failed distance check vs old location coordinates (in pack) instead of vs current location on ground Fixed a bug with players being able to use last-target macro to target objects picked up and held by other players on their cursor Updated all references to "devinelock" to be "divinelock" instead - this includes the name of the JS Item property Fixed house commands triggering (useless) targeting cursors for players onboard boats Changed default statcap in UOX.INI from 325 to 225 Fixed a out-of-range error for players attempting to combine ore inside their own backpack Fixed various issues with distance checks and container checks when using/target objects Added optional 4th "hue" parameter to AddGump JS method Added JS Function to get total amount of accounts on server - GetAccountCount() Added JS Function to get total amount of players online - GetPlayerCount() onSwing JS Event can now trigger in scripts attached to items, not just items attached to characters Added some JS Functions to expose some hard-coded constants to JS scripts: BASEITEMSERIAL() // Base item serial INVALIDSERIAL() // Invalid serial INVALIDID() // Invalid ID INVALIDCOLOUR() // Invalid colour Fixed an issue where JS character property .colour would modify origSkin property instead of colour Fixed an issue where JS character property .guildTitle returned the name of the character instead of the guild title Character JS property .poison can now also be used to set a character's poisoned level, not just read it Exposed Item property to JS engine: .ac // armour class for item (0-128). Primarily used for setting race-restrictions for equippable items, i.e. race X cannot equip items of armour class Y. .def // defensive value of item (Physical resistance post-AoS, AR in older UO) // NOTE: The following properties don't actually do anything yet, but can still be used in custom JS scripts if desired .resistCold // Cold resistance of item 0-1000, where 1000 equals 100.0% .resistHeat // Heat/Fire resistance of item 0-1000, where 1000 equals 100.0% .resistLight // Light resistance of item 0-1000, where 1000 equals 100.0% .resistLightning // Energy/Lightning resistance of item 0-1000, where 1000 equals 100.0% .resistPoison // Poison resistance of item 0-1000, where 1000 equals 100.0% .resistRain // Rain resistance of item 0-1000, where 1000 equals 100.0% .resistSnow // Snow resistance of item 0-1000, where 1000 equals 100.0% .damageHeat // Weapon deals Heat/Fire elemental damage (true/false) .damageCold // Weapon deals Cold elemental damage (true/false) .damageLight // Weapon deals Light elemental damage (true/false) .damageLightning // Weapon deals Lightning elemental damage (true/false) .damagePoison // Weapon deals Poison elemental damage (true/false) .damageRain // Weapon deals Rain/Water elemental damage (true/false) .damageSnow // Weapon deals Snow/Ice elemental damage (true/false) Added new UOX.INI setting under [server] to enable/disable shard response to ConnectUO server polling (disabled by default) Sub-commands are no longer included when registering packets to be overloaded via RegisterPacket function, as that part was never fully implemented. Packet-hook scripts can be setup for specific packet IDs, but any sub-command checking will need to be done in the script itself JS Packet Method GetDWord() now uses JS_NewNumberValue instead of INT_TO_JSVAL to read from the socket buffer, to better handle large numbers, which could previously be returned with wrong values. JS Function CalcItemFromSer() now uses a JS_GetStringBytes() and str_value() combo instead of JSVAL_TO_INT() to read the data provided in the function argument. This allows JS scripts to provide item serials to the function directly without needing to split it into four parts first (though that still works) Fixed issue where JS properties for multis didn't always return correct values The 'set command can now be used to set the armour class of items ('set ac #) Reimplemented 'tweak command in JS engine (js/commands/targeting/tweak.js) - can be used to view and modify properties of characters, character skills, items, multis and regions (target ground) Added placeholder packet-hook script (js/server/network/0xf1_connectUoServerPoll.js) to handle responses to ConnectUO server polling. By default this script does nothing, but serves as a placeholder for drop-in replacement scripts generated specifically for each shard by the ConnectUO service. Updated some commands to support an alternate STATIC keyword (can also be ommitted) to add base items: 'add static itemID 'tile static itemID Updated some commands with support for randomization. Provided itemID will be randomized based on provided rndValue: /js/commands/targeting/add.js: 'add itemID rndValue cmdtable.cpp and targeting.cpp: 'tile itemID rndValue 'tile itemID x1 x2 y1 y2 z rndValue Updated js/commands/custom/repeatingcmds.js to support 'm delete as an alias for 'rremove Added 'props as an alias for the 'tweak command Added 'teleport as an alias for the 'tele command (js/commands/targeting/tele.js) Added 'shavehair and 'shavebeard as aliases for 'kill hair and 'kill beard (js/commands/targeting/kill.js) Added 'noinvul and 'mortal aliases for the 'invul false command (js/commands/custom/misc-cmds.js) Added 'immortal and 'invul (without parameter) as aliases for the 'invul true command Added 'bringtopack as an alias of 'movetobag command (js/commands/targeting/movetobag.js) Updated check for cancelling of target cursor in various JS scripts Minor updates to various JS scripts Fixed issue where some item definitions in dfndata/harditems/harditems.dfn and dfndata/items/building/lighting.dfn used comma instead of space as delimiter for the VALUE tag, which thus never got applied Updated all NPC definitions to let NPCs spawn facing in random directions
2021-03-22 05:59:20 +08:00
*vp = JSVAL_NULL;
}
Housing Revamp and more Updated JS SysMessage function to accept up to 10 extra, optional arguments, which can be used with dictionary messages that require additional parameters like %s or %i Added new type of house privilege in cMultiObj.cpp to keep track of friends of the multi - HOUSEPRIV_FRIEND - which is stored during worldsaves as one or more Friend=<player serial> tags in house.wsc Added new type of house privilege in cMultiObj.cpp to keep track of guests of the multi - HOUSEPRIV_GUEST - which is stored during worldsaves as one or more Guest=<player serial> tags in house.wsc When items are created for houses upon house placement, a reference to the multi's serial is now stored in the house sign's MORE property to allow easier tracking of which house a particular sign belongs to Added tracking of new, persistent properties for houses via cMultiObj.cpp/h: lockdowns, secure containers, vendors, guests, friends, owners, ban location, public status, number of visits, timestamps Added a multitude of new methods in cMultiObj.cpp/h to assist in improving the functionality of houses Added new tags for houses in house.dfn (default values applied if tag not specified): MAXSECURECONTAINERS=4 - Max amount of secure containers allowed in a multi MAXLOCKDOWNS=256 - Max amount of lockdowns allowed in a multi MAXVENDORS=10 - Max amount of vendors allowed in a multi MAXBANS=50 - Max amount of bans in a multi's ban list MAXFRIENDS=50 - Max amount of friends in a multi's friend list MAXGUESTS=50 - Max amount of guests in a multi's guest list MAXOWNERS=8 - Max amount of owners and co-owners in a multi's owner list MAXTRASHCONTAINERS=1 - Max amount of trash containers allowed in multi SCRIPT=<scriptID> - Assign a JS script-ID directly to a multi FRONTDOOR - indicates that a door is the front door of a house. Cannot be locked in public houses! INTERIORDOOR - indicates that a door is an interior door of a house. Can be locked in public houses. BANX - Location X offset for multi's ban location, if not used, will try to use SE corner of multi instead BANY - Location Y offset for multi's ban location, if not used, will try to use SE corner of multi instead Added JS Event: onHouseCommand( tSock, multiObj, cmdID ) - For handling spoken house commands via JS scripts attached to multi. Updated JS Events: onEntrance() - can now trigger both for multi being entered and/or object entering onLeaving() - can now trigger both for multi being left and/or object entering onSpeech() - can now also trigger for items (in addition to chars) with event & script attached, if UOX.INI setting ITEMSDETECTSPEECH is enabled Added JS Multi methods: .IsBoat() - Returns whether the item (or multi) is a boat .IsOwner( playerToCheck ) - Returns whether a player is the owner of a multi .IsOnOwnerList( playerToCheck ) - Returns whether a player is on the (co-)owner list of a multi .IsOnFriendList( playerToCheck ) - Returns whether a player is on the friend list of a multi .IsOnGuestList( playerToCheck ) - Returns whether a player is on the guest list of a multi .IsOnBanList( playerToCheck ) - Returns whether a player is on the ban list of a multi .AddToFriendList( playertoAdd ) - Adds player to the friend list of a multi .RemoveFromFriendList( playertoRemove ) - Removes player from the friend list of a multi .AddToGuestList( playertoAdd ) - Adds player to the guest list of a multi .RemoveFromGuestList( playertoRemove ) - Removes player from the guest list of a multi .ClearOwnerList() - Clears all entries from a multi's (co-)owner list .ClearFriendList() - Clears all entries from a multi's friend list .ClearGuestList() - Clears all entries from a multi's guest list .ClearBanList() - Clears all entries from a multi's ban list .SecureContainer( itemToSecure ) - Secures a container in a multi .UnsecureContainer( itemToUnsecure ) - Unsecures a container in a multi .IsSecureContainer( itemToCheck ) - Checks if specified item is a secure container in a multi .LockDownItem( itemToLockDown) - Locks down an item in a multi .ReleaseItem( itemToRelease ) - Releases a locked down item in a multi .KillKeys() - Deletes ALL keys associated with a multi .AddTrashCont( itemToAdd ) - Add trash container to multi's list of trash containers .RemoveTrashCont( itemToRemove ) - Remove trash container from multi's list of trash containers Added JS Item (Multi only) properties: .lockdowns - Get the number of lockdowns in a multi .maxLockdowns - Get/Set the max number of lockdowns allowed in a multi .secureContainers - Get the number of secure containers in a multi .maxSecureContainers - Get/Set the max number of secure containers allowed in a multi .trashContainers - Get the number of trash containers in a multi .maxTrashContainers - Get/Set the max number of trash containers allowed in a multi .friends - Get the number of friends in a multi's friend list .maxFriends - Get/Set the max number of friends allowed in a multi's friend list .guests - Get the number of guests in a multi's guest list .maxGuests - Get/Set the max number of guests allowed in a multi's guest list .owners - Get the number of owners in a multi's owner list .maxOwners - Get/Set the max number of owners allowed in a multi's owner list .bans - Get the number of banned players in a multi's ban list .maxBans - Get/Set the max number of banned players allowed in a multi's ban list .vendors - Get the number of player vendors in a multi .maxVendors - Get the max number of player vendors allowed in a multi .deed - Get the item sectionID for deed used to place multi .isPublic - Get/Set the private/public state of a multi .buildTimestamp - Get the timestamp for when the house was originally placed .tradeTimestamp - Get the timestamp for when the house was last traded to another player .banX - Get/Set the ban location X offset for the multi .banY - Get/Set the ban location Y offset for the multi Added JS Character properties: .multi = Get/Set the multi object the character is in .accountNum = Get the account number the character belongs to .housesOwned = Get a count of houses owned by the character .housesCoOwned = Get a count of houses co-owned by the character Updated JS cBaseObject Methods .FirstItem(), .NextItem() and .FinishedItems() to also support iterating through items in multis Updated JS multi Methods .FirstChar(), .NextChar() and .FinishedChars() to support an additional parameter to specify what kind of characters to loop through: "default" or no parameter - all characters inside the multi "owner" - players on multi's owner list "friend" - players on multi's friend list "guest" - players on multi's guest list "banned" - players on multi's ban list Added new INI tags to a new section of uox.ini called [houses] DECAYTIMERINHOUSE=3600 // Decay timer in seconds for non-locked down items inside houses PROTECTPRIVATEHOUSES=1 // Toggles whether private houses will automatically boot unauthorized visitors (1) or not (0) TRACKHOUSESPERACCOUNT=1 // Toggles whether to track (and restrict) house ownership per account (1) or per character (0) MAXHOUSESOWNABLE=1 // Specifies the max amount of houses a player can own per account/char, depending on how house ownership is tracked MAXHOUSESCOOWNABLE=10 // Specifies the max amount of houses a player can co-own per character CANOWNANDCOOWNHOUSES=1 // Toggles whether players can own and co-own houses at the same time COOWNHOUSESONSAMEACCOUNT=1 // Toggles whether characters on same account as house owner will be treated as co-owners Added new INI tags in [settings] section of uox.ini: ITEMSDETECTSPEECH=0 // If enabled, server will search for nearby items with onSpeech JS event running whenever a character speaks. Disabled by default. MAXPLAYERPACKITEMS=125 // Defines max item capacity for player (and NPC) backpacks. Defaults to 125. Moved most of the existing house functionality to JS and expanded upon it to reach feature parity with houses in regular UO around Publish 15/16, with various extras thrown in for good measure and all functionality being customizable: js/server/house/house.js (15000) - handles detection of house commands and characters entering/leaving houses js/server/house/houseSign.js (15001) - contains and handles all house-related gumps/menus and what is shown when players interact with house sign js/server/house/houseCommands.js (15002) - handles functionality of house commands and other functionality such as transfer of ownership, demolishing house, etc. js/server/house/houseDeed.js (15003) - handles initial rules that allow/disallow placement of additional houses for players All house-related menus now fully handled through JS All house commands and other functionality now fully handled through JS Removed redundant hard-coded house functionality Implemented Co-owners, friends, guests for houses, with access rules in place for entry, lockdowns, house commands, etc. Implemented Private and Public houses Implemented Secure Containers and Trash Barrels Definable max lockdowns, secure containers, player vendors, bans, friends, guests, owners, trash containers and more - per house type JS scripts can now be attached directly to houses Doors in houses can be marked as front doors or interior doors, and will be treated differently with regards to private and public houses Added new item to dfndata/items/containers/misc.dfn - [trashbarrel] Added new JS script (js/items/trashbarrel.js) with trash barrel functionality for houses. Trash barrels that are marked as secure containers are only accessible by owners, co-owners and friends of the house. Various options available at top of script. Updated js/items/axe.js to support chopping up trash barrels and house add-ons in houses owned by the player Fixed an issue with house doors being left behind after demolishing houses while their doors were open Fixed an issue where GMs could be banned from player houses Added Line of Sight checks to speech, to give players some privacy in their own homes Updated house placement code to more accurately check for other multis, dynamic and static objects when placing houses; now requires free space around each house that cannot be blocked by other houses or items that can block player movement, and disallows placement of houses on roads Updated house placement code to move characters blocking house placement to SE corner of the house Updated house placement code to disallow placing houses in guarded regions, or in dungeons Added new DFN tag for regions to enable/disable player houses in specific regions: HOUSING=0/1 Added new region (247) that covers path to Valley of Eodon in Felucca Added new region (248) that covers Valley of Eodon in Ter-Mur, with player housing disabled Added new region (249) that covers entire T2A lands, with player housing disabled Updated SPACEX and SPACEY values for all houses in dfndata/house/house.dfn to match updated house placement code Added new JS property to Regions that can be used to determine or change state of player housing in a region: .canPlaceHouse() Updated rules for usage of dye tubs to dye locked down items; now only house owners or co-owners may dye locked down items Updated rules for usage of the following locked down items in a house, which are now only usable by house owners and co-owners Dyes, Guildstone Deeds, Recall Runes (renaming), Rename Deeds, Townstone Deeds, House Deeds, Boat Models, Player Vendor Deeds, Ore, Hair Dye Updated rules for usage of the following locked down items in a house, which are now only usable by house owners, co-owners and friends: Keys, Dye Tubs, Magic Scrolls, Fireworks Wands, Magic Wands, Smithing Tools, Mining Tools, Fishing Poles Updated item lockdown rules to allow locking down (and releasing) items in a container as long as the container is locked down, and to only allow releasing a locked down container if it's empty of locked down items Updated item lockdown rules to only allow locking down movement-blocking items further than 2 tiles away from doors Updated rules for releasing items in houses - now the house owner can release any locked down items, co-owners can release items locked down by themselves or by friends, while friends can release only items locked down by themselves Added some feedback to player about why their attempted house placement failed Items added by GMs directly into multis will now decay based on the house-specific decay timer instead of the regular one Fixed an issue that could cause items to almost instantly decay after being released from lockdown in a house Placing house add-ons now properly takes into account SPACEX and SPACEY values when checking if they can fit in selected area of houses Re-added SPACEX and SPACEY values for Pentagram and Loom house add-ons House add-ons can now be converted back into house add-on deeds by chopping them with an axe Added new item type - IT_HOUSEADDON (201) - used by house add-ons placed in player houses Fixed a bug where keys would stop working after being added to a keyring, and would turn into blank keys upon release from the keyring Added visitor count for public player houses, which keeps track of how many visits a public house has received, with each player counted max 1 time every 24 hours Fixed an issue with FindPlayersInOldVisrange() where it didn't take into account that players could see buildings further away than the standard update range. This could cause players to see ghost images of buildings if they were at the "right" distance when the building was being demolished Added NODECAY tag to all signs and doors in dfndata/house/house.dfn Added FRONTDOOR or INTERIORDOOR (as appropriate) to all doors in dfndata/house/house.dfn Added BANX and BANY to specify ban location for some houses in dfndata/house/house.dfn instead of relying on finding SE corner automatically Implemented strongboxes (js/server/house/strongbox.js) for co-owners of a house, which can be placed with the house command "i wish to place a strongbox". Max capacity is 25 items Updated 'REMOVE command to take an optional parameter - itemID. If supplied, the command will remove all items with this itemID from a targeted container Fixed a bug when checking if dynamic items were blocking valid spawn locations for NPCs, some function arguments were in the wrong order! Improved code that finds valid spawn locations for items and NPCs spawned via spawn regions. As server gradually builds up lists of valid spawn locations per region over time, it will start using these lists more often, rather than always look for brand new spawn locations. Fixed a bug with CMulHandler::CheckStaticFlag() that prevented NPCs from spawning inside buildings with no static floors! Fixed an issue with repeating commands that prevented GMs from being able to cancel them when using the ClassicUO client Exposed character property .accountNum to JS engine Extended CDataList class to include a Clear() method for clearing lists Updated JS File method .Open() to support an optional, third argument - subFolderName - that defines in which sub-folder of UOX3/shared/ to store/look for a file. If no third argument is supplied, UOX3 will default to using the shared folder itself. Updated JS File method .Length() to return a value of -1 for files that don't exist Added new code function, exposed to JS engine with same parameters, which simply checks if a given tile ID has a specific flag bool CheckTileFlag( UI16 itemID, TILEFLAG flagToCheck ) Added JS function used to find the root container of an item (if any) FindRootContainer( itemSerial ) FindRootContainer( item ) Added new JS function that allows deleting files from UOX3/shared/ folder or subfolders of shared folder. If no subFolderName is provided, looks for file directly in shared folder itself. Restrictions on file- and folder-names apply. bool DeleteFile( fileName, subFolderName ) Added new JS functions for checking if a specific client or server feature is enabled. See documentation for full list of client/server features. GetClientFeature( bitNum ) // Returns true if specified client feature is enabled on server GetServerFeature( bitNum ) // Returns true if specified server feature is enabled on server Added new JS function for returning the value of almost any server setting from UOX.INI GetServerSetting( settingNameInDoubleQuotes ) Updated JS function DoesDynamicBlock() with two new parameters - checkOnlyMultis and checkOnlyNonMultis Updated JS function DoesMapBlock() with two new parameters - checkMultiPlacement and checkForRoad Fixed an issue where a LoS check would prevent players from accessing containers in their own backpack Added new functions in findfuncs.cpp to make it easier to find items near another object or location: findNearbyItems( object, distance ) findNearbyItems( x, y, worldNumber, instanceID, distance ) Added new Item property - maxItems - used by containers to determine their max item capacity Added new Item property - totalItemCount - used to get total item count in a container (including sub-containers) Added check for max item capacity when creating new items that are added to a character's backpack - items will be created below character's feet if backpack is full! Added new DFN tag for items, used by containers to determine item capacity for a given container: MAXITEMS=# // 125 is the default for all containers if not set Added new JS Item properties: .maxItems // gets/sets item capacity for a given container .totalItemCount // gets total item count in a container, including sub-containers Updated item tooltips for containers to show accurate total item count, as well as to display max item capacity Fixed a bug where picking up items from a non-locked down pile of items on the floor inside a multi could cause the remaining pile to be seen as no longer inside the multi, disallowing locking it back down and causing it to decay based on regular decay timer instead of house-specific one Updated JS command set to allow setting poison-level on items ('set poison #) and hunger-level on characters ('set hunger #) Fixed an issue with js/item/food.js that prevented poisoned food from poisoning characters when eaten Fixed an issue with js/skill/poisoning.js that prevented players from poisoning food! Updated various JS scripts and hardcoded targeting functions to disallow the targeting of locked down resources using skills and tools Updated JS Method TextMessage() to support three extra, optional parameters. Note that if one optional parameter is included, all preceding optional parameters are also required! speechTarget - What kind of target is this message intended for? 0 - Only visible for sender and receiver of message 1 - Visible to all players in range 2 - Visible to all NPCs and players in range 3 - Visible to all PCs everywhere + NPCs in range 4 - Visible to all PCs everywhere (broadcast) 5 - Only visible for the receiver of the message speechTargetSerial - The serial of the receiver of the message, used if speechTarget is 0 or 5 speechFontType - The type of font to display the text in. Defaults to normal. 0 - Bold 1 - Normal with shadow 2 - Bold with shadow 3 - Normal 4 - Gothic 5 - Italic 6 - Small, dark 7 - Colourful 8 - Runic (only works with CAPS) 9 - Small, light Added timestamp to worldsaves in console, to make it easier to see when a particular world-save was done Added info about compiler/environment displayed at the top of the UOX3 console during startup Updated dictionary files with new messages primarily related to housing
2020-11-04 02:00:37 +08:00
break;
case CIP_BANX:
if( gPriv->GetObjType() == OT_MULTI )
{
*vp = INT_TO_JSVAL(( static_cast<CMultiObj *>( gPriv )->GetBanX() ));
}
0.99.4d Added new option in UOX.INI under [settings] section: MAPDIFFSENABLED=0/1 // If enabled, server will attempt to load diff files, and send "Enable Map-diff files" packet to client to also load these. Disabled by default. Server no longer loads map/statics diff files by default, nor does it send packet to client to request loading these files, as only client versions below 7.0.8.2 will actively load these files. Can be re-enabled with new UOX.INI setting mentioned above! Fixed incorrect ID for gargish dagger in CHandleCombat::getWeaponType() Added missing weapon entries in CHandleCombat::getWeaponType(): bladed whip, barbed whip, spiked whip, gargish talwar Fixed an issue that would show the end part of some tiledata names as garbled text instead of cutting off the text(!) at 20 characters Fixed an issue with advanced character creation template when using ClassicUO client, which sends a profession value of 255 instead of 0 when no profession template has been selected. Fixed an issue where clones of NPCs that can split in combat didn't get the NPC flag correctly set Guild titles are now removed for players who leave their guilds Enabled closing some hard-coded gump menus using right-click (howto, guild, towns, wholist, addmenu, craftmenu, info) Fixed an issue where adding base items using 'add [itemID] would sometimes get false positive hits from harditems.dfn, depending on the length of the itemID Fixed an issue where items added using 'add [itemID] would not get names applied properly from harditems.dfn Item/NPC DFN tag GET can now inherit a random parent by adding additional values separated by spaces. Syntax: GET=parent1 parent2 parent3 (etc) Fixed an issue where NPC backpacks would not have the max item capacity set properly Added new properties for CItem objects (also exposed as JS Item Properties): maxRange // max distance a ranged weapon can fire at (replaces ARCHERRANGE ini setting) baseRange // base distance throwing weapons (when implemented) can be used at Added support for new Item DFN tag that replaces global UOX.INI setting ARCHERRANGE: MAXRANGE=# // Specifies max range of ranged weapon Added support for new Item/NPC DFN tags to support randomizing elemental resistances: RESISTFIRE=#/# # // Set NPC's poison resistance; fixed or random value RESISTCOLD=#/# # // Set NPC's poison resistance; fixed or random value RESISTLIGHTNING=#/# # // Set NPC's poison resistance; fixed or random value RESISTPOISON=#/# # // Set NPC's poison resistance; fixed or random value Added support for two new DFN tags in dfndata/race/races.dfn that can be used to allow/ban lists of equipment for specific races ALLOWEQUIPLIST=# BANEQUIPLIST=# Added support for new section in dfndata/race/races.dfn - [EQUIPLIST #], which can be used to define lists of equipment that is whitelisted or banned for specific races. Fixed a bug that would report incorrect weight in tooltips for Item/NPC spawner objects ScriptSections are now reapplied for items bought by players from NPC vendors Fixed an issue where players could drop an item on the ground and other players would still see the item after it was picked up, because of a failed distance check vs old location coordinates (in pack) instead of vs current location on ground Fixed a bug with players being able to use last-target macro to target objects picked up and held by other players on their cursor Updated all references to "devinelock" to be "divinelock" instead - this includes the name of the JS Item property Fixed house commands triggering (useless) targeting cursors for players onboard boats Changed default statcap in UOX.INI from 325 to 225 Fixed a out-of-range error for players attempting to combine ore inside their own backpack Fixed various issues with distance checks and container checks when using/target objects Added optional 4th "hue" parameter to AddGump JS method Added JS Function to get total amount of accounts on server - GetAccountCount() Added JS Function to get total amount of players online - GetPlayerCount() onSwing JS Event can now trigger in scripts attached to items, not just items attached to characters Added some JS Functions to expose some hard-coded constants to JS scripts: BASEITEMSERIAL() // Base item serial INVALIDSERIAL() // Invalid serial INVALIDID() // Invalid ID INVALIDCOLOUR() // Invalid colour Fixed an issue where JS character property .colour would modify origSkin property instead of colour Fixed an issue where JS character property .guildTitle returned the name of the character instead of the guild title Character JS property .poison can now also be used to set a character's poisoned level, not just read it Exposed Item property to JS engine: .ac // armour class for item (0-128). Primarily used for setting race-restrictions for equippable items, i.e. race X cannot equip items of armour class Y. .def // defensive value of item (Physical resistance post-AoS, AR in older UO) // NOTE: The following properties don't actually do anything yet, but can still be used in custom JS scripts if desired .resistCold // Cold resistance of item 0-1000, where 1000 equals 100.0% .resistHeat // Heat/Fire resistance of item 0-1000, where 1000 equals 100.0% .resistLight // Light resistance of item 0-1000, where 1000 equals 100.0% .resistLightning // Energy/Lightning resistance of item 0-1000, where 1000 equals 100.0% .resistPoison // Poison resistance of item 0-1000, where 1000 equals 100.0% .resistRain // Rain resistance of item 0-1000, where 1000 equals 100.0% .resistSnow // Snow resistance of item 0-1000, where 1000 equals 100.0% .damageHeat // Weapon deals Heat/Fire elemental damage (true/false) .damageCold // Weapon deals Cold elemental damage (true/false) .damageLight // Weapon deals Light elemental damage (true/false) .damageLightning // Weapon deals Lightning elemental damage (true/false) .damagePoison // Weapon deals Poison elemental damage (true/false) .damageRain // Weapon deals Rain/Water elemental damage (true/false) .damageSnow // Weapon deals Snow/Ice elemental damage (true/false) Added new UOX.INI setting under [server] to enable/disable shard response to ConnectUO server polling (disabled by default) Sub-commands are no longer included when registering packets to be overloaded via RegisterPacket function, as that part was never fully implemented. Packet-hook scripts can be setup for specific packet IDs, but any sub-command checking will need to be done in the script itself JS Packet Method GetDWord() now uses JS_NewNumberValue instead of INT_TO_JSVAL to read from the socket buffer, to better handle large numbers, which could previously be returned with wrong values. JS Function CalcItemFromSer() now uses a JS_GetStringBytes() and str_value() combo instead of JSVAL_TO_INT() to read the data provided in the function argument. This allows JS scripts to provide item serials to the function directly without needing to split it into four parts first (though that still works) Fixed issue where JS properties for multis didn't always return correct values The 'set command can now be used to set the armour class of items ('set ac #) Reimplemented 'tweak command in JS engine (js/commands/targeting/tweak.js) - can be used to view and modify properties of characters, character skills, items, multis and regions (target ground) Added placeholder packet-hook script (js/server/network/0xf1_connectUoServerPoll.js) to handle responses to ConnectUO server polling. By default this script does nothing, but serves as a placeholder for drop-in replacement scripts generated specifically for each shard by the ConnectUO service. Updated some commands to support an alternate STATIC keyword (can also be ommitted) to add base items: 'add static itemID 'tile static itemID Updated some commands with support for randomization. Provided itemID will be randomized based on provided rndValue: /js/commands/targeting/add.js: 'add itemID rndValue cmdtable.cpp and targeting.cpp: 'tile itemID rndValue 'tile itemID x1 x2 y1 y2 z rndValue Updated js/commands/custom/repeatingcmds.js to support 'm delete as an alias for 'rremove Added 'props as an alias for the 'tweak command Added 'teleport as an alias for the 'tele command (js/commands/targeting/tele.js) Added 'shavehair and 'shavebeard as aliases for 'kill hair and 'kill beard (js/commands/targeting/kill.js) Added 'noinvul and 'mortal aliases for the 'invul false command (js/commands/custom/misc-cmds.js) Added 'immortal and 'invul (without parameter) as aliases for the 'invul true command Added 'bringtopack as an alias of 'movetobag command (js/commands/targeting/movetobag.js) Updated check for cancelling of target cursor in various JS scripts Minor updates to various JS scripts Fixed issue where some item definitions in dfndata/harditems/harditems.dfn and dfndata/items/building/lighting.dfn used comma instead of space as delimiter for the VALUE tag, which thus never got applied Updated all NPC definitions to let NPCs spawn facing in random directions
2021-03-22 05:59:20 +08:00
else
{
0.99.4d Added new option in UOX.INI under [settings] section: MAPDIFFSENABLED=0/1 // If enabled, server will attempt to load diff files, and send "Enable Map-diff files" packet to client to also load these. Disabled by default. Server no longer loads map/statics diff files by default, nor does it send packet to client to request loading these files, as only client versions below 7.0.8.2 will actively load these files. Can be re-enabled with new UOX.INI setting mentioned above! Fixed incorrect ID for gargish dagger in CHandleCombat::getWeaponType() Added missing weapon entries in CHandleCombat::getWeaponType(): bladed whip, barbed whip, spiked whip, gargish talwar Fixed an issue that would show the end part of some tiledata names as garbled text instead of cutting off the text(!) at 20 characters Fixed an issue with advanced character creation template when using ClassicUO client, which sends a profession value of 255 instead of 0 when no profession template has been selected. Fixed an issue where clones of NPCs that can split in combat didn't get the NPC flag correctly set Guild titles are now removed for players who leave their guilds Enabled closing some hard-coded gump menus using right-click (howto, guild, towns, wholist, addmenu, craftmenu, info) Fixed an issue where adding base items using 'add [itemID] would sometimes get false positive hits from harditems.dfn, depending on the length of the itemID Fixed an issue where items added using 'add [itemID] would not get names applied properly from harditems.dfn Item/NPC DFN tag GET can now inherit a random parent by adding additional values separated by spaces. Syntax: GET=parent1 parent2 parent3 (etc) Fixed an issue where NPC backpacks would not have the max item capacity set properly Added new properties for CItem objects (also exposed as JS Item Properties): maxRange // max distance a ranged weapon can fire at (replaces ARCHERRANGE ini setting) baseRange // base distance throwing weapons (when implemented) can be used at Added support for new Item DFN tag that replaces global UOX.INI setting ARCHERRANGE: MAXRANGE=# // Specifies max range of ranged weapon Added support for new Item/NPC DFN tags to support randomizing elemental resistances: RESISTFIRE=#/# # // Set NPC's poison resistance; fixed or random value RESISTCOLD=#/# # // Set NPC's poison resistance; fixed or random value RESISTLIGHTNING=#/# # // Set NPC's poison resistance; fixed or random value RESISTPOISON=#/# # // Set NPC's poison resistance; fixed or random value Added support for two new DFN tags in dfndata/race/races.dfn that can be used to allow/ban lists of equipment for specific races ALLOWEQUIPLIST=# BANEQUIPLIST=# Added support for new section in dfndata/race/races.dfn - [EQUIPLIST #], which can be used to define lists of equipment that is whitelisted or banned for specific races. Fixed a bug that would report incorrect weight in tooltips for Item/NPC spawner objects ScriptSections are now reapplied for items bought by players from NPC vendors Fixed an issue where players could drop an item on the ground and other players would still see the item after it was picked up, because of a failed distance check vs old location coordinates (in pack) instead of vs current location on ground Fixed a bug with players being able to use last-target macro to target objects picked up and held by other players on their cursor Updated all references to "devinelock" to be "divinelock" instead - this includes the name of the JS Item property Fixed house commands triggering (useless) targeting cursors for players onboard boats Changed default statcap in UOX.INI from 325 to 225 Fixed a out-of-range error for players attempting to combine ore inside their own backpack Fixed various issues with distance checks and container checks when using/target objects Added optional 4th "hue" parameter to AddGump JS method Added JS Function to get total amount of accounts on server - GetAccountCount() Added JS Function to get total amount of players online - GetPlayerCount() onSwing JS Event can now trigger in scripts attached to items, not just items attached to characters Added some JS Functions to expose some hard-coded constants to JS scripts: BASEITEMSERIAL() // Base item serial INVALIDSERIAL() // Invalid serial INVALIDID() // Invalid ID INVALIDCOLOUR() // Invalid colour Fixed an issue where JS character property .colour would modify origSkin property instead of colour Fixed an issue where JS character property .guildTitle returned the name of the character instead of the guild title Character JS property .poison can now also be used to set a character's poisoned level, not just read it Exposed Item property to JS engine: .ac // armour class for item (0-128). Primarily used for setting race-restrictions for equippable items, i.e. race X cannot equip items of armour class Y. .def // defensive value of item (Physical resistance post-AoS, AR in older UO) // NOTE: The following properties don't actually do anything yet, but can still be used in custom JS scripts if desired .resistCold // Cold resistance of item 0-1000, where 1000 equals 100.0% .resistHeat // Heat/Fire resistance of item 0-1000, where 1000 equals 100.0% .resistLight // Light resistance of item 0-1000, where 1000 equals 100.0% .resistLightning // Energy/Lightning resistance of item 0-1000, where 1000 equals 100.0% .resistPoison // Poison resistance of item 0-1000, where 1000 equals 100.0% .resistRain // Rain resistance of item 0-1000, where 1000 equals 100.0% .resistSnow // Snow resistance of item 0-1000, where 1000 equals 100.0% .damageHeat // Weapon deals Heat/Fire elemental damage (true/false) .damageCold // Weapon deals Cold elemental damage (true/false) .damageLight // Weapon deals Light elemental damage (true/false) .damageLightning // Weapon deals Lightning elemental damage (true/false) .damagePoison // Weapon deals Poison elemental damage (true/false) .damageRain // Weapon deals Rain/Water elemental damage (true/false) .damageSnow // Weapon deals Snow/Ice elemental damage (true/false) Added new UOX.INI setting under [server] to enable/disable shard response to ConnectUO server polling (disabled by default) Sub-commands are no longer included when registering packets to be overloaded via RegisterPacket function, as that part was never fully implemented. Packet-hook scripts can be setup for specific packet IDs, but any sub-command checking will need to be done in the script itself JS Packet Method GetDWord() now uses JS_NewNumberValue instead of INT_TO_JSVAL to read from the socket buffer, to better handle large numbers, which could previously be returned with wrong values. JS Function CalcItemFromSer() now uses a JS_GetStringBytes() and str_value() combo instead of JSVAL_TO_INT() to read the data provided in the function argument. This allows JS scripts to provide item serials to the function directly without needing to split it into four parts first (though that still works) Fixed issue where JS properties for multis didn't always return correct values The 'set command can now be used to set the armour class of items ('set ac #) Reimplemented 'tweak command in JS engine (js/commands/targeting/tweak.js) - can be used to view and modify properties of characters, character skills, items, multis and regions (target ground) Added placeholder packet-hook script (js/server/network/0xf1_connectUoServerPoll.js) to handle responses to ConnectUO server polling. By default this script does nothing, but serves as a placeholder for drop-in replacement scripts generated specifically for each shard by the ConnectUO service. Updated some commands to support an alternate STATIC keyword (can also be ommitted) to add base items: 'add static itemID 'tile static itemID Updated some commands with support for randomization. Provided itemID will be randomized based on provided rndValue: /js/commands/targeting/add.js: 'add itemID rndValue cmdtable.cpp and targeting.cpp: 'tile itemID rndValue 'tile itemID x1 x2 y1 y2 z rndValue Updated js/commands/custom/repeatingcmds.js to support 'm delete as an alias for 'rremove Added 'props as an alias for the 'tweak command Added 'teleport as an alias for the 'tele command (js/commands/targeting/tele.js) Added 'shavehair and 'shavebeard as aliases for 'kill hair and 'kill beard (js/commands/targeting/kill.js) Added 'noinvul and 'mortal aliases for the 'invul false command (js/commands/custom/misc-cmds.js) Added 'immortal and 'invul (without parameter) as aliases for the 'invul true command Added 'bringtopack as an alias of 'movetobag command (js/commands/targeting/movetobag.js) Updated check for cancelling of target cursor in various JS scripts Minor updates to various JS scripts Fixed issue where some item definitions in dfndata/harditems/harditems.dfn and dfndata/items/building/lighting.dfn used comma instead of space as delimiter for the VALUE tag, which thus never got applied Updated all NPC definitions to let NPCs spawn facing in random directions
2021-03-22 05:59:20 +08:00
*vp = JSVAL_NULL;
}
Housing Revamp and more Updated JS SysMessage function to accept up to 10 extra, optional arguments, which can be used with dictionary messages that require additional parameters like %s or %i Added new type of house privilege in cMultiObj.cpp to keep track of friends of the multi - HOUSEPRIV_FRIEND - which is stored during worldsaves as one or more Friend=<player serial> tags in house.wsc Added new type of house privilege in cMultiObj.cpp to keep track of guests of the multi - HOUSEPRIV_GUEST - which is stored during worldsaves as one or more Guest=<player serial> tags in house.wsc When items are created for houses upon house placement, a reference to the multi's serial is now stored in the house sign's MORE property to allow easier tracking of which house a particular sign belongs to Added tracking of new, persistent properties for houses via cMultiObj.cpp/h: lockdowns, secure containers, vendors, guests, friends, owners, ban location, public status, number of visits, timestamps Added a multitude of new methods in cMultiObj.cpp/h to assist in improving the functionality of houses Added new tags for houses in house.dfn (default values applied if tag not specified): MAXSECURECONTAINERS=4 - Max amount of secure containers allowed in a multi MAXLOCKDOWNS=256 - Max amount of lockdowns allowed in a multi MAXVENDORS=10 - Max amount of vendors allowed in a multi MAXBANS=50 - Max amount of bans in a multi's ban list MAXFRIENDS=50 - Max amount of friends in a multi's friend list MAXGUESTS=50 - Max amount of guests in a multi's guest list MAXOWNERS=8 - Max amount of owners and co-owners in a multi's owner list MAXTRASHCONTAINERS=1 - Max amount of trash containers allowed in multi SCRIPT=<scriptID> - Assign a JS script-ID directly to a multi FRONTDOOR - indicates that a door is the front door of a house. Cannot be locked in public houses! INTERIORDOOR - indicates that a door is an interior door of a house. Can be locked in public houses. BANX - Location X offset for multi's ban location, if not used, will try to use SE corner of multi instead BANY - Location Y offset for multi's ban location, if not used, will try to use SE corner of multi instead Added JS Event: onHouseCommand( tSock, multiObj, cmdID ) - For handling spoken house commands via JS scripts attached to multi. Updated JS Events: onEntrance() - can now trigger both for multi being entered and/or object entering onLeaving() - can now trigger both for multi being left and/or object entering onSpeech() - can now also trigger for items (in addition to chars) with event & script attached, if UOX.INI setting ITEMSDETECTSPEECH is enabled Added JS Multi methods: .IsBoat() - Returns whether the item (or multi) is a boat .IsOwner( playerToCheck ) - Returns whether a player is the owner of a multi .IsOnOwnerList( playerToCheck ) - Returns whether a player is on the (co-)owner list of a multi .IsOnFriendList( playerToCheck ) - Returns whether a player is on the friend list of a multi .IsOnGuestList( playerToCheck ) - Returns whether a player is on the guest list of a multi .IsOnBanList( playerToCheck ) - Returns whether a player is on the ban list of a multi .AddToFriendList( playertoAdd ) - Adds player to the friend list of a multi .RemoveFromFriendList( playertoRemove ) - Removes player from the friend list of a multi .AddToGuestList( playertoAdd ) - Adds player to the guest list of a multi .RemoveFromGuestList( playertoRemove ) - Removes player from the guest list of a multi .ClearOwnerList() - Clears all entries from a multi's (co-)owner list .ClearFriendList() - Clears all entries from a multi's friend list .ClearGuestList() - Clears all entries from a multi's guest list .ClearBanList() - Clears all entries from a multi's ban list .SecureContainer( itemToSecure ) - Secures a container in a multi .UnsecureContainer( itemToUnsecure ) - Unsecures a container in a multi .IsSecureContainer( itemToCheck ) - Checks if specified item is a secure container in a multi .LockDownItem( itemToLockDown) - Locks down an item in a multi .ReleaseItem( itemToRelease ) - Releases a locked down item in a multi .KillKeys() - Deletes ALL keys associated with a multi .AddTrashCont( itemToAdd ) - Add trash container to multi's list of trash containers .RemoveTrashCont( itemToRemove ) - Remove trash container from multi's list of trash containers Added JS Item (Multi only) properties: .lockdowns - Get the number of lockdowns in a multi .maxLockdowns - Get/Set the max number of lockdowns allowed in a multi .secureContainers - Get the number of secure containers in a multi .maxSecureContainers - Get/Set the max number of secure containers allowed in a multi .trashContainers - Get the number of trash containers in a multi .maxTrashContainers - Get/Set the max number of trash containers allowed in a multi .friends - Get the number of friends in a multi's friend list .maxFriends - Get/Set the max number of friends allowed in a multi's friend list .guests - Get the number of guests in a multi's guest list .maxGuests - Get/Set the max number of guests allowed in a multi's guest list .owners - Get the number of owners in a multi's owner list .maxOwners - Get/Set the max number of owners allowed in a multi's owner list .bans - Get the number of banned players in a multi's ban list .maxBans - Get/Set the max number of banned players allowed in a multi's ban list .vendors - Get the number of player vendors in a multi .maxVendors - Get the max number of player vendors allowed in a multi .deed - Get the item sectionID for deed used to place multi .isPublic - Get/Set the private/public state of a multi .buildTimestamp - Get the timestamp for when the house was originally placed .tradeTimestamp - Get the timestamp for when the house was last traded to another player .banX - Get/Set the ban location X offset for the multi .banY - Get/Set the ban location Y offset for the multi Added JS Character properties: .multi = Get/Set the multi object the character is in .accountNum = Get the account number the character belongs to .housesOwned = Get a count of houses owned by the character .housesCoOwned = Get a count of houses co-owned by the character Updated JS cBaseObject Methods .FirstItem(), .NextItem() and .FinishedItems() to also support iterating through items in multis Updated JS multi Methods .FirstChar(), .NextChar() and .FinishedChars() to support an additional parameter to specify what kind of characters to loop through: "default" or no parameter - all characters inside the multi "owner" - players on multi's owner list "friend" - players on multi's friend list "guest" - players on multi's guest list "banned" - players on multi's ban list Added new INI tags to a new section of uox.ini called [houses] DECAYTIMERINHOUSE=3600 // Decay timer in seconds for non-locked down items inside houses PROTECTPRIVATEHOUSES=1 // Toggles whether private houses will automatically boot unauthorized visitors (1) or not (0) TRACKHOUSESPERACCOUNT=1 // Toggles whether to track (and restrict) house ownership per account (1) or per character (0) MAXHOUSESOWNABLE=1 // Specifies the max amount of houses a player can own per account/char, depending on how house ownership is tracked MAXHOUSESCOOWNABLE=10 // Specifies the max amount of houses a player can co-own per character CANOWNANDCOOWNHOUSES=1 // Toggles whether players can own and co-own houses at the same time COOWNHOUSESONSAMEACCOUNT=1 // Toggles whether characters on same account as house owner will be treated as co-owners Added new INI tags in [settings] section of uox.ini: ITEMSDETECTSPEECH=0 // If enabled, server will search for nearby items with onSpeech JS event running whenever a character speaks. Disabled by default. MAXPLAYERPACKITEMS=125 // Defines max item capacity for player (and NPC) backpacks. Defaults to 125. Moved most of the existing house functionality to JS and expanded upon it to reach feature parity with houses in regular UO around Publish 15/16, with various extras thrown in for good measure and all functionality being customizable: js/server/house/house.js (15000) - handles detection of house commands and characters entering/leaving houses js/server/house/houseSign.js (15001) - contains and handles all house-related gumps/menus and what is shown when players interact with house sign js/server/house/houseCommands.js (15002) - handles functionality of house commands and other functionality such as transfer of ownership, demolishing house, etc. js/server/house/houseDeed.js (15003) - handles initial rules that allow/disallow placement of additional houses for players All house-related menus now fully handled through JS All house commands and other functionality now fully handled through JS Removed redundant hard-coded house functionality Implemented Co-owners, friends, guests for houses, with access rules in place for entry, lockdowns, house commands, etc. Implemented Private and Public houses Implemented Secure Containers and Trash Barrels Definable max lockdowns, secure containers, player vendors, bans, friends, guests, owners, trash containers and more - per house type JS scripts can now be attached directly to houses Doors in houses can be marked as front doors or interior doors, and will be treated differently with regards to private and public houses Added new item to dfndata/items/containers/misc.dfn - [trashbarrel] Added new JS script (js/items/trashbarrel.js) with trash barrel functionality for houses. Trash barrels that are marked as secure containers are only accessible by owners, co-owners and friends of the house. Various options available at top of script. Updated js/items/axe.js to support chopping up trash barrels and house add-ons in houses owned by the player Fixed an issue with house doors being left behind after demolishing houses while their doors were open Fixed an issue where GMs could be banned from player houses Added Line of Sight checks to speech, to give players some privacy in their own homes Updated house placement code to more accurately check for other multis, dynamic and static objects when placing houses; now requires free space around each house that cannot be blocked by other houses or items that can block player movement, and disallows placement of houses on roads Updated house placement code to move characters blocking house placement to SE corner of the house Updated house placement code to disallow placing houses in guarded regions, or in dungeons Added new DFN tag for regions to enable/disable player houses in specific regions: HOUSING=0/1 Added new region (247) that covers path to Valley of Eodon in Felucca Added new region (248) that covers Valley of Eodon in Ter-Mur, with player housing disabled Added new region (249) that covers entire T2A lands, with player housing disabled Updated SPACEX and SPACEY values for all houses in dfndata/house/house.dfn to match updated house placement code Added new JS property to Regions that can be used to determine or change state of player housing in a region: .canPlaceHouse() Updated rules for usage of dye tubs to dye locked down items; now only house owners or co-owners may dye locked down items Updated rules for usage of the following locked down items in a house, which are now only usable by house owners and co-owners Dyes, Guildstone Deeds, Recall Runes (renaming), Rename Deeds, Townstone Deeds, House Deeds, Boat Models, Player Vendor Deeds, Ore, Hair Dye Updated rules for usage of the following locked down items in a house, which are now only usable by house owners, co-owners and friends: Keys, Dye Tubs, Magic Scrolls, Fireworks Wands, Magic Wands, Smithing Tools, Mining Tools, Fishing Poles Updated item lockdown rules to allow locking down (and releasing) items in a container as long as the container is locked down, and to only allow releasing a locked down container if it's empty of locked down items Updated item lockdown rules to only allow locking down movement-blocking items further than 2 tiles away from doors Updated rules for releasing items in houses - now the house owner can release any locked down items, co-owners can release items locked down by themselves or by friends, while friends can release only items locked down by themselves Added some feedback to player about why their attempted house placement failed Items added by GMs directly into multis will now decay based on the house-specific decay timer instead of the regular one Fixed an issue that could cause items to almost instantly decay after being released from lockdown in a house Placing house add-ons now properly takes into account SPACEX and SPACEY values when checking if they can fit in selected area of houses Re-added SPACEX and SPACEY values for Pentagram and Loom house add-ons House add-ons can now be converted back into house add-on deeds by chopping them with an axe Added new item type - IT_HOUSEADDON (201) - used by house add-ons placed in player houses Fixed a bug where keys would stop working after being added to a keyring, and would turn into blank keys upon release from the keyring Added visitor count for public player houses, which keeps track of how many visits a public house has received, with each player counted max 1 time every 24 hours Fixed an issue with FindPlayersInOldVisrange() where it didn't take into account that players could see buildings further away than the standard update range. This could cause players to see ghost images of buildings if they were at the "right" distance when the building was being demolished Added NODECAY tag to all signs and doors in dfndata/house/house.dfn Added FRONTDOOR or INTERIORDOOR (as appropriate) to all doors in dfndata/house/house.dfn Added BANX and BANY to specify ban location for some houses in dfndata/house/house.dfn instead of relying on finding SE corner automatically Implemented strongboxes (js/server/house/strongbox.js) for co-owners of a house, which can be placed with the house command "i wish to place a strongbox". Max capacity is 25 items Updated 'REMOVE command to take an optional parameter - itemID. If supplied, the command will remove all items with this itemID from a targeted container Fixed a bug when checking if dynamic items were blocking valid spawn locations for NPCs, some function arguments were in the wrong order! Improved code that finds valid spawn locations for items and NPCs spawned via spawn regions. As server gradually builds up lists of valid spawn locations per region over time, it will start using these lists more often, rather than always look for brand new spawn locations. Fixed a bug with CMulHandler::CheckStaticFlag() that prevented NPCs from spawning inside buildings with no static floors! Fixed an issue with repeating commands that prevented GMs from being able to cancel them when using the ClassicUO client Exposed character property .accountNum to JS engine Extended CDataList class to include a Clear() method for clearing lists Updated JS File method .Open() to support an optional, third argument - subFolderName - that defines in which sub-folder of UOX3/shared/ to store/look for a file. If no third argument is supplied, UOX3 will default to using the shared folder itself. Updated JS File method .Length() to return a value of -1 for files that don't exist Added new code function, exposed to JS engine with same parameters, which simply checks if a given tile ID has a specific flag bool CheckTileFlag( UI16 itemID, TILEFLAG flagToCheck ) Added JS function used to find the root container of an item (if any) FindRootContainer( itemSerial ) FindRootContainer( item ) Added new JS function that allows deleting files from UOX3/shared/ folder or subfolders of shared folder. If no subFolderName is provided, looks for file directly in shared folder itself. Restrictions on file- and folder-names apply. bool DeleteFile( fileName, subFolderName ) Added new JS functions for checking if a specific client or server feature is enabled. See documentation for full list of client/server features. GetClientFeature( bitNum ) // Returns true if specified client feature is enabled on server GetServerFeature( bitNum ) // Returns true if specified server feature is enabled on server Added new JS function for returning the value of almost any server setting from UOX.INI GetServerSetting( settingNameInDoubleQuotes ) Updated JS function DoesDynamicBlock() with two new parameters - checkOnlyMultis and checkOnlyNonMultis Updated JS function DoesMapBlock() with two new parameters - checkMultiPlacement and checkForRoad Fixed an issue where a LoS check would prevent players from accessing containers in their own backpack Added new functions in findfuncs.cpp to make it easier to find items near another object or location: findNearbyItems( object, distance ) findNearbyItems( x, y, worldNumber, instanceID, distance ) Added new Item property - maxItems - used by containers to determine their max item capacity Added new Item property - totalItemCount - used to get total item count in a container (including sub-containers) Added check for max item capacity when creating new items that are added to a character's backpack - items will be created below character's feet if backpack is full! Added new DFN tag for items, used by containers to determine item capacity for a given container: MAXITEMS=# // 125 is the default for all containers if not set Added new JS Item properties: .maxItems // gets/sets item capacity for a given container .totalItemCount // gets total item count in a container, including sub-containers Updated item tooltips for containers to show accurate total item count, as well as to display max item capacity Fixed a bug where picking up items from a non-locked down pile of items on the floor inside a multi could cause the remaining pile to be seen as no longer inside the multi, disallowing locking it back down and causing it to decay based on regular decay timer instead of house-specific one Updated JS command set to allow setting poison-level on items ('set poison #) and hunger-level on characters ('set hunger #) Fixed an issue with js/item/food.js that prevented poisoned food from poisoning characters when eaten Fixed an issue with js/skill/poisoning.js that prevented players from poisoning food! Updated various JS scripts and hardcoded targeting functions to disallow the targeting of locked down resources using skills and tools Updated JS Method TextMessage() to support three extra, optional parameters. Note that if one optional parameter is included, all preceding optional parameters are also required! speechTarget - What kind of target is this message intended for? 0 - Only visible for sender and receiver of message 1 - Visible to all players in range 2 - Visible to all NPCs and players in range 3 - Visible to all PCs everywhere + NPCs in range 4 - Visible to all PCs everywhere (broadcast) 5 - Only visible for the receiver of the message speechTargetSerial - The serial of the receiver of the message, used if speechTarget is 0 or 5 speechFontType - The type of font to display the text in. Defaults to normal. 0 - Bold 1 - Normal with shadow 2 - Bold with shadow 3 - Normal 4 - Gothic 5 - Italic 6 - Small, dark 7 - Colourful 8 - Runic (only works with CAPS) 9 - Small, light Added timestamp to worldsaves in console, to make it easier to see when a particular world-save was done Added info about compiler/environment displayed at the top of the UOX3 console during startup Updated dictionary files with new messages primarily related to housing
2020-11-04 02:00:37 +08:00
break;
case CIP_BANY:
if( gPriv->GetObjType() == OT_MULTI )
{
*vp = INT_TO_JSVAL(( static_cast<CMultiObj *>( gPriv )->GetBanY() ));
}
0.99.4d Added new option in UOX.INI under [settings] section: MAPDIFFSENABLED=0/1 // If enabled, server will attempt to load diff files, and send "Enable Map-diff files" packet to client to also load these. Disabled by default. Server no longer loads map/statics diff files by default, nor does it send packet to client to request loading these files, as only client versions below 7.0.8.2 will actively load these files. Can be re-enabled with new UOX.INI setting mentioned above! Fixed incorrect ID for gargish dagger in CHandleCombat::getWeaponType() Added missing weapon entries in CHandleCombat::getWeaponType(): bladed whip, barbed whip, spiked whip, gargish talwar Fixed an issue that would show the end part of some tiledata names as garbled text instead of cutting off the text(!) at 20 characters Fixed an issue with advanced character creation template when using ClassicUO client, which sends a profession value of 255 instead of 0 when no profession template has been selected. Fixed an issue where clones of NPCs that can split in combat didn't get the NPC flag correctly set Guild titles are now removed for players who leave their guilds Enabled closing some hard-coded gump menus using right-click (howto, guild, towns, wholist, addmenu, craftmenu, info) Fixed an issue where adding base items using 'add [itemID] would sometimes get false positive hits from harditems.dfn, depending on the length of the itemID Fixed an issue where items added using 'add [itemID] would not get names applied properly from harditems.dfn Item/NPC DFN tag GET can now inherit a random parent by adding additional values separated by spaces. Syntax: GET=parent1 parent2 parent3 (etc) Fixed an issue where NPC backpacks would not have the max item capacity set properly Added new properties for CItem objects (also exposed as JS Item Properties): maxRange // max distance a ranged weapon can fire at (replaces ARCHERRANGE ini setting) baseRange // base distance throwing weapons (when implemented) can be used at Added support for new Item DFN tag that replaces global UOX.INI setting ARCHERRANGE: MAXRANGE=# // Specifies max range of ranged weapon Added support for new Item/NPC DFN tags to support randomizing elemental resistances: RESISTFIRE=#/# # // Set NPC's poison resistance; fixed or random value RESISTCOLD=#/# # // Set NPC's poison resistance; fixed or random value RESISTLIGHTNING=#/# # // Set NPC's poison resistance; fixed or random value RESISTPOISON=#/# # // Set NPC's poison resistance; fixed or random value Added support for two new DFN tags in dfndata/race/races.dfn that can be used to allow/ban lists of equipment for specific races ALLOWEQUIPLIST=# BANEQUIPLIST=# Added support for new section in dfndata/race/races.dfn - [EQUIPLIST #], which can be used to define lists of equipment that is whitelisted or banned for specific races. Fixed a bug that would report incorrect weight in tooltips for Item/NPC spawner objects ScriptSections are now reapplied for items bought by players from NPC vendors Fixed an issue where players could drop an item on the ground and other players would still see the item after it was picked up, because of a failed distance check vs old location coordinates (in pack) instead of vs current location on ground Fixed a bug with players being able to use last-target macro to target objects picked up and held by other players on their cursor Updated all references to "devinelock" to be "divinelock" instead - this includes the name of the JS Item property Fixed house commands triggering (useless) targeting cursors for players onboard boats Changed default statcap in UOX.INI from 325 to 225 Fixed a out-of-range error for players attempting to combine ore inside their own backpack Fixed various issues with distance checks and container checks when using/target objects Added optional 4th "hue" parameter to AddGump JS method Added JS Function to get total amount of accounts on server - GetAccountCount() Added JS Function to get total amount of players online - GetPlayerCount() onSwing JS Event can now trigger in scripts attached to items, not just items attached to characters Added some JS Functions to expose some hard-coded constants to JS scripts: BASEITEMSERIAL() // Base item serial INVALIDSERIAL() // Invalid serial INVALIDID() // Invalid ID INVALIDCOLOUR() // Invalid colour Fixed an issue where JS character property .colour would modify origSkin property instead of colour Fixed an issue where JS character property .guildTitle returned the name of the character instead of the guild title Character JS property .poison can now also be used to set a character's poisoned level, not just read it Exposed Item property to JS engine: .ac // armour class for item (0-128). Primarily used for setting race-restrictions for equippable items, i.e. race X cannot equip items of armour class Y. .def // defensive value of item (Physical resistance post-AoS, AR in older UO) // NOTE: The following properties don't actually do anything yet, but can still be used in custom JS scripts if desired .resistCold // Cold resistance of item 0-1000, where 1000 equals 100.0% .resistHeat // Heat/Fire resistance of item 0-1000, where 1000 equals 100.0% .resistLight // Light resistance of item 0-1000, where 1000 equals 100.0% .resistLightning // Energy/Lightning resistance of item 0-1000, where 1000 equals 100.0% .resistPoison // Poison resistance of item 0-1000, where 1000 equals 100.0% .resistRain // Rain resistance of item 0-1000, where 1000 equals 100.0% .resistSnow // Snow resistance of item 0-1000, where 1000 equals 100.0% .damageHeat // Weapon deals Heat/Fire elemental damage (true/false) .damageCold // Weapon deals Cold elemental damage (true/false) .damageLight // Weapon deals Light elemental damage (true/false) .damageLightning // Weapon deals Lightning elemental damage (true/false) .damagePoison // Weapon deals Poison elemental damage (true/false) .damageRain // Weapon deals Rain/Water elemental damage (true/false) .damageSnow // Weapon deals Snow/Ice elemental damage (true/false) Added new UOX.INI setting under [server] to enable/disable shard response to ConnectUO server polling (disabled by default) Sub-commands are no longer included when registering packets to be overloaded via RegisterPacket function, as that part was never fully implemented. Packet-hook scripts can be setup for specific packet IDs, but any sub-command checking will need to be done in the script itself JS Packet Method GetDWord() now uses JS_NewNumberValue instead of INT_TO_JSVAL to read from the socket buffer, to better handle large numbers, which could previously be returned with wrong values. JS Function CalcItemFromSer() now uses a JS_GetStringBytes() and str_value() combo instead of JSVAL_TO_INT() to read the data provided in the function argument. This allows JS scripts to provide item serials to the function directly without needing to split it into four parts first (though that still works) Fixed issue where JS properties for multis didn't always return correct values The 'set command can now be used to set the armour class of items ('set ac #) Reimplemented 'tweak command in JS engine (js/commands/targeting/tweak.js) - can be used to view and modify properties of characters, character skills, items, multis and regions (target ground) Added placeholder packet-hook script (js/server/network/0xf1_connectUoServerPoll.js) to handle responses to ConnectUO server polling. By default this script does nothing, but serves as a placeholder for drop-in replacement scripts generated specifically for each shard by the ConnectUO service. Updated some commands to support an alternate STATIC keyword (can also be ommitted) to add base items: 'add static itemID 'tile static itemID Updated some commands with support for randomization. Provided itemID will be randomized based on provided rndValue: /js/commands/targeting/add.js: 'add itemID rndValue cmdtable.cpp and targeting.cpp: 'tile itemID rndValue 'tile itemID x1 x2 y1 y2 z rndValue Updated js/commands/custom/repeatingcmds.js to support 'm delete as an alias for 'rremove Added 'props as an alias for the 'tweak command Added 'teleport as an alias for the 'tele command (js/commands/targeting/tele.js) Added 'shavehair and 'shavebeard as aliases for 'kill hair and 'kill beard (js/commands/targeting/kill.js) Added 'noinvul and 'mortal aliases for the 'invul false command (js/commands/custom/misc-cmds.js) Added 'immortal and 'invul (without parameter) as aliases for the 'invul true command Added 'bringtopack as an alias of 'movetobag command (js/commands/targeting/movetobag.js) Updated check for cancelling of target cursor in various JS scripts Minor updates to various JS scripts Fixed issue where some item definitions in dfndata/harditems/harditems.dfn and dfndata/items/building/lighting.dfn used comma instead of space as delimiter for the VALUE tag, which thus never got applied Updated all NPC definitions to let NPCs spawn facing in random directions
2021-03-22 05:59:20 +08:00
else
{
0.99.4d Added new option in UOX.INI under [settings] section: MAPDIFFSENABLED=0/1 // If enabled, server will attempt to load diff files, and send "Enable Map-diff files" packet to client to also load these. Disabled by default. Server no longer loads map/statics diff files by default, nor does it send packet to client to request loading these files, as only client versions below 7.0.8.2 will actively load these files. Can be re-enabled with new UOX.INI setting mentioned above! Fixed incorrect ID for gargish dagger in CHandleCombat::getWeaponType() Added missing weapon entries in CHandleCombat::getWeaponType(): bladed whip, barbed whip, spiked whip, gargish talwar Fixed an issue that would show the end part of some tiledata names as garbled text instead of cutting off the text(!) at 20 characters Fixed an issue with advanced character creation template when using ClassicUO client, which sends a profession value of 255 instead of 0 when no profession template has been selected. Fixed an issue where clones of NPCs that can split in combat didn't get the NPC flag correctly set Guild titles are now removed for players who leave their guilds Enabled closing some hard-coded gump menus using right-click (howto, guild, towns, wholist, addmenu, craftmenu, info) Fixed an issue where adding base items using 'add [itemID] would sometimes get false positive hits from harditems.dfn, depending on the length of the itemID Fixed an issue where items added using 'add [itemID] would not get names applied properly from harditems.dfn Item/NPC DFN tag GET can now inherit a random parent by adding additional values separated by spaces. Syntax: GET=parent1 parent2 parent3 (etc) Fixed an issue where NPC backpacks would not have the max item capacity set properly Added new properties for CItem objects (also exposed as JS Item Properties): maxRange // max distance a ranged weapon can fire at (replaces ARCHERRANGE ini setting) baseRange // base distance throwing weapons (when implemented) can be used at Added support for new Item DFN tag that replaces global UOX.INI setting ARCHERRANGE: MAXRANGE=# // Specifies max range of ranged weapon Added support for new Item/NPC DFN tags to support randomizing elemental resistances: RESISTFIRE=#/# # // Set NPC's poison resistance; fixed or random value RESISTCOLD=#/# # // Set NPC's poison resistance; fixed or random value RESISTLIGHTNING=#/# # // Set NPC's poison resistance; fixed or random value RESISTPOISON=#/# # // Set NPC's poison resistance; fixed or random value Added support for two new DFN tags in dfndata/race/races.dfn that can be used to allow/ban lists of equipment for specific races ALLOWEQUIPLIST=# BANEQUIPLIST=# Added support for new section in dfndata/race/races.dfn - [EQUIPLIST #], which can be used to define lists of equipment that is whitelisted or banned for specific races. Fixed a bug that would report incorrect weight in tooltips for Item/NPC spawner objects ScriptSections are now reapplied for items bought by players from NPC vendors Fixed an issue where players could drop an item on the ground and other players would still see the item after it was picked up, because of a failed distance check vs old location coordinates (in pack) instead of vs current location on ground Fixed a bug with players being able to use last-target macro to target objects picked up and held by other players on their cursor Updated all references to "devinelock" to be "divinelock" instead - this includes the name of the JS Item property Fixed house commands triggering (useless) targeting cursors for players onboard boats Changed default statcap in UOX.INI from 325 to 225 Fixed a out-of-range error for players attempting to combine ore inside their own backpack Fixed various issues with distance checks and container checks when using/target objects Added optional 4th "hue" parameter to AddGump JS method Added JS Function to get total amount of accounts on server - GetAccountCount() Added JS Function to get total amount of players online - GetPlayerCount() onSwing JS Event can now trigger in scripts attached to items, not just items attached to characters Added some JS Functions to expose some hard-coded constants to JS scripts: BASEITEMSERIAL() // Base item serial INVALIDSERIAL() // Invalid serial INVALIDID() // Invalid ID INVALIDCOLOUR() // Invalid colour Fixed an issue where JS character property .colour would modify origSkin property instead of colour Fixed an issue where JS character property .guildTitle returned the name of the character instead of the guild title Character JS property .poison can now also be used to set a character's poisoned level, not just read it Exposed Item property to JS engine: .ac // armour class for item (0-128). Primarily used for setting race-restrictions for equippable items, i.e. race X cannot equip items of armour class Y. .def // defensive value of item (Physical resistance post-AoS, AR in older UO) // NOTE: The following properties don't actually do anything yet, but can still be used in custom JS scripts if desired .resistCold // Cold resistance of item 0-1000, where 1000 equals 100.0% .resistHeat // Heat/Fire resistance of item 0-1000, where 1000 equals 100.0% .resistLight // Light resistance of item 0-1000, where 1000 equals 100.0% .resistLightning // Energy/Lightning resistance of item 0-1000, where 1000 equals 100.0% .resistPoison // Poison resistance of item 0-1000, where 1000 equals 100.0% .resistRain // Rain resistance of item 0-1000, where 1000 equals 100.0% .resistSnow // Snow resistance of item 0-1000, where 1000 equals 100.0% .damageHeat // Weapon deals Heat/Fire elemental damage (true/false) .damageCold // Weapon deals Cold elemental damage (true/false) .damageLight // Weapon deals Light elemental damage (true/false) .damageLightning // Weapon deals Lightning elemental damage (true/false) .damagePoison // Weapon deals Poison elemental damage (true/false) .damageRain // Weapon deals Rain/Water elemental damage (true/false) .damageSnow // Weapon deals Snow/Ice elemental damage (true/false) Added new UOX.INI setting under [server] to enable/disable shard response to ConnectUO server polling (disabled by default) Sub-commands are no longer included when registering packets to be overloaded via RegisterPacket function, as that part was never fully implemented. Packet-hook scripts can be setup for specific packet IDs, but any sub-command checking will need to be done in the script itself JS Packet Method GetDWord() now uses JS_NewNumberValue instead of INT_TO_JSVAL to read from the socket buffer, to better handle large numbers, which could previously be returned with wrong values. JS Function CalcItemFromSer() now uses a JS_GetStringBytes() and str_value() combo instead of JSVAL_TO_INT() to read the data provided in the function argument. This allows JS scripts to provide item serials to the function directly without needing to split it into four parts first (though that still works) Fixed issue where JS properties for multis didn't always return correct values The 'set command can now be used to set the armour class of items ('set ac #) Reimplemented 'tweak command in JS engine (js/commands/targeting/tweak.js) - can be used to view and modify properties of characters, character skills, items, multis and regions (target ground) Added placeholder packet-hook script (js/server/network/0xf1_connectUoServerPoll.js) to handle responses to ConnectUO server polling. By default this script does nothing, but serves as a placeholder for drop-in replacement scripts generated specifically for each shard by the ConnectUO service. Updated some commands to support an alternate STATIC keyword (can also be ommitted) to add base items: 'add static itemID 'tile static itemID Updated some commands with support for randomization. Provided itemID will be randomized based on provided rndValue: /js/commands/targeting/add.js: 'add itemID rndValue cmdtable.cpp and targeting.cpp: 'tile itemID rndValue 'tile itemID x1 x2 y1 y2 z rndValue Updated js/commands/custom/repeatingcmds.js to support 'm delete as an alias for 'rremove Added 'props as an alias for the 'tweak command Added 'teleport as an alias for the 'tele command (js/commands/targeting/tele.js) Added 'shavehair and 'shavebeard as aliases for 'kill hair and 'kill beard (js/commands/targeting/kill.js) Added 'noinvul and 'mortal aliases for the 'invul false command (js/commands/custom/misc-cmds.js) Added 'immortal and 'invul (without parameter) as aliases for the 'invul true command Added 'bringtopack as an alias of 'movetobag command (js/commands/targeting/movetobag.js) Updated check for cancelling of target cursor in various JS scripts Minor updates to various JS scripts Fixed issue where some item definitions in dfndata/harditems/harditems.dfn and dfndata/items/building/lighting.dfn used comma instead of space as delimiter for the VALUE tag, which thus never got applied Updated all NPC definitions to let NPCs spawn facing in random directions
2021-03-22 05:59:20 +08:00
*vp = JSVAL_NULL;
}
Housing Revamp and more Updated JS SysMessage function to accept up to 10 extra, optional arguments, which can be used with dictionary messages that require additional parameters like %s or %i Added new type of house privilege in cMultiObj.cpp to keep track of friends of the multi - HOUSEPRIV_FRIEND - which is stored during worldsaves as one or more Friend=<player serial> tags in house.wsc Added new type of house privilege in cMultiObj.cpp to keep track of guests of the multi - HOUSEPRIV_GUEST - which is stored during worldsaves as one or more Guest=<player serial> tags in house.wsc When items are created for houses upon house placement, a reference to the multi's serial is now stored in the house sign's MORE property to allow easier tracking of which house a particular sign belongs to Added tracking of new, persistent properties for houses via cMultiObj.cpp/h: lockdowns, secure containers, vendors, guests, friends, owners, ban location, public status, number of visits, timestamps Added a multitude of new methods in cMultiObj.cpp/h to assist in improving the functionality of houses Added new tags for houses in house.dfn (default values applied if tag not specified): MAXSECURECONTAINERS=4 - Max amount of secure containers allowed in a multi MAXLOCKDOWNS=256 - Max amount of lockdowns allowed in a multi MAXVENDORS=10 - Max amount of vendors allowed in a multi MAXBANS=50 - Max amount of bans in a multi's ban list MAXFRIENDS=50 - Max amount of friends in a multi's friend list MAXGUESTS=50 - Max amount of guests in a multi's guest list MAXOWNERS=8 - Max amount of owners and co-owners in a multi's owner list MAXTRASHCONTAINERS=1 - Max amount of trash containers allowed in multi SCRIPT=<scriptID> - Assign a JS script-ID directly to a multi FRONTDOOR - indicates that a door is the front door of a house. Cannot be locked in public houses! INTERIORDOOR - indicates that a door is an interior door of a house. Can be locked in public houses. BANX - Location X offset for multi's ban location, if not used, will try to use SE corner of multi instead BANY - Location Y offset for multi's ban location, if not used, will try to use SE corner of multi instead Added JS Event: onHouseCommand( tSock, multiObj, cmdID ) - For handling spoken house commands via JS scripts attached to multi. Updated JS Events: onEntrance() - can now trigger both for multi being entered and/or object entering onLeaving() - can now trigger both for multi being left and/or object entering onSpeech() - can now also trigger for items (in addition to chars) with event & script attached, if UOX.INI setting ITEMSDETECTSPEECH is enabled Added JS Multi methods: .IsBoat() - Returns whether the item (or multi) is a boat .IsOwner( playerToCheck ) - Returns whether a player is the owner of a multi .IsOnOwnerList( playerToCheck ) - Returns whether a player is on the (co-)owner list of a multi .IsOnFriendList( playerToCheck ) - Returns whether a player is on the friend list of a multi .IsOnGuestList( playerToCheck ) - Returns whether a player is on the guest list of a multi .IsOnBanList( playerToCheck ) - Returns whether a player is on the ban list of a multi .AddToFriendList( playertoAdd ) - Adds player to the friend list of a multi .RemoveFromFriendList( playertoRemove ) - Removes player from the friend list of a multi .AddToGuestList( playertoAdd ) - Adds player to the guest list of a multi .RemoveFromGuestList( playertoRemove ) - Removes player from the guest list of a multi .ClearOwnerList() - Clears all entries from a multi's (co-)owner list .ClearFriendList() - Clears all entries from a multi's friend list .ClearGuestList() - Clears all entries from a multi's guest list .ClearBanList() - Clears all entries from a multi's ban list .SecureContainer( itemToSecure ) - Secures a container in a multi .UnsecureContainer( itemToUnsecure ) - Unsecures a container in a multi .IsSecureContainer( itemToCheck ) - Checks if specified item is a secure container in a multi .LockDownItem( itemToLockDown) - Locks down an item in a multi .ReleaseItem( itemToRelease ) - Releases a locked down item in a multi .KillKeys() - Deletes ALL keys associated with a multi .AddTrashCont( itemToAdd ) - Add trash container to multi's list of trash containers .RemoveTrashCont( itemToRemove ) - Remove trash container from multi's list of trash containers Added JS Item (Multi only) properties: .lockdowns - Get the number of lockdowns in a multi .maxLockdowns - Get/Set the max number of lockdowns allowed in a multi .secureContainers - Get the number of secure containers in a multi .maxSecureContainers - Get/Set the max number of secure containers allowed in a multi .trashContainers - Get the number of trash containers in a multi .maxTrashContainers - Get/Set the max number of trash containers allowed in a multi .friends - Get the number of friends in a multi's friend list .maxFriends - Get/Set the max number of friends allowed in a multi's friend list .guests - Get the number of guests in a multi's guest list .maxGuests - Get/Set the max number of guests allowed in a multi's guest list .owners - Get the number of owners in a multi's owner list .maxOwners - Get/Set the max number of owners allowed in a multi's owner list .bans - Get the number of banned players in a multi's ban list .maxBans - Get/Set the max number of banned players allowed in a multi's ban list .vendors - Get the number of player vendors in a multi .maxVendors - Get the max number of player vendors allowed in a multi .deed - Get the item sectionID for deed used to place multi .isPublic - Get/Set the private/public state of a multi .buildTimestamp - Get the timestamp for when the house was originally placed .tradeTimestamp - Get the timestamp for when the house was last traded to another player .banX - Get/Set the ban location X offset for the multi .banY - Get/Set the ban location Y offset for the multi Added JS Character properties: .multi = Get/Set the multi object the character is in .accountNum = Get the account number the character belongs to .housesOwned = Get a count of houses owned by the character .housesCoOwned = Get a count of houses co-owned by the character Updated JS cBaseObject Methods .FirstItem(), .NextItem() and .FinishedItems() to also support iterating through items in multis Updated JS multi Methods .FirstChar(), .NextChar() and .FinishedChars() to support an additional parameter to specify what kind of characters to loop through: "default" or no parameter - all characters inside the multi "owner" - players on multi's owner list "friend" - players on multi's friend list "guest" - players on multi's guest list "banned" - players on multi's ban list Added new INI tags to a new section of uox.ini called [houses] DECAYTIMERINHOUSE=3600 // Decay timer in seconds for non-locked down items inside houses PROTECTPRIVATEHOUSES=1 // Toggles whether private houses will automatically boot unauthorized visitors (1) or not (0) TRACKHOUSESPERACCOUNT=1 // Toggles whether to track (and restrict) house ownership per account (1) or per character (0) MAXHOUSESOWNABLE=1 // Specifies the max amount of houses a player can own per account/char, depending on how house ownership is tracked MAXHOUSESCOOWNABLE=10 // Specifies the max amount of houses a player can co-own per character CANOWNANDCOOWNHOUSES=1 // Toggles whether players can own and co-own houses at the same time COOWNHOUSESONSAMEACCOUNT=1 // Toggles whether characters on same account as house owner will be treated as co-owners Added new INI tags in [settings] section of uox.ini: ITEMSDETECTSPEECH=0 // If enabled, server will search for nearby items with onSpeech JS event running whenever a character speaks. Disabled by default. MAXPLAYERPACKITEMS=125 // Defines max item capacity for player (and NPC) backpacks. Defaults to 125. Moved most of the existing house functionality to JS and expanded upon it to reach feature parity with houses in regular UO around Publish 15/16, with various extras thrown in for good measure and all functionality being customizable: js/server/house/house.js (15000) - handles detection of house commands and characters entering/leaving houses js/server/house/houseSign.js (15001) - contains and handles all house-related gumps/menus and what is shown when players interact with house sign js/server/house/houseCommands.js (15002) - handles functionality of house commands and other functionality such as transfer of ownership, demolishing house, etc. js/server/house/houseDeed.js (15003) - handles initial rules that allow/disallow placement of additional houses for players All house-related menus now fully handled through JS All house commands and other functionality now fully handled through JS Removed redundant hard-coded house functionality Implemented Co-owners, friends, guests for houses, with access rules in place for entry, lockdowns, house commands, etc. Implemented Private and Public houses Implemented Secure Containers and Trash Barrels Definable max lockdowns, secure containers, player vendors, bans, friends, guests, owners, trash containers and more - per house type JS scripts can now be attached directly to houses Doors in houses can be marked as front doors or interior doors, and will be treated differently with regards to private and public houses Added new item to dfndata/items/containers/misc.dfn - [trashbarrel] Added new JS script (js/items/trashbarrel.js) with trash barrel functionality for houses. Trash barrels that are marked as secure containers are only accessible by owners, co-owners and friends of the house. Various options available at top of script. Updated js/items/axe.js to support chopping up trash barrels and house add-ons in houses owned by the player Fixed an issue with house doors being left behind after demolishing houses while their doors were open Fixed an issue where GMs could be banned from player houses Added Line of Sight checks to speech, to give players some privacy in their own homes Updated house placement code to more accurately check for other multis, dynamic and static objects when placing houses; now requires free space around each house that cannot be blocked by other houses or items that can block player movement, and disallows placement of houses on roads Updated house placement code to move characters blocking house placement to SE corner of the house Updated house placement code to disallow placing houses in guarded regions, or in dungeons Added new DFN tag for regions to enable/disable player houses in specific regions: HOUSING=0/1 Added new region (247) that covers path to Valley of Eodon in Felucca Added new region (248) that covers Valley of Eodon in Ter-Mur, with player housing disabled Added new region (249) that covers entire T2A lands, with player housing disabled Updated SPACEX and SPACEY values for all houses in dfndata/house/house.dfn to match updated house placement code Added new JS property to Regions that can be used to determine or change state of player housing in a region: .canPlaceHouse() Updated rules for usage of dye tubs to dye locked down items; now only house owners or co-owners may dye locked down items Updated rules for usage of the following locked down items in a house, which are now only usable by house owners and co-owners Dyes, Guildstone Deeds, Recall Runes (renaming), Rename Deeds, Townstone Deeds, House Deeds, Boat Models, Player Vendor Deeds, Ore, Hair Dye Updated rules for usage of the following locked down items in a house, which are now only usable by house owners, co-owners and friends: Keys, Dye Tubs, Magic Scrolls, Fireworks Wands, Magic Wands, Smithing Tools, Mining Tools, Fishing Poles Updated item lockdown rules to allow locking down (and releasing) items in a container as long as the container is locked down, and to only allow releasing a locked down container if it's empty of locked down items Updated item lockdown rules to only allow locking down movement-blocking items further than 2 tiles away from doors Updated rules for releasing items in houses - now the house owner can release any locked down items, co-owners can release items locked down by themselves or by friends, while friends can release only items locked down by themselves Added some feedback to player about why their attempted house placement failed Items added by GMs directly into multis will now decay based on the house-specific decay timer instead of the regular one Fixed an issue that could cause items to almost instantly decay after being released from lockdown in a house Placing house add-ons now properly takes into account SPACEX and SPACEY values when checking if they can fit in selected area of houses Re-added SPACEX and SPACEY values for Pentagram and Loom house add-ons House add-ons can now be converted back into house add-on deeds by chopping them with an axe Added new item type - IT_HOUSEADDON (201) - used by house add-ons placed in player houses Fixed a bug where keys would stop working after being added to a keyring, and would turn into blank keys upon release from the keyring Added visitor count for public player houses, which keeps track of how many visits a public house has received, with each player counted max 1 time every 24 hours Fixed an issue with FindPlayersInOldVisrange() where it didn't take into account that players could see buildings further away than the standard update range. This could cause players to see ghost images of buildings if they were at the "right" distance when the building was being demolished Added NODECAY tag to all signs and doors in dfndata/house/house.dfn Added FRONTDOOR or INTERIORDOOR (as appropriate) to all doors in dfndata/house/house.dfn Added BANX and BANY to specify ban location for some houses in dfndata/house/house.dfn instead of relying on finding SE corner automatically Implemented strongboxes (js/server/house/strongbox.js) for co-owners of a house, which can be placed with the house command "i wish to place a strongbox". Max capacity is 25 items Updated 'REMOVE command to take an optional parameter - itemID. If supplied, the command will remove all items with this itemID from a targeted container Fixed a bug when checking if dynamic items were blocking valid spawn locations for NPCs, some function arguments were in the wrong order! Improved code that finds valid spawn locations for items and NPCs spawned via spawn regions. As server gradually builds up lists of valid spawn locations per region over time, it will start using these lists more often, rather than always look for brand new spawn locations. Fixed a bug with CMulHandler::CheckStaticFlag() that prevented NPCs from spawning inside buildings with no static floors! Fixed an issue with repeating commands that prevented GMs from being able to cancel them when using the ClassicUO client Exposed character property .accountNum to JS engine Extended CDataList class to include a Clear() method for clearing lists Updated JS File method .Open() to support an optional, third argument - subFolderName - that defines in which sub-folder of UOX3/shared/ to store/look for a file. If no third argument is supplied, UOX3 will default to using the shared folder itself. Updated JS File method .Length() to return a value of -1 for files that don't exist Added new code function, exposed to JS engine with same parameters, which simply checks if a given tile ID has a specific flag bool CheckTileFlag( UI16 itemID, TILEFLAG flagToCheck ) Added JS function used to find the root container of an item (if any) FindRootContainer( itemSerial ) FindRootContainer( item ) Added new JS function that allows deleting files from UOX3/shared/ folder or subfolders of shared folder. If no subFolderName is provided, looks for file directly in shared folder itself. Restrictions on file- and folder-names apply. bool DeleteFile( fileName, subFolderName ) Added new JS functions for checking if a specific client or server feature is enabled. See documentation for full list of client/server features. GetClientFeature( bitNum ) // Returns true if specified client feature is enabled on server GetServerFeature( bitNum ) // Returns true if specified server feature is enabled on server Added new JS function for returning the value of almost any server setting from UOX.INI GetServerSetting( settingNameInDoubleQuotes ) Updated JS function DoesDynamicBlock() with two new parameters - checkOnlyMultis and checkOnlyNonMultis Updated JS function DoesMapBlock() with two new parameters - checkMultiPlacement and checkForRoad Fixed an issue where a LoS check would prevent players from accessing containers in their own backpack Added new functions in findfuncs.cpp to make it easier to find items near another object or location: findNearbyItems( object, distance ) findNearbyItems( x, y, worldNumber, instanceID, distance ) Added new Item property - maxItems - used by containers to determine their max item capacity Added new Item property - totalItemCount - used to get total item count in a container (including sub-containers) Added check for max item capacity when creating new items that are added to a character's backpack - items will be created below character's feet if backpack is full! Added new DFN tag for items, used by containers to determine item capacity for a given container: MAXITEMS=# // 125 is the default for all containers if not set Added new JS Item properties: .maxItems // gets/sets item capacity for a given container .totalItemCount // gets total item count in a container, including sub-containers Updated item tooltips for containers to show accurate total item count, as well as to display max item capacity Fixed a bug where picking up items from a non-locked down pile of items on the floor inside a multi could cause the remaining pile to be seen as no longer inside the multi, disallowing locking it back down and causing it to decay based on regular decay timer instead of house-specific one Updated JS command set to allow setting poison-level on items ('set poison #) and hunger-level on characters ('set hunger #) Fixed an issue with js/item/food.js that prevented poisoned food from poisoning characters when eaten Fixed an issue with js/skill/poisoning.js that prevented players from poisoning food! Updated various JS scripts and hardcoded targeting functions to disallow the targeting of locked down resources using skills and tools Updated JS Method TextMessage() to support three extra, optional parameters. Note that if one optional parameter is included, all preceding optional parameters are also required! speechTarget - What kind of target is this message intended for? 0 - Only visible for sender and receiver of message 1 - Visible to all players in range 2 - Visible to all NPCs and players in range 3 - Visible to all PCs everywhere + NPCs in range 4 - Visible to all PCs everywhere (broadcast) 5 - Only visible for the receiver of the message speechTargetSerial - The serial of the receiver of the message, used if speechTarget is 0 or 5 speechFontType - The type of font to display the text in. Defaults to normal. 0 - Bold 1 - Normal with shadow 2 - Bold with shadow 3 - Normal 4 - Gothic 5 - Italic 6 - Small, dark 7 - Colourful 8 - Runic (only works with CAPS) 9 - Small, light Added timestamp to worldsaves in console, to make it easier to see when a particular world-save was done Added info about compiler/environment displayed at the top of the UOX3 console during startup Updated dictionary files with new messages primarily related to housing
2020-11-04 02:00:37 +08:00
break;
Misc Fixes and Updates Added support for MAXWEIGHTBONUS DFN tag for races, to allow increasing weight that can be carried by specific race, and a new GetWeightMax() code function to do the necessary calculations on demand Updated [default race bonuses] UOX.INI section with the following new settings for the 3 default playable races (only used if nothing else specified in races.dfn): HUMANMAXWEIGHTBONUS=0 ELFMAXWEIGHTBONUS=0 GARGOYLEMAXWEIGHTBONUS=0 Added support for ALLSKILLSG and ALLSKILLSL DFN tags for races, which allow defining skill bonus or loss across all skills for a given race Added new Character JS Method for adding skill points without triggering skillchange JS Events: .AddSkill( skillID, skillAmt, triggerEvents[true/false] ) Added new Boat JS Property to allow getting/setting movement types for Boats via scripts: .moveType // See UOX3 JS Engine Docs > JS Object Properties > Multi Properties for a detailed list of all supported movement types Added new Boat JS Method to allow turning boats via scripts: .TurnBoat( turnDir ) // 0 = straight (no turning), 1 = turn left, 2 = turn right, 3 = flip around Updated IterateOver/OnIterate JS Function/Event to support passing in optional socket parameter. New syntax: IterateOver( objectType[, socket ]); .OnIterate( sourceObject, targetObject, socket ) Updated Character/Item JS Method .Refresh() to support an optional socket argument, to specify which player to refresh the object for. New syntax: .Refresh( [socket] ) Added support for new region setting that can define a region as disabled/enabled via DFN (tag) or script (JS property). Disabled regions will be ignored by UOX3: DISABLED=0/1 // Region DFN tag .isDisabled // Region JS Property Fixed issue where JS tags and temporary JS tags would not be copied over when duplicating a character or item Removed strength requirements from base shield definitions - stats like these are handled per era (dfndata/items/gear/armor/base_armor.dfn) Fixed an issue where necromancer newbie armor would incorrectly inherit base versions of leather armor without stats (dfndata/items/gear/armor/leather_armor/leather.dfn) Fixed an issue where players would not correctly leave combat after hiding (js/skill/hiding.js) Fixed an issue with Healing skill where skill-checks for healing/veterinary would fail due to a misspelled variable (js/skill/healing.js) Updated smart-turn furniture script to prevent players from being able to turn furnitures that are occupied by characters (js/server/misc/furniture_smartturn.js) Updated Buff-bar script to only add buffs for client versions higher than 5.0.2, the client patch where this feature was added (js/server/network/0xDF_buffBar.js) Updated Vendor BDO Dispenser script to add alternative reward-table for AoS era (js/npc/ai/vendor_bdo_dispenser.js) Cleaned up some code (spaces to tabs, indentation, spacing)
2025-04-23 00:01:53 +08:00
case CIP_MOVETYPE:
if( gPriv->GetObjType() == OT_BOAT )
{
*vp = INT_TO_JSVAL(( static_cast<CBoatObj *>( gPriv )->GetMoveType() ));
}
else
{
*vp = JSVAL_NULL;
}
break;
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
default:
break;
}
}
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
return JS_TRUE;
}
JSBool CItemProps_setProperty( JSContext* cx, JSObject* obj, jsid id, JSBool strict, jsval* vp )
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
{
CItem *gPriv = static_cast<CItem *>( JS_GetPrivate( cx, obj ));
if( !ValidateObject( gPriv ))
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
return JS_FALSE;
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
JSEncapsulate encaps( cx, vp );
2025-04-07 14:11:13 +10:00
UI16 propID = getScriptID( cx, id, JSP_ITEM );
2025-04-07 12:44:01 +10:00
if( propID != 0xFFFF )
{
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
TIMERVAL newTime;
2025-04-07 12:44:01 +10:00
switch( propID )
{
case CIP_SECTIONID: gPriv->SetSectionId( encaps.toString() ); break;
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
case CIP_NAME: gPriv->SetName( encaps.toString() ); break;
case CIP_X: gPriv->SetLocation( static_cast<SI16>( encaps.toInt() ), gPriv->GetY(), gPriv->GetZ() ); break;
case CIP_Y: gPriv->SetLocation( gPriv->GetX(), static_cast<SI16>( encaps.toInt() ), gPriv->GetZ() ); break;
case CIP_Z: gPriv->SetZ( static_cast<SI08>( encaps.toInt() )); break;
case CIP_ID: gPriv->SetId( static_cast<UI16>( encaps.toInt() )); break;
case CIP_COLOUR: gPriv->SetColour( static_cast<UI16>( encaps.toInt() )); break;
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
case CIP_OWNER:
if( *vp != JSVAL_NULL )
{
CChar *myChar = static_cast<CChar*>( encaps.toObject() );
if( !ValidateObject( myChar ))
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
break;
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
gPriv->SetOwner( myChar );
}
else
{
2021-06-12 07:30:23 -04:00
gPriv->SetOwner( nullptr );
}
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
break;
case CIP_VISIBLE: gPriv->SetVisible( static_cast<VisibleTypes>( encaps.toInt() )); break;
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
case CIP_SERIAL: break;
case CIP_HEALTH: gPriv->SetHP( static_cast<SI16>( encaps.toInt() )); break;
Minor JS revamp - multiple scripts per object! Added TryParseJSVal() helper function in cScript.cpp, used to parse jsval values returned from script events. Provides results matching 0 (0, false), 1 (1, true) or any specific int value returned from script. JS events updated to use new TryParseJSVal helper function (no change in behaviour): onDecay, onResurrect, onCommand, onBuyFromVendor, onSellToVendor, onPickup, onCharDoubleClick, onSkillGump, onUseBandageMacro, onCombatStart, onCombatEnd, onDeathBlow, onBuy, onSell JS events with slight change of behaviour after update to use TryParseJSVal: onDrop, onDropItemOnItem, onDropItemOnNpc - previously, a blank or non-existent return value would be treated the same as a return true. This will now be treated as a return false. Update scripts accordingly! JS events updated to support return values from scripts: onCollide, onTalk, onSnooped, OnHungerChange Return false or nothing to prevent hard code from running Return true to allow hard code to run like normal onStolenFrom, onAISliver, onLightChange, onVirtueGumpPress, onQuestGump, onSpecialMove, onSwing, onClick, onHouseCommand, onSellToVendor, onSkillCheck, onSpellGain, onSpellLoss Return false to allow hard code and other scripts with event to run like normal Return true to prevent hard code and other scripts with event from running onSteal Return false or nothing to allow hard code and other scripts with event to run like normal Return true to prevent hard code and onStolenFrom event from running (theft failed?) Return 2 to prevent hard code, but allow onStolenFrom event to run (theft succeeded, but handled in script?) onLeaving, onEntrance, onEquip, onUnequip, onEnterEvadeState, onSoldToVendor, onBoughtFromVendor, onSpellSuccess, onSpellTarget, onFlagChange, onDeath Return false or nothing to allow other scripts with event to run like normal Return true to prevent other scripts with event from running Added new JS events that run prior to items being equipped/unequipped, with support for return values: onEquipAttempt( pEquipper, iEquipping ) onUnequipAttempt( pEquipper, iUnequipping ) Return false or nothing to reject attempt to equip/unequip item, and prevent hard-code or other scripts with event from running Return true to allow hard code to run like normal Added new JS event that runs prior to onSnooped event, for character doing the snooping: onSnoopAttempt( snooped, snooper ) Return false or nothing to prevent hard code and other snooping-related events from running Return true to allow hard code and other snooping-related events to run like normal Updated onSnooped JS event to accept return values: Return true when success state is true to prevent other scripts with event from running Return true when success state is false to prevent hard code and other scripts with event from running Updated onClick JS event to also run for characters with event attached (return 1 to prevent showing hard-coded name for whatever object is clicked) Updated onSteal JS event to include a third parameter, an object reference for the target of the theft Added support for assigning multiple JS scripts per object (item, multi, char, region). Any time a scriptID is added to an object, the list of such IDs for that object will be sorted from lowest to highest scriptID, which also determines the execution order for the scripts. Note that if the same JS event is present in several scripts assigned to an object, each of those events will trigger, unless the rules about return values for said event prevent this DFNs for Items, Multis, Characters and Regions can now contain multiple SCRIPT=scriptID tags per definition. Each such SCRIPT tag will be applied to the object in question, then sorted from lowest to highest scriptID by server. Added new JS property for Items, Multis, Characters and Regions: .scriptTriggers // If used to get property, will return array object with all script IDs assigned to object. If used to set property, will add script ID to existing list of script IDs for object. Modified JS property for Items, Multis, Characters and Regions, which for backwards compatibility functions similar to in older versions: .scripttrigger // If used to get property, will return last script ID in list of script IDs assigned to object. If used to set property, will clear list of script IDs and assign only the new ID Added new JS Methods for Items, Multis, Characters and Regions: .AddScriptTrigger( scriptID ) // Adds a new scriptID to list of scripts assigned to object .RemoveScriptTrigger( scriptID ) // Remove a specific scriptID from object (0 = remove all) Moved SETSCPTRIG command from code to JS (js/commands/targeting/scptrig.js), and supplemented it with some additional commands: GETSCPTRIG // List out all scriptIDs assigned to object SETSCPTRIG scriptID // Clears list of scriptIDs for object, then assigns the specified scriptID ADDSCPTRIG scriptID // Adds specified scriptID to list of scriptsIDs assigned to object REMOVESCPTRIG scriptID // Removes specified scriptID from list of scriptIDs assigned to object (0 = remove all)
2021-05-25 19:37:52 +08:00
case CIP_SCRIPTTRIGGER:
{
// For backwards compatibility; clears out other scripts and assigns a specific script
2022-10-24 23:42:16 +08:00
UI16 scriptId = static_cast<UI16>( encaps.toInt() );
cScript *toExecute = JSMapping->GetScript( scriptId );
2021-06-12 07:30:23 -04:00
if( toExecute == nullptr )
Minor JS revamp - multiple scripts per object! Added TryParseJSVal() helper function in cScript.cpp, used to parse jsval values returned from script events. Provides results matching 0 (0, false), 1 (1, true) or any specific int value returned from script. JS events updated to use new TryParseJSVal helper function (no change in behaviour): onDecay, onResurrect, onCommand, onBuyFromVendor, onSellToVendor, onPickup, onCharDoubleClick, onSkillGump, onUseBandageMacro, onCombatStart, onCombatEnd, onDeathBlow, onBuy, onSell JS events with slight change of behaviour after update to use TryParseJSVal: onDrop, onDropItemOnItem, onDropItemOnNpc - previously, a blank or non-existent return value would be treated the same as a return true. This will now be treated as a return false. Update scripts accordingly! JS events updated to support return values from scripts: onCollide, onTalk, onSnooped, OnHungerChange Return false or nothing to prevent hard code from running Return true to allow hard code to run like normal onStolenFrom, onAISliver, onLightChange, onVirtueGumpPress, onQuestGump, onSpecialMove, onSwing, onClick, onHouseCommand, onSellToVendor, onSkillCheck, onSpellGain, onSpellLoss Return false to allow hard code and other scripts with event to run like normal Return true to prevent hard code and other scripts with event from running onSteal Return false or nothing to allow hard code and other scripts with event to run like normal Return true to prevent hard code and onStolenFrom event from running (theft failed?) Return 2 to prevent hard code, but allow onStolenFrom event to run (theft succeeded, but handled in script?) onLeaving, onEntrance, onEquip, onUnequip, onEnterEvadeState, onSoldToVendor, onBoughtFromVendor, onSpellSuccess, onSpellTarget, onFlagChange, onDeath Return false or nothing to allow other scripts with event to run like normal Return true to prevent other scripts with event from running Added new JS events that run prior to items being equipped/unequipped, with support for return values: onEquipAttempt( pEquipper, iEquipping ) onUnequipAttempt( pEquipper, iUnequipping ) Return false or nothing to reject attempt to equip/unequip item, and prevent hard-code or other scripts with event from running Return true to allow hard code to run like normal Added new JS event that runs prior to onSnooped event, for character doing the snooping: onSnoopAttempt( snooped, snooper ) Return false or nothing to prevent hard code and other snooping-related events from running Return true to allow hard code and other snooping-related events to run like normal Updated onSnooped JS event to accept return values: Return true when success state is true to prevent other scripts with event from running Return true when success state is false to prevent hard code and other scripts with event from running Updated onClick JS event to also run for characters with event attached (return 1 to prevent showing hard-coded name for whatever object is clicked) Updated onSteal JS event to include a third parameter, an object reference for the target of the theft Added support for assigning multiple JS scripts per object (item, multi, char, region). Any time a scriptID is added to an object, the list of such IDs for that object will be sorted from lowest to highest scriptID, which also determines the execution order for the scripts. Note that if the same JS event is present in several scripts assigned to an object, each of those events will trigger, unless the rules about return values for said event prevent this DFNs for Items, Multis, Characters and Regions can now contain multiple SCRIPT=scriptID tags per definition. Each such SCRIPT tag will be applied to the object in question, then sorted from lowest to highest scriptID by server. Added new JS property for Items, Multis, Characters and Regions: .scriptTriggers // If used to get property, will return array object with all script IDs assigned to object. If used to set property, will add script ID to existing list of script IDs for object. Modified JS property for Items, Multis, Characters and Regions, which for backwards compatibility functions similar to in older versions: .scripttrigger // If used to get property, will return last script ID in list of script IDs assigned to object. If used to set property, will clear list of script IDs and assign only the new ID Added new JS Methods for Items, Multis, Characters and Regions: .AddScriptTrigger( scriptID ) // Adds a new scriptID to list of scripts assigned to object .RemoveScriptTrigger( scriptID ) // Remove a specific scriptID from object (0 = remove all) Moved SETSCPTRIG command from code to JS (js/commands/targeting/scptrig.js), and supplemented it with some additional commands: GETSCPTRIG // List out all scriptIDs assigned to object SETSCPTRIG scriptID // Clears list of scriptIDs for object, then assigns the specified scriptID ADDSCPTRIG scriptID // Adds specified scriptID to list of scriptsIDs assigned to object REMOVESCPTRIG scriptID // Removes specified scriptID from list of scriptIDs assigned to object (0 = remove all)
2021-05-25 19:37:52 +08:00
{
ScriptError( cx, oldstrutil::format( "Unable to assign script trigger - script ID (%i) not found in jse_fileassociations.scp!", scriptId ).c_str() );
Minor JS revamp - multiple scripts per object! Added TryParseJSVal() helper function in cScript.cpp, used to parse jsval values returned from script events. Provides results matching 0 (0, false), 1 (1, true) or any specific int value returned from script. JS events updated to use new TryParseJSVal helper function (no change in behaviour): onDecay, onResurrect, onCommand, onBuyFromVendor, onSellToVendor, onPickup, onCharDoubleClick, onSkillGump, onUseBandageMacro, onCombatStart, onCombatEnd, onDeathBlow, onBuy, onSell JS events with slight change of behaviour after update to use TryParseJSVal: onDrop, onDropItemOnItem, onDropItemOnNpc - previously, a blank or non-existent return value would be treated the same as a return true. This will now be treated as a return false. Update scripts accordingly! JS events updated to support return values from scripts: onCollide, onTalk, onSnooped, OnHungerChange Return false or nothing to prevent hard code from running Return true to allow hard code to run like normal onStolenFrom, onAISliver, onLightChange, onVirtueGumpPress, onQuestGump, onSpecialMove, onSwing, onClick, onHouseCommand, onSellToVendor, onSkillCheck, onSpellGain, onSpellLoss Return false to allow hard code and other scripts with event to run like normal Return true to prevent hard code and other scripts with event from running onSteal Return false or nothing to allow hard code and other scripts with event to run like normal Return true to prevent hard code and onStolenFrom event from running (theft failed?) Return 2 to prevent hard code, but allow onStolenFrom event to run (theft succeeded, but handled in script?) onLeaving, onEntrance, onEquip, onUnequip, onEnterEvadeState, onSoldToVendor, onBoughtFromVendor, onSpellSuccess, onSpellTarget, onFlagChange, onDeath Return false or nothing to allow other scripts with event to run like normal Return true to prevent other scripts with event from running Added new JS events that run prior to items being equipped/unequipped, with support for return values: onEquipAttempt( pEquipper, iEquipping ) onUnequipAttempt( pEquipper, iUnequipping ) Return false or nothing to reject attempt to equip/unequip item, and prevent hard-code or other scripts with event from running Return true to allow hard code to run like normal Added new JS event that runs prior to onSnooped event, for character doing the snooping: onSnoopAttempt( snooped, snooper ) Return false or nothing to prevent hard code and other snooping-related events from running Return true to allow hard code and other snooping-related events to run like normal Updated onSnooped JS event to accept return values: Return true when success state is true to prevent other scripts with event from running Return true when success state is false to prevent hard code and other scripts with event from running Updated onClick JS event to also run for characters with event attached (return 1 to prevent showing hard-coded name for whatever object is clicked) Updated onSteal JS event to include a third parameter, an object reference for the target of the theft Added support for assigning multiple JS scripts per object (item, multi, char, region). Any time a scriptID is added to an object, the list of such IDs for that object will be sorted from lowest to highest scriptID, which also determines the execution order for the scripts. Note that if the same JS event is present in several scripts assigned to an object, each of those events will trigger, unless the rules about return values for said event prevent this DFNs for Items, Multis, Characters and Regions can now contain multiple SCRIPT=scriptID tags per definition. Each such SCRIPT tag will be applied to the object in question, then sorted from lowest to highest scriptID by server. Added new JS property for Items, Multis, Characters and Regions: .scriptTriggers // If used to get property, will return array object with all script IDs assigned to object. If used to set property, will add script ID to existing list of script IDs for object. Modified JS property for Items, Multis, Characters and Regions, which for backwards compatibility functions similar to in older versions: .scripttrigger // If used to get property, will return last script ID in list of script IDs assigned to object. If used to set property, will clear list of script IDs and assign only the new ID Added new JS Methods for Items, Multis, Characters and Regions: .AddScriptTrigger( scriptID ) // Adds a new scriptID to list of scripts assigned to object .RemoveScriptTrigger( scriptID ) // Remove a specific scriptID from object (0 = remove all) Moved SETSCPTRIG command from code to JS (js/commands/targeting/scptrig.js), and supplemented it with some additional commands: GETSCPTRIG // List out all scriptIDs assigned to object SETSCPTRIG scriptID // Clears list of scriptIDs for object, then assigns the specified scriptID ADDSCPTRIG scriptID // Adds specified scriptID to list of scriptsIDs assigned to object REMOVESCPTRIG scriptID // Removes specified scriptID from list of scriptIDs assigned to object (0 = remove all)
2021-05-25 19:37:52 +08:00
}
else
{
gPriv->ClearScriptTriggers();
gPriv->AddScriptTrigger( scriptId );
Minor JS revamp - multiple scripts per object! Added TryParseJSVal() helper function in cScript.cpp, used to parse jsval values returned from script events. Provides results matching 0 (0, false), 1 (1, true) or any specific int value returned from script. JS events updated to use new TryParseJSVal helper function (no change in behaviour): onDecay, onResurrect, onCommand, onBuyFromVendor, onSellToVendor, onPickup, onCharDoubleClick, onSkillGump, onUseBandageMacro, onCombatStart, onCombatEnd, onDeathBlow, onBuy, onSell JS events with slight change of behaviour after update to use TryParseJSVal: onDrop, onDropItemOnItem, onDropItemOnNpc - previously, a blank or non-existent return value would be treated the same as a return true. This will now be treated as a return false. Update scripts accordingly! JS events updated to support return values from scripts: onCollide, onTalk, onSnooped, OnHungerChange Return false or nothing to prevent hard code from running Return true to allow hard code to run like normal onStolenFrom, onAISliver, onLightChange, onVirtueGumpPress, onQuestGump, onSpecialMove, onSwing, onClick, onHouseCommand, onSellToVendor, onSkillCheck, onSpellGain, onSpellLoss Return false to allow hard code and other scripts with event to run like normal Return true to prevent hard code and other scripts with event from running onSteal Return false or nothing to allow hard code and other scripts with event to run like normal Return true to prevent hard code and onStolenFrom event from running (theft failed?) Return 2 to prevent hard code, but allow onStolenFrom event to run (theft succeeded, but handled in script?) onLeaving, onEntrance, onEquip, onUnequip, onEnterEvadeState, onSoldToVendor, onBoughtFromVendor, onSpellSuccess, onSpellTarget, onFlagChange, onDeath Return false or nothing to allow other scripts with event to run like normal Return true to prevent other scripts with event from running Added new JS events that run prior to items being equipped/unequipped, with support for return values: onEquipAttempt( pEquipper, iEquipping ) onUnequipAttempt( pEquipper, iUnequipping ) Return false or nothing to reject attempt to equip/unequip item, and prevent hard-code or other scripts with event from running Return true to allow hard code to run like normal Added new JS event that runs prior to onSnooped event, for character doing the snooping: onSnoopAttempt( snooped, snooper ) Return false or nothing to prevent hard code and other snooping-related events from running Return true to allow hard code and other snooping-related events to run like normal Updated onSnooped JS event to accept return values: Return true when success state is true to prevent other scripts with event from running Return true when success state is false to prevent hard code and other scripts with event from running Updated onClick JS event to also run for characters with event attached (return 1 to prevent showing hard-coded name for whatever object is clicked) Updated onSteal JS event to include a third parameter, an object reference for the target of the theft Added support for assigning multiple JS scripts per object (item, multi, char, region). Any time a scriptID is added to an object, the list of such IDs for that object will be sorted from lowest to highest scriptID, which also determines the execution order for the scripts. Note that if the same JS event is present in several scripts assigned to an object, each of those events will trigger, unless the rules about return values for said event prevent this DFNs for Items, Multis, Characters and Regions can now contain multiple SCRIPT=scriptID tags per definition. Each such SCRIPT tag will be applied to the object in question, then sorted from lowest to highest scriptID by server. Added new JS property for Items, Multis, Characters and Regions: .scriptTriggers // If used to get property, will return array object with all script IDs assigned to object. If used to set property, will add script ID to existing list of script IDs for object. Modified JS property for Items, Multis, Characters and Regions, which for backwards compatibility functions similar to in older versions: .scripttrigger // If used to get property, will return last script ID in list of script IDs assigned to object. If used to set property, will clear list of script IDs and assign only the new ID Added new JS Methods for Items, Multis, Characters and Regions: .AddScriptTrigger( scriptID ) // Adds a new scriptID to list of scripts assigned to object .RemoveScriptTrigger( scriptID ) // Remove a specific scriptID from object (0 = remove all) Moved SETSCPTRIG command from code to JS (js/commands/targeting/scptrig.js), and supplemented it with some additional commands: GETSCPTRIG // List out all scriptIDs assigned to object SETSCPTRIG scriptID // Clears list of scriptIDs for object, then assigns the specified scriptID ADDSCPTRIG scriptID // Adds specified scriptID to list of scriptsIDs assigned to object REMOVESCPTRIG scriptID // Removes specified scriptID from list of scriptIDs assigned to object (0 = remove all)
2021-05-25 19:37:52 +08:00
}
break;
}
case CIP_SCRIPTTRIGGERS:
{
if( *vp != JSVAL_NULL )
{
2022-10-24 23:42:16 +08:00
UI16 scriptId = static_cast<UI16>( encaps.toInt() );
cScript *toExecute = JSMapping->GetScript( scriptId );
2021-06-12 07:30:23 -04:00
if( toExecute == nullptr )
Minor JS revamp - multiple scripts per object! Added TryParseJSVal() helper function in cScript.cpp, used to parse jsval values returned from script events. Provides results matching 0 (0, false), 1 (1, true) or any specific int value returned from script. JS events updated to use new TryParseJSVal helper function (no change in behaviour): onDecay, onResurrect, onCommand, onBuyFromVendor, onSellToVendor, onPickup, onCharDoubleClick, onSkillGump, onUseBandageMacro, onCombatStart, onCombatEnd, onDeathBlow, onBuy, onSell JS events with slight change of behaviour after update to use TryParseJSVal: onDrop, onDropItemOnItem, onDropItemOnNpc - previously, a blank or non-existent return value would be treated the same as a return true. This will now be treated as a return false. Update scripts accordingly! JS events updated to support return values from scripts: onCollide, onTalk, onSnooped, OnHungerChange Return false or nothing to prevent hard code from running Return true to allow hard code to run like normal onStolenFrom, onAISliver, onLightChange, onVirtueGumpPress, onQuestGump, onSpecialMove, onSwing, onClick, onHouseCommand, onSellToVendor, onSkillCheck, onSpellGain, onSpellLoss Return false to allow hard code and other scripts with event to run like normal Return true to prevent hard code and other scripts with event from running onSteal Return false or nothing to allow hard code and other scripts with event to run like normal Return true to prevent hard code and onStolenFrom event from running (theft failed?) Return 2 to prevent hard code, but allow onStolenFrom event to run (theft succeeded, but handled in script?) onLeaving, onEntrance, onEquip, onUnequip, onEnterEvadeState, onSoldToVendor, onBoughtFromVendor, onSpellSuccess, onSpellTarget, onFlagChange, onDeath Return false or nothing to allow other scripts with event to run like normal Return true to prevent other scripts with event from running Added new JS events that run prior to items being equipped/unequipped, with support for return values: onEquipAttempt( pEquipper, iEquipping ) onUnequipAttempt( pEquipper, iUnequipping ) Return false or nothing to reject attempt to equip/unequip item, and prevent hard-code or other scripts with event from running Return true to allow hard code to run like normal Added new JS event that runs prior to onSnooped event, for character doing the snooping: onSnoopAttempt( snooped, snooper ) Return false or nothing to prevent hard code and other snooping-related events from running Return true to allow hard code and other snooping-related events to run like normal Updated onSnooped JS event to accept return values: Return true when success state is true to prevent other scripts with event from running Return true when success state is false to prevent hard code and other scripts with event from running Updated onClick JS event to also run for characters with event attached (return 1 to prevent showing hard-coded name for whatever object is clicked) Updated onSteal JS event to include a third parameter, an object reference for the target of the theft Added support for assigning multiple JS scripts per object (item, multi, char, region). Any time a scriptID is added to an object, the list of such IDs for that object will be sorted from lowest to highest scriptID, which also determines the execution order for the scripts. Note that if the same JS event is present in several scripts assigned to an object, each of those events will trigger, unless the rules about return values for said event prevent this DFNs for Items, Multis, Characters and Regions can now contain multiple SCRIPT=scriptID tags per definition. Each such SCRIPT tag will be applied to the object in question, then sorted from lowest to highest scriptID by server. Added new JS property for Items, Multis, Characters and Regions: .scriptTriggers // If used to get property, will return array object with all script IDs assigned to object. If used to set property, will add script ID to existing list of script IDs for object. Modified JS property for Items, Multis, Characters and Regions, which for backwards compatibility functions similar to in older versions: .scripttrigger // If used to get property, will return last script ID in list of script IDs assigned to object. If used to set property, will clear list of script IDs and assign only the new ID Added new JS Methods for Items, Multis, Characters and Regions: .AddScriptTrigger( scriptID ) // Adds a new scriptID to list of scripts assigned to object .RemoveScriptTrigger( scriptID ) // Remove a specific scriptID from object (0 = remove all) Moved SETSCPTRIG command from code to JS (js/commands/targeting/scptrig.js), and supplemented it with some additional commands: GETSCPTRIG // List out all scriptIDs assigned to object SETSCPTRIG scriptID // Clears list of scriptIDs for object, then assigns the specified scriptID ADDSCPTRIG scriptID // Adds specified scriptID to list of scriptsIDs assigned to object REMOVESCPTRIG scriptID // Removes specified scriptID from list of scriptIDs assigned to object (0 = remove all)
2021-05-25 19:37:52 +08:00
{
ScriptError( cx, oldstrutil::format( "Unable to assign script trigger - script ID (%i) not found in jse_fileassociations.scp!", scriptId ).c_str() );
Minor JS revamp - multiple scripts per object! Added TryParseJSVal() helper function in cScript.cpp, used to parse jsval values returned from script events. Provides results matching 0 (0, false), 1 (1, true) or any specific int value returned from script. JS events updated to use new TryParseJSVal helper function (no change in behaviour): onDecay, onResurrect, onCommand, onBuyFromVendor, onSellToVendor, onPickup, onCharDoubleClick, onSkillGump, onUseBandageMacro, onCombatStart, onCombatEnd, onDeathBlow, onBuy, onSell JS events with slight change of behaviour after update to use TryParseJSVal: onDrop, onDropItemOnItem, onDropItemOnNpc - previously, a blank or non-existent return value would be treated the same as a return true. This will now be treated as a return false. Update scripts accordingly! JS events updated to support return values from scripts: onCollide, onTalk, onSnooped, OnHungerChange Return false or nothing to prevent hard code from running Return true to allow hard code to run like normal onStolenFrom, onAISliver, onLightChange, onVirtueGumpPress, onQuestGump, onSpecialMove, onSwing, onClick, onHouseCommand, onSellToVendor, onSkillCheck, onSpellGain, onSpellLoss Return false to allow hard code and other scripts with event to run like normal Return true to prevent hard code and other scripts with event from running onSteal Return false or nothing to allow hard code and other scripts with event to run like normal Return true to prevent hard code and onStolenFrom event from running (theft failed?) Return 2 to prevent hard code, but allow onStolenFrom event to run (theft succeeded, but handled in script?) onLeaving, onEntrance, onEquip, onUnequip, onEnterEvadeState, onSoldToVendor, onBoughtFromVendor, onSpellSuccess, onSpellTarget, onFlagChange, onDeath Return false or nothing to allow other scripts with event to run like normal Return true to prevent other scripts with event from running Added new JS events that run prior to items being equipped/unequipped, with support for return values: onEquipAttempt( pEquipper, iEquipping ) onUnequipAttempt( pEquipper, iUnequipping ) Return false or nothing to reject attempt to equip/unequip item, and prevent hard-code or other scripts with event from running Return true to allow hard code to run like normal Added new JS event that runs prior to onSnooped event, for character doing the snooping: onSnoopAttempt( snooped, snooper ) Return false or nothing to prevent hard code and other snooping-related events from running Return true to allow hard code and other snooping-related events to run like normal Updated onSnooped JS event to accept return values: Return true when success state is true to prevent other scripts with event from running Return true when success state is false to prevent hard code and other scripts with event from running Updated onClick JS event to also run for characters with event attached (return 1 to prevent showing hard-coded name for whatever object is clicked) Updated onSteal JS event to include a third parameter, an object reference for the target of the theft Added support for assigning multiple JS scripts per object (item, multi, char, region). Any time a scriptID is added to an object, the list of such IDs for that object will be sorted from lowest to highest scriptID, which also determines the execution order for the scripts. Note that if the same JS event is present in several scripts assigned to an object, each of those events will trigger, unless the rules about return values for said event prevent this DFNs for Items, Multis, Characters and Regions can now contain multiple SCRIPT=scriptID tags per definition. Each such SCRIPT tag will be applied to the object in question, then sorted from lowest to highest scriptID by server. Added new JS property for Items, Multis, Characters and Regions: .scriptTriggers // If used to get property, will return array object with all script IDs assigned to object. If used to set property, will add script ID to existing list of script IDs for object. Modified JS property for Items, Multis, Characters and Regions, which for backwards compatibility functions similar to in older versions: .scripttrigger // If used to get property, will return last script ID in list of script IDs assigned to object. If used to set property, will clear list of script IDs and assign only the new ID Added new JS Methods for Items, Multis, Characters and Regions: .AddScriptTrigger( scriptID ) // Adds a new scriptID to list of scripts assigned to object .RemoveScriptTrigger( scriptID ) // Remove a specific scriptID from object (0 = remove all) Moved SETSCPTRIG command from code to JS (js/commands/targeting/scptrig.js), and supplemented it with some additional commands: GETSCPTRIG // List out all scriptIDs assigned to object SETSCPTRIG scriptID // Clears list of scriptIDs for object, then assigns the specified scriptID ADDSCPTRIG scriptID // Adds specified scriptID to list of scriptsIDs assigned to object REMOVESCPTRIG scriptID // Removes specified scriptID from list of scriptIDs assigned to object (0 = remove all)
2021-05-25 19:37:52 +08:00
}
else
{
gPriv->AddScriptTrigger( scriptId );
Minor JS revamp - multiple scripts per object! Added TryParseJSVal() helper function in cScript.cpp, used to parse jsval values returned from script events. Provides results matching 0 (0, false), 1 (1, true) or any specific int value returned from script. JS events updated to use new TryParseJSVal helper function (no change in behaviour): onDecay, onResurrect, onCommand, onBuyFromVendor, onSellToVendor, onPickup, onCharDoubleClick, onSkillGump, onUseBandageMacro, onCombatStart, onCombatEnd, onDeathBlow, onBuy, onSell JS events with slight change of behaviour after update to use TryParseJSVal: onDrop, onDropItemOnItem, onDropItemOnNpc - previously, a blank or non-existent return value would be treated the same as a return true. This will now be treated as a return false. Update scripts accordingly! JS events updated to support return values from scripts: onCollide, onTalk, onSnooped, OnHungerChange Return false or nothing to prevent hard code from running Return true to allow hard code to run like normal onStolenFrom, onAISliver, onLightChange, onVirtueGumpPress, onQuestGump, onSpecialMove, onSwing, onClick, onHouseCommand, onSellToVendor, onSkillCheck, onSpellGain, onSpellLoss Return false to allow hard code and other scripts with event to run like normal Return true to prevent hard code and other scripts with event from running onSteal Return false or nothing to allow hard code and other scripts with event to run like normal Return true to prevent hard code and onStolenFrom event from running (theft failed?) Return 2 to prevent hard code, but allow onStolenFrom event to run (theft succeeded, but handled in script?) onLeaving, onEntrance, onEquip, onUnequip, onEnterEvadeState, onSoldToVendor, onBoughtFromVendor, onSpellSuccess, onSpellTarget, onFlagChange, onDeath Return false or nothing to allow other scripts with event to run like normal Return true to prevent other scripts with event from running Added new JS events that run prior to items being equipped/unequipped, with support for return values: onEquipAttempt( pEquipper, iEquipping ) onUnequipAttempt( pEquipper, iUnequipping ) Return false or nothing to reject attempt to equip/unequip item, and prevent hard-code or other scripts with event from running Return true to allow hard code to run like normal Added new JS event that runs prior to onSnooped event, for character doing the snooping: onSnoopAttempt( snooped, snooper ) Return false or nothing to prevent hard code and other snooping-related events from running Return true to allow hard code and other snooping-related events to run like normal Updated onSnooped JS event to accept return values: Return true when success state is true to prevent other scripts with event from running Return true when success state is false to prevent hard code and other scripts with event from running Updated onClick JS event to also run for characters with event attached (return 1 to prevent showing hard-coded name for whatever object is clicked) Updated onSteal JS event to include a third parameter, an object reference for the target of the theft Added support for assigning multiple JS scripts per object (item, multi, char, region). Any time a scriptID is added to an object, the list of such IDs for that object will be sorted from lowest to highest scriptID, which also determines the execution order for the scripts. Note that if the same JS event is present in several scripts assigned to an object, each of those events will trigger, unless the rules about return values for said event prevent this DFNs for Items, Multis, Characters and Regions can now contain multiple SCRIPT=scriptID tags per definition. Each such SCRIPT tag will be applied to the object in question, then sorted from lowest to highest scriptID by server. Added new JS property for Items, Multis, Characters and Regions: .scriptTriggers // If used to get property, will return array object with all script IDs assigned to object. If used to set property, will add script ID to existing list of script IDs for object. Modified JS property for Items, Multis, Characters and Regions, which for backwards compatibility functions similar to in older versions: .scripttrigger // If used to get property, will return last script ID in list of script IDs assigned to object. If used to set property, will clear list of script IDs and assign only the new ID Added new JS Methods for Items, Multis, Characters and Regions: .AddScriptTrigger( scriptID ) // Adds a new scriptID to list of scripts assigned to object .RemoveScriptTrigger( scriptID ) // Remove a specific scriptID from object (0 = remove all) Moved SETSCPTRIG command from code to JS (js/commands/targeting/scptrig.js), and supplemented it with some additional commands: GETSCPTRIG // List out all scriptIDs assigned to object SETSCPTRIG scriptID // Clears list of scriptIDs for object, then assigns the specified scriptID ADDSCPTRIG scriptID // Adds specified scriptID to list of scriptsIDs assigned to object REMOVESCPTRIG scriptID // Removes specified scriptID from list of scriptIDs assigned to object (0 = remove all)
2021-05-25 19:37:52 +08:00
}
}
else
{
// If null value was provided, clear script triggers on object
gPriv->ClearScriptTriggers();
}
break;
}
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
case CIP_WORLDNUMBER:
if( !Map->InsideValidWorld( gPriv->GetX(), gPriv->GetY(), static_cast<UI08>( encaps.toInt() )))
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
return JS_FALSE;
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
gPriv->RemoveFromSight();
gPriv->SetLocation( gPriv->GetX(), gPriv->GetY(), gPriv->GetZ(), static_cast<UI08>( encaps.toInt() ), gPriv->GetInstanceId() );
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
break;
case CIP_INSTANCEID:
2003-01-23 08:35:29 +00:00
{
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
gPriv->RemoveFromSight();
gPriv->SetLocation( gPriv->GetX(), gPriv->GetY(), gPriv->GetZ(), gPriv->WorldNumber(), static_cast<UI16>( encaps.toInt() ));
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
break;
}
case CIP_AMOUNT: gPriv->SetAmount( static_cast<UI32>( encaps.toInt() )); break;
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
case CIP_CONTAINER:
if( *vp != JSVAL_NULL )
Instance-support and misc code cleanup Misc code and documentation cleanup: Updated and standardized function comment blocks throughout entire codebase Grouped getters and setters together in pairs and documented them as one Removed empty and/or non-useful information from comment blocks Removed unused function from cItem.cpp/h - IncID() - formerly used to change IDs for doors Added new feature - Instances Objects (characters, items, multis, spawnregions) can now make use of a 5th parameter to determine their location in the game world. In addition to the traditional X, Y, Z and WORLDNUMBER parameters, a new one has been added - INSTANCEID - that allows objects to exist at the same coordinates in the same world, but in different "dimensions". Code has been updated in multiple places to support this, and a default instanceID of 0 is assumed if nothing else is specified. Added support for new DFN tag in town regions, spawn regions and locations - INSTANCEID (defaults to 0 if not present) Added support for another start location parameter after worldNum in UOX.INI representing instanceID (defaults to 0 if not present) Updated TWEAK menu to include WorldNumber and instanceID Fixed BaseWeight option in TWEAK menu Updated CBase_Teleport - now takes an optional 5th parameter instanceID Updated SE_SpawnNPC now takes an optional 5th parameter - instanceID Updated SE_FindMulti now takes an optional 5th parameter - instanceID Updated SE_GetItem now takes an optional 5th parameter - instanceID Updated SE_FindItem now takes an optional 6th parameter - instanceID Added new JS property for Items, Characters, Regions: .instanceID Added JS property for Regions: .members - returns comma-separated list of town member serials Updated JS scripts making use of the above-mentioned JS Methods/Functions Updated dictionaries with new tweak menu entry texts Exposed SpawnRegions to JS engine, and updated JS docs with details: SpawnRegion JS Functions IterateOverSpawnRegions() GetSpawnRegion( spawnRegNum ) GetSpawnRegionCount() SpawnRegion JS Properties name regionNum itemList npcList item npc maxItems maxNpcs itemCount npcCount onlyOutside prefZ x1 y1 x2 y2 world instanceID minTime maxTime call
2020-08-08 13:57:15 +08:00
{
CBaseObject *myObj = static_cast<CBaseObject*>( encaps.toObject() );
if( !ValidateObject( myObj ))
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
break;
gPriv->SetCont( myObj, true );
Instance-support and misc code cleanup Misc code and documentation cleanup: Updated and standardized function comment blocks throughout entire codebase Grouped getters and setters together in pairs and documented them as one Removed empty and/or non-useful information from comment blocks Removed unused function from cItem.cpp/h - IncID() - formerly used to change IDs for doors Added new feature - Instances Objects (characters, items, multis, spawnregions) can now make use of a 5th parameter to determine their location in the game world. In addition to the traditional X, Y, Z and WORLDNUMBER parameters, a new one has been added - INSTANCEID - that allows objects to exist at the same coordinates in the same world, but in different "dimensions". Code has been updated in multiple places to support this, and a default instanceID of 0 is assumed if nothing else is specified. Added support for new DFN tag in town regions, spawn regions and locations - INSTANCEID (defaults to 0 if not present) Added support for another start location parameter after worldNum in UOX.INI representing instanceID (defaults to 0 if not present) Updated TWEAK menu to include WorldNumber and instanceID Fixed BaseWeight option in TWEAK menu Updated CBase_Teleport - now takes an optional 5th parameter instanceID Updated SE_SpawnNPC now takes an optional 5th parameter - instanceID Updated SE_FindMulti now takes an optional 5th parameter - instanceID Updated SE_GetItem now takes an optional 5th parameter - instanceID Updated SE_FindItem now takes an optional 6th parameter - instanceID Added new JS property for Items, Characters, Regions: .instanceID Added JS property for Regions: .members - returns comma-separated list of town member serials Updated JS scripts making use of the above-mentioned JS Methods/Functions Updated dictionaries with new tweak menu entry texts Exposed SpawnRegions to JS engine, and updated JS docs with details: SpawnRegion JS Functions IterateOverSpawnRegions() GetSpawnRegion( spawnRegNum ) GetSpawnRegionCount() SpawnRegion JS Properties name regionNum itemList npcList item npc maxItems maxNpcs itemCount npcCount onlyOutside prefZ x1 y1 x2 y2 world instanceID minTime maxTime call
2020-08-08 13:57:15 +08:00
}
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
else
{
gPriv->SetCont( nullptr, true );
}
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
break;
case CIP_TYPE: gPriv->SetType( static_cast<ItemTypes>( encaps.toInt() )); break;
Misc updates 06/07/2021 - Xuri Updated how UOX3 handles more, morex, morey and morez properties: DFN tags for these properties can now handle data in multiple formats. Example: MORE=1285, MORE=0 0 5 5, MORE=0x00 0x00 0x05 0x05, MORE=0x00000505 JS command 'set more/morex/morey/morez now accepts any of the above formats JS command 'get will now display both the decimal value for these properties, as well as the hex one JS command 'tweak will now display hex value for these properties in a tooltip Fixed an issue with target-based spells (like Magic Lock/Unlock, Magic Trap/Untrap, Telekinesis) that used the inverse result of a distance check to determine if players could cast such a spell at an item Fixed an issue where players could keep spawn containers open on screen to access items respawning inside without having to unlock/untrap container again after a respawn Locked containers (and spawn containers) will now show [Locked] in the item tooltip Spawn containers will now be re-trapped when new items spawn, if they were trapped originally. To trap a container: MOREZ=0x01 0x32 0x00 0x00 // 0x01 marks container as trapped, 0x32 says "deal 50 damage" when trap is set off Fixed trapped spawn containers not dealing damage when trap is set off due to magic damage function in source requiring a valid attacker (now no longer does) Updated source and scripts to use cliloc id 1050045 for custom tooltips rather than 1114778, as 1050045 is available in all client versions that support tooltips
2021-07-06 07:05:13 +08:00
case CIP_MORE:
{
0.99.4v Added JS command to reload dictionaries 'reloaddictionaries Fixed a server crash related to casting of spells Fixed some issues with Line-of-Sight checks related to items under/above ground, LoS checks between different floors of buildings, etc. Updated handling of skill-training keywords to be based on language-independent keyword IDs rather than trying to match player-input text to specific skill-names Updated animal-trainer/stablemasterscript (js/npc/ai/stablemaster.js) with several changes: Fixed an issue where the same pet would be stabled in all available slots if payment was taken from player's bank account instead of their backpack Fixed an issue where stablemaster would not pause walking for a while when a player interacts with them Converted all system messages and text messages in stablemaster script to dictionary entries Added new NPC AI type to source - AI_STABLEMASTER (9) - and assigned this to animal trainers. This is used to identify this type of NPCs for the purpose of displaying relevant context menus Reworked banker AI script (js/npc/ai/banker.js) to use triggerwords from client instead of hard-defined strings, to work better with multiple languages (and work with all relevant triggerwords) Fixed a bug with banker AI script (js/npc/ai/banker.js) that prevented players from using the "withdraw" command Re-added NPC AI 8 to banker NPCs (dfndata/npc/male_vendors.dfn and female_vendors.dfn) so code can check for presence of this AI when handling context menus Removed remaining hard-coded banking functionality - all handled by script anyway Added new context menu option for NPC bankers - Open Bankbox Updated code handling of context menus to only show context menus when relevant: Open Paperdoll - Shows for all characters with a paperdoll Open Backpack - Shows for player's character, pack animals and hirelings Open Bankbox - Shows for banker NPCs (if within 8 tiles) Buy/Sell - Shows for vendor NPCs (if within 8 tiles, and if they have anything for sale/are buying anything) Added new context menu entries for pets, which can be used if player is within 12 tiles of pet: Command: Kill Command: Stop Command: Follow Command: Stay Command: Guard Add Friend Remove Friend Transfer Release Added new context menu entries for stablemasters/animal trainers: Claim All Pets Stable Pet Added new context menu entries for Escort Quest NPCs Ask Destination (if within 3 tiles) Accept Escort (if within 3 tiles) Abandon Escort Added new context menus for NPCs that can teach skills to players (limited to max 10 per NPC) Train [skillName] Added new AI script for NPC hirelings (3204=js/npc/ai/hireling.js), who can be hired to follow the player around for a limited amount of time, and function the same way as pets. In addition to the regular pet commands, these speech commands are supported: hire // The hireling will respond with the cost to hire them dismiss // Replaces the "release" command for pets; will dismiss the hireling patrol // The hireling will patrol between it's current location and a second targeted location nearby move // The hireling will try to shuffle out of the way fetch // The hireling will try to fetch a targeted item drop // The hireling will drop to the ground all loot they're currently carrying report // The hireling will report on the remaining time they're hired for Added new NPC DFN tag used by code to detect hireling NPCs for the purpose of displaying context menus: HIRELING // No additional value/data needed for tag Added new context menu entries for Hireling NPCs, in addition to the ones for regular pets: Hire // Can be used within 3 steps of the hireling, who will respond with cost to hire them Dismiss // Replaces the "release" command for pets, will dismiss the hireling Added HIRELING tag and SCRIPT=3204 to and updated stats of various NPCs that will be hireable: m_fighter, f_fighter, m_beggar, f_beggar, m_peasant, f_peasant, m_sailor, f_sailor, m_pirate, f_pirate Added new hireling NPC: m_paladin, f_paladin Added new UOX ini setting to enable/disable context menus CONTEXTMENUS=1/0 (defaults to 1) Added new Item JS Method to check if an item's ID is on a specified food list .IsOnFoodList( foodList ) // Returns true/false if item's ID is on specified foodList Added new OMNIVORE food list and assigned it to [basehuman] DFN section Added new Character JS Properties .isGuarded // Gets/Sets whether character is guarded by a pet/hireling .guarding // Gets/Sets the object (if any) being guarded by a pet/hireling Fixed multiple issues with health bars, flagging and character highlighting Added some crash protection for invalid data used with CUSTOMINTTAG and CUSTOMSTRINGTAG DFN tags for Items, NPCs and Multis Fixed an issue which prevented hard-coded checks from running when using items Added new global js object (Timer) to make the use of character timers in JS more robust, with properties matching timer names from enum in source. Properties: .TIMEOUT // Time until next attack can be done in combat .INVIS // Time until invisible character becomes visible .HUNGER // Time until character grows more hungry .THIRST // Time until character grows more thirsty .POISONTIME // Time until next tick of poison damage .POISONTEXT // Time until next message about suffering from poison .POISONWEAROFF // Time until poison wears off .SPELLTIME // Time until spell cast is completed. Can be set to 0 to interrupt .ANTISPAM // Time until next speech message can be sent (for anti spam purposes) .CRIMFLAG // Time until criminal flag runs out .MURDERRATE // Time until next murder count decay .PEACETIMER // Time until character can re-enter combat after being affected by peacemaking .FLYINGTOGGLE // Time until next time flying ability can be toggled for gargoyles .MOVETIME // Time until NPC can move again .SPATIMER // Time until next time NPC can cast a spell .SUMMONTIME // Time until a summoned NPC will vanish .EVADETIME // Time until an NPC will exit evade state .LOGOUT // Time it takes for a player char to vanish after logout Examples of use: var hungerTimer = myChar.GetTimer( Timer.HUNGER ) myChar.SetTimer( Timer.HUNGER, 15000 ) Added new Character JS Methods to add, remove and list friends of a pet/hireling: .AddFriend( playerToAdd ) // Adds player to friend list .RemoveFriend( playerToRemove ) // Removes player from friend list .GetFriendList() // Gets list of friends .ClearFriendList() // Clears list of friends Added new Character JS Method to fetch a player character's list of pets/followers .GetPetList() // Gets list of pets/followers Added new persistent NPC property to keep track of a pet's previous owners, whether those tamed the pet or had it transferred to them. Every time a pet is tamed, or is transferred to a new owner, this list is updated: GenericList< CChar * > petOwnerList Added new Character JS Method to check if a player is on a pet's owner list as a previous owner: .HasBeenOwner( mChar ) Previous owners of a pet can re-tame it with guaranteed chance of success Updated JS Method Refresh() to be usable with both items or characters, to send updated state of object to nearby players Added character tooltip [Guarded] for characters being guarded by a pet/hireling Pets/hirelings that are transferred will now immediately start following their new master instead of wandering freely Pets/hirelings can no longer be transferred between players as long as either party is flagged as a criminal Pets/hirelings can no longer be transferred to dead players Pets/hirelings can no longer be transferred to NPCs Summoned creatures can no longer be transferred to other players Summoned creatures can no longer have friends Friend lists of pets/hirelings are now cleared when the pet/hireling is transferred to another player Added new UOX.INI settings to control how many pets players can have active: MAXCONTROLSLOTS=0 // Maximum number of pet control slots available to player. Disabled if 0 MAXFOLLOWERS=5 // Maximum pets/followers a player can have active at the same time. Used if control slots are disabled MAXPETOWNERS=5 // Maximum number of different owners a pet can have over its lifetime before it becomes impossible to retame Added new NPC property and NPC DFN tag that keeps track of how many pet control slots an NPC would take up if owned by a player: UI08 controlSlots // source property CONTROLSLOTS=# // DFN tag Added new Character JS properties: .ownerCount // Get the total number of owners a pet/hireling has had, based on NPC's petOwnerList .controlSlots // Get/Set number of pet control slots an NPC will occupy .controlSlotsUsed // Get/Set the number of control slots used by a player Updated get (js/commands/targeting/get.js) and set (js/commands/targeting/set.js) commands to support getting/setting the following character properties: deaths ownerCount (read only) controlSlots controlSlotsUsed Updated NPC DFNs with default CONTROLSLOT=# tags Increased the max distance from player that onSpeech JS event will trigger from 7 to 12 Updated how "all attack" and "all follow" commands for pets are handled. Now loops through all pets owned by character and executes command for each eligible pet Fixed an issue where NPCs could follow characters in different worlds/instances than them selves Updated default max amount of items that can be sold to NPC vendors from 5 to 250 Guards can no longer train players in skills Updated equipment itemlists (dfndata/items/itemlists/itemlists.dfn) with blank entries to introduce some more variety in the type of clothes NPCs wear in general Added new NPCs to DFNs (dfndata/npc/undead.dfn) and added them to undead npclist: [skeletalmage] // variation of [bonemage] [skeletalknight] // variation of [boneknight] Updated Titles (dfndata/titles/titles.dfn) with up-to-date titles for skills around Pub 15, and added titles for skills added after that. Also added "Elder" and "Legendary" titles for 110 and 120 skillpoints Updated EQUIPITEM tag in newbie.dfn (dfndata/newbie/newbie.dfn) to support an optional hue parameter (EQUIPITEM=id,hue) Updated starting equipment for new characters (dfndata/newbie/newbie.dfn), with commented out practice weapons. Uncomment to use Added item definitions for practice weapons (dfndata/items/gear/weapons/practice_weapons.dfn): practice_skinning_knife practice_hatchet practice_axe practice_mace practice_longsword practice_spear practice_bow practice_club practice_crook practice_gnarled_staff Updated mount statues DFN (dfndata/items/misc/mount-statues.dfn) and JS (js/npc/pets/*.js) files to include pet control slot related stuff Pets now inherit the karma of their owners, but revert to their original karma upon release Pets and hirelings will no longer follow the ghosts of their dead owners, but stay to guard their corpse Added optional 9th parameter for JS Function CreateDFNItem to specify a color for item created. This comes before the other optional parameters - worldNumber and instanceID (which are only used if character is NULL): CreateDFNItem( mSock, mChar, sectionName, inPack, iAmount, itemType, iColor, worldNumber, instanceID ) Added ID of Giant Beetle to various pack animal checks Pack animals will now drop any newbie/blessed items stored in their packs upon death Added new NPC properties to track pet loyalty, and exposed these as Character JS properties, and NPC DFN tags: JS Properties .maxLoyalty // Defaults to 100 .loyalty // Starts at 25 DFN Tags MAXLOYALTY=# // Defaults to 100 LOYALTY=# // Starts at 25 Updated TriggerEvent JS function to support return values (int, bool, string, object) from called script Updated various JS scripts to make use of new TriggerEvent functionality and reduce reliance on custom tags: js/item/archerybutte.js js/item/trainingdummy.js js/server/data/combatanims.js js/server/data/weapontypes.js Updated archerybutte script to use dictionary for system and text messages Updated archerybutte script to support increased range, distance penalty and dex/str bonuses when calculating score Added new UOX.INI settings under [pets and hirelings] section related to pet control and loyalty: CHECKPETCONTROLDIFFICULTY=1 // Enable/Disable pet control difficulty system PETLOYALTYGAINONSUCCESS=1 // Amount of pet loyalty gained on successful pet command use PETLOYALTYLOSSONFAILURE=3 // Amount of pet loyalty lost on failed pet command use PETLOYALTYRATE=900 // Amount of seconds between each time pet loyalty is automatically reduced by 1. Takes 25 hours to deplete completely from max Added new persistent NPC property that keeps track of the difficulty of taming and controlling a pet, and exposed it as a Character JS property: .orneriness Every time a tamed pet is released or goes wild, its "orneriness" increases, making it more difficult for other players to tame, and more difficult for anyone to control. Updated CBasePetResponse::canControlPet() function to use pet control difficulty system if enabled, which checks player's animal taming/animal lore skill vs a pet's "orneriness" to determine chance of pet accepting a given pet command On successful use of pet command, increases pet loyalty by value defined in PETLOYALTYGAINONSUCCESS ini setting On failed use of pet command, decreases pet loyalty by value defined in PETLOYALTYLOSSONFAILURE ini setting Added new Character JS Method to calculate chance of a player successfully controlling the pet: .CalculateControlChance( mChar ) // Returns value between 0 and 1000 indicating chance of success Feeding a pet will now restore its loyalty to maximum Pets will now lose loyalty on hunger checks when at maximum hunger Pets that are maximum hungry will now only have a chance to go wild if loyalty has dropped to zero Added new DFN tag for creatures.dfn - TYPE - which contains a string describing the type of creature Added secure pet trading. Players who trade pets will now see a pet transfer deed appear in a secure trade window with the name and type of creature, and upon completion of the trade the associated pet will be instantly transferred to the other player Updated resource JS scripts (js/server/resource/*) to use dictionaries for all system messages Updated skill JS scripts (js/skill/*) to use dictionaries for all system messages Updated housing JS scripts (js/server/house/*) to use dictionaries for all system messages Updated item JS scripts (js/item/*) to use dictionaries for all system messages Updated magic JS scripts (js/magic/*) to use dictionaries for all system messages Updated NPC AI JS scripts (js/npc/ai/*) to use dictionaries for all system messages Updated command JS scripts (js/commands/*) to use dictionaries for all system messages, gump tooltips, etc Updated code to use dictionaries for all system messages Fixed incorrect spelling for UOX.INI setting HIDEW(H)ILEMOUNTED and updated hiding skill (js/skill/hiding.js) to actually allow/disallow hiding while mounted based on this setting Added new Character JS Method to make it easier to make one NPC initiate combat with another: .InitiateCombat( targetChar ) // Character attempts to initiate combat with target character Updated parrying portion of combat code to be in line with Pub15/pre-AoS parrying mechanics. High AR shields now absorb more damage on a successful parry, while low AR shields have a higher chance of parrying. Shields are also now more effective against archery attacks (full absorption potential) than melee attacks (half absorption potential). Updated combat damage calculations to be in line with Pub15/pre-AoS damage calculations Adjusted default value of COMBATNPCDAMAGERATE ini setting (damage divisor when target is a player) from 2 to 1 to account for these changes. Removed dictionary.UNK, and made dictionary.ZRO the default dictionary used for all unsupported languages Added dictionary support for additional languages: Portuguese, Italian, Czech Updated default dictionaries for the following languages: English, French Added default dictionaries for the following languages: German, Spanish, Portuguese, Italian, Czech (note that translations have been provided by automatic services and will contain inaccuracies!) Added new UOX.INI setting to allow specifying a default dictionary language for server, which if set will force that language for all dictionary messages, regardless of client settings: SERVERLANGUAGE=0 // Set default server dictionary language. Supported languages: 0 - None/language used by each client, 1 - English, 2 - German, 3 - Spanish, 5 - French, 6 - Portuguese, 7 - Italian, 8 - Czech Added new function in combat.cpp - AdjustArmorClassDamage() - which adjusts the damage dealt in combat based on whether armour class (AC DFN tag or .ac JS property) of weapon and armour equipped on hit location of target match up. A weapon with armour class 1 would essentially be doubly effective against armour of armour class 1. Allows setting up things like piercing weapons being better against some armor types than mace weapons, etc. Added new UOX.INI setting under [combat] to enable/disable double damage from armour class bonuses: ARMORCLASSDAMAGEBONUS=0/1 //defaults to 0)
2021-07-28 16:02:56 +08:00
auto sEncaps = encaps.toString();
sEncaps = oldstrutil::trim( oldstrutil::removeTrailing( sEncaps, "//" ));
auto encapsSections = oldstrutil::sections( sEncaps, " " );
Misc updates 06/07/2021 - Xuri Updated how UOX3 handles more, morex, morey and morez properties: DFN tags for these properties can now handle data in multiple formats. Example: MORE=1285, MORE=0 0 5 5, MORE=0x00 0x00 0x05 0x05, MORE=0x00000505 JS command 'set more/morex/morey/morez now accepts any of the above formats JS command 'get will now display both the decimal value for these properties, as well as the hex one JS command 'tweak will now display hex value for these properties in a tooltip Fixed an issue with target-based spells (like Magic Lock/Unlock, Magic Trap/Untrap, Telekinesis) that used the inverse result of a distance check to determine if players could cast such a spell at an item Fixed an issue where players could keep spawn containers open on screen to access items respawning inside without having to unlock/untrap container again after a respawn Locked containers (and spawn containers) will now show [Locked] in the item tooltip Spawn containers will now be re-trapped when new items spawn, if they were trapped originally. To trap a container: MOREZ=0x01 0x32 0x00 0x00 // 0x01 marks container as trapped, 0x32 says "deal 50 damage" when trap is set off Fixed trapped spawn containers not dealing damage when trap is set off due to magic damage function in source requiring a valid attacker (now no longer does) Updated source and scripts to use cliloc id 1050045 for custom tooltips rather than 1114778, as 1050045 is available in all client versions that support tooltips
2021-07-06 07:05:13 +08:00
if( encapsSections.size() >= 4 )
{
gPriv->SetTempVar( CITV_MORE, 1, static_cast<UI08>( std::stoul( oldstrutil::trim( oldstrutil::removeTrailing( encapsSections[0], "//" )), nullptr, 0 )));
gPriv->SetTempVar( CITV_MORE, 2, static_cast<UI08>( std::stoul( oldstrutil::trim( oldstrutil::removeTrailing( encapsSections[1], "//" )), nullptr, 0 )));
gPriv->SetTempVar( CITV_MORE, 3, static_cast<UI08>( std::stoul( oldstrutil::trim( oldstrutil::removeTrailing( encapsSections[2], "//" )), nullptr, 0 )));
gPriv->SetTempVar( CITV_MORE, 4, static_cast<UI08>( std::stoul( oldstrutil::trim( oldstrutil::removeTrailing( encapsSections[3], "//" )), nullptr, 0 )));
Misc updates 06/07/2021 - Xuri Updated how UOX3 handles more, morex, morey and morez properties: DFN tags for these properties can now handle data in multiple formats. Example: MORE=1285, MORE=0 0 5 5, MORE=0x00 0x00 0x05 0x05, MORE=0x00000505 JS command 'set more/morex/morey/morez now accepts any of the above formats JS command 'get will now display both the decimal value for these properties, as well as the hex one JS command 'tweak will now display hex value for these properties in a tooltip Fixed an issue with target-based spells (like Magic Lock/Unlock, Magic Trap/Untrap, Telekinesis) that used the inverse result of a distance check to determine if players could cast such a spell at an item Fixed an issue where players could keep spawn containers open on screen to access items respawning inside without having to unlock/untrap container again after a respawn Locked containers (and spawn containers) will now show [Locked] in the item tooltip Spawn containers will now be re-trapped when new items spawn, if they were trapped originally. To trap a container: MOREZ=0x01 0x32 0x00 0x00 // 0x01 marks container as trapped, 0x32 says "deal 50 damage" when trap is set off Fixed trapped spawn containers not dealing damage when trap is set off due to magic damage function in source requiring a valid attacker (now no longer does) Updated source and scripts to use cliloc id 1050045 for custom tooltips rather than 1114778, as 1050045 is available in all client versions that support tooltips
2021-07-06 07:05:13 +08:00
}
else
{
gPriv->SetTempVar( CITV_MORE, encaps.toInt() );
}
break;
}
Thief Revamp - 0.99.6-RC5 Added script for NPC guildmasters (js/npc/ai/guildmaster.js). Only one NPC guild has been setup in the script so far (more can be easily added) - the Thieves Guild - which if joined grants players the ability to steal from other players and to buy disguise kits Added two new NPCs, which there will now spawn one of in a random location in each city in Britannia (felucca facet): m_thief_guildmaster (dfndata/npc/male_human.dfn) f_thief_guildmaster (dfndata/npc/female_Human.dfn) Added two new character properties to keep track of which NPC guild a player (or NPC) belongs to. These properties have been exposed as the following Character JS properties: .npcGuild // ID of NPC guild, as defined in script .npcGuildJoined // Timestamp for when player joined NPC guild Added script for Disguise Kits (js/item/disguisekit.js). These allow members of the Thieves Guild to disguise themselves from the prying eyes of other players. Added two new character properties: .isDisguised // true/false flag for character being disguised .origName // used to store character's original name before disguise went into effect Moved implementation of Stealing skill from code to script (js/skill/stealing.js) and revamped it completely in the process. Changes include: New features: Town rare stealing - any item marked as "special stealable" with new item property .stealable can be stolen, even if it's locked down by a GM on the ground, or inside a container When stealing from item piles, thief can potentially steal the amount of items that makes up the max weight limit for what they can steal, from those piles Chance to successfully steal is now affected by whether there are any characters (NPCs or Players) that witness the attempt. Depends on distance to character, and direction character is facing Players now become "permagrey" when successfully stealing from another player, regardless of whether it's witnessed Players now receive a "stealing" flag when stealing from another player, regardless of whether it's witnessed Stolen items cannot be removed from thief's backpack for 30 seconds following the theft of the item (AoS core shard era and above) Optional AoS feature to steal special consumable items from monsters Updated default stealing rules: Updated calculations to determine chance of success when stealing Players cannot steal while engaged in combat Players are revealed if hidden as soon as they use the stealing skill Players can no longer steal items in the secure trade window Players can no longer steal items from NPC shopkeepers Both hands must be free to steal Stealing now checks line of sight to target player/object Only members of Thieves Guild (NPC guild) can now steal from other players, unless they are guild enemies Players can no longer steal from NPC guards by default Players can no longer steal from the same NPC monster more than once Only gold and gems can be stolen from innocent players in dungeon/ll areas of Felucca, if core shard era is set to AoS or higher Players can no longer steal items held on cursor by other players Orcish masks now eplode if player steals from orcs while wearing it If core shard era is set to LBR or lower, player is marked as an aggressor if they steal from another player Guards can only be called on players that are flagged as criminals within the first 10 seconds of them being flagged Stealing script options: Allow stealing entire containers (off by default pre-AoS) Return stolen items on thief death (off by default) Temporarily make stolen items immovable in thief's backpack (on by default post-AoS) Temporarily protect traded items (on by default) Let dexterity affect chance for successful theft (off by default) Let light level affect chance for successful theft (off by default) Allow stealing from NPC Guards (off by default) Allow stealing special loot from monsters (on by default post-ml) Moved implementation of Snooping skill from code to script (js/skill/snooping.js), with some changes: Players cannot snoop pack animals from inside a house, if the animal is outside The deeper inside main backpack a container sits, the harder it becomes to snoop inside it Included an optional feature that lets targets of snooping gradually become more aware, increasing the difficulty of succeeding. This awareness fades over time. Players have a chance to stay hidden while snooping, based on their Hiding skill Karma is now lowered by snooping regardless of success or failure Added tracking system for "aggressors" in combat. A player attacking someone (regardless of flag status) will be marked as aggressor to that someone for 2 minutes Added tracking system for "permagrey" flags - these are stored on a per-target basis, so a player can be flagged visibly as permagrey to multiple other players. Persists until player dies. Player combat targets and war mode are now cleared on logout Players will now be unable to hide if within visual distance and in line of sight of their attacker or current target in combat Server leave-announcement now only happens after the logout timer has expired, instead of the exact moment the player presses the logout button Fixed an issue that could cause swimming NPCs to swim on land NPCs now have the ability to temporarily ignore unreachable targets in combat. If attacked by someone they are ignoring, they will enter evade state and try to move away from that someone. SpawnRegions now support NPCLISTS with weighted entries. Example of an NPCLIST with 75% chance of spawning some kind of orc, and 25% chance of spawning a ratman archer: [NPCLIST example] { 75|NPCLIST=allorc 25|ratman } Added 3 additional "all purpose" item properties (.more0, .more1 and .more2) and exposed those to JS engine. These work the same as more/morex/morey/morez Mark spell now stores a 4th property on recall runes - instanceID. This is stored in the rune's .more0 property. Recall and Gate spells now check the recall rune (or runebook)'s 4th location property - instanceID - to determine where the player ends up Fixed a server crash related to equipment being automatically unequipped if character is no longer strong enough to have it equipped Added new JS Function to check if any characters at specified location potentially block movement: DoesCharacterBlock( x, y, z, worldNum, instanceID ) // returns true if a character exists at given coordinate (within z +/- 4)
2023-06-20 02:21:16 +08:00
case CIP_MORE0:
{
auto sEncaps = encaps.toString();
sEncaps = oldstrutil::trim( oldstrutil::removeTrailing( sEncaps, "//" ));
auto encapsSections = oldstrutil::sections( sEncaps, " " );
if( encapsSections.size() >= 4 )
{
gPriv->SetTempVar( CITV_MORE0, 1, static_cast<UI08>( std::stoul( oldstrutil::trim( oldstrutil::removeTrailing( encapsSections[0], "//" )), nullptr, 0 )));
gPriv->SetTempVar( CITV_MORE0, 2, static_cast<UI08>( std::stoul( oldstrutil::trim( oldstrutil::removeTrailing( encapsSections[1], "//" )), nullptr, 0 )));
gPriv->SetTempVar( CITV_MORE0, 3, static_cast<UI08>( std::stoul( oldstrutil::trim( oldstrutil::removeTrailing( encapsSections[2], "//" )), nullptr, 0 )));
gPriv->SetTempVar( CITV_MORE0, 4, static_cast<UI08>( std::stoul( oldstrutil::trim( oldstrutil::removeTrailing( encapsSections[3], "//" )), nullptr, 0 )));
}
else
{
gPriv->SetTempVar( CITV_MORE0, encaps.toInt() );
}
break;
}
case CIP_MORE1:
{
auto sEncaps = encaps.toString();
sEncaps = oldstrutil::trim( oldstrutil::removeTrailing( sEncaps, "//" ));
auto encapsSections = oldstrutil::sections( sEncaps, " " );
if( encapsSections.size() >= 4 )
{
gPriv->SetTempVar( CITV_MORE1, 1, static_cast<UI08>( std::stoul( oldstrutil::trim( oldstrutil::removeTrailing( encapsSections[0], "//" )), nullptr, 0 )));
gPriv->SetTempVar( CITV_MORE1, 2, static_cast<UI08>( std::stoul( oldstrutil::trim( oldstrutil::removeTrailing( encapsSections[1], "//" )), nullptr, 0 )));
gPriv->SetTempVar( CITV_MORE1, 3, static_cast<UI08>( std::stoul( oldstrutil::trim( oldstrutil::removeTrailing( encapsSections[2], "//" )), nullptr, 0 )));
gPriv->SetTempVar( CITV_MORE1, 4, static_cast<UI08>( std::stoul( oldstrutil::trim( oldstrutil::removeTrailing( encapsSections[3], "//" )), nullptr, 0 )));
}
else
{
gPriv->SetTempVar( CITV_MORE1, encaps.toInt() );
}
break;
}
case CIP_MORE2:
{
auto sEncaps = encaps.toString();
sEncaps = oldstrutil::trim( oldstrutil::removeTrailing( sEncaps, "//" ));
auto encapsSections = oldstrutil::sections( sEncaps, " " );
if( encapsSections.size() >= 4 )
{
gPriv->SetTempVar( CITV_MORE2, 1, static_cast<UI08>( std::stoul( oldstrutil::trim( oldstrutil::removeTrailing( encapsSections[0], "//" )), nullptr, 0 )));
gPriv->SetTempVar( CITV_MORE2, 2, static_cast<UI08>( std::stoul( oldstrutil::trim( oldstrutil::removeTrailing( encapsSections[1], "//" )), nullptr, 0 )));
gPriv->SetTempVar( CITV_MORE2, 3, static_cast<UI08>( std::stoul( oldstrutil::trim( oldstrutil::removeTrailing( encapsSections[2], "//" )), nullptr, 0 )));
gPriv->SetTempVar( CITV_MORE2, 4, static_cast<UI08>( std::stoul( oldstrutil::trim( oldstrutil::removeTrailing( encapsSections[3], "//" )), nullptr, 0 )));
}
else
{
gPriv->SetTempVar( CITV_MORE2, encaps.toInt() );
}
break;
}
Misc updates 06/07/2021 - Xuri Updated how UOX3 handles more, morex, morey and morez properties: DFN tags for these properties can now handle data in multiple formats. Example: MORE=1285, MORE=0 0 5 5, MORE=0x00 0x00 0x05 0x05, MORE=0x00000505 JS command 'set more/morex/morey/morez now accepts any of the above formats JS command 'get will now display both the decimal value for these properties, as well as the hex one JS command 'tweak will now display hex value for these properties in a tooltip Fixed an issue with target-based spells (like Magic Lock/Unlock, Magic Trap/Untrap, Telekinesis) that used the inverse result of a distance check to determine if players could cast such a spell at an item Fixed an issue where players could keep spawn containers open on screen to access items respawning inside without having to unlock/untrap container again after a respawn Locked containers (and spawn containers) will now show [Locked] in the item tooltip Spawn containers will now be re-trapped when new items spawn, if they were trapped originally. To trap a container: MOREZ=0x01 0x32 0x00 0x00 // 0x01 marks container as trapped, 0x32 says "deal 50 damage" when trap is set off Fixed trapped spawn containers not dealing damage when trap is set off due to magic damage function in source requiring a valid attacker (now no longer does) Updated source and scripts to use cliloc id 1050045 for custom tooltips rather than 1114778, as 1050045 is available in all client versions that support tooltips
2021-07-06 07:05:13 +08:00
case CIP_MOREX:
{
0.99.4v Added JS command to reload dictionaries 'reloaddictionaries Fixed a server crash related to casting of spells Fixed some issues with Line-of-Sight checks related to items under/above ground, LoS checks between different floors of buildings, etc. Updated handling of skill-training keywords to be based on language-independent keyword IDs rather than trying to match player-input text to specific skill-names Updated animal-trainer/stablemasterscript (js/npc/ai/stablemaster.js) with several changes: Fixed an issue where the same pet would be stabled in all available slots if payment was taken from player's bank account instead of their backpack Fixed an issue where stablemaster would not pause walking for a while when a player interacts with them Converted all system messages and text messages in stablemaster script to dictionary entries Added new NPC AI type to source - AI_STABLEMASTER (9) - and assigned this to animal trainers. This is used to identify this type of NPCs for the purpose of displaying relevant context menus Reworked banker AI script (js/npc/ai/banker.js) to use triggerwords from client instead of hard-defined strings, to work better with multiple languages (and work with all relevant triggerwords) Fixed a bug with banker AI script (js/npc/ai/banker.js) that prevented players from using the "withdraw" command Re-added NPC AI 8 to banker NPCs (dfndata/npc/male_vendors.dfn and female_vendors.dfn) so code can check for presence of this AI when handling context menus Removed remaining hard-coded banking functionality - all handled by script anyway Added new context menu option for NPC bankers - Open Bankbox Updated code handling of context menus to only show context menus when relevant: Open Paperdoll - Shows for all characters with a paperdoll Open Backpack - Shows for player's character, pack animals and hirelings Open Bankbox - Shows for banker NPCs (if within 8 tiles) Buy/Sell - Shows for vendor NPCs (if within 8 tiles, and if they have anything for sale/are buying anything) Added new context menu entries for pets, which can be used if player is within 12 tiles of pet: Command: Kill Command: Stop Command: Follow Command: Stay Command: Guard Add Friend Remove Friend Transfer Release Added new context menu entries for stablemasters/animal trainers: Claim All Pets Stable Pet Added new context menu entries for Escort Quest NPCs Ask Destination (if within 3 tiles) Accept Escort (if within 3 tiles) Abandon Escort Added new context menus for NPCs that can teach skills to players (limited to max 10 per NPC) Train [skillName] Added new AI script for NPC hirelings (3204=js/npc/ai/hireling.js), who can be hired to follow the player around for a limited amount of time, and function the same way as pets. In addition to the regular pet commands, these speech commands are supported: hire // The hireling will respond with the cost to hire them dismiss // Replaces the "release" command for pets; will dismiss the hireling patrol // The hireling will patrol between it's current location and a second targeted location nearby move // The hireling will try to shuffle out of the way fetch // The hireling will try to fetch a targeted item drop // The hireling will drop to the ground all loot they're currently carrying report // The hireling will report on the remaining time they're hired for Added new NPC DFN tag used by code to detect hireling NPCs for the purpose of displaying context menus: HIRELING // No additional value/data needed for tag Added new context menu entries for Hireling NPCs, in addition to the ones for regular pets: Hire // Can be used within 3 steps of the hireling, who will respond with cost to hire them Dismiss // Replaces the "release" command for pets, will dismiss the hireling Added HIRELING tag and SCRIPT=3204 to and updated stats of various NPCs that will be hireable: m_fighter, f_fighter, m_beggar, f_beggar, m_peasant, f_peasant, m_sailor, f_sailor, m_pirate, f_pirate Added new hireling NPC: m_paladin, f_paladin Added new UOX ini setting to enable/disable context menus CONTEXTMENUS=1/0 (defaults to 1) Added new Item JS Method to check if an item's ID is on a specified food list .IsOnFoodList( foodList ) // Returns true/false if item's ID is on specified foodList Added new OMNIVORE food list and assigned it to [basehuman] DFN section Added new Character JS Properties .isGuarded // Gets/Sets whether character is guarded by a pet/hireling .guarding // Gets/Sets the object (if any) being guarded by a pet/hireling Fixed multiple issues with health bars, flagging and character highlighting Added some crash protection for invalid data used with CUSTOMINTTAG and CUSTOMSTRINGTAG DFN tags for Items, NPCs and Multis Fixed an issue which prevented hard-coded checks from running when using items Added new global js object (Timer) to make the use of character timers in JS more robust, with properties matching timer names from enum in source. Properties: .TIMEOUT // Time until next attack can be done in combat .INVIS // Time until invisible character becomes visible .HUNGER // Time until character grows more hungry .THIRST // Time until character grows more thirsty .POISONTIME // Time until next tick of poison damage .POISONTEXT // Time until next message about suffering from poison .POISONWEAROFF // Time until poison wears off .SPELLTIME // Time until spell cast is completed. Can be set to 0 to interrupt .ANTISPAM // Time until next speech message can be sent (for anti spam purposes) .CRIMFLAG // Time until criminal flag runs out .MURDERRATE // Time until next murder count decay .PEACETIMER // Time until character can re-enter combat after being affected by peacemaking .FLYINGTOGGLE // Time until next time flying ability can be toggled for gargoyles .MOVETIME // Time until NPC can move again .SPATIMER // Time until next time NPC can cast a spell .SUMMONTIME // Time until a summoned NPC will vanish .EVADETIME // Time until an NPC will exit evade state .LOGOUT // Time it takes for a player char to vanish after logout Examples of use: var hungerTimer = myChar.GetTimer( Timer.HUNGER ) myChar.SetTimer( Timer.HUNGER, 15000 ) Added new Character JS Methods to add, remove and list friends of a pet/hireling: .AddFriend( playerToAdd ) // Adds player to friend list .RemoveFriend( playerToRemove ) // Removes player from friend list .GetFriendList() // Gets list of friends .ClearFriendList() // Clears list of friends Added new Character JS Method to fetch a player character's list of pets/followers .GetPetList() // Gets list of pets/followers Added new persistent NPC property to keep track of a pet's previous owners, whether those tamed the pet or had it transferred to them. Every time a pet is tamed, or is transferred to a new owner, this list is updated: GenericList< CChar * > petOwnerList Added new Character JS Method to check if a player is on a pet's owner list as a previous owner: .HasBeenOwner( mChar ) Previous owners of a pet can re-tame it with guaranteed chance of success Updated JS Method Refresh() to be usable with both items or characters, to send updated state of object to nearby players Added character tooltip [Guarded] for characters being guarded by a pet/hireling Pets/hirelings that are transferred will now immediately start following their new master instead of wandering freely Pets/hirelings can no longer be transferred between players as long as either party is flagged as a criminal Pets/hirelings can no longer be transferred to dead players Pets/hirelings can no longer be transferred to NPCs Summoned creatures can no longer be transferred to other players Summoned creatures can no longer have friends Friend lists of pets/hirelings are now cleared when the pet/hireling is transferred to another player Added new UOX.INI settings to control how many pets players can have active: MAXCONTROLSLOTS=0 // Maximum number of pet control slots available to player. Disabled if 0 MAXFOLLOWERS=5 // Maximum pets/followers a player can have active at the same time. Used if control slots are disabled MAXPETOWNERS=5 // Maximum number of different owners a pet can have over its lifetime before it becomes impossible to retame Added new NPC property and NPC DFN tag that keeps track of how many pet control slots an NPC would take up if owned by a player: UI08 controlSlots // source property CONTROLSLOTS=# // DFN tag Added new Character JS properties: .ownerCount // Get the total number of owners a pet/hireling has had, based on NPC's petOwnerList .controlSlots // Get/Set number of pet control slots an NPC will occupy .controlSlotsUsed // Get/Set the number of control slots used by a player Updated get (js/commands/targeting/get.js) and set (js/commands/targeting/set.js) commands to support getting/setting the following character properties: deaths ownerCount (read only) controlSlots controlSlotsUsed Updated NPC DFNs with default CONTROLSLOT=# tags Increased the max distance from player that onSpeech JS event will trigger from 7 to 12 Updated how "all attack" and "all follow" commands for pets are handled. Now loops through all pets owned by character and executes command for each eligible pet Fixed an issue where NPCs could follow characters in different worlds/instances than them selves Updated default max amount of items that can be sold to NPC vendors from 5 to 250 Guards can no longer train players in skills Updated equipment itemlists (dfndata/items/itemlists/itemlists.dfn) with blank entries to introduce some more variety in the type of clothes NPCs wear in general Added new NPCs to DFNs (dfndata/npc/undead.dfn) and added them to undead npclist: [skeletalmage] // variation of [bonemage] [skeletalknight] // variation of [boneknight] Updated Titles (dfndata/titles/titles.dfn) with up-to-date titles for skills around Pub 15, and added titles for skills added after that. Also added "Elder" and "Legendary" titles for 110 and 120 skillpoints Updated EQUIPITEM tag in newbie.dfn (dfndata/newbie/newbie.dfn) to support an optional hue parameter (EQUIPITEM=id,hue) Updated starting equipment for new characters (dfndata/newbie/newbie.dfn), with commented out practice weapons. Uncomment to use Added item definitions for practice weapons (dfndata/items/gear/weapons/practice_weapons.dfn): practice_skinning_knife practice_hatchet practice_axe practice_mace practice_longsword practice_spear practice_bow practice_club practice_crook practice_gnarled_staff Updated mount statues DFN (dfndata/items/misc/mount-statues.dfn) and JS (js/npc/pets/*.js) files to include pet control slot related stuff Pets now inherit the karma of their owners, but revert to their original karma upon release Pets and hirelings will no longer follow the ghosts of their dead owners, but stay to guard their corpse Added optional 9th parameter for JS Function CreateDFNItem to specify a color for item created. This comes before the other optional parameters - worldNumber and instanceID (which are only used if character is NULL): CreateDFNItem( mSock, mChar, sectionName, inPack, iAmount, itemType, iColor, worldNumber, instanceID ) Added ID of Giant Beetle to various pack animal checks Pack animals will now drop any newbie/blessed items stored in their packs upon death Added new NPC properties to track pet loyalty, and exposed these as Character JS properties, and NPC DFN tags: JS Properties .maxLoyalty // Defaults to 100 .loyalty // Starts at 25 DFN Tags MAXLOYALTY=# // Defaults to 100 LOYALTY=# // Starts at 25 Updated TriggerEvent JS function to support return values (int, bool, string, object) from called script Updated various JS scripts to make use of new TriggerEvent functionality and reduce reliance on custom tags: js/item/archerybutte.js js/item/trainingdummy.js js/server/data/combatanims.js js/server/data/weapontypes.js Updated archerybutte script to use dictionary for system and text messages Updated archerybutte script to support increased range, distance penalty and dex/str bonuses when calculating score Added new UOX.INI settings under [pets and hirelings] section related to pet control and loyalty: CHECKPETCONTROLDIFFICULTY=1 // Enable/Disable pet control difficulty system PETLOYALTYGAINONSUCCESS=1 // Amount of pet loyalty gained on successful pet command use PETLOYALTYLOSSONFAILURE=3 // Amount of pet loyalty lost on failed pet command use PETLOYALTYRATE=900 // Amount of seconds between each time pet loyalty is automatically reduced by 1. Takes 25 hours to deplete completely from max Added new persistent NPC property that keeps track of the difficulty of taming and controlling a pet, and exposed it as a Character JS property: .orneriness Every time a tamed pet is released or goes wild, its "orneriness" increases, making it more difficult for other players to tame, and more difficult for anyone to control. Updated CBasePetResponse::canControlPet() function to use pet control difficulty system if enabled, which checks player's animal taming/animal lore skill vs a pet's "orneriness" to determine chance of pet accepting a given pet command On successful use of pet command, increases pet loyalty by value defined in PETLOYALTYGAINONSUCCESS ini setting On failed use of pet command, decreases pet loyalty by value defined in PETLOYALTYLOSSONFAILURE ini setting Added new Character JS Method to calculate chance of a player successfully controlling the pet: .CalculateControlChance( mChar ) // Returns value between 0 and 1000 indicating chance of success Feeding a pet will now restore its loyalty to maximum Pets will now lose loyalty on hunger checks when at maximum hunger Pets that are maximum hungry will now only have a chance to go wild if loyalty has dropped to zero Added new DFN tag for creatures.dfn - TYPE - which contains a string describing the type of creature Added secure pet trading. Players who trade pets will now see a pet transfer deed appear in a secure trade window with the name and type of creature, and upon completion of the trade the associated pet will be instantly transferred to the other player Updated resource JS scripts (js/server/resource/*) to use dictionaries for all system messages Updated skill JS scripts (js/skill/*) to use dictionaries for all system messages Updated housing JS scripts (js/server/house/*) to use dictionaries for all system messages Updated item JS scripts (js/item/*) to use dictionaries for all system messages Updated magic JS scripts (js/magic/*) to use dictionaries for all system messages Updated NPC AI JS scripts (js/npc/ai/*) to use dictionaries for all system messages Updated command JS scripts (js/commands/*) to use dictionaries for all system messages, gump tooltips, etc Updated code to use dictionaries for all system messages Fixed incorrect spelling for UOX.INI setting HIDEW(H)ILEMOUNTED and updated hiding skill (js/skill/hiding.js) to actually allow/disallow hiding while mounted based on this setting Added new Character JS Method to make it easier to make one NPC initiate combat with another: .InitiateCombat( targetChar ) // Character attempts to initiate combat with target character Updated parrying portion of combat code to be in line with Pub15/pre-AoS parrying mechanics. High AR shields now absorb more damage on a successful parry, while low AR shields have a higher chance of parrying. Shields are also now more effective against archery attacks (full absorption potential) than melee attacks (half absorption potential). Updated combat damage calculations to be in line with Pub15/pre-AoS damage calculations Adjusted default value of COMBATNPCDAMAGERATE ini setting (damage divisor when target is a player) from 2 to 1 to account for these changes. Removed dictionary.UNK, and made dictionary.ZRO the default dictionary used for all unsupported languages Added dictionary support for additional languages: Portuguese, Italian, Czech Updated default dictionaries for the following languages: English, French Added default dictionaries for the following languages: German, Spanish, Portuguese, Italian, Czech (note that translations have been provided by automatic services and will contain inaccuracies!) Added new UOX.INI setting to allow specifying a default dictionary language for server, which if set will force that language for all dictionary messages, regardless of client settings: SERVERLANGUAGE=0 // Set default server dictionary language. Supported languages: 0 - None/language used by each client, 1 - English, 2 - German, 3 - Spanish, 5 - French, 6 - Portuguese, 7 - Italian, 8 - Czech Added new function in combat.cpp - AdjustArmorClassDamage() - which adjusts the damage dealt in combat based on whether armour class (AC DFN tag or .ac JS property) of weapon and armour equipped on hit location of target match up. A weapon with armour class 1 would essentially be doubly effective against armour of armour class 1. Allows setting up things like piercing weapons being better against some armor types than mace weapons, etc. Added new UOX.INI setting under [combat] to enable/disable double damage from armour class bonuses: ARMORCLASSDAMAGEBONUS=0/1 //defaults to 0)
2021-07-28 16:02:56 +08:00
auto sEncaps = encaps.toString();
sEncaps = oldstrutil::trim( oldstrutil::removeTrailing( sEncaps, "//"));
auto encapsSections = oldstrutil::sections( sEncaps, " " );
Misc updates 06/07/2021 - Xuri Updated how UOX3 handles more, morex, morey and morez properties: DFN tags for these properties can now handle data in multiple formats. Example: MORE=1285, MORE=0 0 5 5, MORE=0x00 0x00 0x05 0x05, MORE=0x00000505 JS command 'set more/morex/morey/morez now accepts any of the above formats JS command 'get will now display both the decimal value for these properties, as well as the hex one JS command 'tweak will now display hex value for these properties in a tooltip Fixed an issue with target-based spells (like Magic Lock/Unlock, Magic Trap/Untrap, Telekinesis) that used the inverse result of a distance check to determine if players could cast such a spell at an item Fixed an issue where players could keep spawn containers open on screen to access items respawning inside without having to unlock/untrap container again after a respawn Locked containers (and spawn containers) will now show [Locked] in the item tooltip Spawn containers will now be re-trapped when new items spawn, if they were trapped originally. To trap a container: MOREZ=0x01 0x32 0x00 0x00 // 0x01 marks container as trapped, 0x32 says "deal 50 damage" when trap is set off Fixed trapped spawn containers not dealing damage when trap is set off due to magic damage function in source requiring a valid attacker (now no longer does) Updated source and scripts to use cliloc id 1050045 for custom tooltips rather than 1114778, as 1050045 is available in all client versions that support tooltips
2021-07-06 07:05:13 +08:00
if( encapsSections.size() >= 4 )
{
gPriv->SetTempVar( CITV_MOREX, 1, static_cast<UI08>( std::stoul( oldstrutil::trim( oldstrutil::removeTrailing( encapsSections[0], "//" )), nullptr, 0 )));
gPriv->SetTempVar( CITV_MOREX, 2, static_cast<UI08>( std::stoul( oldstrutil::trim( oldstrutil::removeTrailing( encapsSections[1], "//" )), nullptr, 0 )));
gPriv->SetTempVar( CITV_MOREX, 3, static_cast<UI08>( std::stoul( oldstrutil::trim( oldstrutil::removeTrailing( encapsSections[2], "//" )), nullptr, 0 )));
gPriv->SetTempVar( CITV_MOREX, 4, static_cast<UI08>( std::stoul( oldstrutil::trim( oldstrutil::removeTrailing( encapsSections[3], "//" )), nullptr, 0 )));
Misc updates 06/07/2021 - Xuri Updated how UOX3 handles more, morex, morey and morez properties: DFN tags for these properties can now handle data in multiple formats. Example: MORE=1285, MORE=0 0 5 5, MORE=0x00 0x00 0x05 0x05, MORE=0x00000505 JS command 'set more/morex/morey/morez now accepts any of the above formats JS command 'get will now display both the decimal value for these properties, as well as the hex one JS command 'tweak will now display hex value for these properties in a tooltip Fixed an issue with target-based spells (like Magic Lock/Unlock, Magic Trap/Untrap, Telekinesis) that used the inverse result of a distance check to determine if players could cast such a spell at an item Fixed an issue where players could keep spawn containers open on screen to access items respawning inside without having to unlock/untrap container again after a respawn Locked containers (and spawn containers) will now show [Locked] in the item tooltip Spawn containers will now be re-trapped when new items spawn, if they were trapped originally. To trap a container: MOREZ=0x01 0x32 0x00 0x00 // 0x01 marks container as trapped, 0x32 says "deal 50 damage" when trap is set off Fixed trapped spawn containers not dealing damage when trap is set off due to magic damage function in source requiring a valid attacker (now no longer does) Updated source and scripts to use cliloc id 1050045 for custom tooltips rather than 1114778, as 1050045 is available in all client versions that support tooltips
2021-07-06 07:05:13 +08:00
}
else
{
gPriv->SetTempVar( CITV_MOREX, encaps.toInt() );
}
break;
}
case CIP_MOREY:
{
0.99.4v Added JS command to reload dictionaries 'reloaddictionaries Fixed a server crash related to casting of spells Fixed some issues with Line-of-Sight checks related to items under/above ground, LoS checks between different floors of buildings, etc. Updated handling of skill-training keywords to be based on language-independent keyword IDs rather than trying to match player-input text to specific skill-names Updated animal-trainer/stablemasterscript (js/npc/ai/stablemaster.js) with several changes: Fixed an issue where the same pet would be stabled in all available slots if payment was taken from player's bank account instead of their backpack Fixed an issue where stablemaster would not pause walking for a while when a player interacts with them Converted all system messages and text messages in stablemaster script to dictionary entries Added new NPC AI type to source - AI_STABLEMASTER (9) - and assigned this to animal trainers. This is used to identify this type of NPCs for the purpose of displaying relevant context menus Reworked banker AI script (js/npc/ai/banker.js) to use triggerwords from client instead of hard-defined strings, to work better with multiple languages (and work with all relevant triggerwords) Fixed a bug with banker AI script (js/npc/ai/banker.js) that prevented players from using the "withdraw" command Re-added NPC AI 8 to banker NPCs (dfndata/npc/male_vendors.dfn and female_vendors.dfn) so code can check for presence of this AI when handling context menus Removed remaining hard-coded banking functionality - all handled by script anyway Added new context menu option for NPC bankers - Open Bankbox Updated code handling of context menus to only show context menus when relevant: Open Paperdoll - Shows for all characters with a paperdoll Open Backpack - Shows for player's character, pack animals and hirelings Open Bankbox - Shows for banker NPCs (if within 8 tiles) Buy/Sell - Shows for vendor NPCs (if within 8 tiles, and if they have anything for sale/are buying anything) Added new context menu entries for pets, which can be used if player is within 12 tiles of pet: Command: Kill Command: Stop Command: Follow Command: Stay Command: Guard Add Friend Remove Friend Transfer Release Added new context menu entries for stablemasters/animal trainers: Claim All Pets Stable Pet Added new context menu entries for Escort Quest NPCs Ask Destination (if within 3 tiles) Accept Escort (if within 3 tiles) Abandon Escort Added new context menus for NPCs that can teach skills to players (limited to max 10 per NPC) Train [skillName] Added new AI script for NPC hirelings (3204=js/npc/ai/hireling.js), who can be hired to follow the player around for a limited amount of time, and function the same way as pets. In addition to the regular pet commands, these speech commands are supported: hire // The hireling will respond with the cost to hire them dismiss // Replaces the "release" command for pets; will dismiss the hireling patrol // The hireling will patrol between it's current location and a second targeted location nearby move // The hireling will try to shuffle out of the way fetch // The hireling will try to fetch a targeted item drop // The hireling will drop to the ground all loot they're currently carrying report // The hireling will report on the remaining time they're hired for Added new NPC DFN tag used by code to detect hireling NPCs for the purpose of displaying context menus: HIRELING // No additional value/data needed for tag Added new context menu entries for Hireling NPCs, in addition to the ones for regular pets: Hire // Can be used within 3 steps of the hireling, who will respond with cost to hire them Dismiss // Replaces the "release" command for pets, will dismiss the hireling Added HIRELING tag and SCRIPT=3204 to and updated stats of various NPCs that will be hireable: m_fighter, f_fighter, m_beggar, f_beggar, m_peasant, f_peasant, m_sailor, f_sailor, m_pirate, f_pirate Added new hireling NPC: m_paladin, f_paladin Added new UOX ini setting to enable/disable context menus CONTEXTMENUS=1/0 (defaults to 1) Added new Item JS Method to check if an item's ID is on a specified food list .IsOnFoodList( foodList ) // Returns true/false if item's ID is on specified foodList Added new OMNIVORE food list and assigned it to [basehuman] DFN section Added new Character JS Properties .isGuarded // Gets/Sets whether character is guarded by a pet/hireling .guarding // Gets/Sets the object (if any) being guarded by a pet/hireling Fixed multiple issues with health bars, flagging and character highlighting Added some crash protection for invalid data used with CUSTOMINTTAG and CUSTOMSTRINGTAG DFN tags for Items, NPCs and Multis Fixed an issue which prevented hard-coded checks from running when using items Added new global js object (Timer) to make the use of character timers in JS more robust, with properties matching timer names from enum in source. Properties: .TIMEOUT // Time until next attack can be done in combat .INVIS // Time until invisible character becomes visible .HUNGER // Time until character grows more hungry .THIRST // Time until character grows more thirsty .POISONTIME // Time until next tick of poison damage .POISONTEXT // Time until next message about suffering from poison .POISONWEAROFF // Time until poison wears off .SPELLTIME // Time until spell cast is completed. Can be set to 0 to interrupt .ANTISPAM // Time until next speech message can be sent (for anti spam purposes) .CRIMFLAG // Time until criminal flag runs out .MURDERRATE // Time until next murder count decay .PEACETIMER // Time until character can re-enter combat after being affected by peacemaking .FLYINGTOGGLE // Time until next time flying ability can be toggled for gargoyles .MOVETIME // Time until NPC can move again .SPATIMER // Time until next time NPC can cast a spell .SUMMONTIME // Time until a summoned NPC will vanish .EVADETIME // Time until an NPC will exit evade state .LOGOUT // Time it takes for a player char to vanish after logout Examples of use: var hungerTimer = myChar.GetTimer( Timer.HUNGER ) myChar.SetTimer( Timer.HUNGER, 15000 ) Added new Character JS Methods to add, remove and list friends of a pet/hireling: .AddFriend( playerToAdd ) // Adds player to friend list .RemoveFriend( playerToRemove ) // Removes player from friend list .GetFriendList() // Gets list of friends .ClearFriendList() // Clears list of friends Added new Character JS Method to fetch a player character's list of pets/followers .GetPetList() // Gets list of pets/followers Added new persistent NPC property to keep track of a pet's previous owners, whether those tamed the pet or had it transferred to them. Every time a pet is tamed, or is transferred to a new owner, this list is updated: GenericList< CChar * > petOwnerList Added new Character JS Method to check if a player is on a pet's owner list as a previous owner: .HasBeenOwner( mChar ) Previous owners of a pet can re-tame it with guaranteed chance of success Updated JS Method Refresh() to be usable with both items or characters, to send updated state of object to nearby players Added character tooltip [Guarded] for characters being guarded by a pet/hireling Pets/hirelings that are transferred will now immediately start following their new master instead of wandering freely Pets/hirelings can no longer be transferred between players as long as either party is flagged as a criminal Pets/hirelings can no longer be transferred to dead players Pets/hirelings can no longer be transferred to NPCs Summoned creatures can no longer be transferred to other players Summoned creatures can no longer have friends Friend lists of pets/hirelings are now cleared when the pet/hireling is transferred to another player Added new UOX.INI settings to control how many pets players can have active: MAXCONTROLSLOTS=0 // Maximum number of pet control slots available to player. Disabled if 0 MAXFOLLOWERS=5 // Maximum pets/followers a player can have active at the same time. Used if control slots are disabled MAXPETOWNERS=5 // Maximum number of different owners a pet can have over its lifetime before it becomes impossible to retame Added new NPC property and NPC DFN tag that keeps track of how many pet control slots an NPC would take up if owned by a player: UI08 controlSlots // source property CONTROLSLOTS=# // DFN tag Added new Character JS properties: .ownerCount // Get the total number of owners a pet/hireling has had, based on NPC's petOwnerList .controlSlots // Get/Set number of pet control slots an NPC will occupy .controlSlotsUsed // Get/Set the number of control slots used by a player Updated get (js/commands/targeting/get.js) and set (js/commands/targeting/set.js) commands to support getting/setting the following character properties: deaths ownerCount (read only) controlSlots controlSlotsUsed Updated NPC DFNs with default CONTROLSLOT=# tags Increased the max distance from player that onSpeech JS event will trigger from 7 to 12 Updated how "all attack" and "all follow" commands for pets are handled. Now loops through all pets owned by character and executes command for each eligible pet Fixed an issue where NPCs could follow characters in different worlds/instances than them selves Updated default max amount of items that can be sold to NPC vendors from 5 to 250 Guards can no longer train players in skills Updated equipment itemlists (dfndata/items/itemlists/itemlists.dfn) with blank entries to introduce some more variety in the type of clothes NPCs wear in general Added new NPCs to DFNs (dfndata/npc/undead.dfn) and added them to undead npclist: [skeletalmage] // variation of [bonemage] [skeletalknight] // variation of [boneknight] Updated Titles (dfndata/titles/titles.dfn) with up-to-date titles for skills around Pub 15, and added titles for skills added after that. Also added "Elder" and "Legendary" titles for 110 and 120 skillpoints Updated EQUIPITEM tag in newbie.dfn (dfndata/newbie/newbie.dfn) to support an optional hue parameter (EQUIPITEM=id,hue) Updated starting equipment for new characters (dfndata/newbie/newbie.dfn), with commented out practice weapons. Uncomment to use Added item definitions for practice weapons (dfndata/items/gear/weapons/practice_weapons.dfn): practice_skinning_knife practice_hatchet practice_axe practice_mace practice_longsword practice_spear practice_bow practice_club practice_crook practice_gnarled_staff Updated mount statues DFN (dfndata/items/misc/mount-statues.dfn) and JS (js/npc/pets/*.js) files to include pet control slot related stuff Pets now inherit the karma of their owners, but revert to their original karma upon release Pets and hirelings will no longer follow the ghosts of their dead owners, but stay to guard their corpse Added optional 9th parameter for JS Function CreateDFNItem to specify a color for item created. This comes before the other optional parameters - worldNumber and instanceID (which are only used if character is NULL): CreateDFNItem( mSock, mChar, sectionName, inPack, iAmount, itemType, iColor, worldNumber, instanceID ) Added ID of Giant Beetle to various pack animal checks Pack animals will now drop any newbie/blessed items stored in their packs upon death Added new NPC properties to track pet loyalty, and exposed these as Character JS properties, and NPC DFN tags: JS Properties .maxLoyalty // Defaults to 100 .loyalty // Starts at 25 DFN Tags MAXLOYALTY=# // Defaults to 100 LOYALTY=# // Starts at 25 Updated TriggerEvent JS function to support return values (int, bool, string, object) from called script Updated various JS scripts to make use of new TriggerEvent functionality and reduce reliance on custom tags: js/item/archerybutte.js js/item/trainingdummy.js js/server/data/combatanims.js js/server/data/weapontypes.js Updated archerybutte script to use dictionary for system and text messages Updated archerybutte script to support increased range, distance penalty and dex/str bonuses when calculating score Added new UOX.INI settings under [pets and hirelings] section related to pet control and loyalty: CHECKPETCONTROLDIFFICULTY=1 // Enable/Disable pet control difficulty system PETLOYALTYGAINONSUCCESS=1 // Amount of pet loyalty gained on successful pet command use PETLOYALTYLOSSONFAILURE=3 // Amount of pet loyalty lost on failed pet command use PETLOYALTYRATE=900 // Amount of seconds between each time pet loyalty is automatically reduced by 1. Takes 25 hours to deplete completely from max Added new persistent NPC property that keeps track of the difficulty of taming and controlling a pet, and exposed it as a Character JS property: .orneriness Every time a tamed pet is released or goes wild, its "orneriness" increases, making it more difficult for other players to tame, and more difficult for anyone to control. Updated CBasePetResponse::canControlPet() function to use pet control difficulty system if enabled, which checks player's animal taming/animal lore skill vs a pet's "orneriness" to determine chance of pet accepting a given pet command On successful use of pet command, increases pet loyalty by value defined in PETLOYALTYGAINONSUCCESS ini setting On failed use of pet command, decreases pet loyalty by value defined in PETLOYALTYLOSSONFAILURE ini setting Added new Character JS Method to calculate chance of a player successfully controlling the pet: .CalculateControlChance( mChar ) // Returns value between 0 and 1000 indicating chance of success Feeding a pet will now restore its loyalty to maximum Pets will now lose loyalty on hunger checks when at maximum hunger Pets that are maximum hungry will now only have a chance to go wild if loyalty has dropped to zero Added new DFN tag for creatures.dfn - TYPE - which contains a string describing the type of creature Added secure pet trading. Players who trade pets will now see a pet transfer deed appear in a secure trade window with the name and type of creature, and upon completion of the trade the associated pet will be instantly transferred to the other player Updated resource JS scripts (js/server/resource/*) to use dictionaries for all system messages Updated skill JS scripts (js/skill/*) to use dictionaries for all system messages Updated housing JS scripts (js/server/house/*) to use dictionaries for all system messages Updated item JS scripts (js/item/*) to use dictionaries for all system messages Updated magic JS scripts (js/magic/*) to use dictionaries for all system messages Updated NPC AI JS scripts (js/npc/ai/*) to use dictionaries for all system messages Updated command JS scripts (js/commands/*) to use dictionaries for all system messages, gump tooltips, etc Updated code to use dictionaries for all system messages Fixed incorrect spelling for UOX.INI setting HIDEW(H)ILEMOUNTED and updated hiding skill (js/skill/hiding.js) to actually allow/disallow hiding while mounted based on this setting Added new Character JS Method to make it easier to make one NPC initiate combat with another: .InitiateCombat( targetChar ) // Character attempts to initiate combat with target character Updated parrying portion of combat code to be in line with Pub15/pre-AoS parrying mechanics. High AR shields now absorb more damage on a successful parry, while low AR shields have a higher chance of parrying. Shields are also now more effective against archery attacks (full absorption potential) than melee attacks (half absorption potential). Updated combat damage calculations to be in line with Pub15/pre-AoS damage calculations Adjusted default value of COMBATNPCDAMAGERATE ini setting (damage divisor when target is a player) from 2 to 1 to account for these changes. Removed dictionary.UNK, and made dictionary.ZRO the default dictionary used for all unsupported languages Added dictionary support for additional languages: Portuguese, Italian, Czech Updated default dictionaries for the following languages: English, French Added default dictionaries for the following languages: German, Spanish, Portuguese, Italian, Czech (note that translations have been provided by automatic services and will contain inaccuracies!) Added new UOX.INI setting to allow specifying a default dictionary language for server, which if set will force that language for all dictionary messages, regardless of client settings: SERVERLANGUAGE=0 // Set default server dictionary language. Supported languages: 0 - None/language used by each client, 1 - English, 2 - German, 3 - Spanish, 5 - French, 6 - Portuguese, 7 - Italian, 8 - Czech Added new function in combat.cpp - AdjustArmorClassDamage() - which adjusts the damage dealt in combat based on whether armour class (AC DFN tag or .ac JS property) of weapon and armour equipped on hit location of target match up. A weapon with armour class 1 would essentially be doubly effective against armour of armour class 1. Allows setting up things like piercing weapons being better against some armor types than mace weapons, etc. Added new UOX.INI setting under [combat] to enable/disable double damage from armour class bonuses: ARMORCLASSDAMAGEBONUS=0/1 //defaults to 0)
2021-07-28 16:02:56 +08:00
auto sEncaps = encaps.toString();
sEncaps = oldstrutil::trim( oldstrutil::removeTrailing( sEncaps, "//"));
auto encapsSections = oldstrutil::sections( sEncaps, " " );
Misc updates 06/07/2021 - Xuri Updated how UOX3 handles more, morex, morey and morez properties: DFN tags for these properties can now handle data in multiple formats. Example: MORE=1285, MORE=0 0 5 5, MORE=0x00 0x00 0x05 0x05, MORE=0x00000505 JS command 'set more/morex/morey/morez now accepts any of the above formats JS command 'get will now display both the decimal value for these properties, as well as the hex one JS command 'tweak will now display hex value for these properties in a tooltip Fixed an issue with target-based spells (like Magic Lock/Unlock, Magic Trap/Untrap, Telekinesis) that used the inverse result of a distance check to determine if players could cast such a spell at an item Fixed an issue where players could keep spawn containers open on screen to access items respawning inside without having to unlock/untrap container again after a respawn Locked containers (and spawn containers) will now show [Locked] in the item tooltip Spawn containers will now be re-trapped when new items spawn, if they were trapped originally. To trap a container: MOREZ=0x01 0x32 0x00 0x00 // 0x01 marks container as trapped, 0x32 says "deal 50 damage" when trap is set off Fixed trapped spawn containers not dealing damage when trap is set off due to magic damage function in source requiring a valid attacker (now no longer does) Updated source and scripts to use cliloc id 1050045 for custom tooltips rather than 1114778, as 1050045 is available in all client versions that support tooltips
2021-07-06 07:05:13 +08:00
if( encapsSections.size() >= 4 )
{
gPriv->SetTempVar( CITV_MOREY, 1, static_cast<UI08>( std::stoul( oldstrutil::trim( oldstrutil::removeTrailing( encapsSections[0], "//" )), nullptr, 0 )));
gPriv->SetTempVar( CITV_MOREY, 2, static_cast<UI08>( std::stoul( oldstrutil::trim( oldstrutil::removeTrailing( encapsSections[1], "//" )), nullptr, 0 )));
gPriv->SetTempVar( CITV_MOREY, 3, static_cast<UI08>( std::stoul( oldstrutil::trim( oldstrutil::removeTrailing( encapsSections[2], "//" )), nullptr, 0 )));
gPriv->SetTempVar( CITV_MOREY, 4, static_cast<UI08>( std::stoul( oldstrutil::trim( oldstrutil::removeTrailing( encapsSections[3], "//" )), nullptr, 0 )));
Misc updates 06/07/2021 - Xuri Updated how UOX3 handles more, morex, morey and morez properties: DFN tags for these properties can now handle data in multiple formats. Example: MORE=1285, MORE=0 0 5 5, MORE=0x00 0x00 0x05 0x05, MORE=0x00000505 JS command 'set more/morex/morey/morez now accepts any of the above formats JS command 'get will now display both the decimal value for these properties, as well as the hex one JS command 'tweak will now display hex value for these properties in a tooltip Fixed an issue with target-based spells (like Magic Lock/Unlock, Magic Trap/Untrap, Telekinesis) that used the inverse result of a distance check to determine if players could cast such a spell at an item Fixed an issue where players could keep spawn containers open on screen to access items respawning inside without having to unlock/untrap container again after a respawn Locked containers (and spawn containers) will now show [Locked] in the item tooltip Spawn containers will now be re-trapped when new items spawn, if they were trapped originally. To trap a container: MOREZ=0x01 0x32 0x00 0x00 // 0x01 marks container as trapped, 0x32 says "deal 50 damage" when trap is set off Fixed trapped spawn containers not dealing damage when trap is set off due to magic damage function in source requiring a valid attacker (now no longer does) Updated source and scripts to use cliloc id 1050045 for custom tooltips rather than 1114778, as 1050045 is available in all client versions that support tooltips
2021-07-06 07:05:13 +08:00
}
else
{
gPriv->SetTempVar( CITV_MOREY, encaps.toInt() );
}
break;
}
case CIP_MOREZ:
{
0.99.4v Added JS command to reload dictionaries 'reloaddictionaries Fixed a server crash related to casting of spells Fixed some issues with Line-of-Sight checks related to items under/above ground, LoS checks between different floors of buildings, etc. Updated handling of skill-training keywords to be based on language-independent keyword IDs rather than trying to match player-input text to specific skill-names Updated animal-trainer/stablemasterscript (js/npc/ai/stablemaster.js) with several changes: Fixed an issue where the same pet would be stabled in all available slots if payment was taken from player's bank account instead of their backpack Fixed an issue where stablemaster would not pause walking for a while when a player interacts with them Converted all system messages and text messages in stablemaster script to dictionary entries Added new NPC AI type to source - AI_STABLEMASTER (9) - and assigned this to animal trainers. This is used to identify this type of NPCs for the purpose of displaying relevant context menus Reworked banker AI script (js/npc/ai/banker.js) to use triggerwords from client instead of hard-defined strings, to work better with multiple languages (and work with all relevant triggerwords) Fixed a bug with banker AI script (js/npc/ai/banker.js) that prevented players from using the "withdraw" command Re-added NPC AI 8 to banker NPCs (dfndata/npc/male_vendors.dfn and female_vendors.dfn) so code can check for presence of this AI when handling context menus Removed remaining hard-coded banking functionality - all handled by script anyway Added new context menu option for NPC bankers - Open Bankbox Updated code handling of context menus to only show context menus when relevant: Open Paperdoll - Shows for all characters with a paperdoll Open Backpack - Shows for player's character, pack animals and hirelings Open Bankbox - Shows for banker NPCs (if within 8 tiles) Buy/Sell - Shows for vendor NPCs (if within 8 tiles, and if they have anything for sale/are buying anything) Added new context menu entries for pets, which can be used if player is within 12 tiles of pet: Command: Kill Command: Stop Command: Follow Command: Stay Command: Guard Add Friend Remove Friend Transfer Release Added new context menu entries for stablemasters/animal trainers: Claim All Pets Stable Pet Added new context menu entries for Escort Quest NPCs Ask Destination (if within 3 tiles) Accept Escort (if within 3 tiles) Abandon Escort Added new context menus for NPCs that can teach skills to players (limited to max 10 per NPC) Train [skillName] Added new AI script for NPC hirelings (3204=js/npc/ai/hireling.js), who can be hired to follow the player around for a limited amount of time, and function the same way as pets. In addition to the regular pet commands, these speech commands are supported: hire // The hireling will respond with the cost to hire them dismiss // Replaces the "release" command for pets; will dismiss the hireling patrol // The hireling will patrol between it's current location and a second targeted location nearby move // The hireling will try to shuffle out of the way fetch // The hireling will try to fetch a targeted item drop // The hireling will drop to the ground all loot they're currently carrying report // The hireling will report on the remaining time they're hired for Added new NPC DFN tag used by code to detect hireling NPCs for the purpose of displaying context menus: HIRELING // No additional value/data needed for tag Added new context menu entries for Hireling NPCs, in addition to the ones for regular pets: Hire // Can be used within 3 steps of the hireling, who will respond with cost to hire them Dismiss // Replaces the "release" command for pets, will dismiss the hireling Added HIRELING tag and SCRIPT=3204 to and updated stats of various NPCs that will be hireable: m_fighter, f_fighter, m_beggar, f_beggar, m_peasant, f_peasant, m_sailor, f_sailor, m_pirate, f_pirate Added new hireling NPC: m_paladin, f_paladin Added new UOX ini setting to enable/disable context menus CONTEXTMENUS=1/0 (defaults to 1) Added new Item JS Method to check if an item's ID is on a specified food list .IsOnFoodList( foodList ) // Returns true/false if item's ID is on specified foodList Added new OMNIVORE food list and assigned it to [basehuman] DFN section Added new Character JS Properties .isGuarded // Gets/Sets whether character is guarded by a pet/hireling .guarding // Gets/Sets the object (if any) being guarded by a pet/hireling Fixed multiple issues with health bars, flagging and character highlighting Added some crash protection for invalid data used with CUSTOMINTTAG and CUSTOMSTRINGTAG DFN tags for Items, NPCs and Multis Fixed an issue which prevented hard-coded checks from running when using items Added new global js object (Timer) to make the use of character timers in JS more robust, with properties matching timer names from enum in source. Properties: .TIMEOUT // Time until next attack can be done in combat .INVIS // Time until invisible character becomes visible .HUNGER // Time until character grows more hungry .THIRST // Time until character grows more thirsty .POISONTIME // Time until next tick of poison damage .POISONTEXT // Time until next message about suffering from poison .POISONWEAROFF // Time until poison wears off .SPELLTIME // Time until spell cast is completed. Can be set to 0 to interrupt .ANTISPAM // Time until next speech message can be sent (for anti spam purposes) .CRIMFLAG // Time until criminal flag runs out .MURDERRATE // Time until next murder count decay .PEACETIMER // Time until character can re-enter combat after being affected by peacemaking .FLYINGTOGGLE // Time until next time flying ability can be toggled for gargoyles .MOVETIME // Time until NPC can move again .SPATIMER // Time until next time NPC can cast a spell .SUMMONTIME // Time until a summoned NPC will vanish .EVADETIME // Time until an NPC will exit evade state .LOGOUT // Time it takes for a player char to vanish after logout Examples of use: var hungerTimer = myChar.GetTimer( Timer.HUNGER ) myChar.SetTimer( Timer.HUNGER, 15000 ) Added new Character JS Methods to add, remove and list friends of a pet/hireling: .AddFriend( playerToAdd ) // Adds player to friend list .RemoveFriend( playerToRemove ) // Removes player from friend list .GetFriendList() // Gets list of friends .ClearFriendList() // Clears list of friends Added new Character JS Method to fetch a player character's list of pets/followers .GetPetList() // Gets list of pets/followers Added new persistent NPC property to keep track of a pet's previous owners, whether those tamed the pet or had it transferred to them. Every time a pet is tamed, or is transferred to a new owner, this list is updated: GenericList< CChar * > petOwnerList Added new Character JS Method to check if a player is on a pet's owner list as a previous owner: .HasBeenOwner( mChar ) Previous owners of a pet can re-tame it with guaranteed chance of success Updated JS Method Refresh() to be usable with both items or characters, to send updated state of object to nearby players Added character tooltip [Guarded] for characters being guarded by a pet/hireling Pets/hirelings that are transferred will now immediately start following their new master instead of wandering freely Pets/hirelings can no longer be transferred between players as long as either party is flagged as a criminal Pets/hirelings can no longer be transferred to dead players Pets/hirelings can no longer be transferred to NPCs Summoned creatures can no longer be transferred to other players Summoned creatures can no longer have friends Friend lists of pets/hirelings are now cleared when the pet/hireling is transferred to another player Added new UOX.INI settings to control how many pets players can have active: MAXCONTROLSLOTS=0 // Maximum number of pet control slots available to player. Disabled if 0 MAXFOLLOWERS=5 // Maximum pets/followers a player can have active at the same time. Used if control slots are disabled MAXPETOWNERS=5 // Maximum number of different owners a pet can have over its lifetime before it becomes impossible to retame Added new NPC property and NPC DFN tag that keeps track of how many pet control slots an NPC would take up if owned by a player: UI08 controlSlots // source property CONTROLSLOTS=# // DFN tag Added new Character JS properties: .ownerCount // Get the total number of owners a pet/hireling has had, based on NPC's petOwnerList .controlSlots // Get/Set number of pet control slots an NPC will occupy .controlSlotsUsed // Get/Set the number of control slots used by a player Updated get (js/commands/targeting/get.js) and set (js/commands/targeting/set.js) commands to support getting/setting the following character properties: deaths ownerCount (read only) controlSlots controlSlotsUsed Updated NPC DFNs with default CONTROLSLOT=# tags Increased the max distance from player that onSpeech JS event will trigger from 7 to 12 Updated how "all attack" and "all follow" commands for pets are handled. Now loops through all pets owned by character and executes command for each eligible pet Fixed an issue where NPCs could follow characters in different worlds/instances than them selves Updated default max amount of items that can be sold to NPC vendors from 5 to 250 Guards can no longer train players in skills Updated equipment itemlists (dfndata/items/itemlists/itemlists.dfn) with blank entries to introduce some more variety in the type of clothes NPCs wear in general Added new NPCs to DFNs (dfndata/npc/undead.dfn) and added them to undead npclist: [skeletalmage] // variation of [bonemage] [skeletalknight] // variation of [boneknight] Updated Titles (dfndata/titles/titles.dfn) with up-to-date titles for skills around Pub 15, and added titles for skills added after that. Also added "Elder" and "Legendary" titles for 110 and 120 skillpoints Updated EQUIPITEM tag in newbie.dfn (dfndata/newbie/newbie.dfn) to support an optional hue parameter (EQUIPITEM=id,hue) Updated starting equipment for new characters (dfndata/newbie/newbie.dfn), with commented out practice weapons. Uncomment to use Added item definitions for practice weapons (dfndata/items/gear/weapons/practice_weapons.dfn): practice_skinning_knife practice_hatchet practice_axe practice_mace practice_longsword practice_spear practice_bow practice_club practice_crook practice_gnarled_staff Updated mount statues DFN (dfndata/items/misc/mount-statues.dfn) and JS (js/npc/pets/*.js) files to include pet control slot related stuff Pets now inherit the karma of their owners, but revert to their original karma upon release Pets and hirelings will no longer follow the ghosts of their dead owners, but stay to guard their corpse Added optional 9th parameter for JS Function CreateDFNItem to specify a color for item created. This comes before the other optional parameters - worldNumber and instanceID (which are only used if character is NULL): CreateDFNItem( mSock, mChar, sectionName, inPack, iAmount, itemType, iColor, worldNumber, instanceID ) Added ID of Giant Beetle to various pack animal checks Pack animals will now drop any newbie/blessed items stored in their packs upon death Added new NPC properties to track pet loyalty, and exposed these as Character JS properties, and NPC DFN tags: JS Properties .maxLoyalty // Defaults to 100 .loyalty // Starts at 25 DFN Tags MAXLOYALTY=# // Defaults to 100 LOYALTY=# // Starts at 25 Updated TriggerEvent JS function to support return values (int, bool, string, object) from called script Updated various JS scripts to make use of new TriggerEvent functionality and reduce reliance on custom tags: js/item/archerybutte.js js/item/trainingdummy.js js/server/data/combatanims.js js/server/data/weapontypes.js Updated archerybutte script to use dictionary for system and text messages Updated archerybutte script to support increased range, distance penalty and dex/str bonuses when calculating score Added new UOX.INI settings under [pets and hirelings] section related to pet control and loyalty: CHECKPETCONTROLDIFFICULTY=1 // Enable/Disable pet control difficulty system PETLOYALTYGAINONSUCCESS=1 // Amount of pet loyalty gained on successful pet command use PETLOYALTYLOSSONFAILURE=3 // Amount of pet loyalty lost on failed pet command use PETLOYALTYRATE=900 // Amount of seconds between each time pet loyalty is automatically reduced by 1. Takes 25 hours to deplete completely from max Added new persistent NPC property that keeps track of the difficulty of taming and controlling a pet, and exposed it as a Character JS property: .orneriness Every time a tamed pet is released or goes wild, its "orneriness" increases, making it more difficult for other players to tame, and more difficult for anyone to control. Updated CBasePetResponse::canControlPet() function to use pet control difficulty system if enabled, which checks player's animal taming/animal lore skill vs a pet's "orneriness" to determine chance of pet accepting a given pet command On successful use of pet command, increases pet loyalty by value defined in PETLOYALTYGAINONSUCCESS ini setting On failed use of pet command, decreases pet loyalty by value defined in PETLOYALTYLOSSONFAILURE ini setting Added new Character JS Method to calculate chance of a player successfully controlling the pet: .CalculateControlChance( mChar ) // Returns value between 0 and 1000 indicating chance of success Feeding a pet will now restore its loyalty to maximum Pets will now lose loyalty on hunger checks when at maximum hunger Pets that are maximum hungry will now only have a chance to go wild if loyalty has dropped to zero Added new DFN tag for creatures.dfn - TYPE - which contains a string describing the type of creature Added secure pet trading. Players who trade pets will now see a pet transfer deed appear in a secure trade window with the name and type of creature, and upon completion of the trade the associated pet will be instantly transferred to the other player Updated resource JS scripts (js/server/resource/*) to use dictionaries for all system messages Updated skill JS scripts (js/skill/*) to use dictionaries for all system messages Updated housing JS scripts (js/server/house/*) to use dictionaries for all system messages Updated item JS scripts (js/item/*) to use dictionaries for all system messages Updated magic JS scripts (js/magic/*) to use dictionaries for all system messages Updated NPC AI JS scripts (js/npc/ai/*) to use dictionaries for all system messages Updated command JS scripts (js/commands/*) to use dictionaries for all system messages, gump tooltips, etc Updated code to use dictionaries for all system messages Fixed incorrect spelling for UOX.INI setting HIDEW(H)ILEMOUNTED and updated hiding skill (js/skill/hiding.js) to actually allow/disallow hiding while mounted based on this setting Added new Character JS Method to make it easier to make one NPC initiate combat with another: .InitiateCombat( targetChar ) // Character attempts to initiate combat with target character Updated parrying portion of combat code to be in line with Pub15/pre-AoS parrying mechanics. High AR shields now absorb more damage on a successful parry, while low AR shields have a higher chance of parrying. Shields are also now more effective against archery attacks (full absorption potential) than melee attacks (half absorption potential). Updated combat damage calculations to be in line with Pub15/pre-AoS damage calculations Adjusted default value of COMBATNPCDAMAGERATE ini setting (damage divisor when target is a player) from 2 to 1 to account for these changes. Removed dictionary.UNK, and made dictionary.ZRO the default dictionary used for all unsupported languages Added dictionary support for additional languages: Portuguese, Italian, Czech Updated default dictionaries for the following languages: English, French Added default dictionaries for the following languages: German, Spanish, Portuguese, Italian, Czech (note that translations have been provided by automatic services and will contain inaccuracies!) Added new UOX.INI setting to allow specifying a default dictionary language for server, which if set will force that language for all dictionary messages, regardless of client settings: SERVERLANGUAGE=0 // Set default server dictionary language. Supported languages: 0 - None/language used by each client, 1 - English, 2 - German, 3 - Spanish, 5 - French, 6 - Portuguese, 7 - Italian, 8 - Czech Added new function in combat.cpp - AdjustArmorClassDamage() - which adjusts the damage dealt in combat based on whether armour class (AC DFN tag or .ac JS property) of weapon and armour equipped on hit location of target match up. A weapon with armour class 1 would essentially be doubly effective against armour of armour class 1. Allows setting up things like piercing weapons being better against some armor types than mace weapons, etc. Added new UOX.INI setting under [combat] to enable/disable double damage from armour class bonuses: ARMORCLASSDAMAGEBONUS=0/1 //defaults to 0)
2021-07-28 16:02:56 +08:00
auto sEncaps = encaps.toString();
sEncaps = oldstrutil::trim( oldstrutil::removeTrailing( sEncaps, "//" ));
auto encapsSections = oldstrutil::sections( sEncaps, " " );
Misc updates 06/07/2021 - Xuri Updated how UOX3 handles more, morex, morey and morez properties: DFN tags for these properties can now handle data in multiple formats. Example: MORE=1285, MORE=0 0 5 5, MORE=0x00 0x00 0x05 0x05, MORE=0x00000505 JS command 'set more/morex/morey/morez now accepts any of the above formats JS command 'get will now display both the decimal value for these properties, as well as the hex one JS command 'tweak will now display hex value for these properties in a tooltip Fixed an issue with target-based spells (like Magic Lock/Unlock, Magic Trap/Untrap, Telekinesis) that used the inverse result of a distance check to determine if players could cast such a spell at an item Fixed an issue where players could keep spawn containers open on screen to access items respawning inside without having to unlock/untrap container again after a respawn Locked containers (and spawn containers) will now show [Locked] in the item tooltip Spawn containers will now be re-trapped when new items spawn, if they were trapped originally. To trap a container: MOREZ=0x01 0x32 0x00 0x00 // 0x01 marks container as trapped, 0x32 says "deal 50 damage" when trap is set off Fixed trapped spawn containers not dealing damage when trap is set off due to magic damage function in source requiring a valid attacker (now no longer does) Updated source and scripts to use cliloc id 1050045 for custom tooltips rather than 1114778, as 1050045 is available in all client versions that support tooltips
2021-07-06 07:05:13 +08:00
if( encapsSections.size() >= 4 )
{
gPriv->SetTempVar( CITV_MOREZ, 1, static_cast<UI08>( std::stoul( oldstrutil::trim( oldstrutil::removeTrailing( encapsSections[0], "//" )), nullptr, 0 )));
gPriv->SetTempVar( CITV_MOREZ, 2, static_cast<UI08>( std::stoul( oldstrutil::trim( oldstrutil::removeTrailing( encapsSections[1], "//" )), nullptr, 0 )));
gPriv->SetTempVar( CITV_MOREZ, 3, static_cast<UI08>( std::stoul( oldstrutil::trim( oldstrutil::removeTrailing( encapsSections[2], "//" )), nullptr, 0 )));
gPriv->SetTempVar( CITV_MOREZ, 4, static_cast<UI08>( std::stoul( oldstrutil::trim( oldstrutil::removeTrailing( encapsSections[3], "//" )), nullptr, 0 )));
Misc updates 06/07/2021 - Xuri Updated how UOX3 handles more, morex, morey and morez properties: DFN tags for these properties can now handle data in multiple formats. Example: MORE=1285, MORE=0 0 5 5, MORE=0x00 0x00 0x05 0x05, MORE=0x00000505 JS command 'set more/morex/morey/morez now accepts any of the above formats JS command 'get will now display both the decimal value for these properties, as well as the hex one JS command 'tweak will now display hex value for these properties in a tooltip Fixed an issue with target-based spells (like Magic Lock/Unlock, Magic Trap/Untrap, Telekinesis) that used the inverse result of a distance check to determine if players could cast such a spell at an item Fixed an issue where players could keep spawn containers open on screen to access items respawning inside without having to unlock/untrap container again after a respawn Locked containers (and spawn containers) will now show [Locked] in the item tooltip Spawn containers will now be re-trapped when new items spawn, if they were trapped originally. To trap a container: MOREZ=0x01 0x32 0x00 0x00 // 0x01 marks container as trapped, 0x32 says "deal 50 damage" when trap is set off Fixed trapped spawn containers not dealing damage when trap is set off due to magic damage function in source requiring a valid attacker (now no longer does) Updated source and scripts to use cliloc id 1050045 for custom tooltips rather than 1114778, as 1050045 is available in all client versions that support tooltips
2021-07-06 07:05:13 +08:00
}
else
{
gPriv->SetTempVar( CITV_MOREZ, encaps.toInt() );
}
break;
}
case CIP_MOVABLE: gPriv->SetMovable( static_cast<SI08>( encaps.toInt() )); break;
case CIP_ATT:
gPriv->SetLoDamage( static_cast<SI16>( encaps.toInt() ));
gPriv->SetHiDamage( static_cast<SI16>( encaps.toInt() ));
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
break;
case CIP_LAYER: gPriv->SetLayer( static_cast<ItemLayers>( encaps.toInt() )); break;
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
case CIP_ITEMSINSIDE: break;
case CIP_DECAYABLE: gPriv->SetDecayable( encaps.toBool() ); break;
case CIP_DECAYTIME:
{
jsdouble newTime_double;
JS_ValueToNumber( cx, *vp, &newTime_double );
newTime = 0;
if( newTime_double != 0 )
{
newTime = BuildTimeValue( static_cast<R64>( newTime_double ));
}
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
gPriv->SetDecayTime( newTime );
break;
}
case CIP_LODAMAGE: gPriv->SetLoDamage( static_cast<SI16>( encaps.toInt() )); break;
case CIP_HIDAMAGE: gPriv->SetHiDamage( static_cast<SI16>( encaps.toInt() )); break;
case CIP_AC: gPriv->SetArmourClass( static_cast<UI08>( encaps.toInt() )); break;
case CIP_DEF: gPriv->SetResist( static_cast<UI16>( encaps.toInt() ), PHYSICAL ); break;
Rework of passive stat regeneration Updated code calculating passive health, stamina and mana regeneration for characters, based on new UOX.INI settings and bonuses from characters/items/races Added three new Character/Item/Race DFN tags to grant bonus health/stamina/mana regeneration: HEALTHREGENBONUS=# // 10 bonus points equates to 0.01 extra hp regen per second, independent of era STAMINAREGENBONUS=# // 10 bonus points equates to 0.05 extra stamina regen per second MANAREGENBONUS=# // 10 bonus point equates to 0.1 extra mana regen per second ...also available as JS Properties: .healthRegenBonus .staminaRegenBonus .manaRegenBonus Updated get/set JS commands to allow getting/setting regen bonuses for health, stamina and mana Updated races.dfn to include default +2 health regen bonus for humans, and +2 mana regen bonus for gargoyles. Added new UOX.INI settings under [Skills and Stats] section: HEALTHREGENMODE=1 // 0 = no passive health regen, 1 = default passive health regen STAMINAREGENMODE=1 // 0 = no passive stamina regen, 1 = default passive stamina regen (LBR or below), 2 = AoS or beyond, 3 = SA and beyond MANAREGENMODE=1 // 0 = no passive mana regen, 1 = default passive mana regen (LBR or below), 2 = AoS (Pub17), 3 = AoS/SE (Pub18 and beyond), 4 = ML, 5 = KR, 6 = SA and beyond HEALTHREGENCAP=# // Max cap for Health Regeneration Bonus stat per character STAMINAREGENCAP=# // Max cap for Stamina Regeneration Bonus stat per character MANAREGENCAP=# // Max cap for Mana Regeneration Bonus stat per character Added new UOX.INI section ([default race bonuses]) with the following new settings for the 3 default playable races (only used if nothing else specified in races.dfn): HUMANHEALTHREGENBONUS=0 // default health regen bonus for human race (2 from ML expansion onwards) HUMANSTAMINAREGENBONUS=0 // default stamina regen bonus for human race HUMANMANAREGENBONUS=0 // default mana regen bonus for human race ELFHEALTHREGENBONUS=0 // default health regen bonus for elf race ELFSTAMINAREGENBONUS=0 // default stamina regen bonus for elf race ELFMANAREGENBONUS=0 // default mana regen bonus for elf race GARGOYLEHEALTHREGENBONUS=0 // default health regen bonus for gargoyle race GARGOYLESTAMINAREGENBONUS=0 // default stamina regen bonus for gargoyle race GARGOYLEMANAREGENBONUS=0 // default mana regen bonus for gargoyle race (2 from SA expansion onwards) Updated UOX3 Documentation with new feature section on Stat Regeneration with details on stat regeneration rules and recommended settings per UO era Added support for Medable armors (have no effect on meditation skill and/or passive regen of mana when worn) and Mage Armors (can turn non-medable armor into medable armor) These properties are defined per armor piece using the first and second bits of the MORE property: MORE=0x1 0x0 0x0 0x0 // Medable Armor MORE=0x0 0x1 0x0 0x0 // Mage Armor The following armor types have been marked as medable by default: leather armor, leather ninja armor, leather samurai armor, leaf armor, gargish cloth armor, gargish leather armor and all hats and masks Updated JS Method .Defense() to support optional fourth and fifth parameters - excludeMedableArmor (true/false) and includeShield (true/false) Updated CalfDef function to support including shields in the calculations, and updated mana regen code to include shields when checking for equipped armor Updated Meditation skill JS script to exclude medable armor from armor check, include shields, and apply different rules for active meditation depending on mana regen mode Updated stat window to include defensive rating of shields (based on Parrying skill) and/or elemental resistances (if enabled in ini) Added a new property to CRace class, which is automatically set and incremented as UOX3 loads in races from races.dfn: raceID Added new Getters/Setters for CRace class to retrieve ID of a specific Race object Updated JS property .id for Race JS Object to return new race ID instead of iterating through list of races to compare race object and return index Reloading DFNs now also reloads Races
2025-04-20 06:05:44 +08:00
case CIP_HEALTHREGENBONUS: gPriv->SetHealthRegenBonus( static_cast<SI16>( encaps.toInt() )); break;
case CIP_STAMINAREGENBONUS: gPriv->SetStaminaRegenBonus( static_cast<SI16>( encaps.toInt() )); break;
case CIP_MANAREGENBONUS: gPriv->SetManaRegenBonus( static_cast<SI16>( encaps.toInt() )); break;
case CIP_RESISTCOLD: gPriv->SetResist( static_cast<UI16>( encaps.toInt() ), COLD ); break;
case CIP_RESISTHEAT: gPriv->SetResist( static_cast<UI16>( encaps.toInt() ), HEAT ); break;
case CIP_RESISTLIGHT: gPriv->SetResist( static_cast<UI16>( encaps.toInt() ), LIGHT ); break;
case CIP_RESISTLIGHTNING: gPriv->SetResist( static_cast<UI16>( encaps.toInt() ), LIGHTNING ); break;
case CIP_RESISTPOISON: gPriv->SetResist( static_cast<UI16>( encaps.toInt() ), POISON ); break;
case CIP_RESISTRAIN: gPriv->SetResist( static_cast<UI16>( encaps.toInt() ), RAIN ); break;
case CIP_RESISTSNOW: gPriv->SetResist( static_cast<UI16>( encaps.toInt() ), SNOW ); break;
0.99.4d Added new option in UOX.INI under [settings] section: MAPDIFFSENABLED=0/1 // If enabled, server will attempt to load diff files, and send "Enable Map-diff files" packet to client to also load these. Disabled by default. Server no longer loads map/statics diff files by default, nor does it send packet to client to request loading these files, as only client versions below 7.0.8.2 will actively load these files. Can be re-enabled with new UOX.INI setting mentioned above! Fixed incorrect ID for gargish dagger in CHandleCombat::getWeaponType() Added missing weapon entries in CHandleCombat::getWeaponType(): bladed whip, barbed whip, spiked whip, gargish talwar Fixed an issue that would show the end part of some tiledata names as garbled text instead of cutting off the text(!) at 20 characters Fixed an issue with advanced character creation template when using ClassicUO client, which sends a profession value of 255 instead of 0 when no profession template has been selected. Fixed an issue where clones of NPCs that can split in combat didn't get the NPC flag correctly set Guild titles are now removed for players who leave their guilds Enabled closing some hard-coded gump menus using right-click (howto, guild, towns, wholist, addmenu, craftmenu, info) Fixed an issue where adding base items using 'add [itemID] would sometimes get false positive hits from harditems.dfn, depending on the length of the itemID Fixed an issue where items added using 'add [itemID] would not get names applied properly from harditems.dfn Item/NPC DFN tag GET can now inherit a random parent by adding additional values separated by spaces. Syntax: GET=parent1 parent2 parent3 (etc) Fixed an issue where NPC backpacks would not have the max item capacity set properly Added new properties for CItem objects (also exposed as JS Item Properties): maxRange // max distance a ranged weapon can fire at (replaces ARCHERRANGE ini setting) baseRange // base distance throwing weapons (when implemented) can be used at Added support for new Item DFN tag that replaces global UOX.INI setting ARCHERRANGE: MAXRANGE=# // Specifies max range of ranged weapon Added support for new Item/NPC DFN tags to support randomizing elemental resistances: RESISTFIRE=#/# # // Set NPC's poison resistance; fixed or random value RESISTCOLD=#/# # // Set NPC's poison resistance; fixed or random value RESISTLIGHTNING=#/# # // Set NPC's poison resistance; fixed or random value RESISTPOISON=#/# # // Set NPC's poison resistance; fixed or random value Added support for two new DFN tags in dfndata/race/races.dfn that can be used to allow/ban lists of equipment for specific races ALLOWEQUIPLIST=# BANEQUIPLIST=# Added support for new section in dfndata/race/races.dfn - [EQUIPLIST #], which can be used to define lists of equipment that is whitelisted or banned for specific races. Fixed a bug that would report incorrect weight in tooltips for Item/NPC spawner objects ScriptSections are now reapplied for items bought by players from NPC vendors Fixed an issue where players could drop an item on the ground and other players would still see the item after it was picked up, because of a failed distance check vs old location coordinates (in pack) instead of vs current location on ground Fixed a bug with players being able to use last-target macro to target objects picked up and held by other players on their cursor Updated all references to "devinelock" to be "divinelock" instead - this includes the name of the JS Item property Fixed house commands triggering (useless) targeting cursors for players onboard boats Changed default statcap in UOX.INI from 325 to 225 Fixed a out-of-range error for players attempting to combine ore inside their own backpack Fixed various issues with distance checks and container checks when using/target objects Added optional 4th "hue" parameter to AddGump JS method Added JS Function to get total amount of accounts on server - GetAccountCount() Added JS Function to get total amount of players online - GetPlayerCount() onSwing JS Event can now trigger in scripts attached to items, not just items attached to characters Added some JS Functions to expose some hard-coded constants to JS scripts: BASEITEMSERIAL() // Base item serial INVALIDSERIAL() // Invalid serial INVALIDID() // Invalid ID INVALIDCOLOUR() // Invalid colour Fixed an issue where JS character property .colour would modify origSkin property instead of colour Fixed an issue where JS character property .guildTitle returned the name of the character instead of the guild title Character JS property .poison can now also be used to set a character's poisoned level, not just read it Exposed Item property to JS engine: .ac // armour class for item (0-128). Primarily used for setting race-restrictions for equippable items, i.e. race X cannot equip items of armour class Y. .def // defensive value of item (Physical resistance post-AoS, AR in older UO) // NOTE: The following properties don't actually do anything yet, but can still be used in custom JS scripts if desired .resistCold // Cold resistance of item 0-1000, where 1000 equals 100.0% .resistHeat // Heat/Fire resistance of item 0-1000, where 1000 equals 100.0% .resistLight // Light resistance of item 0-1000, where 1000 equals 100.0% .resistLightning // Energy/Lightning resistance of item 0-1000, where 1000 equals 100.0% .resistPoison // Poison resistance of item 0-1000, where 1000 equals 100.0% .resistRain // Rain resistance of item 0-1000, where 1000 equals 100.0% .resistSnow // Snow resistance of item 0-1000, where 1000 equals 100.0% .damageHeat // Weapon deals Heat/Fire elemental damage (true/false) .damageCold // Weapon deals Cold elemental damage (true/false) .damageLight // Weapon deals Light elemental damage (true/false) .damageLightning // Weapon deals Lightning elemental damage (true/false) .damagePoison // Weapon deals Poison elemental damage (true/false) .damageRain // Weapon deals Rain/Water elemental damage (true/false) .damageSnow // Weapon deals Snow/Ice elemental damage (true/false) Added new UOX.INI setting under [server] to enable/disable shard response to ConnectUO server polling (disabled by default) Sub-commands are no longer included when registering packets to be overloaded via RegisterPacket function, as that part was never fully implemented. Packet-hook scripts can be setup for specific packet IDs, but any sub-command checking will need to be done in the script itself JS Packet Method GetDWord() now uses JS_NewNumberValue instead of INT_TO_JSVAL to read from the socket buffer, to better handle large numbers, which could previously be returned with wrong values. JS Function CalcItemFromSer() now uses a JS_GetStringBytes() and str_value() combo instead of JSVAL_TO_INT() to read the data provided in the function argument. This allows JS scripts to provide item serials to the function directly without needing to split it into four parts first (though that still works) Fixed issue where JS properties for multis didn't always return correct values The 'set command can now be used to set the armour class of items ('set ac #) Reimplemented 'tweak command in JS engine (js/commands/targeting/tweak.js) - can be used to view and modify properties of characters, character skills, items, multis and regions (target ground) Added placeholder packet-hook script (js/server/network/0xf1_connectUoServerPoll.js) to handle responses to ConnectUO server polling. By default this script does nothing, but serves as a placeholder for drop-in replacement scripts generated specifically for each shard by the ConnectUO service. Updated some commands to support an alternate STATIC keyword (can also be ommitted) to add base items: 'add static itemID 'tile static itemID Updated some commands with support for randomization. Provided itemID will be randomized based on provided rndValue: /js/commands/targeting/add.js: 'add itemID rndValue cmdtable.cpp and targeting.cpp: 'tile itemID rndValue 'tile itemID x1 x2 y1 y2 z rndValue Updated js/commands/custom/repeatingcmds.js to support 'm delete as an alias for 'rremove Added 'props as an alias for the 'tweak command Added 'teleport as an alias for the 'tele command (js/commands/targeting/tele.js) Added 'shavehair and 'shavebeard as aliases for 'kill hair and 'kill beard (js/commands/targeting/kill.js) Added 'noinvul and 'mortal aliases for the 'invul false command (js/commands/custom/misc-cmds.js) Added 'immortal and 'invul (without parameter) as aliases for the 'invul true command Added 'bringtopack as an alias of 'movetobag command (js/commands/targeting/movetobag.js) Updated check for cancelling of target cursor in various JS scripts Minor updates to various JS scripts Fixed issue where some item definitions in dfndata/harditems/harditems.dfn and dfndata/items/building/lighting.dfn used comma instead of space as delimiter for the VALUE tag, which thus never got applied Updated all NPC definitions to let NPCs spawn facing in random directions
2021-03-22 05:59:20 +08:00
case CIP_DAMAGECOLD: gPriv->SetWeatherDamage( COLD, encaps.toBool() ); break;
case CIP_DAMAGEHEAT: gPriv->SetWeatherDamage( HEAT, encaps.toBool() ); break;
case CIP_DAMAGELIGHT: gPriv->SetWeatherDamage( LIGHT, encaps.toBool() ); break;
case CIP_DAMAGELIGHTNING: gPriv->SetWeatherDamage( LIGHTNING, encaps.toBool() ); break;
case CIP_DAMAGEPOISON: gPriv->SetWeatherDamage( POISON, encaps.toBool() ); break;
case CIP_DAMAGERAIN: gPriv->SetWeatherDamage( RAIN, encaps.toBool() ); break;
case CIP_DAMAGESNOW: gPriv->SetWeatherDamage( SNOW, encaps.toBool() ); break;
case CIP_SPEED: gPriv->SetSpeed( static_cast<UI08>( encaps.toInt() )); break;
2024-05-11 20:17:11 -05:00
case CIP_LOWERSTATREQ: gPriv->SetLowerStatReq( static_cast<SI16>( encaps.toInt() )); break;
2025-01-14 22:16:11 -06:00
case CIP_SWINGSPEEDINCREASE: gPriv->SetSwingSpeedIncrease( static_cast<SI16>( encaps.toInt() )); break;
2024-06-18 18:28:50 -05:00
case CIP_HEALTHLEECH: gPriv->SetHealthLeech( static_cast<SI16>( encaps.toInt() )); break;
case CIP_STAMINALEECH: gPriv->SetStaminaLeech( static_cast<SI16>( encaps.toInt() )); break;
case CIP_MANALEECH: gPriv->SetManaLeech( static_cast<SI16>( encaps.toInt() )); break;
2024-06-14 14:38:03 -05:00
case CIP_HITCHANCE: gPriv->SetHitChance( static_cast<SI16>( encaps.toInt() )); break;
case CIP_DEFENSECHANCE: gPriv->SetDefenseChance( static_cast<SI16>( encaps.toInt() )); break;
2025-03-08 20:29:52 -06:00
case CIP_LUCK: gPriv->SetLuck( static_cast<SI16>( encaps.toInt() )); break;
2024-06-16 18:57:27 -05:00
case CIP_HEALTHBONUS: gPriv->SetHealthBonus( static_cast<SI16>( encaps.toInt() )); break;
case CIP_STAMINABONUS: gPriv->SetStaminaBonus( static_cast<SI16>( encaps.toInt() )); break;
case CIP_MANABONUS: gPriv->SetManaBonus( static_cast<SI16>( encaps.toInt() )); break;
2024-05-11 20:15:52 -05:00
case CIP_ARTIFACTRARITY: gPriv->SetArtifactRarity( static_cast<SI16>( encaps.toInt() )); break;
2025-01-16 21:30:32 -06:00
case CIP_DURABILITYHPBONUS: gPriv->SetDurabilityHpBonus( static_cast<SI16>( encaps.toInt() )); break;
case CIP_DAMAGEINCREASE: gPriv->SetDamageIncrease( static_cast<SI16>( encaps.toInt() )); break;
case CIP_NAME2: gPriv->SetName2( encaps.toString() ); break;
case CIP_RACE: gPriv->SetRace( static_cast<RACEID>( encaps.toInt() )); break;
case CIP_MAXHP: gPriv->SetMaxHP( static_cast<SI16>( encaps.toInt() )); break;
case CIP_MAXUSES: gPriv->SetMaxUses( static_cast<UI16>( encaps.toInt() )); break;
case CIP_USESLEFT: gPriv->SetUsesLeft( static_cast<UI16>( encaps.toInt() )); break;
case CIP_RANK: gPriv->SetRank( static_cast<SI08>( encaps.toInt() )); break;
case CIP_CREATOR: gPriv->SetCreator( static_cast<SERIAL>( encaps.toInt() )); break;
case CIP_POISON: gPriv->SetPoisoned( static_cast<UI08>( encaps.toInt() )); break;
case CIP_POISONEDBY: gPriv->SetPoisonedBy( static_cast<UI32>( encaps.toInt() )); break;
0.99.6d Cleaned up an issue with last commit where wrong npclists were used in some spawn regions Made a few additional adjustments to the new spawn regions in Lost Lands/New Haven Included more changes related to poison updates that should've been in previous commit (like the complete UOX.INI support for POISONCORROSIONSYSTEM setting) Adjusted region setup for New Haven to set the individual "building" regions within as a sub-region of the main town (regions.dfn) Fixed an issue where the displayed HP of an equipped item would not update correctly Further updates to convert timers 32-bit to 64-bit. This affects and addresses some potential issues with: Character creation/NPC guild-join timestamps, NPC movement, combat timers, idle timeouts, item decay, spellcasting Added support for new JS Events that can trigger from global script, and can be used to store persistent custom entries in players' paperdoll profiles: onProfileRequest( socket, profileOwnerChar ) - Triggers when client requests data for a paperdoll profile onProfileUpdate( socket, updatedText ) - Triggers when client sends updated data from paperdoll profile Added two new helper functions in code that allows faster (but very slightly less accurate) distance checks between two points: GetApproxDist( Point3_st a, Point3_st b ) GetApproxDist( CBaseObject *a, CBaseObject *b ) Improved pathfinding for NPCs attempting to follow another character, by adopting a system of weighted variables to help the NPC determine when to recalculate the path vs when to stick with the old, combined with faster distance checks via GetApproxDist(). The end result of this is faster, smarter and more responsive NPC followers and NPC opponents in combat. The variables influencing this include: how far the target has moved from last pathfind target location, whether NPC is heading in the overall right direction or not, time since last path calculation and some small randomization to avoid edge case jitters. Updated default command levels in commands.dfn, code and scripts to support the Seer role and make space for some custom roles. These are the new defaults as listed in commands.dfn, which should not be changed as they are linked to specific enums in code. Do take note that this might invalidate command levels for existing GMs/Seers/Counselors, who might need another round of 'make gm/seer/cns from an admin: ADMIN - command level 10 GM - command level 9 SEER - command level 7 CNS - command level 4 PLAYER - command level 0 Updated how UOX3 makes use of the account-level flags 0x2000 (Seer) and 0x4000 (Counselor). If either of these flags are set on an account, all new characters created on the accounts will automatically receive the relevant command privileges. Fixed an issue with 'wholist command that prevented admin characters from seeing characters with lower privilege levels in the list (js/commands/wholist.js) Fixed an issue with hiding/GM hide that prevented admin characters from seeing hidden characters with lower privilege levels in the world UOX3 now includes the cross-platform, header-only utf8cpp library found at https://github.com/nemtrif/utfcpp and freely available under Boost Software License v1.0. The immediate use-case for this is in code right now is to better handle strings related to custom paperdoll profiles, but will also look to make more heavy use of this in future updates
2025-06-28 22:37:42 +08:00
case CIP_POISONCHARGES: gPriv->SetPoisonCharges( static_cast<UI16>( encaps.toInt() )); break;
case CIP_DIR: gPriv->SetDir( static_cast<SI16>( encaps.toInt() )); break;
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
case CIP_WIPABLE: gPriv->SetWipeable( encaps.toBool() ); break;
case CIP_BUYVALUE: gPriv->SetBuyValue( static_cast<UI32>( encaps.toInt() )); break;
case CIP_SELLVALUE: gPriv->SetSellValue( static_cast<UI32>( encaps.toInt() )); break;
case CIP_VENDORPRICE: gPriv->SetVendorPrice( static_cast<UI32>( encaps.toInt() ));break;
case CIP_RESTOCK: gPriv->SetRestock( static_cast<UI16>( encaps.toInt() )); break;
2023-11-12 18:53:43 -07:00
case CIP_GOOD: gPriv->SetGood( static_cast<UI16>( encaps.toInt() )); break;
0.99.4d Added new option in UOX.INI under [settings] section: MAPDIFFSENABLED=0/1 // If enabled, server will attempt to load diff files, and send "Enable Map-diff files" packet to client to also load these. Disabled by default. Server no longer loads map/statics diff files by default, nor does it send packet to client to request loading these files, as only client versions below 7.0.8.2 will actively load these files. Can be re-enabled with new UOX.INI setting mentioned above! Fixed incorrect ID for gargish dagger in CHandleCombat::getWeaponType() Added missing weapon entries in CHandleCombat::getWeaponType(): bladed whip, barbed whip, spiked whip, gargish talwar Fixed an issue that would show the end part of some tiledata names as garbled text instead of cutting off the text(!) at 20 characters Fixed an issue with advanced character creation template when using ClassicUO client, which sends a profession value of 255 instead of 0 when no profession template has been selected. Fixed an issue where clones of NPCs that can split in combat didn't get the NPC flag correctly set Guild titles are now removed for players who leave their guilds Enabled closing some hard-coded gump menus using right-click (howto, guild, towns, wholist, addmenu, craftmenu, info) Fixed an issue where adding base items using 'add [itemID] would sometimes get false positive hits from harditems.dfn, depending on the length of the itemID Fixed an issue where items added using 'add [itemID] would not get names applied properly from harditems.dfn Item/NPC DFN tag GET can now inherit a random parent by adding additional values separated by spaces. Syntax: GET=parent1 parent2 parent3 (etc) Fixed an issue where NPC backpacks would not have the max item capacity set properly Added new properties for CItem objects (also exposed as JS Item Properties): maxRange // max distance a ranged weapon can fire at (replaces ARCHERRANGE ini setting) baseRange // base distance throwing weapons (when implemented) can be used at Added support for new Item DFN tag that replaces global UOX.INI setting ARCHERRANGE: MAXRANGE=# // Specifies max range of ranged weapon Added support for new Item/NPC DFN tags to support randomizing elemental resistances: RESISTFIRE=#/# # // Set NPC's poison resistance; fixed or random value RESISTCOLD=#/# # // Set NPC's poison resistance; fixed or random value RESISTLIGHTNING=#/# # // Set NPC's poison resistance; fixed or random value RESISTPOISON=#/# # // Set NPC's poison resistance; fixed or random value Added support for two new DFN tags in dfndata/race/races.dfn that can be used to allow/ban lists of equipment for specific races ALLOWEQUIPLIST=# BANEQUIPLIST=# Added support for new section in dfndata/race/races.dfn - [EQUIPLIST #], which can be used to define lists of equipment that is whitelisted or banned for specific races. Fixed a bug that would report incorrect weight in tooltips for Item/NPC spawner objects ScriptSections are now reapplied for items bought by players from NPC vendors Fixed an issue where players could drop an item on the ground and other players would still see the item after it was picked up, because of a failed distance check vs old location coordinates (in pack) instead of vs current location on ground Fixed a bug with players being able to use last-target macro to target objects picked up and held by other players on their cursor Updated all references to "devinelock" to be "divinelock" instead - this includes the name of the JS Item property Fixed house commands triggering (useless) targeting cursors for players onboard boats Changed default statcap in UOX.INI from 325 to 225 Fixed a out-of-range error for players attempting to combine ore inside their own backpack Fixed various issues with distance checks and container checks when using/target objects Added optional 4th "hue" parameter to AddGump JS method Added JS Function to get total amount of accounts on server - GetAccountCount() Added JS Function to get total amount of players online - GetPlayerCount() onSwing JS Event can now trigger in scripts attached to items, not just items attached to characters Added some JS Functions to expose some hard-coded constants to JS scripts: BASEITEMSERIAL() // Base item serial INVALIDSERIAL() // Invalid serial INVALIDID() // Invalid ID INVALIDCOLOUR() // Invalid colour Fixed an issue where JS character property .colour would modify origSkin property instead of colour Fixed an issue where JS character property .guildTitle returned the name of the character instead of the guild title Character JS property .poison can now also be used to set a character's poisoned level, not just read it Exposed Item property to JS engine: .ac // armour class for item (0-128). Primarily used for setting race-restrictions for equippable items, i.e. race X cannot equip items of armour class Y. .def // defensive value of item (Physical resistance post-AoS, AR in older UO) // NOTE: The following properties don't actually do anything yet, but can still be used in custom JS scripts if desired .resistCold // Cold resistance of item 0-1000, where 1000 equals 100.0% .resistHeat // Heat/Fire resistance of item 0-1000, where 1000 equals 100.0% .resistLight // Light resistance of item 0-1000, where 1000 equals 100.0% .resistLightning // Energy/Lightning resistance of item 0-1000, where 1000 equals 100.0% .resistPoison // Poison resistance of item 0-1000, where 1000 equals 100.0% .resistRain // Rain resistance of item 0-1000, where 1000 equals 100.0% .resistSnow // Snow resistance of item 0-1000, where 1000 equals 100.0% .damageHeat // Weapon deals Heat/Fire elemental damage (true/false) .damageCold // Weapon deals Cold elemental damage (true/false) .damageLight // Weapon deals Light elemental damage (true/false) .damageLightning // Weapon deals Lightning elemental damage (true/false) .damagePoison // Weapon deals Poison elemental damage (true/false) .damageRain // Weapon deals Rain/Water elemental damage (true/false) .damageSnow // Weapon deals Snow/Ice elemental damage (true/false) Added new UOX.INI setting under [server] to enable/disable shard response to ConnectUO server polling (disabled by default) Sub-commands are no longer included when registering packets to be overloaded via RegisterPacket function, as that part was never fully implemented. Packet-hook scripts can be setup for specific packet IDs, but any sub-command checking will need to be done in the script itself JS Packet Method GetDWord() now uses JS_NewNumberValue instead of INT_TO_JSVAL to read from the socket buffer, to better handle large numbers, which could previously be returned with wrong values. JS Function CalcItemFromSer() now uses a JS_GetStringBytes() and str_value() combo instead of JSVAL_TO_INT() to read the data provided in the function argument. This allows JS scripts to provide item serials to the function directly without needing to split it into four parts first (though that still works) Fixed issue where JS properties for multis didn't always return correct values The 'set command can now be used to set the armour class of items ('set ac #) Reimplemented 'tweak command in JS engine (js/commands/targeting/tweak.js) - can be used to view and modify properties of characters, character skills, items, multis and regions (target ground) Added placeholder packet-hook script (js/server/network/0xf1_connectUoServerPoll.js) to handle responses to ConnectUO server polling. By default this script does nothing, but serves as a placeholder for drop-in replacement scripts generated specifically for each shard by the ConnectUO service. Updated some commands to support an alternate STATIC keyword (can also be ommitted) to add base items: 'add static itemID 'tile static itemID Updated some commands with support for randomization. Provided itemID will be randomized based on provided rndValue: /js/commands/targeting/add.js: 'add itemID rndValue cmdtable.cpp and targeting.cpp: 'tile itemID rndValue 'tile itemID x1 x2 y1 y2 z rndValue Updated js/commands/custom/repeatingcmds.js to support 'm delete as an alias for 'rremove Added 'props as an alias for the 'tweak command Added 'teleport as an alias for the 'tele command (js/commands/targeting/tele.js) Added 'shavehair and 'shavebeard as aliases for 'kill hair and 'kill beard (js/commands/targeting/kill.js) Added 'noinvul and 'mortal aliases for the 'invul false command (js/commands/custom/misc-cmds.js) Added 'immortal and 'invul (without parameter) as aliases for the 'invul true command Added 'bringtopack as an alias of 'movetobag command (js/commands/targeting/movetobag.js) Updated check for cancelling of target cursor in various JS scripts Minor updates to various JS scripts Fixed issue where some item definitions in dfndata/harditems/harditems.dfn and dfndata/items/building/lighting.dfn used comma instead of space as delimiter for the VALUE tag, which thus never got applied Updated all NPC definitions to let NPCs spawn facing in random directions
2021-03-22 05:59:20 +08:00
case CIP_DIVINELOCK: gPriv->SetDivineLock( encaps.toBool() ); break;
case CIP_WEIGHT: gPriv->SetWeight( static_cast<SI32>( encaps.toInt() )); break;
case CIP_WEIGHTMAX: gPriv->SetWeightMax( static_cast<SI32>( encaps.toInt() )); break;
case CIP_BASEWEIGHT: gPriv->SetBaseWeight( static_cast<SI32>( encaps.toInt() )); break;
case CIP_MAXITEMS: gPriv->SetMaxItems( static_cast<UI16>( encaps.toInt() )); break;
case CIP_STRENGTH: gPriv->SetStrength( static_cast<SI16>( encaps.toInt() )); break;
case CIP_DEXTERITY: gPriv->SetDexterity( static_cast<SI16>( encaps.toInt() )); break;
case CIP_INTELLIGENCE: gPriv->SetIntelligence( static_cast<SI16>( encaps.toInt() )); break;
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
case CIP_CORPSE: gPriv->SetCorpse( encaps.toBool() ); break;
case CIP_DESC: gPriv->SetDesc( encaps.toString() ); break;
0.99.4z+ Fixed incorrect non-combat music entry [MUSICLIST COMBAT] section of dfndata/regions/regions.dfn Added new music section to dfndata/regions/regions.dfn [MUSICLIST DEATH] // Plays music from this list for players who are in the realm of the dead Assigned different MOREZ value to each explosion potion (dfndata/item/magic/potions.dfn) to make distinguishing between them easier Updated item stacking code to disallow stacking items that have different more, morex, morey, morez, buyvalue or sellvalue Fixed issue where monsters would erroneously show context menu entries with skill training options Fixed issue where some iron ore in GM add menu was showing up and being added as a brazier instead Added baseRange and maxRange to 'tweak menu (js/command/targeting/tweak.js) Added new Item property that can be used to associate an item with a custom server event: DFN Tag: EVENT=eventName // Name of event in one word, with no spaces JS Property: .event Updated 'get, 'set, 'tweak and 'areacommand commands to support the new event property Extended 'decorate command with some additional features to support saving, loading and unloading event decorations (example: xmas, halloween, etc): 'decorate saveevent eventName // Save all items with event property matching eventName to event_[eventName].jsdata 'decorate loadevent eventName // Load all items from event_[eventName].jsdata and assign eventName to their event property 'decorate unloadevent eventName // Clear up all items associated with eventName Added some new house addons to house.dfn, and in the 'add menu, under Deeds > Houseaddon Deeds: loom (south) small forge anvil (south/east) spinning wheel (north/south/east/west) small bed 1 (south/east) small bed 2 (south/east) large bed 1 (south/east) large bed 2 (south/east) training dummy (east) training dummy (south) pickpocket dip 1 (east) pickpocket dip 2 (east) dresser (east) // Disabled, doesn't work as container after being turned into addon dresser (south) // Disabled, doesn't work as container after being turned into addon abattoir (stone pentagram) flour mill (east) flour mill (south) oven (east) oven (south) large forge (east) large forge (west) large forge (north) large forge (south) Updated some house addons (bear rugs, pentagram) to be added from top-left to bottom right, for more consistency when placing items Added a code-check when placing house-addons to see if there's space in multi to place addon at selected location, starting from coordinates of target location and checking tiles east and south of that location based on the addon's SPACEX and SPACEY settings in house.dfn Added new script (js/server/house/houseAddonUse.js) that will restore the double-click functionality of some house addons that would lose their regular functionality in the process of becoming house addons, as their item type changed. The same script also adds some extra functionality to a couple of other house addons (looms and spinning wheels), allowing players to choose between using the addons and then targeting materials like yarn or wool or using the materials and then targeting the addons Fixed an issue with the interior decorator tool that would allow using it outside one's house Updated dictionary files
2021-10-31 10:43:24 +08:00
case CIP_EVENT: gPriv->SetEvent( encaps.toString() ); break;
Thief Revamp - 0.99.6-RC5 Added script for NPC guildmasters (js/npc/ai/guildmaster.js). Only one NPC guild has been setup in the script so far (more can be easily added) - the Thieves Guild - which if joined grants players the ability to steal from other players and to buy disguise kits Added two new NPCs, which there will now spawn one of in a random location in each city in Britannia (felucca facet): m_thief_guildmaster (dfndata/npc/male_human.dfn) f_thief_guildmaster (dfndata/npc/female_Human.dfn) Added two new character properties to keep track of which NPC guild a player (or NPC) belongs to. These properties have been exposed as the following Character JS properties: .npcGuild // ID of NPC guild, as defined in script .npcGuildJoined // Timestamp for when player joined NPC guild Added script for Disguise Kits (js/item/disguisekit.js). These allow members of the Thieves Guild to disguise themselves from the prying eyes of other players. Added two new character properties: .isDisguised // true/false flag for character being disguised .origName // used to store character's original name before disguise went into effect Moved implementation of Stealing skill from code to script (js/skill/stealing.js) and revamped it completely in the process. Changes include: New features: Town rare stealing - any item marked as "special stealable" with new item property .stealable can be stolen, even if it's locked down by a GM on the ground, or inside a container When stealing from item piles, thief can potentially steal the amount of items that makes up the max weight limit for what they can steal, from those piles Chance to successfully steal is now affected by whether there are any characters (NPCs or Players) that witness the attempt. Depends on distance to character, and direction character is facing Players now become "permagrey" when successfully stealing from another player, regardless of whether it's witnessed Players now receive a "stealing" flag when stealing from another player, regardless of whether it's witnessed Stolen items cannot be removed from thief's backpack for 30 seconds following the theft of the item (AoS core shard era and above) Optional AoS feature to steal special consumable items from monsters Updated default stealing rules: Updated calculations to determine chance of success when stealing Players cannot steal while engaged in combat Players are revealed if hidden as soon as they use the stealing skill Players can no longer steal items in the secure trade window Players can no longer steal items from NPC shopkeepers Both hands must be free to steal Stealing now checks line of sight to target player/object Only members of Thieves Guild (NPC guild) can now steal from other players, unless they are guild enemies Players can no longer steal from NPC guards by default Players can no longer steal from the same NPC monster more than once Only gold and gems can be stolen from innocent players in dungeon/ll areas of Felucca, if core shard era is set to AoS or higher Players can no longer steal items held on cursor by other players Orcish masks now eplode if player steals from orcs while wearing it If core shard era is set to LBR or lower, player is marked as an aggressor if they steal from another player Guards can only be called on players that are flagged as criminals within the first 10 seconds of them being flagged Stealing script options: Allow stealing entire containers (off by default pre-AoS) Return stolen items on thief death (off by default) Temporarily make stolen items immovable in thief's backpack (on by default post-AoS) Temporarily protect traded items (on by default) Let dexterity affect chance for successful theft (off by default) Let light level affect chance for successful theft (off by default) Allow stealing from NPC Guards (off by default) Allow stealing special loot from monsters (on by default post-ml) Moved implementation of Snooping skill from code to script (js/skill/snooping.js), with some changes: Players cannot snoop pack animals from inside a house, if the animal is outside The deeper inside main backpack a container sits, the harder it becomes to snoop inside it Included an optional feature that lets targets of snooping gradually become more aware, increasing the difficulty of succeeding. This awareness fades over time. Players have a chance to stay hidden while snooping, based on their Hiding skill Karma is now lowered by snooping regardless of success or failure Added tracking system for "aggressors" in combat. A player attacking someone (regardless of flag status) will be marked as aggressor to that someone for 2 minutes Added tracking system for "permagrey" flags - these are stored on a per-target basis, so a player can be flagged visibly as permagrey to multiple other players. Persists until player dies. Player combat targets and war mode are now cleared on logout Players will now be unable to hide if within visual distance and in line of sight of their attacker or current target in combat Server leave-announcement now only happens after the logout timer has expired, instead of the exact moment the player presses the logout button Fixed an issue that could cause swimming NPCs to swim on land NPCs now have the ability to temporarily ignore unreachable targets in combat. If attacked by someone they are ignoring, they will enter evade state and try to move away from that someone. SpawnRegions now support NPCLISTS with weighted entries. Example of an NPCLIST with 75% chance of spawning some kind of orc, and 25% chance of spawning a ratman archer: [NPCLIST example] { 75|NPCLIST=allorc 25|ratman } Added 3 additional "all purpose" item properties (.more0, .more1 and .more2) and exposed those to JS engine. These work the same as more/morex/morey/morez Mark spell now stores a 4th property on recall runes - instanceID. This is stored in the rune's .more0 property. Recall and Gate spells now check the recall rune (or runebook)'s 4th location property - instanceID - to determine where the player ends up Fixed a server crash related to equipment being automatically unequipped if character is no longer strong enough to have it equipped Added new JS Function to check if any characters at specified location potentially block movement: DoesCharacterBlock( x, y, z, worldNum, instanceID ) // returns true if a character exists at given coordinate (within z +/- 4)
2023-06-20 02:21:16 +08:00
case CIP_TEMPLASTTRADED:
{
jsdouble newTime_double;
JS_ValueToNumber( cx, *vp, &newTime_double );
newTime = 0;
if( newTime_double != 0 )
{
newTime = BuildTimeValue( static_cast<R64>( newTime_double ));
}
Thief Revamp - 0.99.6-RC5 Added script for NPC guildmasters (js/npc/ai/guildmaster.js). Only one NPC guild has been setup in the script so far (more can be easily added) - the Thieves Guild - which if joined grants players the ability to steal from other players and to buy disguise kits Added two new NPCs, which there will now spawn one of in a random location in each city in Britannia (felucca facet): m_thief_guildmaster (dfndata/npc/male_human.dfn) f_thief_guildmaster (dfndata/npc/female_Human.dfn) Added two new character properties to keep track of which NPC guild a player (or NPC) belongs to. These properties have been exposed as the following Character JS properties: .npcGuild // ID of NPC guild, as defined in script .npcGuildJoined // Timestamp for when player joined NPC guild Added script for Disguise Kits (js/item/disguisekit.js). These allow members of the Thieves Guild to disguise themselves from the prying eyes of other players. Added two new character properties: .isDisguised // true/false flag for character being disguised .origName // used to store character's original name before disguise went into effect Moved implementation of Stealing skill from code to script (js/skill/stealing.js) and revamped it completely in the process. Changes include: New features: Town rare stealing - any item marked as "special stealable" with new item property .stealable can be stolen, even if it's locked down by a GM on the ground, or inside a container When stealing from item piles, thief can potentially steal the amount of items that makes up the max weight limit for what they can steal, from those piles Chance to successfully steal is now affected by whether there are any characters (NPCs or Players) that witness the attempt. Depends on distance to character, and direction character is facing Players now become "permagrey" when successfully stealing from another player, regardless of whether it's witnessed Players now receive a "stealing" flag when stealing from another player, regardless of whether it's witnessed Stolen items cannot be removed from thief's backpack for 30 seconds following the theft of the item (AoS core shard era and above) Optional AoS feature to steal special consumable items from monsters Updated default stealing rules: Updated calculations to determine chance of success when stealing Players cannot steal while engaged in combat Players are revealed if hidden as soon as they use the stealing skill Players can no longer steal items in the secure trade window Players can no longer steal items from NPC shopkeepers Both hands must be free to steal Stealing now checks line of sight to target player/object Only members of Thieves Guild (NPC guild) can now steal from other players, unless they are guild enemies Players can no longer steal from NPC guards by default Players can no longer steal from the same NPC monster more than once Only gold and gems can be stolen from innocent players in dungeon/ll areas of Felucca, if core shard era is set to AoS or higher Players can no longer steal items held on cursor by other players Orcish masks now eplode if player steals from orcs while wearing it If core shard era is set to LBR or lower, player is marked as an aggressor if they steal from another player Guards can only be called on players that are flagged as criminals within the first 10 seconds of them being flagged Stealing script options: Allow stealing entire containers (off by default pre-AoS) Return stolen items on thief death (off by default) Temporarily make stolen items immovable in thief's backpack (on by default post-AoS) Temporarily protect traded items (on by default) Let dexterity affect chance for successful theft (off by default) Let light level affect chance for successful theft (off by default) Allow stealing from NPC Guards (off by default) Allow stealing special loot from monsters (on by default post-ml) Moved implementation of Snooping skill from code to script (js/skill/snooping.js), with some changes: Players cannot snoop pack animals from inside a house, if the animal is outside The deeper inside main backpack a container sits, the harder it becomes to snoop inside it Included an optional feature that lets targets of snooping gradually become more aware, increasing the difficulty of succeeding. This awareness fades over time. Players have a chance to stay hidden while snooping, based on their Hiding skill Karma is now lowered by snooping regardless of success or failure Added tracking system for "aggressors" in combat. A player attacking someone (regardless of flag status) will be marked as aggressor to that someone for 2 minutes Added tracking system for "permagrey" flags - these are stored on a per-target basis, so a player can be flagged visibly as permagrey to multiple other players. Persists until player dies. Player combat targets and war mode are now cleared on logout Players will now be unable to hide if within visual distance and in line of sight of their attacker or current target in combat Server leave-announcement now only happens after the logout timer has expired, instead of the exact moment the player presses the logout button Fixed an issue that could cause swimming NPCs to swim on land NPCs now have the ability to temporarily ignore unreachable targets in combat. If attacked by someone they are ignoring, they will enter evade state and try to move away from that someone. SpawnRegions now support NPCLISTS with weighted entries. Example of an NPCLIST with 75% chance of spawning some kind of orc, and 25% chance of spawning a ratman archer: [NPCLIST example] { 75|NPCLIST=allorc 25|ratman } Added 3 additional "all purpose" item properties (.more0, .more1 and .more2) and exposed those to JS engine. These work the same as more/morex/morey/morez Mark spell now stores a 4th property on recall runes - instanceID. This is stored in the rune's .more0 property. Recall and Gate spells now check the recall rune (or runebook)'s 4th location property - instanceID - to determine where the player ends up Fixed a server crash related to equipment being automatically unequipped if character is no longer strong enough to have it equipped Added new JS Function to check if any characters at specified location potentially block movement: DoesCharacterBlock( x, y, z, worldNum, instanceID ) // returns true if a character exists at given coordinate (within z +/- 4)
2023-06-20 02:21:16 +08:00
gPriv->SetTempLastTraded( newTime );
break;
}
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
case CIP_TEMPTIMER:
{
jsdouble newTime_double;
JS_ValueToNumber( cx, *vp, &newTime_double );
newTime = 0;
if( newTime_double != 0 )
{
newTime = BuildTimeValue( static_cast<R64>( newTime_double ));
}
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
gPriv->SetTempTimer( newTime );
break;
}
0.99.4x Fixed an issue where the color of NPC corpse names would not always match up with the NPC's flag color Fixed a bug where the baseRange and maxRange properties of ranged weapons would not get saved to world files. These values are now saved in the format of RANGE=baseRange,maxRange Changed the way items are added to containers, to ensure that the order in which the items are displayed to the player always reflects the order in which they were added; now the most recent item added/moved in a container will always be rendered on top of older items. Made adjustments to how items are randomly added to containers; should use more of a given container gump's available area now Exposed Item property to JS engine, which contains serial of the creator of an item: .creator // contains serial of the creator of an item. If set, maker's marks will show up in the item's tooltip Fixed an issue where JS engine would lose track of script context if one script used CreateDFNItem() or SpawnNPC() functions and the new objects had events that triggered upon creation. UOX3 now restores the original script context at the tail end of these functions. Added new JS Event to allow inserting custom tooltip text for objects, which will be displayed in tooltips right after the object name. Any text returned from the event will be displayed, and the text can make use of the same HTML tags as gumps to make changes to color, font, etc. onTooltip( myObj ) // Triggers for objects right before the object's tooltip properties are sent to client Updated 'tweak and 'set commands to refresh item being modified if movable state of item changes, so the change is reflected in nearby clients Fixed an issue with NPC vendors and items bought from players not being properly removed from the vendor's "bought container" when players buy them again Ported Item Identification skill from code to JS (js/skill/itemid.js) and removed hard-coded version Implemented magic item generator in JS (js/item/magic_item.js). When this script is attached to an NPC, it has a chance to generate magic weapons, armors, wands/staffs and rings as loot on the NPC's corpse when slain. The chance of getting quality magical items increases with the fame level of the NPC in question. The types of magical items generated follows the pattern of such items as implemented in UO prior to the AoS expansion. Examples: exceedingly accurate war hammer of vanquishing substantial, accurate axe of power and Daemon's Breath silver long sword massive platemail arms of Protection metal shield of defense durable ringmail tunic of guarding All magic items have a chance to have spell effects attached (with rings/wands being guaranteed to have these), with a limited amount of charges available. For weapons, these effects activate on successful hits in combat, while for armors they activate on equip, and then periodically as long as the item is worn. Rings and wands/staffs have to be manually activated and targeted - with the exception of rings of invisibility, which activate the moment you equip them! Related scripts: js/item/magic_armor_equipeffects.js js/item/magic_weapon_accbonus.js js/item/magic_weapon_equip.js js/item/magic_weapon_spell_attack.js The magic item loot generation script has been attached to a number of different NPCs, all of which now have a chance to drop magic items as loot when defeated. A bonus magical item - the glacial staff - has also been implemented (js/item/magic_glacial_staff.js), and has a chance to drop as loot from Giant Ice Serpents! Fixed an issue with CustomTarget where the target message would not be displayed if the cursorType parameter was provided Fixed bug with 'rename command, which referenced a non-existing variable that caused a script crash Added additional object properties to 'get and 'set commands: .shouldSave // Determines if an item should be saved in worldfiles or not .baseRange // Determines the base range of a ranged weapon, less than which it becomes less effective .maxRange // Determines the max range of a ranged weapon, beyond which it cannot reach its target The feature that allows stats like Strength, Dexterity and Intelligence to provide bonuses to skill checks has been turned into a UOX.INI setting, which is disabled by default. The bonuses have also been nerfed; they will no longer contribute more to the success of a skill check than the actual skill being checked! STATSAFFECTSKILLCHECKS=0/1 // If enabled, stats can provide bonuses to skill checks based on the weighting for those stats as setup in dfndata/skills/skills.dfn Updated damage tracking code to include the type of damage that was dealt (PHYSICAl vs HEAT vs COLD, etc) Updated Character JS Method Damage() to include a new parameter that can specify the type of damage that was dealt to the character. The new parameter must always be included if other optional parameters are used. Note that updates might be required for scripts making use of this method.Updated syntax: .Damage( amount ) .Damage( amount, damageType ) .Damage( amount, damageType, attacker ) .Damage( amount, damageType, attacker, doRepsys ) Supported damageTypes: PHYSICAL = 1 LIGHT = 2 RAIN = 3 COLD = 4 HEAT = 5 LIGHTNING = 6 // magic damage POISON = 7 SNOW = 8 Updated JS Event OnDamage to include an additional parameter that describes the type of damage that was dealt. New syntax: onDamage( damaged, attacker, damageValue, damageType ) Updated JS Event OnSpellTarget to allow rejecting a spell being cast on a target by returning a value of 2 from the script Split the character priv flag for magic reflection into a temporary one (one-time magic reflection spell) and a permanent one (innate permanent reflection ability). The temporary effect is put in place by Magic Reflection spell, and is removed after a successful spell reflect. The permanent one is an innate ability of a character and is not removed even after a spell is reflected. Added new Character JS property to get/set state of a character's permanent magic reflect ability: .permanentMagicReflect // 0 = disable, 1 = enable Added special abilities/effects for the following NPCs: Acid Elementals now have a chance to damage the melee weapons of their attackers Dull Copper Elementals now explode on death Shadow Iron Elemental is immune to targeted spell damage Copper Elementals have permanent magic reflect, and reflect some physical damage back at their attacker Bronze Elementals deal passive area damage to nearby players every 5 to 10 seconds Valorite Elementals have permanent magic reflect, reflect some physical damage back at their attacker Snow/Ice Elementals deal passive area damage to nearby players every 5 to 10 seconds Lava Serpents deal passive area damage to nearby players every 5 to 10 seconds Phoenixes deal passive area damage to nearby players every 5 to 10 seconds Pixies have a chance to cast a random spell upon receiving a death blow: Bless (target) Curse (target) Explosion (target) Greater Poison (target) Greater Heal (self, prevents death) Ethereal Warriors will now resurrect dead players with positive karma Ethereal Warriors now have a chance to drain target's health, stamina or mana on hit Fire Breath special ability added to the following NPCs, with the random ability damage scaling with the NPCs current health: Hell Cat, 5 to 8 dmg at max health Fire Steed, 6 to 9 dmg at max health Hell Hounds, 8 to 11 dmg at max health Lava Lizard, 8 to 11 dmg at max health Predator Hell Cat, 9 to 14 dmg at max health Sea Serpent, 11 to 17 dmg at max health Swamp Dragon, 15 to 22 dmg at max health Armored Swamp Dragon, 15 to 22 dmg at max health Fire Gargoyle, 20 to 30 dmg at max health Deep Sea Serpent, 21 to 32 dmg at max health Serpentine Dragon, 22 to 32 dmg at max health Drake (Gray), 22 to 32 dmg at max health Drake (Red), 22 to 32 dmg at max health Nightmare, 26 to 39 dmg at max health Dark Steed, 26 to 39 dmg at max health Silver Steed, 26 to 39 dmg at max health Kraken, 39 to 59 dmg at max health Dragon (Red), 41 to 62 dmg at max health Dragon (Gray), 41 to 62 dmg at max health Shadow Wyrm, 50 to 75 dmg at max health Reptalon, 51 to 77 dmg at max health Skeletal Dragon, 52 to 77 dmg at max health Ancient Wyrm, 60 to 90 dmg at max health Update stats, skills and loot for all currently implemented NPCs Removed an ancient piece of code that prevented corpses from being generated for various elementals and blade spirits on death. This was originally put in place because these creatures had no corpses, and would replace it with a backpack instead, but these creatures now all have corpses in all client versions supported by UOX3 Updated potions script (js/item/potion.js) with updated formula for amount of hitpoints healed by healing potions, and added restrictions for using them when at full health and/or if poisoned (Dragon Slayer) Fixed a bug where creatures (and humans, if FORCENEWANIMATIONPACKET was disabled in uox.ini) would play animations with wrong frame count, causing the animations to either freeze for a few frames at the end, or get cut off a couple of frames early Implemented bonus hit chance for Archery skill, based on mention of such a bonus in Publish 5 patch notes and related UO House of Commons chat. This has been exposed as a UOX.INI setting where this bonus can be tweaked: ARCHERYHITBONUS=10 // Bonus hit chance for Archery skill added to regular hit chance in combat. Defaults to 10% Implemented optional extra delay between moving and being able to shoot with ranged weapons in combat (in addition to whatever delay is there due to speed of the ranged weapon). This is exposed as a UOX.INI setting: ARCHERYSHOOTDELAY=0.5 // Minimum delay in seconds from a player stops moving until they can start to fire their ranged weapon. Defaults to 0.5s Fixed a bug where players who never entered combat mode could fire ranged weapons while moving Updated Add-menu with some improvements for usability: Menu now directly on the Objects (previously "Shard") tab for quicker access, with a small welcome text and quick-link button for UOX3 docs Settings tab contains some (persistent, will be saved with character) options for how the Add-menu behaves, along with a few quick-access buttons to some useful commands. Available options: Option to add chosen item at specific location instead of in GM's backpack Option to add chosen item repeatedly until cancelled Option to automatically reopen Add-menu on last menu that was open when a selection is made Option to force decayable state of all added items to either off (doesn't decay), on (decays) or nothing (use item default) Option to force movable state of all added items to either off (not movable), on (movable) or nothing (use item default) Added a Home button at the bottom of the menu, that takes the user back to the front page of the Add-menu regardless of which menu page they're on Updated Character/Socket JS Method SysMessage() with an optional parameter to specify the color used to display the system message. Updated syntax: .SysMessage( "Text" ) // Display "Text" to user as a system message with default system message color from ini .SysMessage( "Text %s %s", txtArg1, txtArg2 ) // Display "Text" to player with string arguments injected into text .SysMessage( txtColor, "Text" ) // Display "Text" to user with a specified color .SysMessage( txtColor, "Text %s %s", txtArg1, txtArg2 ) // Combination of text color, text and string arguments Fixed a bug where hair/beard items could show up inside corpses Fixed a bug where items could sometimes vanish (visually) from containers when bouncing back because player was not able to pick them up Fixed a bug where players would be unable to pick up a freely movable item from a locked down container Updated handling of item bouncing on pickup to use UOX3 dictionary messages instead of hard-coded client messages Added support for new Dictionary language: dictionary.POL - Polish (SERVERLANGUAGE=8 in uox.ini, or client language 83 if SERVERLANGUAGE is set to 0) Added taming restrictions for Unicorn, Ki-Rin and Cu Sidhe (js/skill/taming.js) Added modification of some creatures stats after they've been tamed (js/skill/taming.js) Added restrictions for who can ride certain creatures (Unicorn, Ki-Rin, Cu Sidhe) Updated words of power for Meteor Swarm spell to follow the same logic as other spells using Kal (Summon): Kal Des Flam Ylem Added new Item/Character JS Methods to get/set temporary custom tags which don't persist across worldsaves (or across reconnects, for players): .GetTempTag( "tagName" ) .SetTempTag( "tagName", tagValue ) When applying HPMAX, STAMINAMAX AND MANAMAX DFN tags to new NPCs, their current HP, STAMINA and MANA properties will now be automatically updated to match Fixed a server crash caused by empty speech messages sent from certain clients Fixed a bug that prevented teleport locations in Felucca/Trammel from working properly Updated calculations in code for duration and damage of existing poison strengths (1 - Lesser, 2 - Normal, 3 - Greater, 4 - Deadly) to match with ~Publish 15 (LBR/pre-AoS), and added another poison strength for monster usage (5 - Lethal) The strength of the Poison and Poison Field spells is now based on the average of the caster's Magery and Poisoning skills, the distance from the target (Poison spell only) and the target's Resisting Spells skill. If caster is further away than 2 tiles from target, the poison strength always equals Lesser Poison, otherwise the following rules apply: If caster's combined skill is higher than 100.0, poison strength equals Greater Poison, with 5% chance of Deadly Poison (if Poison spell) or Deadly Poison (if Poison Field spell) If caster's combined skill is higher than 70.2, poison strength equals Greater Poison If caster's combined skill is higher than 30.2, poison strength equals Normal Poison If caster's combined skill is 30.2 or lower, poison strength equals Lesser Poison If target resists spell, poison strength is reduced by 1 level, unless it's already at the lowest level Fixed an issue that would would let players move faster than they should have been allowed to Fixed misc issues with Party System: Mana and Stamina should now update for Party Members when added to the party, when going in/out of range and when their stats update while in range Players who get disconnected or relog should now find themselves back in the same party they were in previously Added system messages to inform party members about updates to their party, and to let invited players know they've successfully joined a party (or rejoined, if relogging) World saves now operate on the principle of only saving changes done since the last world save. Combined with the fact that NPCs in UOX3 are only active if there are players in the same/neighbouring map regions, shard owners may expect to see a decrease in world save times ranging from ~11% to ~99%, depending on how active and how spread out their player base is. If no changes have taken place since last save, saves are virtually instantaneous!
2021-09-20 21:35:17 +08:00
case CIP_SHOULDSAVE: gPriv->ShouldSave( encaps.toBool() ); break;
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
case CIP_ISNEWBIE: gPriv->SetNewbie( encaps.toBool() ); break;
case CIP_ISDISPELLABLE: gPriv->SetDispellable( encaps.toBool() ); break;
case CIP_MADEWITH: gPriv->SetMadeWith( static_cast<SI08>( encaps.toInt() )); break;
case CIP_ENTRYMADEFROM: gPriv->EntryMadeFrom( static_cast<UI16>( encaps.toInt() )); break;
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
case CIP_ISPILEABLE: gPriv->SetPileable( encaps.toBool() ); break;
UOX3 0.99.5b-6 Increased world load speed by almost 20% by reducing how often loading progress is written to the console Increased world save speed by almost 50% through the use of binary mode and buffer tweaks for ofstream combined with a cached newline char and std::to_string instead of static_cast Fixed a server crash involving killing NPCs of a specific spawn region using the 'spawnkill # command Fixed a server crash involving moving items from decaying corpses to the ground Fixed a server crash involving carving up human corpses Fixed a server crash related to AreaCharacterFunction JS function, which could trigger for any script that potentially kills any NPC this function iterates over (like explosion potions) Fixed a server crash related to GMs attempting to add items from add-menu while having no backpack Fixed a client crash issue caused by attempting to sell house deeds back to architect NPCs Fixed an issue where players would get incorrect amounts of gold for selling house deeds back to architect NPCs Fixed an issue with characters dying onboard boats which prevented players from packing up the boats later Added new item property in code (via bools bitset) that can be used to enable/disable maker's mark on crafted items. This property can be set to true for items crafted at exceptional quality by GM craftsmen Exposed the new item property to JS engine: .isMarkedByMaker // If true, maker's mark will be displayed Updated default item tooltip to display " of exceptional quality" for items crafted with exceptional quality Updated default item tooltip to display "[Crafted] by [Crafter's Name]" for exceptional quality items crafted by GM craftsmen. The [Crafted] text comes from the MADEWORD defined in dfndata/skills/skills.dfn for the primary skill used to craft the item Updated old-school single-click names for items (when AoS bit is disabled in client/server features) to display exceptional status and/or maker's mark for appropriate items Fixed an issue with the display of titles for NPCs that used dictionary lookups for their title Added new UOX.INI settings under the [settings] section: DISPLAYMAKERSMARK=1/0 // Controls if maker's marks on crafted items are shown on a global level SHOWNPCTITLESOVERHEAD=1/0 // Controls whether NPC titles are shown over their heads SHOWINVULNERABLETAGOVERHEAD=0/1 // Controls whether invulnerable tags are shown overhead GLOBALRESTOCKMULTIPLIER=1.0 // Global multiplier applied to RESTOCK property of items when loaded from DFNs Added new UOX.INI settings under the [combat] section: PETCOMBATTRAINING=1/0 // Controls whether pets can gain skills/stats from combat HIRELINGCOMBATTRAINING=1/0 // Controls whether hirelings can gain skills/stats from combat NPCCOMBATTRAINING=0/1 // Controls whether NPCs in general can gain skills/stats from combat Fixed an issue where a player meeting the exact minimum requirements for crafting an item would always fail Fixed a bug with teleporting off boats to valid nearby locations when double-clicking boat planks while standing on it Updated behaviour of planks on boats: Boat key can unlock plank, but won't automatically open it Boat key used on an open, unlocked plank will lock and automatically close the plank Boat key used on an open, locked plank will unlock the plank and leave it open Player using an unlocked plank now opens it Player using an open plank will disembark (if onboard) or embark (if not) the boat Player can always open a locked plank if they're on the boat, even with no key, to allow disembarking the boat. Planks that are open, but locked cannot be accessed from outside the boat, and will close automatically after five of seconds Updated behaviour of Magic Lock/Unlock spells: Magic Lock cannot be used on objects inside a multi Magic Lock applies difficulty to lock based on caster's Magery skill Magic Lock effect will last between 7 to 50 seconds (depending on caster's Magery skill) Any object that can be locked via Magic Lock spell can also be unlocked via Magic Unlock spell, if caster has high enough Magery skill Fixed a bug where certain JS Functions, Methods and Properties would occasionally pass incorrect values to scripts that called upon them. Scripts that rely on the GetCurrentClock() Function, the .GetTimer() Method, .decayTime, .logTime, .oreTime and .fishTime Properties might need to be updated to account for the fix, which causes larger values to be passed in than before. Fixed a bug related to GetCurrentClock() that caused decay and respawning of dungeon chests from working properly Fixed a bug related to GetCurrentClock() and .logTime/.fishTime that prevented consumption and regeneration of log/fish resources from working properly Added a new JS Function: GetStartTime() // Returns a timestamp for when server started up Fixed a bug related to GetCurrentClock() where server uptime stats in help menu was showing up incorrectly Fixed a bug related to GetCurrentClock() and purging of registrations of visitors in public houses so their visits can be counted again later Fixed a bug related to GetCurrentClock() that caused monster speech to not work properly Fixed a Z-related issue that sometimes prevented players from fishing when standing on the shoreline next to the sea Fixed an issue with Animal Lore skill that would always return a pet's loyalty level as "Wild" Increased max range pets can be from their owner in order to still be included in moongate/teleporter travel from 12 to 24 tiles Fixed an issue where the alchemy bonus damage for explosion potions was off by an order of magnitude Fixed an issue where food IDs from foodlists referenced by other foodlists was not detected as valid food for tamed pets or NPCs Fixed an issue where Alchemy crafting skill did not properly check for the existence of the crafting tool before proceeding with the crafting process Fixed an issue that prevented the Teleport spell from working as intended Fixed an issue where players would still get 1 gold even if STARTGOLD in uox.ini was set to 0 Fixed an issue with mount restrictions script that prevented players from mounting Unicorns, Ki-rins and Cu Sidhes Fixed an issue where aggressive creatures wouldn't stop attacking player after being tamed (js/skill/taming.js) Added a system message to inform the player when they've dropped out of stealth due to taking too many steps Fixed an issue where hunger level of NPCs instantly dropped upon spawning because hunger timer was not active yet Fixed a bug where character corpses would appear with a [unidentified] tag attached Fixed an issue where the [unidentified] tag did not show up for unidentified magic items Added ANIMAL tag to a small bunch of creature definitions (dfndata/creatures/creatures.dfn) Fixed an issue with Bowcraft skill where player could not gain enough skill from crafting bows to reach min requirement for crossbows, and similiarly could not reach min requirement for heavy crossbows from crossbows Updated default value of MURDERDECAYTIMER INI setting from 60 seconds to 28800 seconds (8 hours), to match the amount of time it would take for one (short term) murder count to decay on LBR-era OSI shards.
2022-08-25 02:13:00 +08:00
case CIP_ISMARKEDBYMAKER: gPriv->SetMakersMark( encaps.toBool() ); break;
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
case CIP_ISDYEABLE: gPriv->SetDye( encaps.toBool() ); break;
First iteration of support for damageable items/multis Removed RemoveFromSight() from CItem::Update() in cItem.cpp, to address flickering issues with animated items, and for smoother updates of items on boats when sailing. Added new flag in CBaseObject - damageable - which determines if an Item or Multi should be considered a damageable object. Added new DFN tag for Items and Multis to mark objects as damageable objects DAMAGEABLE=0/1 // If enabled, allows client to display healthbar for object, using object's hp/maxhp values as basis. Note that any changes to a damageable object's health will not be reflected in the client until a stat update has been sent. Added new JS Property for Items and Multis and Characters to get/set an object's damageable flag .isDamageable // 1 or 0 Added new JS Method for Items, Multis and Characters to force an update of the object's health bar to nearby players: .UpdateStats( statType ) // statType can be 0 (Health, only one that works for items), 1 (Mana) or 2 (Stamina) Updated DFN entries for training dummies (dfndata/items/houseaddons/house_addons.dfn) to include DAMAGEABLE=1 and HP=100 tags, and also updated script for training dummies (js/item/trainingdummy.js) with some extra features for dummies marked as damageable: Show damage numbers over the training dummy when hit Update health of training dummy based on damage received when hit Restore health of training dummy to max after 4 seconds of inactivity Updated 'fullstats and 'heal commands (js/commands/targeting/stats.js) to support restoring the health of a damageable object Updated 'get (js/commands/targeting/get.js) and 'set (js/commands/targeting/set.js) commands to support getting and setting the damageable flag on objects Updated updateStats() in uox3.cpp to work with CBaseObject instead of CChar Updated statwindow() in CSocket.cpp to work with CBaseObject instead of CChar Updated CPUpdateStat in CPacketSend.cpp to work with CBaseObject instead of CChar, to support sending packet 0xA1 to client for Items/Multis Updated CPStatWindow in CPacketSend.cpp to work with CBaseObject instead of CChar, to support sending packet 0x11 to client for Items/Multis Fixed an issue with outgoing packet 0x11 where a character's current HP might sometimes incorrectly be displayed as zero Updated CPNewObjectInfo in CPacketSend.cpp to send object information packet 0xF3 to client with datatype set to 0x03 for Items/Multis marked as damageable objects, to enable the client's ability to display health-bars for these items. Fixed an issue with JS Method for Items - .Refresh() - which previously did nothing, but now instead sends an update of item to all sockets in range
2021-06-03 06:14:56 +08:00
case CIP_ISDAMAGEABLE: gPriv->SetDamageable( encaps.toBool() ); break;
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
case CIP_ISWIPEABLE: gPriv->SetWipeable( encaps.toBool() ); break;
case CIP_ISGUARDED: gPriv->SetGuarded( encaps.toBool() ); break;
case CIP_ISDOOROPEN: gPriv->SetDoorOpen( encaps.toBool() ); break;
case CIP_CARVESECTION: gPriv->SetCarve( encaps.toInt() ); break;
case CIP_AMMOID: gPriv->SetAmmoId( static_cast<UI16>( encaps.toInt() )); break;
case CIP_AMMOHUE: gPriv->SetAmmoHue( static_cast<UI16>( encaps.toInt() )); break;
case CIP_AMMOFX: gPriv->SetAmmoFX( static_cast<UI16>( encaps.toInt() )); break;
case CIP_AMMOFXHUE: gPriv->SetAmmoFXHue( static_cast<UI16>( encaps.toInt() )); break;
case CIP_AMMOFXRENDER: gPriv->SetAmmoFXRender( static_cast<UI16>( encaps.toInt() )); break;
case CIP_MAXRANGE: gPriv->SetMaxRange( static_cast<UI08>( encaps.toInt() )); break;
case CIP_BASERANGE: gPriv->SetBaseRange( static_cast<UI08>( encaps.toInt() )); break;
case CIP_REGION: gPriv->SetRegion( static_cast<UI16>( encaps.toInt() )); break;
UOX3 0.99.6-RC3 Updated Item DFNs with ORIGIN and SECTIONID tags for relevant items Added JS Function to make comparing eras (based on object origin or server settings) easier: EraStringToNum( eraString ) // Takes an era string (uo, t2a, uor, td, lbr, aos, etc) and returns an int Updated some JS scripts to use EraStringToNum() for era comparisons (potionkeg.js) Default CORESHARDERA setting is now LBR Removed PUB15 as a separate "era" - it's identical to late stage LBR anyway: Removed support for GETPUB15 tag Added support for GETUO tag for items/NPCs: GETUO=<sectionID> // Inherit DFN section if core shard era is Ultima Online (original release, before T2A) Rewrote portions of MsgBoardQuestEscortCreate() function in msgboard.cpp to ensure only escort regions within same world as NPC can be selected as destinations Increased maximum number of possible escort regions that can exist from 255 to 65535 Added region definitions for all shrines in Britannia (Fel & Trammel), and marked them as valid destinations for NPC escorts (uox3/regions/regions.dfn) Moved bankers from vendor to human DFN files, and made them inherit basehuman instead of basevendor - since they are not vendors To address an issue with escorted NPCs not timing out and vanishing if they are left in a "dormant" area of the world with no player activity, the NPCs are marked as "always awake" the moment they arrive at their destination. Note that the uox.ini setting ALLOWAWAKENPCS needs to be enabled for this to work. Fixed an issue where spawnsection of spawners did not show up correctly in tweak menu Fixed an issue where the generic Orc AI script didn't have a return true at end of onDamage() event, which prevented all orcs from taking damage in combat (js/npc/ai/monster/orc.js) Moved Anatomy skill-check in healing script (js/skill/healing.js) from onCallback1() function to onTimer() to prevent the skill-check from being spammable Added mount ID for Frost Mite in creatures.dfn, allowing it to be used as mount Exposed the following character properties to JS engine, which can be used to view/adjust the permanent hair/beard options for a character: .hairStyle .hairColour .beardStyle .beardColour Updated 'kill hair, 'shavehair, 'shavebeard and 'remove commands to clear permanent hair/beard colour and style properties in addition to removing the item itself Added a GM override to let GMs place as many houses as they want (js/server/house/houseDeed.js) Fixed an issue where attempting to sell items to NPC shopkeepers could result in client crashing Added a new JS Event: onMultiLogout( iMulti, cPlayer ) // Handles players logging out while inside multis Updated house script (js/server/house/house.js) with onMultiLogout event, which allows owners (always) and co-owners/friends/guests (if option enabled in uox.ini) to safely log out inside the house (without getting booted). Added a "keyless" option for interacting with locked doors (js/item/doors.js) of player-owned houses, which lets owners/co-owners/friends/guests of a house use locked doors in the house without requiring a key in their backpack, if the options for that are enabled in UOX.INI. Enabled for owners/co-owners and friends by default (but not for guests) Note that if option to safely log out is enabled, but keyless option is NOT enabled, then the server will check if the player has a key to the house in their backpack, and eject them from the house upon logging out if not. This is to make sure players don't get stuck inside a house they can't get out of because they lack the rights to open doors etc. Added new UOX.INI options, under the [houses] section: SAFECOOWNERLOGOUT=1 // Allow co-owners to safely and instantly log out inside house SAFEFRIENDLOGOUT=1 // Allow friends to safely and instantly log out inside house SAFEGUESTLOGOUT=1 // Allow guests to safely and instantly log out inside house KEYLESSOWNERACCESS=1 // Allow owner of house to use locked doors in house without key in pack KEYLESSCOOWNERACCESS=1 // Allow co-owners of house to use locked doors in house without key in pack KEYLESSFRIENDACCESS=1 // Allow friends of house to use locked doors in house without key in pack KEYLESSGUESTACCESS=0 // Allow guests of house to use locked doors in house without key in pack Fixed NOHAIR tag from races.dfn not being loaded correctly
2023-03-04 22:50:55 +08:00
case CIP_ORIGIN: gPriv->SetOrigin( cwmWorldState->ServerData()->EraStringToEnum( encaps.toString() )); break;
0.99.4d Added new option in UOX.INI under [settings] section: MAPDIFFSENABLED=0/1 // If enabled, server will attempt to load diff files, and send "Enable Map-diff files" packet to client to also load these. Disabled by default. Server no longer loads map/statics diff files by default, nor does it send packet to client to request loading these files, as only client versions below 7.0.8.2 will actively load these files. Can be re-enabled with new UOX.INI setting mentioned above! Fixed incorrect ID for gargish dagger in CHandleCombat::getWeaponType() Added missing weapon entries in CHandleCombat::getWeaponType(): bladed whip, barbed whip, spiked whip, gargish talwar Fixed an issue that would show the end part of some tiledata names as garbled text instead of cutting off the text(!) at 20 characters Fixed an issue with advanced character creation template when using ClassicUO client, which sends a profession value of 255 instead of 0 when no profession template has been selected. Fixed an issue where clones of NPCs that can split in combat didn't get the NPC flag correctly set Guild titles are now removed for players who leave their guilds Enabled closing some hard-coded gump menus using right-click (howto, guild, towns, wholist, addmenu, craftmenu, info) Fixed an issue where adding base items using 'add [itemID] would sometimes get false positive hits from harditems.dfn, depending on the length of the itemID Fixed an issue where items added using 'add [itemID] would not get names applied properly from harditems.dfn Item/NPC DFN tag GET can now inherit a random parent by adding additional values separated by spaces. Syntax: GET=parent1 parent2 parent3 (etc) Fixed an issue where NPC backpacks would not have the max item capacity set properly Added new properties for CItem objects (also exposed as JS Item Properties): maxRange // max distance a ranged weapon can fire at (replaces ARCHERRANGE ini setting) baseRange // base distance throwing weapons (when implemented) can be used at Added support for new Item DFN tag that replaces global UOX.INI setting ARCHERRANGE: MAXRANGE=# // Specifies max range of ranged weapon Added support for new Item/NPC DFN tags to support randomizing elemental resistances: RESISTFIRE=#/# # // Set NPC's poison resistance; fixed or random value RESISTCOLD=#/# # // Set NPC's poison resistance; fixed or random value RESISTLIGHTNING=#/# # // Set NPC's poison resistance; fixed or random value RESISTPOISON=#/# # // Set NPC's poison resistance; fixed or random value Added support for two new DFN tags in dfndata/race/races.dfn that can be used to allow/ban lists of equipment for specific races ALLOWEQUIPLIST=# BANEQUIPLIST=# Added support for new section in dfndata/race/races.dfn - [EQUIPLIST #], which can be used to define lists of equipment that is whitelisted or banned for specific races. Fixed a bug that would report incorrect weight in tooltips for Item/NPC spawner objects ScriptSections are now reapplied for items bought by players from NPC vendors Fixed an issue where players could drop an item on the ground and other players would still see the item after it was picked up, because of a failed distance check vs old location coordinates (in pack) instead of vs current location on ground Fixed a bug with players being able to use last-target macro to target objects picked up and held by other players on their cursor Updated all references to "devinelock" to be "divinelock" instead - this includes the name of the JS Item property Fixed house commands triggering (useless) targeting cursors for players onboard boats Changed default statcap in UOX.INI from 325 to 225 Fixed a out-of-range error for players attempting to combine ore inside their own backpack Fixed various issues with distance checks and container checks when using/target objects Added optional 4th "hue" parameter to AddGump JS method Added JS Function to get total amount of accounts on server - GetAccountCount() Added JS Function to get total amount of players online - GetPlayerCount() onSwing JS Event can now trigger in scripts attached to items, not just items attached to characters Added some JS Functions to expose some hard-coded constants to JS scripts: BASEITEMSERIAL() // Base item serial INVALIDSERIAL() // Invalid serial INVALIDID() // Invalid ID INVALIDCOLOUR() // Invalid colour Fixed an issue where JS character property .colour would modify origSkin property instead of colour Fixed an issue where JS character property .guildTitle returned the name of the character instead of the guild title Character JS property .poison can now also be used to set a character's poisoned level, not just read it Exposed Item property to JS engine: .ac // armour class for item (0-128). Primarily used for setting race-restrictions for equippable items, i.e. race X cannot equip items of armour class Y. .def // defensive value of item (Physical resistance post-AoS, AR in older UO) // NOTE: The following properties don't actually do anything yet, but can still be used in custom JS scripts if desired .resistCold // Cold resistance of item 0-1000, where 1000 equals 100.0% .resistHeat // Heat/Fire resistance of item 0-1000, where 1000 equals 100.0% .resistLight // Light resistance of item 0-1000, where 1000 equals 100.0% .resistLightning // Energy/Lightning resistance of item 0-1000, where 1000 equals 100.0% .resistPoison // Poison resistance of item 0-1000, where 1000 equals 100.0% .resistRain // Rain resistance of item 0-1000, where 1000 equals 100.0% .resistSnow // Snow resistance of item 0-1000, where 1000 equals 100.0% .damageHeat // Weapon deals Heat/Fire elemental damage (true/false) .damageCold // Weapon deals Cold elemental damage (true/false) .damageLight // Weapon deals Light elemental damage (true/false) .damageLightning // Weapon deals Lightning elemental damage (true/false) .damagePoison // Weapon deals Poison elemental damage (true/false) .damageRain // Weapon deals Rain/Water elemental damage (true/false) .damageSnow // Weapon deals Snow/Ice elemental damage (true/false) Added new UOX.INI setting under [server] to enable/disable shard response to ConnectUO server polling (disabled by default) Sub-commands are no longer included when registering packets to be overloaded via RegisterPacket function, as that part was never fully implemented. Packet-hook scripts can be setup for specific packet IDs, but any sub-command checking will need to be done in the script itself JS Packet Method GetDWord() now uses JS_NewNumberValue instead of INT_TO_JSVAL to read from the socket buffer, to better handle large numbers, which could previously be returned with wrong values. JS Function CalcItemFromSer() now uses a JS_GetStringBytes() and str_value() combo instead of JSVAL_TO_INT() to read the data provided in the function argument. This allows JS scripts to provide item serials to the function directly without needing to split it into four parts first (though that still works) Fixed issue where JS properties for multis didn't always return correct values The 'set command can now be used to set the armour class of items ('set ac #) Reimplemented 'tweak command in JS engine (js/commands/targeting/tweak.js) - can be used to view and modify properties of characters, character skills, items, multis and regions (target ground) Added placeholder packet-hook script (js/server/network/0xf1_connectUoServerPoll.js) to handle responses to ConnectUO server polling. By default this script does nothing, but serves as a placeholder for drop-in replacement scripts generated specifically for each shard by the ConnectUO service. Updated some commands to support an alternate STATIC keyword (can also be ommitted) to add base items: 'add static itemID 'tile static itemID Updated some commands with support for randomization. Provided itemID will be randomized based on provided rndValue: /js/commands/targeting/add.js: 'add itemID rndValue cmdtable.cpp and targeting.cpp: 'tile itemID rndValue 'tile itemID x1 x2 y1 y2 z rndValue Updated js/commands/custom/repeatingcmds.js to support 'm delete as an alias for 'rremove Added 'props as an alias for the 'tweak command Added 'teleport as an alias for the 'tele command (js/commands/targeting/tele.js) Added 'shavehair and 'shavebeard as aliases for 'kill hair and 'kill beard (js/commands/targeting/kill.js) Added 'noinvul and 'mortal aliases for the 'invul false command (js/commands/custom/misc-cmds.js) Added 'immortal and 'invul (without parameter) as aliases for the 'invul true command Added 'bringtopack as an alias of 'movetobag command (js/commands/targeting/movetobag.js) Updated check for cancelling of target cursor in various JS scripts Minor updates to various JS scripts Fixed issue where some item definitions in dfndata/harditems/harditems.dfn and dfndata/items/building/lighting.dfn used comma instead of space as delimiter for the VALUE tag, which thus never got applied Updated all NPC definitions to let NPCs spawn facing in random directions
2021-03-22 05:59:20 +08:00
case CIP_ISITEMHELD: gPriv->SetHeldOnCursor( encaps.toBool() ); break;
Thief Revamp - 0.99.6-RC5 Added script for NPC guildmasters (js/npc/ai/guildmaster.js). Only one NPC guild has been setup in the script so far (more can be easily added) - the Thieves Guild - which if joined grants players the ability to steal from other players and to buy disguise kits Added two new NPCs, which there will now spawn one of in a random location in each city in Britannia (felucca facet): m_thief_guildmaster (dfndata/npc/male_human.dfn) f_thief_guildmaster (dfndata/npc/female_Human.dfn) Added two new character properties to keep track of which NPC guild a player (or NPC) belongs to. These properties have been exposed as the following Character JS properties: .npcGuild // ID of NPC guild, as defined in script .npcGuildJoined // Timestamp for when player joined NPC guild Added script for Disguise Kits (js/item/disguisekit.js). These allow members of the Thieves Guild to disguise themselves from the prying eyes of other players. Added two new character properties: .isDisguised // true/false flag for character being disguised .origName // used to store character's original name before disguise went into effect Moved implementation of Stealing skill from code to script (js/skill/stealing.js) and revamped it completely in the process. Changes include: New features: Town rare stealing - any item marked as "special stealable" with new item property .stealable can be stolen, even if it's locked down by a GM on the ground, or inside a container When stealing from item piles, thief can potentially steal the amount of items that makes up the max weight limit for what they can steal, from those piles Chance to successfully steal is now affected by whether there are any characters (NPCs or Players) that witness the attempt. Depends on distance to character, and direction character is facing Players now become "permagrey" when successfully stealing from another player, regardless of whether it's witnessed Players now receive a "stealing" flag when stealing from another player, regardless of whether it's witnessed Stolen items cannot be removed from thief's backpack for 30 seconds following the theft of the item (AoS core shard era and above) Optional AoS feature to steal special consumable items from monsters Updated default stealing rules: Updated calculations to determine chance of success when stealing Players cannot steal while engaged in combat Players are revealed if hidden as soon as they use the stealing skill Players can no longer steal items in the secure trade window Players can no longer steal items from NPC shopkeepers Both hands must be free to steal Stealing now checks line of sight to target player/object Only members of Thieves Guild (NPC guild) can now steal from other players, unless they are guild enemies Players can no longer steal from NPC guards by default Players can no longer steal from the same NPC monster more than once Only gold and gems can be stolen from innocent players in dungeon/ll areas of Felucca, if core shard era is set to AoS or higher Players can no longer steal items held on cursor by other players Orcish masks now eplode if player steals from orcs while wearing it If core shard era is set to LBR or lower, player is marked as an aggressor if they steal from another player Guards can only be called on players that are flagged as criminals within the first 10 seconds of them being flagged Stealing script options: Allow stealing entire containers (off by default pre-AoS) Return stolen items on thief death (off by default) Temporarily make stolen items immovable in thief's backpack (on by default post-AoS) Temporarily protect traded items (on by default) Let dexterity affect chance for successful theft (off by default) Let light level affect chance for successful theft (off by default) Allow stealing from NPC Guards (off by default) Allow stealing special loot from monsters (on by default post-ml) Moved implementation of Snooping skill from code to script (js/skill/snooping.js), with some changes: Players cannot snoop pack animals from inside a house, if the animal is outside The deeper inside main backpack a container sits, the harder it becomes to snoop inside it Included an optional feature that lets targets of snooping gradually become more aware, increasing the difficulty of succeeding. This awareness fades over time. Players have a chance to stay hidden while snooping, based on their Hiding skill Karma is now lowered by snooping regardless of success or failure Added tracking system for "aggressors" in combat. A player attacking someone (regardless of flag status) will be marked as aggressor to that someone for 2 minutes Added tracking system for "permagrey" flags - these are stored on a per-target basis, so a player can be flagged visibly as permagrey to multiple other players. Persists until player dies. Player combat targets and war mode are now cleared on logout Players will now be unable to hide if within visual distance and in line of sight of their attacker or current target in combat Server leave-announcement now only happens after the logout timer has expired, instead of the exact moment the player presses the logout button Fixed an issue that could cause swimming NPCs to swim on land NPCs now have the ability to temporarily ignore unreachable targets in combat. If attacked by someone they are ignoring, they will enter evade state and try to move away from that someone. SpawnRegions now support NPCLISTS with weighted entries. Example of an NPCLIST with 75% chance of spawning some kind of orc, and 25% chance of spawning a ratman archer: [NPCLIST example] { 75|NPCLIST=allorc 25|ratman } Added 3 additional "all purpose" item properties (.more0, .more1 and .more2) and exposed those to JS engine. These work the same as more/morex/morey/morez Mark spell now stores a 4th property on recall runes - instanceID. This is stored in the rune's .more0 property. Recall and Gate spells now check the recall rune (or runebook)'s 4th location property - instanceID - to determine where the player ends up Fixed a server crash related to equipment being automatically unequipped if character is no longer strong enough to have it equipped Added new JS Function to check if any characters at specified location potentially block movement: DoesCharacterBlock( x, y, z, worldNum, instanceID ) // returns true if a character exists at given coordinate (within z +/- 4)
2023-06-20 02:21:16 +08:00
case CIP_STEALABLE: gPriv->SetStealable( static_cast<UI08>( encaps.toInt() )); break;
Minor JS revamp - multiple scripts per object! Added TryParseJSVal() helper function in cScript.cpp, used to parse jsval values returned from script events. Provides results matching 0 (0, false), 1 (1, true) or any specific int value returned from script. JS events updated to use new TryParseJSVal helper function (no change in behaviour): onDecay, onResurrect, onCommand, onBuyFromVendor, onSellToVendor, onPickup, onCharDoubleClick, onSkillGump, onUseBandageMacro, onCombatStart, onCombatEnd, onDeathBlow, onBuy, onSell JS events with slight change of behaviour after update to use TryParseJSVal: onDrop, onDropItemOnItem, onDropItemOnNpc - previously, a blank or non-existent return value would be treated the same as a return true. This will now be treated as a return false. Update scripts accordingly! JS events updated to support return values from scripts: onCollide, onTalk, onSnooped, OnHungerChange Return false or nothing to prevent hard code from running Return true to allow hard code to run like normal onStolenFrom, onAISliver, onLightChange, onVirtueGumpPress, onQuestGump, onSpecialMove, onSwing, onClick, onHouseCommand, onSellToVendor, onSkillCheck, onSpellGain, onSpellLoss Return false to allow hard code and other scripts with event to run like normal Return true to prevent hard code and other scripts with event from running onSteal Return false or nothing to allow hard code and other scripts with event to run like normal Return true to prevent hard code and onStolenFrom event from running (theft failed?) Return 2 to prevent hard code, but allow onStolenFrom event to run (theft succeeded, but handled in script?) onLeaving, onEntrance, onEquip, onUnequip, onEnterEvadeState, onSoldToVendor, onBoughtFromVendor, onSpellSuccess, onSpellTarget, onFlagChange, onDeath Return false or nothing to allow other scripts with event to run like normal Return true to prevent other scripts with event from running Added new JS events that run prior to items being equipped/unequipped, with support for return values: onEquipAttempt( pEquipper, iEquipping ) onUnequipAttempt( pEquipper, iUnequipping ) Return false or nothing to reject attempt to equip/unequip item, and prevent hard-code or other scripts with event from running Return true to allow hard code to run like normal Added new JS event that runs prior to onSnooped event, for character doing the snooping: onSnoopAttempt( snooped, snooper ) Return false or nothing to prevent hard code and other snooping-related events from running Return true to allow hard code and other snooping-related events to run like normal Updated onSnooped JS event to accept return values: Return true when success state is true to prevent other scripts with event from running Return true when success state is false to prevent hard code and other scripts with event from running Updated onClick JS event to also run for characters with event attached (return 1 to prevent showing hard-coded name for whatever object is clicked) Updated onSteal JS event to include a third parameter, an object reference for the target of the theft Added support for assigning multiple JS scripts per object (item, multi, char, region). Any time a scriptID is added to an object, the list of such IDs for that object will be sorted from lowest to highest scriptID, which also determines the execution order for the scripts. Note that if the same JS event is present in several scripts assigned to an object, each of those events will trigger, unless the rules about return values for said event prevent this DFNs for Items, Multis, Characters and Regions can now contain multiple SCRIPT=scriptID tags per definition. Each such SCRIPT tag will be applied to the object in question, then sorted from lowest to highest scriptID by server. Added new JS property for Items, Multis, Characters and Regions: .scriptTriggers // If used to get property, will return array object with all script IDs assigned to object. If used to set property, will add script ID to existing list of script IDs for object. Modified JS property for Items, Multis, Characters and Regions, which for backwards compatibility functions similar to in older versions: .scripttrigger // If used to get property, will return last script ID in list of script IDs assigned to object. If used to set property, will clear list of script IDs and assign only the new ID Added new JS Methods for Items, Multis, Characters and Regions: .AddScriptTrigger( scriptID ) // Adds a new scriptID to list of scripts assigned to object .RemoveScriptTrigger( scriptID ) // Remove a specific scriptID from object (0 = remove all) Moved SETSCPTRIG command from code to JS (js/commands/targeting/scptrig.js), and supplemented it with some additional commands: GETSCPTRIG // List out all scriptIDs assigned to object SETSCPTRIG scriptID // Clears list of scriptIDs for object, then assigns the specified scriptID ADDSCPTRIG scriptID // Adds specified scriptID to list of scriptsIDs assigned to object REMOVESCPTRIG scriptID // Removes specified scriptID from list of scriptIDs assigned to object (0 = remove all)
2021-05-25 19:37:52 +08:00
// The following entries are specifically for CSpawnItem objects
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
case CIP_SPAWNSECTION:
if( gPriv->GetObjType() == OT_SPAWNER )
{
( static_cast<CSpawnItem *>( gPriv ))->SetSpawnSection( encaps.toString() );
}
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
break;
case CIP_SECTIONALIST:
if( gPriv->GetObjType() == OT_SPAWNER )
{
( static_cast<CSpawnItem *>( gPriv ))->IsSectionAList( encaps.toBool() );
}
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
break;
case CIP_MININTERVAL:
if( gPriv->GetObjType() == OT_SPAWNER )
{
( static_cast<CSpawnItem *>( gPriv ))->SetInterval( 0, static_cast<UI08>( encaps.toInt() ));
}
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
break;
case CIP_MAXINTERVAL:
if( gPriv->GetObjType() == OT_SPAWNER )
{
( static_cast<CSpawnItem *>( gPriv ))->SetInterval( 1, static_cast<UI08>( encaps.toInt() ));
}
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
break;
Housing Revamp and more Updated JS SysMessage function to accept up to 10 extra, optional arguments, which can be used with dictionary messages that require additional parameters like %s or %i Added new type of house privilege in cMultiObj.cpp to keep track of friends of the multi - HOUSEPRIV_FRIEND - which is stored during worldsaves as one or more Friend=<player serial> tags in house.wsc Added new type of house privilege in cMultiObj.cpp to keep track of guests of the multi - HOUSEPRIV_GUEST - which is stored during worldsaves as one or more Guest=<player serial> tags in house.wsc When items are created for houses upon house placement, a reference to the multi's serial is now stored in the house sign's MORE property to allow easier tracking of which house a particular sign belongs to Added tracking of new, persistent properties for houses via cMultiObj.cpp/h: lockdowns, secure containers, vendors, guests, friends, owners, ban location, public status, number of visits, timestamps Added a multitude of new methods in cMultiObj.cpp/h to assist in improving the functionality of houses Added new tags for houses in house.dfn (default values applied if tag not specified): MAXSECURECONTAINERS=4 - Max amount of secure containers allowed in a multi MAXLOCKDOWNS=256 - Max amount of lockdowns allowed in a multi MAXVENDORS=10 - Max amount of vendors allowed in a multi MAXBANS=50 - Max amount of bans in a multi's ban list MAXFRIENDS=50 - Max amount of friends in a multi's friend list MAXGUESTS=50 - Max amount of guests in a multi's guest list MAXOWNERS=8 - Max amount of owners and co-owners in a multi's owner list MAXTRASHCONTAINERS=1 - Max amount of trash containers allowed in multi SCRIPT=<scriptID> - Assign a JS script-ID directly to a multi FRONTDOOR - indicates that a door is the front door of a house. Cannot be locked in public houses! INTERIORDOOR - indicates that a door is an interior door of a house. Can be locked in public houses. BANX - Location X offset for multi's ban location, if not used, will try to use SE corner of multi instead BANY - Location Y offset for multi's ban location, if not used, will try to use SE corner of multi instead Added JS Event: onHouseCommand( tSock, multiObj, cmdID ) - For handling spoken house commands via JS scripts attached to multi. Updated JS Events: onEntrance() - can now trigger both for multi being entered and/or object entering onLeaving() - can now trigger both for multi being left and/or object entering onSpeech() - can now also trigger for items (in addition to chars) with event & script attached, if UOX.INI setting ITEMSDETECTSPEECH is enabled Added JS Multi methods: .IsBoat() - Returns whether the item (or multi) is a boat .IsOwner( playerToCheck ) - Returns whether a player is the owner of a multi .IsOnOwnerList( playerToCheck ) - Returns whether a player is on the (co-)owner list of a multi .IsOnFriendList( playerToCheck ) - Returns whether a player is on the friend list of a multi .IsOnGuestList( playerToCheck ) - Returns whether a player is on the guest list of a multi .IsOnBanList( playerToCheck ) - Returns whether a player is on the ban list of a multi .AddToFriendList( playertoAdd ) - Adds player to the friend list of a multi .RemoveFromFriendList( playertoRemove ) - Removes player from the friend list of a multi .AddToGuestList( playertoAdd ) - Adds player to the guest list of a multi .RemoveFromGuestList( playertoRemove ) - Removes player from the guest list of a multi .ClearOwnerList() - Clears all entries from a multi's (co-)owner list .ClearFriendList() - Clears all entries from a multi's friend list .ClearGuestList() - Clears all entries from a multi's guest list .ClearBanList() - Clears all entries from a multi's ban list .SecureContainer( itemToSecure ) - Secures a container in a multi .UnsecureContainer( itemToUnsecure ) - Unsecures a container in a multi .IsSecureContainer( itemToCheck ) - Checks if specified item is a secure container in a multi .LockDownItem( itemToLockDown) - Locks down an item in a multi .ReleaseItem( itemToRelease ) - Releases a locked down item in a multi .KillKeys() - Deletes ALL keys associated with a multi .AddTrashCont( itemToAdd ) - Add trash container to multi's list of trash containers .RemoveTrashCont( itemToRemove ) - Remove trash container from multi's list of trash containers Added JS Item (Multi only) properties: .lockdowns - Get the number of lockdowns in a multi .maxLockdowns - Get/Set the max number of lockdowns allowed in a multi .secureContainers - Get the number of secure containers in a multi .maxSecureContainers - Get/Set the max number of secure containers allowed in a multi .trashContainers - Get the number of trash containers in a multi .maxTrashContainers - Get/Set the max number of trash containers allowed in a multi .friends - Get the number of friends in a multi's friend list .maxFriends - Get/Set the max number of friends allowed in a multi's friend list .guests - Get the number of guests in a multi's guest list .maxGuests - Get/Set the max number of guests allowed in a multi's guest list .owners - Get the number of owners in a multi's owner list .maxOwners - Get/Set the max number of owners allowed in a multi's owner list .bans - Get the number of banned players in a multi's ban list .maxBans - Get/Set the max number of banned players allowed in a multi's ban list .vendors - Get the number of player vendors in a multi .maxVendors - Get the max number of player vendors allowed in a multi .deed - Get the item sectionID for deed used to place multi .isPublic - Get/Set the private/public state of a multi .buildTimestamp - Get the timestamp for when the house was originally placed .tradeTimestamp - Get the timestamp for when the house was last traded to another player .banX - Get/Set the ban location X offset for the multi .banY - Get/Set the ban location Y offset for the multi Added JS Character properties: .multi = Get/Set the multi object the character is in .accountNum = Get the account number the character belongs to .housesOwned = Get a count of houses owned by the character .housesCoOwned = Get a count of houses co-owned by the character Updated JS cBaseObject Methods .FirstItem(), .NextItem() and .FinishedItems() to also support iterating through items in multis Updated JS multi Methods .FirstChar(), .NextChar() and .FinishedChars() to support an additional parameter to specify what kind of characters to loop through: "default" or no parameter - all characters inside the multi "owner" - players on multi's owner list "friend" - players on multi's friend list "guest" - players on multi's guest list "banned" - players on multi's ban list Added new INI tags to a new section of uox.ini called [houses] DECAYTIMERINHOUSE=3600 // Decay timer in seconds for non-locked down items inside houses PROTECTPRIVATEHOUSES=1 // Toggles whether private houses will automatically boot unauthorized visitors (1) or not (0) TRACKHOUSESPERACCOUNT=1 // Toggles whether to track (and restrict) house ownership per account (1) or per character (0) MAXHOUSESOWNABLE=1 // Specifies the max amount of houses a player can own per account/char, depending on how house ownership is tracked MAXHOUSESCOOWNABLE=10 // Specifies the max amount of houses a player can co-own per character CANOWNANDCOOWNHOUSES=1 // Toggles whether players can own and co-own houses at the same time COOWNHOUSESONSAMEACCOUNT=1 // Toggles whether characters on same account as house owner will be treated as co-owners Added new INI tags in [settings] section of uox.ini: ITEMSDETECTSPEECH=0 // If enabled, server will search for nearby items with onSpeech JS event running whenever a character speaks. Disabled by default. MAXPLAYERPACKITEMS=125 // Defines max item capacity for player (and NPC) backpacks. Defaults to 125. Moved most of the existing house functionality to JS and expanded upon it to reach feature parity with houses in regular UO around Publish 15/16, with various extras thrown in for good measure and all functionality being customizable: js/server/house/house.js (15000) - handles detection of house commands and characters entering/leaving houses js/server/house/houseSign.js (15001) - contains and handles all house-related gumps/menus and what is shown when players interact with house sign js/server/house/houseCommands.js (15002) - handles functionality of house commands and other functionality such as transfer of ownership, demolishing house, etc. js/server/house/houseDeed.js (15003) - handles initial rules that allow/disallow placement of additional houses for players All house-related menus now fully handled through JS All house commands and other functionality now fully handled through JS Removed redundant hard-coded house functionality Implemented Co-owners, friends, guests for houses, with access rules in place for entry, lockdowns, house commands, etc. Implemented Private and Public houses Implemented Secure Containers and Trash Barrels Definable max lockdowns, secure containers, player vendors, bans, friends, guests, owners, trash containers and more - per house type JS scripts can now be attached directly to houses Doors in houses can be marked as front doors or interior doors, and will be treated differently with regards to private and public houses Added new item to dfndata/items/containers/misc.dfn - [trashbarrel] Added new JS script (js/items/trashbarrel.js) with trash barrel functionality for houses. Trash barrels that are marked as secure containers are only accessible by owners, co-owners and friends of the house. Various options available at top of script. Updated js/items/axe.js to support chopping up trash barrels and house add-ons in houses owned by the player Fixed an issue with house doors being left behind after demolishing houses while their doors were open Fixed an issue where GMs could be banned from player houses Added Line of Sight checks to speech, to give players some privacy in their own homes Updated house placement code to more accurately check for other multis, dynamic and static objects when placing houses; now requires free space around each house that cannot be blocked by other houses or items that can block player movement, and disallows placement of houses on roads Updated house placement code to move characters blocking house placement to SE corner of the house Updated house placement code to disallow placing houses in guarded regions, or in dungeons Added new DFN tag for regions to enable/disable player houses in specific regions: HOUSING=0/1 Added new region (247) that covers path to Valley of Eodon in Felucca Added new region (248) that covers Valley of Eodon in Ter-Mur, with player housing disabled Added new region (249) that covers entire T2A lands, with player housing disabled Updated SPACEX and SPACEY values for all houses in dfndata/house/house.dfn to match updated house placement code Added new JS property to Regions that can be used to determine or change state of player housing in a region: .canPlaceHouse() Updated rules for usage of dye tubs to dye locked down items; now only house owners or co-owners may dye locked down items Updated rules for usage of the following locked down items in a house, which are now only usable by house owners and co-owners Dyes, Guildstone Deeds, Recall Runes (renaming), Rename Deeds, Townstone Deeds, House Deeds, Boat Models, Player Vendor Deeds, Ore, Hair Dye Updated rules for usage of the following locked down items in a house, which are now only usable by house owners, co-owners and friends: Keys, Dye Tubs, Magic Scrolls, Fireworks Wands, Magic Wands, Smithing Tools, Mining Tools, Fishing Poles Updated item lockdown rules to allow locking down (and releasing) items in a container as long as the container is locked down, and to only allow releasing a locked down container if it's empty of locked down items Updated item lockdown rules to only allow locking down movement-blocking items further than 2 tiles away from doors Updated rules for releasing items in houses - now the house owner can release any locked down items, co-owners can release items locked down by themselves or by friends, while friends can release only items locked down by themselves Added some feedback to player about why their attempted house placement failed Items added by GMs directly into multis will now decay based on the house-specific decay timer instead of the regular one Fixed an issue that could cause items to almost instantly decay after being released from lockdown in a house Placing house add-ons now properly takes into account SPACEX and SPACEY values when checking if they can fit in selected area of houses Re-added SPACEX and SPACEY values for Pentagram and Loom house add-ons House add-ons can now be converted back into house add-on deeds by chopping them with an axe Added new item type - IT_HOUSEADDON (201) - used by house add-ons placed in player houses Fixed a bug where keys would stop working after being added to a keyring, and would turn into blank keys upon release from the keyring Added visitor count for public player houses, which keeps track of how many visits a public house has received, with each player counted max 1 time every 24 hours Fixed an issue with FindPlayersInOldVisrange() where it didn't take into account that players could see buildings further away than the standard update range. This could cause players to see ghost images of buildings if they were at the "right" distance when the building was being demolished Added NODECAY tag to all signs and doors in dfndata/house/house.dfn Added FRONTDOOR or INTERIORDOOR (as appropriate) to all doors in dfndata/house/house.dfn Added BANX and BANY to specify ban location for some houses in dfndata/house/house.dfn instead of relying on finding SE corner automatically Implemented strongboxes (js/server/house/strongbox.js) for co-owners of a house, which can be placed with the house command "i wish to place a strongbox". Max capacity is 25 items Updated 'REMOVE command to take an optional parameter - itemID. If supplied, the command will remove all items with this itemID from a targeted container Fixed a bug when checking if dynamic items were blocking valid spawn locations for NPCs, some function arguments were in the wrong order! Improved code that finds valid spawn locations for items and NPCs spawned via spawn regions. As server gradually builds up lists of valid spawn locations per region over time, it will start using these lists more often, rather than always look for brand new spawn locations. Fixed a bug with CMulHandler::CheckStaticFlag() that prevented NPCs from spawning inside buildings with no static floors! Fixed an issue with repeating commands that prevented GMs from being able to cancel them when using the ClassicUO client Exposed character property .accountNum to JS engine Extended CDataList class to include a Clear() method for clearing lists Updated JS File method .Open() to support an optional, third argument - subFolderName - that defines in which sub-folder of UOX3/shared/ to store/look for a file. If no third argument is supplied, UOX3 will default to using the shared folder itself. Updated JS File method .Length() to return a value of -1 for files that don't exist Added new code function, exposed to JS engine with same parameters, which simply checks if a given tile ID has a specific flag bool CheckTileFlag( UI16 itemID, TILEFLAG flagToCheck ) Added JS function used to find the root container of an item (if any) FindRootContainer( itemSerial ) FindRootContainer( item ) Added new JS function that allows deleting files from UOX3/shared/ folder or subfolders of shared folder. If no subFolderName is provided, looks for file directly in shared folder itself. Restrictions on file- and folder-names apply. bool DeleteFile( fileName, subFolderName ) Added new JS functions for checking if a specific client or server feature is enabled. See documentation for full list of client/server features. GetClientFeature( bitNum ) // Returns true if specified client feature is enabled on server GetServerFeature( bitNum ) // Returns true if specified server feature is enabled on server Added new JS function for returning the value of almost any server setting from UOX.INI GetServerSetting( settingNameInDoubleQuotes ) Updated JS function DoesDynamicBlock() with two new parameters - checkOnlyMultis and checkOnlyNonMultis Updated JS function DoesMapBlock() with two new parameters - checkMultiPlacement and checkForRoad Fixed an issue where a LoS check would prevent players from accessing containers in their own backpack Added new functions in findfuncs.cpp to make it easier to find items near another object or location: findNearbyItems( object, distance ) findNearbyItems( x, y, worldNumber, instanceID, distance ) Added new Item property - maxItems - used by containers to determine their max item capacity Added new Item property - totalItemCount - used to get total item count in a container (including sub-containers) Added check for max item capacity when creating new items that are added to a character's backpack - items will be created below character's feet if backpack is full! Added new DFN tag for items, used by containers to determine item capacity for a given container: MAXITEMS=# // 125 is the default for all containers if not set Added new JS Item properties: .maxItems // gets/sets item capacity for a given container .totalItemCount // gets total item count in a container, including sub-containers Updated item tooltips for containers to show accurate total item count, as well as to display max item capacity Fixed a bug where picking up items from a non-locked down pile of items on the floor inside a multi could cause the remaining pile to be seen as no longer inside the multi, disallowing locking it back down and causing it to decay based on regular decay timer instead of house-specific one Updated JS command set to allow setting poison-level on items ('set poison #) and hunger-level on characters ('set hunger #) Fixed an issue with js/item/food.js that prevented poisoned food from poisoning characters when eaten Fixed an issue with js/skill/poisoning.js that prevented players from poisoning food! Updated various JS scripts and hardcoded targeting functions to disallow the targeting of locked down resources using skills and tools Updated JS Method TextMessage() to support three extra, optional parameters. Note that if one optional parameter is included, all preceding optional parameters are also required! speechTarget - What kind of target is this message intended for? 0 - Only visible for sender and receiver of message 1 - Visible to all players in range 2 - Visible to all NPCs and players in range 3 - Visible to all PCs everywhere + NPCs in range 4 - Visible to all PCs everywhere (broadcast) 5 - Only visible for the receiver of the message speechTargetSerial - The serial of the receiver of the message, used if speechTarget is 0 or 5 speechFontType - The type of font to display the text in. Defaults to normal. 0 - Bold 1 - Normal with shadow 2 - Bold with shadow 3 - Normal 4 - Gothic 5 - Italic 6 - Small, dark 7 - Colourful 8 - Runic (only works with CAPS) 9 - Small, light Added timestamp to worldsaves in console, to make it easier to see when a particular world-save was done Added info about compiler/environment displayed at the top of the UOX3 console during startup Updated dictionary files with new messages primarily related to housing
2020-11-04 02:00:37 +08:00
// Multis only
case CIP_MAXLOCKDOWNS:
if( gPriv->GetObjType() == OT_MULTI )
{
( static_cast<CMultiObj *>( gPriv ))->SetMaxLockdowns( static_cast<UI16>( encaps.toInt() ));
}
Housing Revamp and more Updated JS SysMessage function to accept up to 10 extra, optional arguments, which can be used with dictionary messages that require additional parameters like %s or %i Added new type of house privilege in cMultiObj.cpp to keep track of friends of the multi - HOUSEPRIV_FRIEND - which is stored during worldsaves as one or more Friend=<player serial> tags in house.wsc Added new type of house privilege in cMultiObj.cpp to keep track of guests of the multi - HOUSEPRIV_GUEST - which is stored during worldsaves as one or more Guest=<player serial> tags in house.wsc When items are created for houses upon house placement, a reference to the multi's serial is now stored in the house sign's MORE property to allow easier tracking of which house a particular sign belongs to Added tracking of new, persistent properties for houses via cMultiObj.cpp/h: lockdowns, secure containers, vendors, guests, friends, owners, ban location, public status, number of visits, timestamps Added a multitude of new methods in cMultiObj.cpp/h to assist in improving the functionality of houses Added new tags for houses in house.dfn (default values applied if tag not specified): MAXSECURECONTAINERS=4 - Max amount of secure containers allowed in a multi MAXLOCKDOWNS=256 - Max amount of lockdowns allowed in a multi MAXVENDORS=10 - Max amount of vendors allowed in a multi MAXBANS=50 - Max amount of bans in a multi's ban list MAXFRIENDS=50 - Max amount of friends in a multi's friend list MAXGUESTS=50 - Max amount of guests in a multi's guest list MAXOWNERS=8 - Max amount of owners and co-owners in a multi's owner list MAXTRASHCONTAINERS=1 - Max amount of trash containers allowed in multi SCRIPT=<scriptID> - Assign a JS script-ID directly to a multi FRONTDOOR - indicates that a door is the front door of a house. Cannot be locked in public houses! INTERIORDOOR - indicates that a door is an interior door of a house. Can be locked in public houses. BANX - Location X offset for multi's ban location, if not used, will try to use SE corner of multi instead BANY - Location Y offset for multi's ban location, if not used, will try to use SE corner of multi instead Added JS Event: onHouseCommand( tSock, multiObj, cmdID ) - For handling spoken house commands via JS scripts attached to multi. Updated JS Events: onEntrance() - can now trigger both for multi being entered and/or object entering onLeaving() - can now trigger both for multi being left and/or object entering onSpeech() - can now also trigger for items (in addition to chars) with event & script attached, if UOX.INI setting ITEMSDETECTSPEECH is enabled Added JS Multi methods: .IsBoat() - Returns whether the item (or multi) is a boat .IsOwner( playerToCheck ) - Returns whether a player is the owner of a multi .IsOnOwnerList( playerToCheck ) - Returns whether a player is on the (co-)owner list of a multi .IsOnFriendList( playerToCheck ) - Returns whether a player is on the friend list of a multi .IsOnGuestList( playerToCheck ) - Returns whether a player is on the guest list of a multi .IsOnBanList( playerToCheck ) - Returns whether a player is on the ban list of a multi .AddToFriendList( playertoAdd ) - Adds player to the friend list of a multi .RemoveFromFriendList( playertoRemove ) - Removes player from the friend list of a multi .AddToGuestList( playertoAdd ) - Adds player to the guest list of a multi .RemoveFromGuestList( playertoRemove ) - Removes player from the guest list of a multi .ClearOwnerList() - Clears all entries from a multi's (co-)owner list .ClearFriendList() - Clears all entries from a multi's friend list .ClearGuestList() - Clears all entries from a multi's guest list .ClearBanList() - Clears all entries from a multi's ban list .SecureContainer( itemToSecure ) - Secures a container in a multi .UnsecureContainer( itemToUnsecure ) - Unsecures a container in a multi .IsSecureContainer( itemToCheck ) - Checks if specified item is a secure container in a multi .LockDownItem( itemToLockDown) - Locks down an item in a multi .ReleaseItem( itemToRelease ) - Releases a locked down item in a multi .KillKeys() - Deletes ALL keys associated with a multi .AddTrashCont( itemToAdd ) - Add trash container to multi's list of trash containers .RemoveTrashCont( itemToRemove ) - Remove trash container from multi's list of trash containers Added JS Item (Multi only) properties: .lockdowns - Get the number of lockdowns in a multi .maxLockdowns - Get/Set the max number of lockdowns allowed in a multi .secureContainers - Get the number of secure containers in a multi .maxSecureContainers - Get/Set the max number of secure containers allowed in a multi .trashContainers - Get the number of trash containers in a multi .maxTrashContainers - Get/Set the max number of trash containers allowed in a multi .friends - Get the number of friends in a multi's friend list .maxFriends - Get/Set the max number of friends allowed in a multi's friend list .guests - Get the number of guests in a multi's guest list .maxGuests - Get/Set the max number of guests allowed in a multi's guest list .owners - Get the number of owners in a multi's owner list .maxOwners - Get/Set the max number of owners allowed in a multi's owner list .bans - Get the number of banned players in a multi's ban list .maxBans - Get/Set the max number of banned players allowed in a multi's ban list .vendors - Get the number of player vendors in a multi .maxVendors - Get the max number of player vendors allowed in a multi .deed - Get the item sectionID for deed used to place multi .isPublic - Get/Set the private/public state of a multi .buildTimestamp - Get the timestamp for when the house was originally placed .tradeTimestamp - Get the timestamp for when the house was last traded to another player .banX - Get/Set the ban location X offset for the multi .banY - Get/Set the ban location Y offset for the multi Added JS Character properties: .multi = Get/Set the multi object the character is in .accountNum = Get the account number the character belongs to .housesOwned = Get a count of houses owned by the character .housesCoOwned = Get a count of houses co-owned by the character Updated JS cBaseObject Methods .FirstItem(), .NextItem() and .FinishedItems() to also support iterating through items in multis Updated JS multi Methods .FirstChar(), .NextChar() and .FinishedChars() to support an additional parameter to specify what kind of characters to loop through: "default" or no parameter - all characters inside the multi "owner" - players on multi's owner list "friend" - players on multi's friend list "guest" - players on multi's guest list "banned" - players on multi's ban list Added new INI tags to a new section of uox.ini called [houses] DECAYTIMERINHOUSE=3600 // Decay timer in seconds for non-locked down items inside houses PROTECTPRIVATEHOUSES=1 // Toggles whether private houses will automatically boot unauthorized visitors (1) or not (0) TRACKHOUSESPERACCOUNT=1 // Toggles whether to track (and restrict) house ownership per account (1) or per character (0) MAXHOUSESOWNABLE=1 // Specifies the max amount of houses a player can own per account/char, depending on how house ownership is tracked MAXHOUSESCOOWNABLE=10 // Specifies the max amount of houses a player can co-own per character CANOWNANDCOOWNHOUSES=1 // Toggles whether players can own and co-own houses at the same time COOWNHOUSESONSAMEACCOUNT=1 // Toggles whether characters on same account as house owner will be treated as co-owners Added new INI tags in [settings] section of uox.ini: ITEMSDETECTSPEECH=0 // If enabled, server will search for nearby items with onSpeech JS event running whenever a character speaks. Disabled by default. MAXPLAYERPACKITEMS=125 // Defines max item capacity for player (and NPC) backpacks. Defaults to 125. Moved most of the existing house functionality to JS and expanded upon it to reach feature parity with houses in regular UO around Publish 15/16, with various extras thrown in for good measure and all functionality being customizable: js/server/house/house.js (15000) - handles detection of house commands and characters entering/leaving houses js/server/house/houseSign.js (15001) - contains and handles all house-related gumps/menus and what is shown when players interact with house sign js/server/house/houseCommands.js (15002) - handles functionality of house commands and other functionality such as transfer of ownership, demolishing house, etc. js/server/house/houseDeed.js (15003) - handles initial rules that allow/disallow placement of additional houses for players All house-related menus now fully handled through JS All house commands and other functionality now fully handled through JS Removed redundant hard-coded house functionality Implemented Co-owners, friends, guests for houses, with access rules in place for entry, lockdowns, house commands, etc. Implemented Private and Public houses Implemented Secure Containers and Trash Barrels Definable max lockdowns, secure containers, player vendors, bans, friends, guests, owners, trash containers and more - per house type JS scripts can now be attached directly to houses Doors in houses can be marked as front doors or interior doors, and will be treated differently with regards to private and public houses Added new item to dfndata/items/containers/misc.dfn - [trashbarrel] Added new JS script (js/items/trashbarrel.js) with trash barrel functionality for houses. Trash barrels that are marked as secure containers are only accessible by owners, co-owners and friends of the house. Various options available at top of script. Updated js/items/axe.js to support chopping up trash barrels and house add-ons in houses owned by the player Fixed an issue with house doors being left behind after demolishing houses while their doors were open Fixed an issue where GMs could be banned from player houses Added Line of Sight checks to speech, to give players some privacy in their own homes Updated house placement code to more accurately check for other multis, dynamic and static objects when placing houses; now requires free space around each house that cannot be blocked by other houses or items that can block player movement, and disallows placement of houses on roads Updated house placement code to move characters blocking house placement to SE corner of the house Updated house placement code to disallow placing houses in guarded regions, or in dungeons Added new DFN tag for regions to enable/disable player houses in specific regions: HOUSING=0/1 Added new region (247) that covers path to Valley of Eodon in Felucca Added new region (248) that covers Valley of Eodon in Ter-Mur, with player housing disabled Added new region (249) that covers entire T2A lands, with player housing disabled Updated SPACEX and SPACEY values for all houses in dfndata/house/house.dfn to match updated house placement code Added new JS property to Regions that can be used to determine or change state of player housing in a region: .canPlaceHouse() Updated rules for usage of dye tubs to dye locked down items; now only house owners or co-owners may dye locked down items Updated rules for usage of the following locked down items in a house, which are now only usable by house owners and co-owners Dyes, Guildstone Deeds, Recall Runes (renaming), Rename Deeds, Townstone Deeds, House Deeds, Boat Models, Player Vendor Deeds, Ore, Hair Dye Updated rules for usage of the following locked down items in a house, which are now only usable by house owners, co-owners and friends: Keys, Dye Tubs, Magic Scrolls, Fireworks Wands, Magic Wands, Smithing Tools, Mining Tools, Fishing Poles Updated item lockdown rules to allow locking down (and releasing) items in a container as long as the container is locked down, and to only allow releasing a locked down container if it's empty of locked down items Updated item lockdown rules to only allow locking down movement-blocking items further than 2 tiles away from doors Updated rules for releasing items in houses - now the house owner can release any locked down items, co-owners can release items locked down by themselves or by friends, while friends can release only items locked down by themselves Added some feedback to player about why their attempted house placement failed Items added by GMs directly into multis will now decay based on the house-specific decay timer instead of the regular one Fixed an issue that could cause items to almost instantly decay after being released from lockdown in a house Placing house add-ons now properly takes into account SPACEX and SPACEY values when checking if they can fit in selected area of houses Re-added SPACEX and SPACEY values for Pentagram and Loom house add-ons House add-ons can now be converted back into house add-on deeds by chopping them with an axe Added new item type - IT_HOUSEADDON (201) - used by house add-ons placed in player houses Fixed a bug where keys would stop working after being added to a keyring, and would turn into blank keys upon release from the keyring Added visitor count for public player houses, which keeps track of how many visits a public house has received, with each player counted max 1 time every 24 hours Fixed an issue with FindPlayersInOldVisrange() where it didn't take into account that players could see buildings further away than the standard update range. This could cause players to see ghost images of buildings if they were at the "right" distance when the building was being demolished Added NODECAY tag to all signs and doors in dfndata/house/house.dfn Added FRONTDOOR or INTERIORDOOR (as appropriate) to all doors in dfndata/house/house.dfn Added BANX and BANY to specify ban location for some houses in dfndata/house/house.dfn instead of relying on finding SE corner automatically Implemented strongboxes (js/server/house/strongbox.js) for co-owners of a house, which can be placed with the house command "i wish to place a strongbox". Max capacity is 25 items Updated 'REMOVE command to take an optional parameter - itemID. If supplied, the command will remove all items with this itemID from a targeted container Fixed a bug when checking if dynamic items were blocking valid spawn locations for NPCs, some function arguments were in the wrong order! Improved code that finds valid spawn locations for items and NPCs spawned via spawn regions. As server gradually builds up lists of valid spawn locations per region over time, it will start using these lists more often, rather than always look for brand new spawn locations. Fixed a bug with CMulHandler::CheckStaticFlag() that prevented NPCs from spawning inside buildings with no static floors! Fixed an issue with repeating commands that prevented GMs from being able to cancel them when using the ClassicUO client Exposed character property .accountNum to JS engine Extended CDataList class to include a Clear() method for clearing lists Updated JS File method .Open() to support an optional, third argument - subFolderName - that defines in which sub-folder of UOX3/shared/ to store/look for a file. If no third argument is supplied, UOX3 will default to using the shared folder itself. Updated JS File method .Length() to return a value of -1 for files that don't exist Added new code function, exposed to JS engine with same parameters, which simply checks if a given tile ID has a specific flag bool CheckTileFlag( UI16 itemID, TILEFLAG flagToCheck ) Added JS function used to find the root container of an item (if any) FindRootContainer( itemSerial ) FindRootContainer( item ) Added new JS function that allows deleting files from UOX3/shared/ folder or subfolders of shared folder. If no subFolderName is provided, looks for file directly in shared folder itself. Restrictions on file- and folder-names apply. bool DeleteFile( fileName, subFolderName ) Added new JS functions for checking if a specific client or server feature is enabled. See documentation for full list of client/server features. GetClientFeature( bitNum ) // Returns true if specified client feature is enabled on server GetServerFeature( bitNum ) // Returns true if specified server feature is enabled on server Added new JS function for returning the value of almost any server setting from UOX.INI GetServerSetting( settingNameInDoubleQuotes ) Updated JS function DoesDynamicBlock() with two new parameters - checkOnlyMultis and checkOnlyNonMultis Updated JS function DoesMapBlock() with two new parameters - checkMultiPlacement and checkForRoad Fixed an issue where a LoS check would prevent players from accessing containers in their own backpack Added new functions in findfuncs.cpp to make it easier to find items near another object or location: findNearbyItems( object, distance ) findNearbyItems( x, y, worldNumber, instanceID, distance ) Added new Item property - maxItems - used by containers to determine their max item capacity Added new Item property - totalItemCount - used to get total item count in a container (including sub-containers) Added check for max item capacity when creating new items that are added to a character's backpack - items will be created below character's feet if backpack is full! Added new DFN tag for items, used by containers to determine item capacity for a given container: MAXITEMS=# // 125 is the default for all containers if not set Added new JS Item properties: .maxItems // gets/sets item capacity for a given container .totalItemCount // gets total item count in a container, including sub-containers Updated item tooltips for containers to show accurate total item count, as well as to display max item capacity Fixed a bug where picking up items from a non-locked down pile of items on the floor inside a multi could cause the remaining pile to be seen as no longer inside the multi, disallowing locking it back down and causing it to decay based on regular decay timer instead of house-specific one Updated JS command set to allow setting poison-level on items ('set poison #) and hunger-level on characters ('set hunger #) Fixed an issue with js/item/food.js that prevented poisoned food from poisoning characters when eaten Fixed an issue with js/skill/poisoning.js that prevented players from poisoning food! Updated various JS scripts and hardcoded targeting functions to disallow the targeting of locked down resources using skills and tools Updated JS Method TextMessage() to support three extra, optional parameters. Note that if one optional parameter is included, all preceding optional parameters are also required! speechTarget - What kind of target is this message intended for? 0 - Only visible for sender and receiver of message 1 - Visible to all players in range 2 - Visible to all NPCs and players in range 3 - Visible to all PCs everywhere + NPCs in range 4 - Visible to all PCs everywhere (broadcast) 5 - Only visible for the receiver of the message speechTargetSerial - The serial of the receiver of the message, used if speechTarget is 0 or 5 speechFontType - The type of font to display the text in. Defaults to normal. 0 - Bold 1 - Normal with shadow 2 - Bold with shadow 3 - Normal 4 - Gothic 5 - Italic 6 - Small, dark 7 - Colourful 8 - Runic (only works with CAPS) 9 - Small, light Added timestamp to worldsaves in console, to make it easier to see when a particular world-save was done Added info about compiler/environment displayed at the top of the UOX3 console during startup Updated dictionary files with new messages primarily related to housing
2020-11-04 02:00:37 +08:00
break;
case CIP_MAXTRASHCONTAINERS:
if( gPriv->GetObjType() == OT_MULTI )
{
( static_cast<CMultiObj *>( gPriv ))->SetMaxTrashContainers( static_cast<UI16>( encaps.toInt() ));
}
Housing Revamp and more Updated JS SysMessage function to accept up to 10 extra, optional arguments, which can be used with dictionary messages that require additional parameters like %s or %i Added new type of house privilege in cMultiObj.cpp to keep track of friends of the multi - HOUSEPRIV_FRIEND - which is stored during worldsaves as one or more Friend=<player serial> tags in house.wsc Added new type of house privilege in cMultiObj.cpp to keep track of guests of the multi - HOUSEPRIV_GUEST - which is stored during worldsaves as one or more Guest=<player serial> tags in house.wsc When items are created for houses upon house placement, a reference to the multi's serial is now stored in the house sign's MORE property to allow easier tracking of which house a particular sign belongs to Added tracking of new, persistent properties for houses via cMultiObj.cpp/h: lockdowns, secure containers, vendors, guests, friends, owners, ban location, public status, number of visits, timestamps Added a multitude of new methods in cMultiObj.cpp/h to assist in improving the functionality of houses Added new tags for houses in house.dfn (default values applied if tag not specified): MAXSECURECONTAINERS=4 - Max amount of secure containers allowed in a multi MAXLOCKDOWNS=256 - Max amount of lockdowns allowed in a multi MAXVENDORS=10 - Max amount of vendors allowed in a multi MAXBANS=50 - Max amount of bans in a multi's ban list MAXFRIENDS=50 - Max amount of friends in a multi's friend list MAXGUESTS=50 - Max amount of guests in a multi's guest list MAXOWNERS=8 - Max amount of owners and co-owners in a multi's owner list MAXTRASHCONTAINERS=1 - Max amount of trash containers allowed in multi SCRIPT=<scriptID> - Assign a JS script-ID directly to a multi FRONTDOOR - indicates that a door is the front door of a house. Cannot be locked in public houses! INTERIORDOOR - indicates that a door is an interior door of a house. Can be locked in public houses. BANX - Location X offset for multi's ban location, if not used, will try to use SE corner of multi instead BANY - Location Y offset for multi's ban location, if not used, will try to use SE corner of multi instead Added JS Event: onHouseCommand( tSock, multiObj, cmdID ) - For handling spoken house commands via JS scripts attached to multi. Updated JS Events: onEntrance() - can now trigger both for multi being entered and/or object entering onLeaving() - can now trigger both for multi being left and/or object entering onSpeech() - can now also trigger for items (in addition to chars) with event & script attached, if UOX.INI setting ITEMSDETECTSPEECH is enabled Added JS Multi methods: .IsBoat() - Returns whether the item (or multi) is a boat .IsOwner( playerToCheck ) - Returns whether a player is the owner of a multi .IsOnOwnerList( playerToCheck ) - Returns whether a player is on the (co-)owner list of a multi .IsOnFriendList( playerToCheck ) - Returns whether a player is on the friend list of a multi .IsOnGuestList( playerToCheck ) - Returns whether a player is on the guest list of a multi .IsOnBanList( playerToCheck ) - Returns whether a player is on the ban list of a multi .AddToFriendList( playertoAdd ) - Adds player to the friend list of a multi .RemoveFromFriendList( playertoRemove ) - Removes player from the friend list of a multi .AddToGuestList( playertoAdd ) - Adds player to the guest list of a multi .RemoveFromGuestList( playertoRemove ) - Removes player from the guest list of a multi .ClearOwnerList() - Clears all entries from a multi's (co-)owner list .ClearFriendList() - Clears all entries from a multi's friend list .ClearGuestList() - Clears all entries from a multi's guest list .ClearBanList() - Clears all entries from a multi's ban list .SecureContainer( itemToSecure ) - Secures a container in a multi .UnsecureContainer( itemToUnsecure ) - Unsecures a container in a multi .IsSecureContainer( itemToCheck ) - Checks if specified item is a secure container in a multi .LockDownItem( itemToLockDown) - Locks down an item in a multi .ReleaseItem( itemToRelease ) - Releases a locked down item in a multi .KillKeys() - Deletes ALL keys associated with a multi .AddTrashCont( itemToAdd ) - Add trash container to multi's list of trash containers .RemoveTrashCont( itemToRemove ) - Remove trash container from multi's list of trash containers Added JS Item (Multi only) properties: .lockdowns - Get the number of lockdowns in a multi .maxLockdowns - Get/Set the max number of lockdowns allowed in a multi .secureContainers - Get the number of secure containers in a multi .maxSecureContainers - Get/Set the max number of secure containers allowed in a multi .trashContainers - Get the number of trash containers in a multi .maxTrashContainers - Get/Set the max number of trash containers allowed in a multi .friends - Get the number of friends in a multi's friend list .maxFriends - Get/Set the max number of friends allowed in a multi's friend list .guests - Get the number of guests in a multi's guest list .maxGuests - Get/Set the max number of guests allowed in a multi's guest list .owners - Get the number of owners in a multi's owner list .maxOwners - Get/Set the max number of owners allowed in a multi's owner list .bans - Get the number of banned players in a multi's ban list .maxBans - Get/Set the max number of banned players allowed in a multi's ban list .vendors - Get the number of player vendors in a multi .maxVendors - Get the max number of player vendors allowed in a multi .deed - Get the item sectionID for deed used to place multi .isPublic - Get/Set the private/public state of a multi .buildTimestamp - Get the timestamp for when the house was originally placed .tradeTimestamp - Get the timestamp for when the house was last traded to another player .banX - Get/Set the ban location X offset for the multi .banY - Get/Set the ban location Y offset for the multi Added JS Character properties: .multi = Get/Set the multi object the character is in .accountNum = Get the account number the character belongs to .housesOwned = Get a count of houses owned by the character .housesCoOwned = Get a count of houses co-owned by the character Updated JS cBaseObject Methods .FirstItem(), .NextItem() and .FinishedItems() to also support iterating through items in multis Updated JS multi Methods .FirstChar(), .NextChar() and .FinishedChars() to support an additional parameter to specify what kind of characters to loop through: "default" or no parameter - all characters inside the multi "owner" - players on multi's owner list "friend" - players on multi's friend list "guest" - players on multi's guest list "banned" - players on multi's ban list Added new INI tags to a new section of uox.ini called [houses] DECAYTIMERINHOUSE=3600 // Decay timer in seconds for non-locked down items inside houses PROTECTPRIVATEHOUSES=1 // Toggles whether private houses will automatically boot unauthorized visitors (1) or not (0) TRACKHOUSESPERACCOUNT=1 // Toggles whether to track (and restrict) house ownership per account (1) or per character (0) MAXHOUSESOWNABLE=1 // Specifies the max amount of houses a player can own per account/char, depending on how house ownership is tracked MAXHOUSESCOOWNABLE=10 // Specifies the max amount of houses a player can co-own per character CANOWNANDCOOWNHOUSES=1 // Toggles whether players can own and co-own houses at the same time COOWNHOUSESONSAMEACCOUNT=1 // Toggles whether characters on same account as house owner will be treated as co-owners Added new INI tags in [settings] section of uox.ini: ITEMSDETECTSPEECH=0 // If enabled, server will search for nearby items with onSpeech JS event running whenever a character speaks. Disabled by default. MAXPLAYERPACKITEMS=125 // Defines max item capacity for player (and NPC) backpacks. Defaults to 125. Moved most of the existing house functionality to JS and expanded upon it to reach feature parity with houses in regular UO around Publish 15/16, with various extras thrown in for good measure and all functionality being customizable: js/server/house/house.js (15000) - handles detection of house commands and characters entering/leaving houses js/server/house/houseSign.js (15001) - contains and handles all house-related gumps/menus and what is shown when players interact with house sign js/server/house/houseCommands.js (15002) - handles functionality of house commands and other functionality such as transfer of ownership, demolishing house, etc. js/server/house/houseDeed.js (15003) - handles initial rules that allow/disallow placement of additional houses for players All house-related menus now fully handled through JS All house commands and other functionality now fully handled through JS Removed redundant hard-coded house functionality Implemented Co-owners, friends, guests for houses, with access rules in place for entry, lockdowns, house commands, etc. Implemented Private and Public houses Implemented Secure Containers and Trash Barrels Definable max lockdowns, secure containers, player vendors, bans, friends, guests, owners, trash containers and more - per house type JS scripts can now be attached directly to houses Doors in houses can be marked as front doors or interior doors, and will be treated differently with regards to private and public houses Added new item to dfndata/items/containers/misc.dfn - [trashbarrel] Added new JS script (js/items/trashbarrel.js) with trash barrel functionality for houses. Trash barrels that are marked as secure containers are only accessible by owners, co-owners and friends of the house. Various options available at top of script. Updated js/items/axe.js to support chopping up trash barrels and house add-ons in houses owned by the player Fixed an issue with house doors being left behind after demolishing houses while their doors were open Fixed an issue where GMs could be banned from player houses Added Line of Sight checks to speech, to give players some privacy in their own homes Updated house placement code to more accurately check for other multis, dynamic and static objects when placing houses; now requires free space around each house that cannot be blocked by other houses or items that can block player movement, and disallows placement of houses on roads Updated house placement code to move characters blocking house placement to SE corner of the house Updated house placement code to disallow placing houses in guarded regions, or in dungeons Added new DFN tag for regions to enable/disable player houses in specific regions: HOUSING=0/1 Added new region (247) that covers path to Valley of Eodon in Felucca Added new region (248) that covers Valley of Eodon in Ter-Mur, with player housing disabled Added new region (249) that covers entire T2A lands, with player housing disabled Updated SPACEX and SPACEY values for all houses in dfndata/house/house.dfn to match updated house placement code Added new JS property to Regions that can be used to determine or change state of player housing in a region: .canPlaceHouse() Updated rules for usage of dye tubs to dye locked down items; now only house owners or co-owners may dye locked down items Updated rules for usage of the following locked down items in a house, which are now only usable by house owners and co-owners Dyes, Guildstone Deeds, Recall Runes (renaming), Rename Deeds, Townstone Deeds, House Deeds, Boat Models, Player Vendor Deeds, Ore, Hair Dye Updated rules for usage of the following locked down items in a house, which are now only usable by house owners, co-owners and friends: Keys, Dye Tubs, Magic Scrolls, Fireworks Wands, Magic Wands, Smithing Tools, Mining Tools, Fishing Poles Updated item lockdown rules to allow locking down (and releasing) items in a container as long as the container is locked down, and to only allow releasing a locked down container if it's empty of locked down items Updated item lockdown rules to only allow locking down movement-blocking items further than 2 tiles away from doors Updated rules for releasing items in houses - now the house owner can release any locked down items, co-owners can release items locked down by themselves or by friends, while friends can release only items locked down by themselves Added some feedback to player about why their attempted house placement failed Items added by GMs directly into multis will now decay based on the house-specific decay timer instead of the regular one Fixed an issue that could cause items to almost instantly decay after being released from lockdown in a house Placing house add-ons now properly takes into account SPACEX and SPACEY values when checking if they can fit in selected area of houses Re-added SPACEX and SPACEY values for Pentagram and Loom house add-ons House add-ons can now be converted back into house add-on deeds by chopping them with an axe Added new item type - IT_HOUSEADDON (201) - used by house add-ons placed in player houses Fixed a bug where keys would stop working after being added to a keyring, and would turn into blank keys upon release from the keyring Added visitor count for public player houses, which keeps track of how many visits a public house has received, with each player counted max 1 time every 24 hours Fixed an issue with FindPlayersInOldVisrange() where it didn't take into account that players could see buildings further away than the standard update range. This could cause players to see ghost images of buildings if they were at the "right" distance when the building was being demolished Added NODECAY tag to all signs and doors in dfndata/house/house.dfn Added FRONTDOOR or INTERIORDOOR (as appropriate) to all doors in dfndata/house/house.dfn Added BANX and BANY to specify ban location for some houses in dfndata/house/house.dfn instead of relying on finding SE corner automatically Implemented strongboxes (js/server/house/strongbox.js) for co-owners of a house, which can be placed with the house command "i wish to place a strongbox". Max capacity is 25 items Updated 'REMOVE command to take an optional parameter - itemID. If supplied, the command will remove all items with this itemID from a targeted container Fixed a bug when checking if dynamic items were blocking valid spawn locations for NPCs, some function arguments were in the wrong order! Improved code that finds valid spawn locations for items and NPCs spawned via spawn regions. As server gradually builds up lists of valid spawn locations per region over time, it will start using these lists more often, rather than always look for brand new spawn locations. Fixed a bug with CMulHandler::CheckStaticFlag() that prevented NPCs from spawning inside buildings with no static floors! Fixed an issue with repeating commands that prevented GMs from being able to cancel them when using the ClassicUO client Exposed character property .accountNum to JS engine Extended CDataList class to include a Clear() method for clearing lists Updated JS File method .Open() to support an optional, third argument - subFolderName - that defines in which sub-folder of UOX3/shared/ to store/look for a file. If no third argument is supplied, UOX3 will default to using the shared folder itself. Updated JS File method .Length() to return a value of -1 for files that don't exist Added new code function, exposed to JS engine with same parameters, which simply checks if a given tile ID has a specific flag bool CheckTileFlag( UI16 itemID, TILEFLAG flagToCheck ) Added JS function used to find the root container of an item (if any) FindRootContainer( itemSerial ) FindRootContainer( item ) Added new JS function that allows deleting files from UOX3/shared/ folder or subfolders of shared folder. If no subFolderName is provided, looks for file directly in shared folder itself. Restrictions on file- and folder-names apply. bool DeleteFile( fileName, subFolderName ) Added new JS functions for checking if a specific client or server feature is enabled. See documentation for full list of client/server features. GetClientFeature( bitNum ) // Returns true if specified client feature is enabled on server GetServerFeature( bitNum ) // Returns true if specified server feature is enabled on server Added new JS function for returning the value of almost any server setting from UOX.INI GetServerSetting( settingNameInDoubleQuotes ) Updated JS function DoesDynamicBlock() with two new parameters - checkOnlyMultis and checkOnlyNonMultis Updated JS function DoesMapBlock() with two new parameters - checkMultiPlacement and checkForRoad Fixed an issue where a LoS check would prevent players from accessing containers in their own backpack Added new functions in findfuncs.cpp to make it easier to find items near another object or location: findNearbyItems( object, distance ) findNearbyItems( x, y, worldNumber, instanceID, distance ) Added new Item property - maxItems - used by containers to determine their max item capacity Added new Item property - totalItemCount - used to get total item count in a container (including sub-containers) Added check for max item capacity when creating new items that are added to a character's backpack - items will be created below character's feet if backpack is full! Added new DFN tag for items, used by containers to determine item capacity for a given container: MAXITEMS=# // 125 is the default for all containers if not set Added new JS Item properties: .maxItems // gets/sets item capacity for a given container .totalItemCount // gets total item count in a container, including sub-containers Updated item tooltips for containers to show accurate total item count, as well as to display max item capacity Fixed a bug where picking up items from a non-locked down pile of items on the floor inside a multi could cause the remaining pile to be seen as no longer inside the multi, disallowing locking it back down and causing it to decay based on regular decay timer instead of house-specific one Updated JS command set to allow setting poison-level on items ('set poison #) and hunger-level on characters ('set hunger #) Fixed an issue with js/item/food.js that prevented poisoned food from poisoning characters when eaten Fixed an issue with js/skill/poisoning.js that prevented players from poisoning food! Updated various JS scripts and hardcoded targeting functions to disallow the targeting of locked down resources using skills and tools Updated JS Method TextMessage() to support three extra, optional parameters. Note that if one optional parameter is included, all preceding optional parameters are also required! speechTarget - What kind of target is this message intended for? 0 - Only visible for sender and receiver of message 1 - Visible to all players in range 2 - Visible to all NPCs and players in range 3 - Visible to all PCs everywhere + NPCs in range 4 - Visible to all PCs everywhere (broadcast) 5 - Only visible for the receiver of the message speechTargetSerial - The serial of the receiver of the message, used if speechTarget is 0 or 5 speechFontType - The type of font to display the text in. Defaults to normal. 0 - Bold 1 - Normal with shadow 2 - Bold with shadow 3 - Normal 4 - Gothic 5 - Italic 6 - Small, dark 7 - Colourful 8 - Runic (only works with CAPS) 9 - Small, light Added timestamp to worldsaves in console, to make it easier to see when a particular world-save was done Added info about compiler/environment displayed at the top of the UOX3 console during startup Updated dictionary files with new messages primarily related to housing
2020-11-04 02:00:37 +08:00
break;
case CIP_MAXSECURECONTAINERS:
if( gPriv->GetObjType() == OT_MULTI )
{
( static_cast<CMultiObj *>( gPriv ))->SetMaxSecureContainers( static_cast<UI16>( encaps.toInt() ));
}
Housing Revamp and more Updated JS SysMessage function to accept up to 10 extra, optional arguments, which can be used with dictionary messages that require additional parameters like %s or %i Added new type of house privilege in cMultiObj.cpp to keep track of friends of the multi - HOUSEPRIV_FRIEND - which is stored during worldsaves as one or more Friend=<player serial> tags in house.wsc Added new type of house privilege in cMultiObj.cpp to keep track of guests of the multi - HOUSEPRIV_GUEST - which is stored during worldsaves as one or more Guest=<player serial> tags in house.wsc When items are created for houses upon house placement, a reference to the multi's serial is now stored in the house sign's MORE property to allow easier tracking of which house a particular sign belongs to Added tracking of new, persistent properties for houses via cMultiObj.cpp/h: lockdowns, secure containers, vendors, guests, friends, owners, ban location, public status, number of visits, timestamps Added a multitude of new methods in cMultiObj.cpp/h to assist in improving the functionality of houses Added new tags for houses in house.dfn (default values applied if tag not specified): MAXSECURECONTAINERS=4 - Max amount of secure containers allowed in a multi MAXLOCKDOWNS=256 - Max amount of lockdowns allowed in a multi MAXVENDORS=10 - Max amount of vendors allowed in a multi MAXBANS=50 - Max amount of bans in a multi's ban list MAXFRIENDS=50 - Max amount of friends in a multi's friend list MAXGUESTS=50 - Max amount of guests in a multi's guest list MAXOWNERS=8 - Max amount of owners and co-owners in a multi's owner list MAXTRASHCONTAINERS=1 - Max amount of trash containers allowed in multi SCRIPT=<scriptID> - Assign a JS script-ID directly to a multi FRONTDOOR - indicates that a door is the front door of a house. Cannot be locked in public houses! INTERIORDOOR - indicates that a door is an interior door of a house. Can be locked in public houses. BANX - Location X offset for multi's ban location, if not used, will try to use SE corner of multi instead BANY - Location Y offset for multi's ban location, if not used, will try to use SE corner of multi instead Added JS Event: onHouseCommand( tSock, multiObj, cmdID ) - For handling spoken house commands via JS scripts attached to multi. Updated JS Events: onEntrance() - can now trigger both for multi being entered and/or object entering onLeaving() - can now trigger both for multi being left and/or object entering onSpeech() - can now also trigger for items (in addition to chars) with event & script attached, if UOX.INI setting ITEMSDETECTSPEECH is enabled Added JS Multi methods: .IsBoat() - Returns whether the item (or multi) is a boat .IsOwner( playerToCheck ) - Returns whether a player is the owner of a multi .IsOnOwnerList( playerToCheck ) - Returns whether a player is on the (co-)owner list of a multi .IsOnFriendList( playerToCheck ) - Returns whether a player is on the friend list of a multi .IsOnGuestList( playerToCheck ) - Returns whether a player is on the guest list of a multi .IsOnBanList( playerToCheck ) - Returns whether a player is on the ban list of a multi .AddToFriendList( playertoAdd ) - Adds player to the friend list of a multi .RemoveFromFriendList( playertoRemove ) - Removes player from the friend list of a multi .AddToGuestList( playertoAdd ) - Adds player to the guest list of a multi .RemoveFromGuestList( playertoRemove ) - Removes player from the guest list of a multi .ClearOwnerList() - Clears all entries from a multi's (co-)owner list .ClearFriendList() - Clears all entries from a multi's friend list .ClearGuestList() - Clears all entries from a multi's guest list .ClearBanList() - Clears all entries from a multi's ban list .SecureContainer( itemToSecure ) - Secures a container in a multi .UnsecureContainer( itemToUnsecure ) - Unsecures a container in a multi .IsSecureContainer( itemToCheck ) - Checks if specified item is a secure container in a multi .LockDownItem( itemToLockDown) - Locks down an item in a multi .ReleaseItem( itemToRelease ) - Releases a locked down item in a multi .KillKeys() - Deletes ALL keys associated with a multi .AddTrashCont( itemToAdd ) - Add trash container to multi's list of trash containers .RemoveTrashCont( itemToRemove ) - Remove trash container from multi's list of trash containers Added JS Item (Multi only) properties: .lockdowns - Get the number of lockdowns in a multi .maxLockdowns - Get/Set the max number of lockdowns allowed in a multi .secureContainers - Get the number of secure containers in a multi .maxSecureContainers - Get/Set the max number of secure containers allowed in a multi .trashContainers - Get the number of trash containers in a multi .maxTrashContainers - Get/Set the max number of trash containers allowed in a multi .friends - Get the number of friends in a multi's friend list .maxFriends - Get/Set the max number of friends allowed in a multi's friend list .guests - Get the number of guests in a multi's guest list .maxGuests - Get/Set the max number of guests allowed in a multi's guest list .owners - Get the number of owners in a multi's owner list .maxOwners - Get/Set the max number of owners allowed in a multi's owner list .bans - Get the number of banned players in a multi's ban list .maxBans - Get/Set the max number of banned players allowed in a multi's ban list .vendors - Get the number of player vendors in a multi .maxVendors - Get the max number of player vendors allowed in a multi .deed - Get the item sectionID for deed used to place multi .isPublic - Get/Set the private/public state of a multi .buildTimestamp - Get the timestamp for when the house was originally placed .tradeTimestamp - Get the timestamp for when the house was last traded to another player .banX - Get/Set the ban location X offset for the multi .banY - Get/Set the ban location Y offset for the multi Added JS Character properties: .multi = Get/Set the multi object the character is in .accountNum = Get the account number the character belongs to .housesOwned = Get a count of houses owned by the character .housesCoOwned = Get a count of houses co-owned by the character Updated JS cBaseObject Methods .FirstItem(), .NextItem() and .FinishedItems() to also support iterating through items in multis Updated JS multi Methods .FirstChar(), .NextChar() and .FinishedChars() to support an additional parameter to specify what kind of characters to loop through: "default" or no parameter - all characters inside the multi "owner" - players on multi's owner list "friend" - players on multi's friend list "guest" - players on multi's guest list "banned" - players on multi's ban list Added new INI tags to a new section of uox.ini called [houses] DECAYTIMERINHOUSE=3600 // Decay timer in seconds for non-locked down items inside houses PROTECTPRIVATEHOUSES=1 // Toggles whether private houses will automatically boot unauthorized visitors (1) or not (0) TRACKHOUSESPERACCOUNT=1 // Toggles whether to track (and restrict) house ownership per account (1) or per character (0) MAXHOUSESOWNABLE=1 // Specifies the max amount of houses a player can own per account/char, depending on how house ownership is tracked MAXHOUSESCOOWNABLE=10 // Specifies the max amount of houses a player can co-own per character CANOWNANDCOOWNHOUSES=1 // Toggles whether players can own and co-own houses at the same time COOWNHOUSESONSAMEACCOUNT=1 // Toggles whether characters on same account as house owner will be treated as co-owners Added new INI tags in [settings] section of uox.ini: ITEMSDETECTSPEECH=0 // If enabled, server will search for nearby items with onSpeech JS event running whenever a character speaks. Disabled by default. MAXPLAYERPACKITEMS=125 // Defines max item capacity for player (and NPC) backpacks. Defaults to 125. Moved most of the existing house functionality to JS and expanded upon it to reach feature parity with houses in regular UO around Publish 15/16, with various extras thrown in for good measure and all functionality being customizable: js/server/house/house.js (15000) - handles detection of house commands and characters entering/leaving houses js/server/house/houseSign.js (15001) - contains and handles all house-related gumps/menus and what is shown when players interact with house sign js/server/house/houseCommands.js (15002) - handles functionality of house commands and other functionality such as transfer of ownership, demolishing house, etc. js/server/house/houseDeed.js (15003) - handles initial rules that allow/disallow placement of additional houses for players All house-related menus now fully handled through JS All house commands and other functionality now fully handled through JS Removed redundant hard-coded house functionality Implemented Co-owners, friends, guests for houses, with access rules in place for entry, lockdowns, house commands, etc. Implemented Private and Public houses Implemented Secure Containers and Trash Barrels Definable max lockdowns, secure containers, player vendors, bans, friends, guests, owners, trash containers and more - per house type JS scripts can now be attached directly to houses Doors in houses can be marked as front doors or interior doors, and will be treated differently with regards to private and public houses Added new item to dfndata/items/containers/misc.dfn - [trashbarrel] Added new JS script (js/items/trashbarrel.js) with trash barrel functionality for houses. Trash barrels that are marked as secure containers are only accessible by owners, co-owners and friends of the house. Various options available at top of script. Updated js/items/axe.js to support chopping up trash barrels and house add-ons in houses owned by the player Fixed an issue with house doors being left behind after demolishing houses while their doors were open Fixed an issue where GMs could be banned from player houses Added Line of Sight checks to speech, to give players some privacy in their own homes Updated house placement code to more accurately check for other multis, dynamic and static objects when placing houses; now requires free space around each house that cannot be blocked by other houses or items that can block player movement, and disallows placement of houses on roads Updated house placement code to move characters blocking house placement to SE corner of the house Updated house placement code to disallow placing houses in guarded regions, or in dungeons Added new DFN tag for regions to enable/disable player houses in specific regions: HOUSING=0/1 Added new region (247) that covers path to Valley of Eodon in Felucca Added new region (248) that covers Valley of Eodon in Ter-Mur, with player housing disabled Added new region (249) that covers entire T2A lands, with player housing disabled Updated SPACEX and SPACEY values for all houses in dfndata/house/house.dfn to match updated house placement code Added new JS property to Regions that can be used to determine or change state of player housing in a region: .canPlaceHouse() Updated rules for usage of dye tubs to dye locked down items; now only house owners or co-owners may dye locked down items Updated rules for usage of the following locked down items in a house, which are now only usable by house owners and co-owners Dyes, Guildstone Deeds, Recall Runes (renaming), Rename Deeds, Townstone Deeds, House Deeds, Boat Models, Player Vendor Deeds, Ore, Hair Dye Updated rules for usage of the following locked down items in a house, which are now only usable by house owners, co-owners and friends: Keys, Dye Tubs, Magic Scrolls, Fireworks Wands, Magic Wands, Smithing Tools, Mining Tools, Fishing Poles Updated item lockdown rules to allow locking down (and releasing) items in a container as long as the container is locked down, and to only allow releasing a locked down container if it's empty of locked down items Updated item lockdown rules to only allow locking down movement-blocking items further than 2 tiles away from doors Updated rules for releasing items in houses - now the house owner can release any locked down items, co-owners can release items locked down by themselves or by friends, while friends can release only items locked down by themselves Added some feedback to player about why their attempted house placement failed Items added by GMs directly into multis will now decay based on the house-specific decay timer instead of the regular one Fixed an issue that could cause items to almost instantly decay after being released from lockdown in a house Placing house add-ons now properly takes into account SPACEX and SPACEY values when checking if they can fit in selected area of houses Re-added SPACEX and SPACEY values for Pentagram and Loom house add-ons House add-ons can now be converted back into house add-on deeds by chopping them with an axe Added new item type - IT_HOUSEADDON (201) - used by house add-ons placed in player houses Fixed a bug where keys would stop working after being added to a keyring, and would turn into blank keys upon release from the keyring Added visitor count for public player houses, which keeps track of how many visits a public house has received, with each player counted max 1 time every 24 hours Fixed an issue with FindPlayersInOldVisrange() where it didn't take into account that players could see buildings further away than the standard update range. This could cause players to see ghost images of buildings if they were at the "right" distance when the building was being demolished Added NODECAY tag to all signs and doors in dfndata/house/house.dfn Added FRONTDOOR or INTERIORDOOR (as appropriate) to all doors in dfndata/house/house.dfn Added BANX and BANY to specify ban location for some houses in dfndata/house/house.dfn instead of relying on finding SE corner automatically Implemented strongboxes (js/server/house/strongbox.js) for co-owners of a house, which can be placed with the house command "i wish to place a strongbox". Max capacity is 25 items Updated 'REMOVE command to take an optional parameter - itemID. If supplied, the command will remove all items with this itemID from a targeted container Fixed a bug when checking if dynamic items were blocking valid spawn locations for NPCs, some function arguments were in the wrong order! Improved code that finds valid spawn locations for items and NPCs spawned via spawn regions. As server gradually builds up lists of valid spawn locations per region over time, it will start using these lists more often, rather than always look for brand new spawn locations. Fixed a bug with CMulHandler::CheckStaticFlag() that prevented NPCs from spawning inside buildings with no static floors! Fixed an issue with repeating commands that prevented GMs from being able to cancel them when using the ClassicUO client Exposed character property .accountNum to JS engine Extended CDataList class to include a Clear() method for clearing lists Updated JS File method .Open() to support an optional, third argument - subFolderName - that defines in which sub-folder of UOX3/shared/ to store/look for a file. If no third argument is supplied, UOX3 will default to using the shared folder itself. Updated JS File method .Length() to return a value of -1 for files that don't exist Added new code function, exposed to JS engine with same parameters, which simply checks if a given tile ID has a specific flag bool CheckTileFlag( UI16 itemID, TILEFLAG flagToCheck ) Added JS function used to find the root container of an item (if any) FindRootContainer( itemSerial ) FindRootContainer( item ) Added new JS function that allows deleting files from UOX3/shared/ folder or subfolders of shared folder. If no subFolderName is provided, looks for file directly in shared folder itself. Restrictions on file- and folder-names apply. bool DeleteFile( fileName, subFolderName ) Added new JS functions for checking if a specific client or server feature is enabled. See documentation for full list of client/server features. GetClientFeature( bitNum ) // Returns true if specified client feature is enabled on server GetServerFeature( bitNum ) // Returns true if specified server feature is enabled on server Added new JS function for returning the value of almost any server setting from UOX.INI GetServerSetting( settingNameInDoubleQuotes ) Updated JS function DoesDynamicBlock() with two new parameters - checkOnlyMultis and checkOnlyNonMultis Updated JS function DoesMapBlock() with two new parameters - checkMultiPlacement and checkForRoad Fixed an issue where a LoS check would prevent players from accessing containers in their own backpack Added new functions in findfuncs.cpp to make it easier to find items near another object or location: findNearbyItems( object, distance ) findNearbyItems( x, y, worldNumber, instanceID, distance ) Added new Item property - maxItems - used by containers to determine their max item capacity Added new Item property - totalItemCount - used to get total item count in a container (including sub-containers) Added check for max item capacity when creating new items that are added to a character's backpack - items will be created below character's feet if backpack is full! Added new DFN tag for items, used by containers to determine item capacity for a given container: MAXITEMS=# // 125 is the default for all containers if not set Added new JS Item properties: .maxItems // gets/sets item capacity for a given container .totalItemCount // gets total item count in a container, including sub-containers Updated item tooltips for containers to show accurate total item count, as well as to display max item capacity Fixed a bug where picking up items from a non-locked down pile of items on the floor inside a multi could cause the remaining pile to be seen as no longer inside the multi, disallowing locking it back down and causing it to decay based on regular decay timer instead of house-specific one Updated JS command set to allow setting poison-level on items ('set poison #) and hunger-level on characters ('set hunger #) Fixed an issue with js/item/food.js that prevented poisoned food from poisoning characters when eaten Fixed an issue with js/skill/poisoning.js that prevented players from poisoning food! Updated various JS scripts and hardcoded targeting functions to disallow the targeting of locked down resources using skills and tools Updated JS Method TextMessage() to support three extra, optional parameters. Note that if one optional parameter is included, all preceding optional parameters are also required! speechTarget - What kind of target is this message intended for? 0 - Only visible for sender and receiver of message 1 - Visible to all players in range 2 - Visible to all NPCs and players in range 3 - Visible to all PCs everywhere + NPCs in range 4 - Visible to all PCs everywhere (broadcast) 5 - Only visible for the receiver of the message speechTargetSerial - The serial of the receiver of the message, used if speechTarget is 0 or 5 speechFontType - The type of font to display the text in. Defaults to normal. 0 - Bold 1 - Normal with shadow 2 - Bold with shadow 3 - Normal 4 - Gothic 5 - Italic 6 - Small, dark 7 - Colourful 8 - Runic (only works with CAPS) 9 - Small, light Added timestamp to worldsaves in console, to make it easier to see when a particular world-save was done Added info about compiler/environment displayed at the top of the UOX3 console during startup Updated dictionary files with new messages primarily related to housing
2020-11-04 02:00:37 +08:00
break;
case CIP_MAXFRIENDS:
if( gPriv->GetObjType() == OT_MULTI )
{
( static_cast<CMultiObj *>( gPriv ))->SetMaxFriends( static_cast<UI16>( encaps.toInt() ));
}
Housing Revamp and more Updated JS SysMessage function to accept up to 10 extra, optional arguments, which can be used with dictionary messages that require additional parameters like %s or %i Added new type of house privilege in cMultiObj.cpp to keep track of friends of the multi - HOUSEPRIV_FRIEND - which is stored during worldsaves as one or more Friend=<player serial> tags in house.wsc Added new type of house privilege in cMultiObj.cpp to keep track of guests of the multi - HOUSEPRIV_GUEST - which is stored during worldsaves as one or more Guest=<player serial> tags in house.wsc When items are created for houses upon house placement, a reference to the multi's serial is now stored in the house sign's MORE property to allow easier tracking of which house a particular sign belongs to Added tracking of new, persistent properties for houses via cMultiObj.cpp/h: lockdowns, secure containers, vendors, guests, friends, owners, ban location, public status, number of visits, timestamps Added a multitude of new methods in cMultiObj.cpp/h to assist in improving the functionality of houses Added new tags for houses in house.dfn (default values applied if tag not specified): MAXSECURECONTAINERS=4 - Max amount of secure containers allowed in a multi MAXLOCKDOWNS=256 - Max amount of lockdowns allowed in a multi MAXVENDORS=10 - Max amount of vendors allowed in a multi MAXBANS=50 - Max amount of bans in a multi's ban list MAXFRIENDS=50 - Max amount of friends in a multi's friend list MAXGUESTS=50 - Max amount of guests in a multi's guest list MAXOWNERS=8 - Max amount of owners and co-owners in a multi's owner list MAXTRASHCONTAINERS=1 - Max amount of trash containers allowed in multi SCRIPT=<scriptID> - Assign a JS script-ID directly to a multi FRONTDOOR - indicates that a door is the front door of a house. Cannot be locked in public houses! INTERIORDOOR - indicates that a door is an interior door of a house. Can be locked in public houses. BANX - Location X offset for multi's ban location, if not used, will try to use SE corner of multi instead BANY - Location Y offset for multi's ban location, if not used, will try to use SE corner of multi instead Added JS Event: onHouseCommand( tSock, multiObj, cmdID ) - For handling spoken house commands via JS scripts attached to multi. Updated JS Events: onEntrance() - can now trigger both for multi being entered and/or object entering onLeaving() - can now trigger both for multi being left and/or object entering onSpeech() - can now also trigger for items (in addition to chars) with event & script attached, if UOX.INI setting ITEMSDETECTSPEECH is enabled Added JS Multi methods: .IsBoat() - Returns whether the item (or multi) is a boat .IsOwner( playerToCheck ) - Returns whether a player is the owner of a multi .IsOnOwnerList( playerToCheck ) - Returns whether a player is on the (co-)owner list of a multi .IsOnFriendList( playerToCheck ) - Returns whether a player is on the friend list of a multi .IsOnGuestList( playerToCheck ) - Returns whether a player is on the guest list of a multi .IsOnBanList( playerToCheck ) - Returns whether a player is on the ban list of a multi .AddToFriendList( playertoAdd ) - Adds player to the friend list of a multi .RemoveFromFriendList( playertoRemove ) - Removes player from the friend list of a multi .AddToGuestList( playertoAdd ) - Adds player to the guest list of a multi .RemoveFromGuestList( playertoRemove ) - Removes player from the guest list of a multi .ClearOwnerList() - Clears all entries from a multi's (co-)owner list .ClearFriendList() - Clears all entries from a multi's friend list .ClearGuestList() - Clears all entries from a multi's guest list .ClearBanList() - Clears all entries from a multi's ban list .SecureContainer( itemToSecure ) - Secures a container in a multi .UnsecureContainer( itemToUnsecure ) - Unsecures a container in a multi .IsSecureContainer( itemToCheck ) - Checks if specified item is a secure container in a multi .LockDownItem( itemToLockDown) - Locks down an item in a multi .ReleaseItem( itemToRelease ) - Releases a locked down item in a multi .KillKeys() - Deletes ALL keys associated with a multi .AddTrashCont( itemToAdd ) - Add trash container to multi's list of trash containers .RemoveTrashCont( itemToRemove ) - Remove trash container from multi's list of trash containers Added JS Item (Multi only) properties: .lockdowns - Get the number of lockdowns in a multi .maxLockdowns - Get/Set the max number of lockdowns allowed in a multi .secureContainers - Get the number of secure containers in a multi .maxSecureContainers - Get/Set the max number of secure containers allowed in a multi .trashContainers - Get the number of trash containers in a multi .maxTrashContainers - Get/Set the max number of trash containers allowed in a multi .friends - Get the number of friends in a multi's friend list .maxFriends - Get/Set the max number of friends allowed in a multi's friend list .guests - Get the number of guests in a multi's guest list .maxGuests - Get/Set the max number of guests allowed in a multi's guest list .owners - Get the number of owners in a multi's owner list .maxOwners - Get/Set the max number of owners allowed in a multi's owner list .bans - Get the number of banned players in a multi's ban list .maxBans - Get/Set the max number of banned players allowed in a multi's ban list .vendors - Get the number of player vendors in a multi .maxVendors - Get the max number of player vendors allowed in a multi .deed - Get the item sectionID for deed used to place multi .isPublic - Get/Set the private/public state of a multi .buildTimestamp - Get the timestamp for when the house was originally placed .tradeTimestamp - Get the timestamp for when the house was last traded to another player .banX - Get/Set the ban location X offset for the multi .banY - Get/Set the ban location Y offset for the multi Added JS Character properties: .multi = Get/Set the multi object the character is in .accountNum = Get the account number the character belongs to .housesOwned = Get a count of houses owned by the character .housesCoOwned = Get a count of houses co-owned by the character Updated JS cBaseObject Methods .FirstItem(), .NextItem() and .FinishedItems() to also support iterating through items in multis Updated JS multi Methods .FirstChar(), .NextChar() and .FinishedChars() to support an additional parameter to specify what kind of characters to loop through: "default" or no parameter - all characters inside the multi "owner" - players on multi's owner list "friend" - players on multi's friend list "guest" - players on multi's guest list "banned" - players on multi's ban list Added new INI tags to a new section of uox.ini called [houses] DECAYTIMERINHOUSE=3600 // Decay timer in seconds for non-locked down items inside houses PROTECTPRIVATEHOUSES=1 // Toggles whether private houses will automatically boot unauthorized visitors (1) or not (0) TRACKHOUSESPERACCOUNT=1 // Toggles whether to track (and restrict) house ownership per account (1) or per character (0) MAXHOUSESOWNABLE=1 // Specifies the max amount of houses a player can own per account/char, depending on how house ownership is tracked MAXHOUSESCOOWNABLE=10 // Specifies the max amount of houses a player can co-own per character CANOWNANDCOOWNHOUSES=1 // Toggles whether players can own and co-own houses at the same time COOWNHOUSESONSAMEACCOUNT=1 // Toggles whether characters on same account as house owner will be treated as co-owners Added new INI tags in [settings] section of uox.ini: ITEMSDETECTSPEECH=0 // If enabled, server will search for nearby items with onSpeech JS event running whenever a character speaks. Disabled by default. MAXPLAYERPACKITEMS=125 // Defines max item capacity for player (and NPC) backpacks. Defaults to 125. Moved most of the existing house functionality to JS and expanded upon it to reach feature parity with houses in regular UO around Publish 15/16, with various extras thrown in for good measure and all functionality being customizable: js/server/house/house.js (15000) - handles detection of house commands and characters entering/leaving houses js/server/house/houseSign.js (15001) - contains and handles all house-related gumps/menus and what is shown when players interact with house sign js/server/house/houseCommands.js (15002) - handles functionality of house commands and other functionality such as transfer of ownership, demolishing house, etc. js/server/house/houseDeed.js (15003) - handles initial rules that allow/disallow placement of additional houses for players All house-related menus now fully handled through JS All house commands and other functionality now fully handled through JS Removed redundant hard-coded house functionality Implemented Co-owners, friends, guests for houses, with access rules in place for entry, lockdowns, house commands, etc. Implemented Private and Public houses Implemented Secure Containers and Trash Barrels Definable max lockdowns, secure containers, player vendors, bans, friends, guests, owners, trash containers and more - per house type JS scripts can now be attached directly to houses Doors in houses can be marked as front doors or interior doors, and will be treated differently with regards to private and public houses Added new item to dfndata/items/containers/misc.dfn - [trashbarrel] Added new JS script (js/items/trashbarrel.js) with trash barrel functionality for houses. Trash barrels that are marked as secure containers are only accessible by owners, co-owners and friends of the house. Various options available at top of script. Updated js/items/axe.js to support chopping up trash barrels and house add-ons in houses owned by the player Fixed an issue with house doors being left behind after demolishing houses while their doors were open Fixed an issue where GMs could be banned from player houses Added Line of Sight checks to speech, to give players some privacy in their own homes Updated house placement code to more accurately check for other multis, dynamic and static objects when placing houses; now requires free space around each house that cannot be blocked by other houses or items that can block player movement, and disallows placement of houses on roads Updated house placement code to move characters blocking house placement to SE corner of the house Updated house placement code to disallow placing houses in guarded regions, or in dungeons Added new DFN tag for regions to enable/disable player houses in specific regions: HOUSING=0/1 Added new region (247) that covers path to Valley of Eodon in Felucca Added new region (248) that covers Valley of Eodon in Ter-Mur, with player housing disabled Added new region (249) that covers entire T2A lands, with player housing disabled Updated SPACEX and SPACEY values for all houses in dfndata/house/house.dfn to match updated house placement code Added new JS property to Regions that can be used to determine or change state of player housing in a region: .canPlaceHouse() Updated rules for usage of dye tubs to dye locked down items; now only house owners or co-owners may dye locked down items Updated rules for usage of the following locked down items in a house, which are now only usable by house owners and co-owners Dyes, Guildstone Deeds, Recall Runes (renaming), Rename Deeds, Townstone Deeds, House Deeds, Boat Models, Player Vendor Deeds, Ore, Hair Dye Updated rules for usage of the following locked down items in a house, which are now only usable by house owners, co-owners and friends: Keys, Dye Tubs, Magic Scrolls, Fireworks Wands, Magic Wands, Smithing Tools, Mining Tools, Fishing Poles Updated item lockdown rules to allow locking down (and releasing) items in a container as long as the container is locked down, and to only allow releasing a locked down container if it's empty of locked down items Updated item lockdown rules to only allow locking down movement-blocking items further than 2 tiles away from doors Updated rules for releasing items in houses - now the house owner can release any locked down items, co-owners can release items locked down by themselves or by friends, while friends can release only items locked down by themselves Added some feedback to player about why their attempted house placement failed Items added by GMs directly into multis will now decay based on the house-specific decay timer instead of the regular one Fixed an issue that could cause items to almost instantly decay after being released from lockdown in a house Placing house add-ons now properly takes into account SPACEX and SPACEY values when checking if they can fit in selected area of houses Re-added SPACEX and SPACEY values for Pentagram and Loom house add-ons House add-ons can now be converted back into house add-on deeds by chopping them with an axe Added new item type - IT_HOUSEADDON (201) - used by house add-ons placed in player houses Fixed a bug where keys would stop working after being added to a keyring, and would turn into blank keys upon release from the keyring Added visitor count for public player houses, which keeps track of how many visits a public house has received, with each player counted max 1 time every 24 hours Fixed an issue with FindPlayersInOldVisrange() where it didn't take into account that players could see buildings further away than the standard update range. This could cause players to see ghost images of buildings if they were at the "right" distance when the building was being demolished Added NODECAY tag to all signs and doors in dfndata/house/house.dfn Added FRONTDOOR or INTERIORDOOR (as appropriate) to all doors in dfndata/house/house.dfn Added BANX and BANY to specify ban location for some houses in dfndata/house/house.dfn instead of relying on finding SE corner automatically Implemented strongboxes (js/server/house/strongbox.js) for co-owners of a house, which can be placed with the house command "i wish to place a strongbox". Max capacity is 25 items Updated 'REMOVE command to take an optional parameter - itemID. If supplied, the command will remove all items with this itemID from a targeted container Fixed a bug when checking if dynamic items were blocking valid spawn locations for NPCs, some function arguments were in the wrong order! Improved code that finds valid spawn locations for items and NPCs spawned via spawn regions. As server gradually builds up lists of valid spawn locations per region over time, it will start using these lists more often, rather than always look for brand new spawn locations. Fixed a bug with CMulHandler::CheckStaticFlag() that prevented NPCs from spawning inside buildings with no static floors! Fixed an issue with repeating commands that prevented GMs from being able to cancel them when using the ClassicUO client Exposed character property .accountNum to JS engine Extended CDataList class to include a Clear() method for clearing lists Updated JS File method .Open() to support an optional, third argument - subFolderName - that defines in which sub-folder of UOX3/shared/ to store/look for a file. If no third argument is supplied, UOX3 will default to using the shared folder itself. Updated JS File method .Length() to return a value of -1 for files that don't exist Added new code function, exposed to JS engine with same parameters, which simply checks if a given tile ID has a specific flag bool CheckTileFlag( UI16 itemID, TILEFLAG flagToCheck ) Added JS function used to find the root container of an item (if any) FindRootContainer( itemSerial ) FindRootContainer( item ) Added new JS function that allows deleting files from UOX3/shared/ folder or subfolders of shared folder. If no subFolderName is provided, looks for file directly in shared folder itself. Restrictions on file- and folder-names apply. bool DeleteFile( fileName, subFolderName ) Added new JS functions for checking if a specific client or server feature is enabled. See documentation for full list of client/server features. GetClientFeature( bitNum ) // Returns true if specified client feature is enabled on server GetServerFeature( bitNum ) // Returns true if specified server feature is enabled on server Added new JS function for returning the value of almost any server setting from UOX.INI GetServerSetting( settingNameInDoubleQuotes ) Updated JS function DoesDynamicBlock() with two new parameters - checkOnlyMultis and checkOnlyNonMultis Updated JS function DoesMapBlock() with two new parameters - checkMultiPlacement and checkForRoad Fixed an issue where a LoS check would prevent players from accessing containers in their own backpack Added new functions in findfuncs.cpp to make it easier to find items near another object or location: findNearbyItems( object, distance ) findNearbyItems( x, y, worldNumber, instanceID, distance ) Added new Item property - maxItems - used by containers to determine their max item capacity Added new Item property - totalItemCount - used to get total item count in a container (including sub-containers) Added check for max item capacity when creating new items that are added to a character's backpack - items will be created below character's feet if backpack is full! Added new DFN tag for items, used by containers to determine item capacity for a given container: MAXITEMS=# // 125 is the default for all containers if not set Added new JS Item properties: .maxItems // gets/sets item capacity for a given container .totalItemCount // gets total item count in a container, including sub-containers Updated item tooltips for containers to show accurate total item count, as well as to display max item capacity Fixed a bug where picking up items from a non-locked down pile of items on the floor inside a multi could cause the remaining pile to be seen as no longer inside the multi, disallowing locking it back down and causing it to decay based on regular decay timer instead of house-specific one Updated JS command set to allow setting poison-level on items ('set poison #) and hunger-level on characters ('set hunger #) Fixed an issue with js/item/food.js that prevented poisoned food from poisoning characters when eaten Fixed an issue with js/skill/poisoning.js that prevented players from poisoning food! Updated various JS scripts and hardcoded targeting functions to disallow the targeting of locked down resources using skills and tools Updated JS Method TextMessage() to support three extra, optional parameters. Note that if one optional parameter is included, all preceding optional parameters are also required! speechTarget - What kind of target is this message intended for? 0 - Only visible for sender and receiver of message 1 - Visible to all players in range 2 - Visible to all NPCs and players in range 3 - Visible to all PCs everywhere + NPCs in range 4 - Visible to all PCs everywhere (broadcast) 5 - Only visible for the receiver of the message speechTargetSerial - The serial of the receiver of the message, used if speechTarget is 0 or 5 speechFontType - The type of font to display the text in. Defaults to normal. 0 - Bold 1 - Normal with shadow 2 - Bold with shadow 3 - Normal 4 - Gothic 5 - Italic 6 - Small, dark 7 - Colourful 8 - Runic (only works with CAPS) 9 - Small, light Added timestamp to worldsaves in console, to make it easier to see when a particular world-save was done Added info about compiler/environment displayed at the top of the UOX3 console during startup Updated dictionary files with new messages primarily related to housing
2020-11-04 02:00:37 +08:00
break;
case CIP_MAXGUESTS:
if( gPriv->GetObjType() == OT_MULTI )
{
( static_cast<CMultiObj *>( gPriv ))->SetMaxGuests( static_cast<UI16>( encaps.toInt() ));
}
Housing Revamp and more Updated JS SysMessage function to accept up to 10 extra, optional arguments, which can be used with dictionary messages that require additional parameters like %s or %i Added new type of house privilege in cMultiObj.cpp to keep track of friends of the multi - HOUSEPRIV_FRIEND - which is stored during worldsaves as one or more Friend=<player serial> tags in house.wsc Added new type of house privilege in cMultiObj.cpp to keep track of guests of the multi - HOUSEPRIV_GUEST - which is stored during worldsaves as one or more Guest=<player serial> tags in house.wsc When items are created for houses upon house placement, a reference to the multi's serial is now stored in the house sign's MORE property to allow easier tracking of which house a particular sign belongs to Added tracking of new, persistent properties for houses via cMultiObj.cpp/h: lockdowns, secure containers, vendors, guests, friends, owners, ban location, public status, number of visits, timestamps Added a multitude of new methods in cMultiObj.cpp/h to assist in improving the functionality of houses Added new tags for houses in house.dfn (default values applied if tag not specified): MAXSECURECONTAINERS=4 - Max amount of secure containers allowed in a multi MAXLOCKDOWNS=256 - Max amount of lockdowns allowed in a multi MAXVENDORS=10 - Max amount of vendors allowed in a multi MAXBANS=50 - Max amount of bans in a multi's ban list MAXFRIENDS=50 - Max amount of friends in a multi's friend list MAXGUESTS=50 - Max amount of guests in a multi's guest list MAXOWNERS=8 - Max amount of owners and co-owners in a multi's owner list MAXTRASHCONTAINERS=1 - Max amount of trash containers allowed in multi SCRIPT=<scriptID> - Assign a JS script-ID directly to a multi FRONTDOOR - indicates that a door is the front door of a house. Cannot be locked in public houses! INTERIORDOOR - indicates that a door is an interior door of a house. Can be locked in public houses. BANX - Location X offset for multi's ban location, if not used, will try to use SE corner of multi instead BANY - Location Y offset for multi's ban location, if not used, will try to use SE corner of multi instead Added JS Event: onHouseCommand( tSock, multiObj, cmdID ) - For handling spoken house commands via JS scripts attached to multi. Updated JS Events: onEntrance() - can now trigger both for multi being entered and/or object entering onLeaving() - can now trigger both for multi being left and/or object entering onSpeech() - can now also trigger for items (in addition to chars) with event & script attached, if UOX.INI setting ITEMSDETECTSPEECH is enabled Added JS Multi methods: .IsBoat() - Returns whether the item (or multi) is a boat .IsOwner( playerToCheck ) - Returns whether a player is the owner of a multi .IsOnOwnerList( playerToCheck ) - Returns whether a player is on the (co-)owner list of a multi .IsOnFriendList( playerToCheck ) - Returns whether a player is on the friend list of a multi .IsOnGuestList( playerToCheck ) - Returns whether a player is on the guest list of a multi .IsOnBanList( playerToCheck ) - Returns whether a player is on the ban list of a multi .AddToFriendList( playertoAdd ) - Adds player to the friend list of a multi .RemoveFromFriendList( playertoRemove ) - Removes player from the friend list of a multi .AddToGuestList( playertoAdd ) - Adds player to the guest list of a multi .RemoveFromGuestList( playertoRemove ) - Removes player from the guest list of a multi .ClearOwnerList() - Clears all entries from a multi's (co-)owner list .ClearFriendList() - Clears all entries from a multi's friend list .ClearGuestList() - Clears all entries from a multi's guest list .ClearBanList() - Clears all entries from a multi's ban list .SecureContainer( itemToSecure ) - Secures a container in a multi .UnsecureContainer( itemToUnsecure ) - Unsecures a container in a multi .IsSecureContainer( itemToCheck ) - Checks if specified item is a secure container in a multi .LockDownItem( itemToLockDown) - Locks down an item in a multi .ReleaseItem( itemToRelease ) - Releases a locked down item in a multi .KillKeys() - Deletes ALL keys associated with a multi .AddTrashCont( itemToAdd ) - Add trash container to multi's list of trash containers .RemoveTrashCont( itemToRemove ) - Remove trash container from multi's list of trash containers Added JS Item (Multi only) properties: .lockdowns - Get the number of lockdowns in a multi .maxLockdowns - Get/Set the max number of lockdowns allowed in a multi .secureContainers - Get the number of secure containers in a multi .maxSecureContainers - Get/Set the max number of secure containers allowed in a multi .trashContainers - Get the number of trash containers in a multi .maxTrashContainers - Get/Set the max number of trash containers allowed in a multi .friends - Get the number of friends in a multi's friend list .maxFriends - Get/Set the max number of friends allowed in a multi's friend list .guests - Get the number of guests in a multi's guest list .maxGuests - Get/Set the max number of guests allowed in a multi's guest list .owners - Get the number of owners in a multi's owner list .maxOwners - Get/Set the max number of owners allowed in a multi's owner list .bans - Get the number of banned players in a multi's ban list .maxBans - Get/Set the max number of banned players allowed in a multi's ban list .vendors - Get the number of player vendors in a multi .maxVendors - Get the max number of player vendors allowed in a multi .deed - Get the item sectionID for deed used to place multi .isPublic - Get/Set the private/public state of a multi .buildTimestamp - Get the timestamp for when the house was originally placed .tradeTimestamp - Get the timestamp for when the house was last traded to another player .banX - Get/Set the ban location X offset for the multi .banY - Get/Set the ban location Y offset for the multi Added JS Character properties: .multi = Get/Set the multi object the character is in .accountNum = Get the account number the character belongs to .housesOwned = Get a count of houses owned by the character .housesCoOwned = Get a count of houses co-owned by the character Updated JS cBaseObject Methods .FirstItem(), .NextItem() and .FinishedItems() to also support iterating through items in multis Updated JS multi Methods .FirstChar(), .NextChar() and .FinishedChars() to support an additional parameter to specify what kind of characters to loop through: "default" or no parameter - all characters inside the multi "owner" - players on multi's owner list "friend" - players on multi's friend list "guest" - players on multi's guest list "banned" - players on multi's ban list Added new INI tags to a new section of uox.ini called [houses] DECAYTIMERINHOUSE=3600 // Decay timer in seconds for non-locked down items inside houses PROTECTPRIVATEHOUSES=1 // Toggles whether private houses will automatically boot unauthorized visitors (1) or not (0) TRACKHOUSESPERACCOUNT=1 // Toggles whether to track (and restrict) house ownership per account (1) or per character (0) MAXHOUSESOWNABLE=1 // Specifies the max amount of houses a player can own per account/char, depending on how house ownership is tracked MAXHOUSESCOOWNABLE=10 // Specifies the max amount of houses a player can co-own per character CANOWNANDCOOWNHOUSES=1 // Toggles whether players can own and co-own houses at the same time COOWNHOUSESONSAMEACCOUNT=1 // Toggles whether characters on same account as house owner will be treated as co-owners Added new INI tags in [settings] section of uox.ini: ITEMSDETECTSPEECH=0 // If enabled, server will search for nearby items with onSpeech JS event running whenever a character speaks. Disabled by default. MAXPLAYERPACKITEMS=125 // Defines max item capacity for player (and NPC) backpacks. Defaults to 125. Moved most of the existing house functionality to JS and expanded upon it to reach feature parity with houses in regular UO around Publish 15/16, with various extras thrown in for good measure and all functionality being customizable: js/server/house/house.js (15000) - handles detection of house commands and characters entering/leaving houses js/server/house/houseSign.js (15001) - contains and handles all house-related gumps/menus and what is shown when players interact with house sign js/server/house/houseCommands.js (15002) - handles functionality of house commands and other functionality such as transfer of ownership, demolishing house, etc. js/server/house/houseDeed.js (15003) - handles initial rules that allow/disallow placement of additional houses for players All house-related menus now fully handled through JS All house commands and other functionality now fully handled through JS Removed redundant hard-coded house functionality Implemented Co-owners, friends, guests for houses, with access rules in place for entry, lockdowns, house commands, etc. Implemented Private and Public houses Implemented Secure Containers and Trash Barrels Definable max lockdowns, secure containers, player vendors, bans, friends, guests, owners, trash containers and more - per house type JS scripts can now be attached directly to houses Doors in houses can be marked as front doors or interior doors, and will be treated differently with regards to private and public houses Added new item to dfndata/items/containers/misc.dfn - [trashbarrel] Added new JS script (js/items/trashbarrel.js) with trash barrel functionality for houses. Trash barrels that are marked as secure containers are only accessible by owners, co-owners and friends of the house. Various options available at top of script. Updated js/items/axe.js to support chopping up trash barrels and house add-ons in houses owned by the player Fixed an issue with house doors being left behind after demolishing houses while their doors were open Fixed an issue where GMs could be banned from player houses Added Line of Sight checks to speech, to give players some privacy in their own homes Updated house placement code to more accurately check for other multis, dynamic and static objects when placing houses; now requires free space around each house that cannot be blocked by other houses or items that can block player movement, and disallows placement of houses on roads Updated house placement code to move characters blocking house placement to SE corner of the house Updated house placement code to disallow placing houses in guarded regions, or in dungeons Added new DFN tag for regions to enable/disable player houses in specific regions: HOUSING=0/1 Added new region (247) that covers path to Valley of Eodon in Felucca Added new region (248) that covers Valley of Eodon in Ter-Mur, with player housing disabled Added new region (249) that covers entire T2A lands, with player housing disabled Updated SPACEX and SPACEY values for all houses in dfndata/house/house.dfn to match updated house placement code Added new JS property to Regions that can be used to determine or change state of player housing in a region: .canPlaceHouse() Updated rules for usage of dye tubs to dye locked down items; now only house owners or co-owners may dye locked down items Updated rules for usage of the following locked down items in a house, which are now only usable by house owners and co-owners Dyes, Guildstone Deeds, Recall Runes (renaming), Rename Deeds, Townstone Deeds, House Deeds, Boat Models, Player Vendor Deeds, Ore, Hair Dye Updated rules for usage of the following locked down items in a house, which are now only usable by house owners, co-owners and friends: Keys, Dye Tubs, Magic Scrolls, Fireworks Wands, Magic Wands, Smithing Tools, Mining Tools, Fishing Poles Updated item lockdown rules to allow locking down (and releasing) items in a container as long as the container is locked down, and to only allow releasing a locked down container if it's empty of locked down items Updated item lockdown rules to only allow locking down movement-blocking items further than 2 tiles away from doors Updated rules for releasing items in houses - now the house owner can release any locked down items, co-owners can release items locked down by themselves or by friends, while friends can release only items locked down by themselves Added some feedback to player about why their attempted house placement failed Items added by GMs directly into multis will now decay based on the house-specific decay timer instead of the regular one Fixed an issue that could cause items to almost instantly decay after being released from lockdown in a house Placing house add-ons now properly takes into account SPACEX and SPACEY values when checking if they can fit in selected area of houses Re-added SPACEX and SPACEY values for Pentagram and Loom house add-ons House add-ons can now be converted back into house add-on deeds by chopping them with an axe Added new item type - IT_HOUSEADDON (201) - used by house add-ons placed in player houses Fixed a bug where keys would stop working after being added to a keyring, and would turn into blank keys upon release from the keyring Added visitor count for public player houses, which keeps track of how many visits a public house has received, with each player counted max 1 time every 24 hours Fixed an issue with FindPlayersInOldVisrange() where it didn't take into account that players could see buildings further away than the standard update range. This could cause players to see ghost images of buildings if they were at the "right" distance when the building was being demolished Added NODECAY tag to all signs and doors in dfndata/house/house.dfn Added FRONTDOOR or INTERIORDOOR (as appropriate) to all doors in dfndata/house/house.dfn Added BANX and BANY to specify ban location for some houses in dfndata/house/house.dfn instead of relying on finding SE corner automatically Implemented strongboxes (js/server/house/strongbox.js) for co-owners of a house, which can be placed with the house command "i wish to place a strongbox". Max capacity is 25 items Updated 'REMOVE command to take an optional parameter - itemID. If supplied, the command will remove all items with this itemID from a targeted container Fixed a bug when checking if dynamic items were blocking valid spawn locations for NPCs, some function arguments were in the wrong order! Improved code that finds valid spawn locations for items and NPCs spawned via spawn regions. As server gradually builds up lists of valid spawn locations per region over time, it will start using these lists more often, rather than always look for brand new spawn locations. Fixed a bug with CMulHandler::CheckStaticFlag() that prevented NPCs from spawning inside buildings with no static floors! Fixed an issue with repeating commands that prevented GMs from being able to cancel them when using the ClassicUO client Exposed character property .accountNum to JS engine Extended CDataList class to include a Clear() method for clearing lists Updated JS File method .Open() to support an optional, third argument - subFolderName - that defines in which sub-folder of UOX3/shared/ to store/look for a file. If no third argument is supplied, UOX3 will default to using the shared folder itself. Updated JS File method .Length() to return a value of -1 for files that don't exist Added new code function, exposed to JS engine with same parameters, which simply checks if a given tile ID has a specific flag bool CheckTileFlag( UI16 itemID, TILEFLAG flagToCheck ) Added JS function used to find the root container of an item (if any) FindRootContainer( itemSerial ) FindRootContainer( item ) Added new JS function that allows deleting files from UOX3/shared/ folder or subfolders of shared folder. If no subFolderName is provided, looks for file directly in shared folder itself. Restrictions on file- and folder-names apply. bool DeleteFile( fileName, subFolderName ) Added new JS functions for checking if a specific client or server feature is enabled. See documentation for full list of client/server features. GetClientFeature( bitNum ) // Returns true if specified client feature is enabled on server GetServerFeature( bitNum ) // Returns true if specified server feature is enabled on server Added new JS function for returning the value of almost any server setting from UOX.INI GetServerSetting( settingNameInDoubleQuotes ) Updated JS function DoesDynamicBlock() with two new parameters - checkOnlyMultis and checkOnlyNonMultis Updated JS function DoesMapBlock() with two new parameters - checkMultiPlacement and checkForRoad Fixed an issue where a LoS check would prevent players from accessing containers in their own backpack Added new functions in findfuncs.cpp to make it easier to find items near another object or location: findNearbyItems( object, distance ) findNearbyItems( x, y, worldNumber, instanceID, distance ) Added new Item property - maxItems - used by containers to determine their max item capacity Added new Item property - totalItemCount - used to get total item count in a container (including sub-containers) Added check for max item capacity when creating new items that are added to a character's backpack - items will be created below character's feet if backpack is full! Added new DFN tag for items, used by containers to determine item capacity for a given container: MAXITEMS=# // 125 is the default for all containers if not set Added new JS Item properties: .maxItems // gets/sets item capacity for a given container .totalItemCount // gets total item count in a container, including sub-containers Updated item tooltips for containers to show accurate total item count, as well as to display max item capacity Fixed a bug where picking up items from a non-locked down pile of items on the floor inside a multi could cause the remaining pile to be seen as no longer inside the multi, disallowing locking it back down and causing it to decay based on regular decay timer instead of house-specific one Updated JS command set to allow setting poison-level on items ('set poison #) and hunger-level on characters ('set hunger #) Fixed an issue with js/item/food.js that prevented poisoned food from poisoning characters when eaten Fixed an issue with js/skill/poisoning.js that prevented players from poisoning food! Updated various JS scripts and hardcoded targeting functions to disallow the targeting of locked down resources using skills and tools Updated JS Method TextMessage() to support three extra, optional parameters. Note that if one optional parameter is included, all preceding optional parameters are also required! speechTarget - What kind of target is this message intended for? 0 - Only visible for sender and receiver of message 1 - Visible to all players in range 2 - Visible to all NPCs and players in range 3 - Visible to all PCs everywhere + NPCs in range 4 - Visible to all PCs everywhere (broadcast) 5 - Only visible for the receiver of the message speechTargetSerial - The serial of the receiver of the message, used if speechTarget is 0 or 5 speechFontType - The type of font to display the text in. Defaults to normal. 0 - Bold 1 - Normal with shadow 2 - Bold with shadow 3 - Normal 4 - Gothic 5 - Italic 6 - Small, dark 7 - Colourful 8 - Runic (only works with CAPS) 9 - Small, light Added timestamp to worldsaves in console, to make it easier to see when a particular world-save was done Added info about compiler/environment displayed at the top of the UOX3 console during startup Updated dictionary files with new messages primarily related to housing
2020-11-04 02:00:37 +08:00
break;
case CIP_MAXOWNERS:
if( gPriv->GetObjType() == OT_MULTI )
{
( static_cast<CMultiObj *>( gPriv ))->SetMaxOwners( static_cast<UI16>( encaps.toInt() ));
}
Housing Revamp and more Updated JS SysMessage function to accept up to 10 extra, optional arguments, which can be used with dictionary messages that require additional parameters like %s or %i Added new type of house privilege in cMultiObj.cpp to keep track of friends of the multi - HOUSEPRIV_FRIEND - which is stored during worldsaves as one or more Friend=<player serial> tags in house.wsc Added new type of house privilege in cMultiObj.cpp to keep track of guests of the multi - HOUSEPRIV_GUEST - which is stored during worldsaves as one or more Guest=<player serial> tags in house.wsc When items are created for houses upon house placement, a reference to the multi's serial is now stored in the house sign's MORE property to allow easier tracking of which house a particular sign belongs to Added tracking of new, persistent properties for houses via cMultiObj.cpp/h: lockdowns, secure containers, vendors, guests, friends, owners, ban location, public status, number of visits, timestamps Added a multitude of new methods in cMultiObj.cpp/h to assist in improving the functionality of houses Added new tags for houses in house.dfn (default values applied if tag not specified): MAXSECURECONTAINERS=4 - Max amount of secure containers allowed in a multi MAXLOCKDOWNS=256 - Max amount of lockdowns allowed in a multi MAXVENDORS=10 - Max amount of vendors allowed in a multi MAXBANS=50 - Max amount of bans in a multi's ban list MAXFRIENDS=50 - Max amount of friends in a multi's friend list MAXGUESTS=50 - Max amount of guests in a multi's guest list MAXOWNERS=8 - Max amount of owners and co-owners in a multi's owner list MAXTRASHCONTAINERS=1 - Max amount of trash containers allowed in multi SCRIPT=<scriptID> - Assign a JS script-ID directly to a multi FRONTDOOR - indicates that a door is the front door of a house. Cannot be locked in public houses! INTERIORDOOR - indicates that a door is an interior door of a house. Can be locked in public houses. BANX - Location X offset for multi's ban location, if not used, will try to use SE corner of multi instead BANY - Location Y offset for multi's ban location, if not used, will try to use SE corner of multi instead Added JS Event: onHouseCommand( tSock, multiObj, cmdID ) - For handling spoken house commands via JS scripts attached to multi. Updated JS Events: onEntrance() - can now trigger both for multi being entered and/or object entering onLeaving() - can now trigger both for multi being left and/or object entering onSpeech() - can now also trigger for items (in addition to chars) with event & script attached, if UOX.INI setting ITEMSDETECTSPEECH is enabled Added JS Multi methods: .IsBoat() - Returns whether the item (or multi) is a boat .IsOwner( playerToCheck ) - Returns whether a player is the owner of a multi .IsOnOwnerList( playerToCheck ) - Returns whether a player is on the (co-)owner list of a multi .IsOnFriendList( playerToCheck ) - Returns whether a player is on the friend list of a multi .IsOnGuestList( playerToCheck ) - Returns whether a player is on the guest list of a multi .IsOnBanList( playerToCheck ) - Returns whether a player is on the ban list of a multi .AddToFriendList( playertoAdd ) - Adds player to the friend list of a multi .RemoveFromFriendList( playertoRemove ) - Removes player from the friend list of a multi .AddToGuestList( playertoAdd ) - Adds player to the guest list of a multi .RemoveFromGuestList( playertoRemove ) - Removes player from the guest list of a multi .ClearOwnerList() - Clears all entries from a multi's (co-)owner list .ClearFriendList() - Clears all entries from a multi's friend list .ClearGuestList() - Clears all entries from a multi's guest list .ClearBanList() - Clears all entries from a multi's ban list .SecureContainer( itemToSecure ) - Secures a container in a multi .UnsecureContainer( itemToUnsecure ) - Unsecures a container in a multi .IsSecureContainer( itemToCheck ) - Checks if specified item is a secure container in a multi .LockDownItem( itemToLockDown) - Locks down an item in a multi .ReleaseItem( itemToRelease ) - Releases a locked down item in a multi .KillKeys() - Deletes ALL keys associated with a multi .AddTrashCont( itemToAdd ) - Add trash container to multi's list of trash containers .RemoveTrashCont( itemToRemove ) - Remove trash container from multi's list of trash containers Added JS Item (Multi only) properties: .lockdowns - Get the number of lockdowns in a multi .maxLockdowns - Get/Set the max number of lockdowns allowed in a multi .secureContainers - Get the number of secure containers in a multi .maxSecureContainers - Get/Set the max number of secure containers allowed in a multi .trashContainers - Get the number of trash containers in a multi .maxTrashContainers - Get/Set the max number of trash containers allowed in a multi .friends - Get the number of friends in a multi's friend list .maxFriends - Get/Set the max number of friends allowed in a multi's friend list .guests - Get the number of guests in a multi's guest list .maxGuests - Get/Set the max number of guests allowed in a multi's guest list .owners - Get the number of owners in a multi's owner list .maxOwners - Get/Set the max number of owners allowed in a multi's owner list .bans - Get the number of banned players in a multi's ban list .maxBans - Get/Set the max number of banned players allowed in a multi's ban list .vendors - Get the number of player vendors in a multi .maxVendors - Get the max number of player vendors allowed in a multi .deed - Get the item sectionID for deed used to place multi .isPublic - Get/Set the private/public state of a multi .buildTimestamp - Get the timestamp for when the house was originally placed .tradeTimestamp - Get the timestamp for when the house was last traded to another player .banX - Get/Set the ban location X offset for the multi .banY - Get/Set the ban location Y offset for the multi Added JS Character properties: .multi = Get/Set the multi object the character is in .accountNum = Get the account number the character belongs to .housesOwned = Get a count of houses owned by the character .housesCoOwned = Get a count of houses co-owned by the character Updated JS cBaseObject Methods .FirstItem(), .NextItem() and .FinishedItems() to also support iterating through items in multis Updated JS multi Methods .FirstChar(), .NextChar() and .FinishedChars() to support an additional parameter to specify what kind of characters to loop through: "default" or no parameter - all characters inside the multi "owner" - players on multi's owner list "friend" - players on multi's friend list "guest" - players on multi's guest list "banned" - players on multi's ban list Added new INI tags to a new section of uox.ini called [houses] DECAYTIMERINHOUSE=3600 // Decay timer in seconds for non-locked down items inside houses PROTECTPRIVATEHOUSES=1 // Toggles whether private houses will automatically boot unauthorized visitors (1) or not (0) TRACKHOUSESPERACCOUNT=1 // Toggles whether to track (and restrict) house ownership per account (1) or per character (0) MAXHOUSESOWNABLE=1 // Specifies the max amount of houses a player can own per account/char, depending on how house ownership is tracked MAXHOUSESCOOWNABLE=10 // Specifies the max amount of houses a player can co-own per character CANOWNANDCOOWNHOUSES=1 // Toggles whether players can own and co-own houses at the same time COOWNHOUSESONSAMEACCOUNT=1 // Toggles whether characters on same account as house owner will be treated as co-owners Added new INI tags in [settings] section of uox.ini: ITEMSDETECTSPEECH=0 // If enabled, server will search for nearby items with onSpeech JS event running whenever a character speaks. Disabled by default. MAXPLAYERPACKITEMS=125 // Defines max item capacity for player (and NPC) backpacks. Defaults to 125. Moved most of the existing house functionality to JS and expanded upon it to reach feature parity with houses in regular UO around Publish 15/16, with various extras thrown in for good measure and all functionality being customizable: js/server/house/house.js (15000) - handles detection of house commands and characters entering/leaving houses js/server/house/houseSign.js (15001) - contains and handles all house-related gumps/menus and what is shown when players interact with house sign js/server/house/houseCommands.js (15002) - handles functionality of house commands and other functionality such as transfer of ownership, demolishing house, etc. js/server/house/houseDeed.js (15003) - handles initial rules that allow/disallow placement of additional houses for players All house-related menus now fully handled through JS All house commands and other functionality now fully handled through JS Removed redundant hard-coded house functionality Implemented Co-owners, friends, guests for houses, with access rules in place for entry, lockdowns, house commands, etc. Implemented Private and Public houses Implemented Secure Containers and Trash Barrels Definable max lockdowns, secure containers, player vendors, bans, friends, guests, owners, trash containers and more - per house type JS scripts can now be attached directly to houses Doors in houses can be marked as front doors or interior doors, and will be treated differently with regards to private and public houses Added new item to dfndata/items/containers/misc.dfn - [trashbarrel] Added new JS script (js/items/trashbarrel.js) with trash barrel functionality for houses. Trash barrels that are marked as secure containers are only accessible by owners, co-owners and friends of the house. Various options available at top of script. Updated js/items/axe.js to support chopping up trash barrels and house add-ons in houses owned by the player Fixed an issue with house doors being left behind after demolishing houses while their doors were open Fixed an issue where GMs could be banned from player houses Added Line of Sight checks to speech, to give players some privacy in their own homes Updated house placement code to more accurately check for other multis, dynamic and static objects when placing houses; now requires free space around each house that cannot be blocked by other houses or items that can block player movement, and disallows placement of houses on roads Updated house placement code to move characters blocking house placement to SE corner of the house Updated house placement code to disallow placing houses in guarded regions, or in dungeons Added new DFN tag for regions to enable/disable player houses in specific regions: HOUSING=0/1 Added new region (247) that covers path to Valley of Eodon in Felucca Added new region (248) that covers Valley of Eodon in Ter-Mur, with player housing disabled Added new region (249) that covers entire T2A lands, with player housing disabled Updated SPACEX and SPACEY values for all houses in dfndata/house/house.dfn to match updated house placement code Added new JS property to Regions that can be used to determine or change state of player housing in a region: .canPlaceHouse() Updated rules for usage of dye tubs to dye locked down items; now only house owners or co-owners may dye locked down items Updated rules for usage of the following locked down items in a house, which are now only usable by house owners and co-owners Dyes, Guildstone Deeds, Recall Runes (renaming), Rename Deeds, Townstone Deeds, House Deeds, Boat Models, Player Vendor Deeds, Ore, Hair Dye Updated rules for usage of the following locked down items in a house, which are now only usable by house owners, co-owners and friends: Keys, Dye Tubs, Magic Scrolls, Fireworks Wands, Magic Wands, Smithing Tools, Mining Tools, Fishing Poles Updated item lockdown rules to allow locking down (and releasing) items in a container as long as the container is locked down, and to only allow releasing a locked down container if it's empty of locked down items Updated item lockdown rules to only allow locking down movement-blocking items further than 2 tiles away from doors Updated rules for releasing items in houses - now the house owner can release any locked down items, co-owners can release items locked down by themselves or by friends, while friends can release only items locked down by themselves Added some feedback to player about why their attempted house placement failed Items added by GMs directly into multis will now decay based on the house-specific decay timer instead of the regular one Fixed an issue that could cause items to almost instantly decay after being released from lockdown in a house Placing house add-ons now properly takes into account SPACEX and SPACEY values when checking if they can fit in selected area of houses Re-added SPACEX and SPACEY values for Pentagram and Loom house add-ons House add-ons can now be converted back into house add-on deeds by chopping them with an axe Added new item type - IT_HOUSEADDON (201) - used by house add-ons placed in player houses Fixed a bug where keys would stop working after being added to a keyring, and would turn into blank keys upon release from the keyring Added visitor count for public player houses, which keeps track of how many visits a public house has received, with each player counted max 1 time every 24 hours Fixed an issue with FindPlayersInOldVisrange() where it didn't take into account that players could see buildings further away than the standard update range. This could cause players to see ghost images of buildings if they were at the "right" distance when the building was being demolished Added NODECAY tag to all signs and doors in dfndata/house/house.dfn Added FRONTDOOR or INTERIORDOOR (as appropriate) to all doors in dfndata/house/house.dfn Added BANX and BANY to specify ban location for some houses in dfndata/house/house.dfn instead of relying on finding SE corner automatically Implemented strongboxes (js/server/house/strongbox.js) for co-owners of a house, which can be placed with the house command "i wish to place a strongbox". Max capacity is 25 items Updated 'REMOVE command to take an optional parameter - itemID. If supplied, the command will remove all items with this itemID from a targeted container Fixed a bug when checking if dynamic items were blocking valid spawn locations for NPCs, some function arguments were in the wrong order! Improved code that finds valid spawn locations for items and NPCs spawned via spawn regions. As server gradually builds up lists of valid spawn locations per region over time, it will start using these lists more often, rather than always look for brand new spawn locations. Fixed a bug with CMulHandler::CheckStaticFlag() that prevented NPCs from spawning inside buildings with no static floors! Fixed an issue with repeating commands that prevented GMs from being able to cancel them when using the ClassicUO client Exposed character property .accountNum to JS engine Extended CDataList class to include a Clear() method for clearing lists Updated JS File method .Open() to support an optional, third argument - subFolderName - that defines in which sub-folder of UOX3/shared/ to store/look for a file. If no third argument is supplied, UOX3 will default to using the shared folder itself. Updated JS File method .Length() to return a value of -1 for files that don't exist Added new code function, exposed to JS engine with same parameters, which simply checks if a given tile ID has a specific flag bool CheckTileFlag( UI16 itemID, TILEFLAG flagToCheck ) Added JS function used to find the root container of an item (if any) FindRootContainer( itemSerial ) FindRootContainer( item ) Added new JS function that allows deleting files from UOX3/shared/ folder or subfolders of shared folder. If no subFolderName is provided, looks for file directly in shared folder itself. Restrictions on file- and folder-names apply. bool DeleteFile( fileName, subFolderName ) Added new JS functions for checking if a specific client or server feature is enabled. See documentation for full list of client/server features. GetClientFeature( bitNum ) // Returns true if specified client feature is enabled on server GetServerFeature( bitNum ) // Returns true if specified server feature is enabled on server Added new JS function for returning the value of almost any server setting from UOX.INI GetServerSetting( settingNameInDoubleQuotes ) Updated JS function DoesDynamicBlock() with two new parameters - checkOnlyMultis and checkOnlyNonMultis Updated JS function DoesMapBlock() with two new parameters - checkMultiPlacement and checkForRoad Fixed an issue where a LoS check would prevent players from accessing containers in their own backpack Added new functions in findfuncs.cpp to make it easier to find items near another object or location: findNearbyItems( object, distance ) findNearbyItems( x, y, worldNumber, instanceID, distance ) Added new Item property - maxItems - used by containers to determine their max item capacity Added new Item property - totalItemCount - used to get total item count in a container (including sub-containers) Added check for max item capacity when creating new items that are added to a character's backpack - items will be created below character's feet if backpack is full! Added new DFN tag for items, used by containers to determine item capacity for a given container: MAXITEMS=# // 125 is the default for all containers if not set Added new JS Item properties: .maxItems // gets/sets item capacity for a given container .totalItemCount // gets total item count in a container, including sub-containers Updated item tooltips for containers to show accurate total item count, as well as to display max item capacity Fixed a bug where picking up items from a non-locked down pile of items on the floor inside a multi could cause the remaining pile to be seen as no longer inside the multi, disallowing locking it back down and causing it to decay based on regular decay timer instead of house-specific one Updated JS command set to allow setting poison-level on items ('set poison #) and hunger-level on characters ('set hunger #) Fixed an issue with js/item/food.js that prevented poisoned food from poisoning characters when eaten Fixed an issue with js/skill/poisoning.js that prevented players from poisoning food! Updated various JS scripts and hardcoded targeting functions to disallow the targeting of locked down resources using skills and tools Updated JS Method TextMessage() to support three extra, optional parameters. Note that if one optional parameter is included, all preceding optional parameters are also required! speechTarget - What kind of target is this message intended for? 0 - Only visible for sender and receiver of message 1 - Visible to all players in range 2 - Visible to all NPCs and players in range 3 - Visible to all PCs everywhere + NPCs in range 4 - Visible to all PCs everywhere (broadcast) 5 - Only visible for the receiver of the message speechTargetSerial - The serial of the receiver of the message, used if speechTarget is 0 or 5 speechFontType - The type of font to display the text in. Defaults to normal. 0 - Bold 1 - Normal with shadow 2 - Bold with shadow 3 - Normal 4 - Gothic 5 - Italic 6 - Small, dark 7 - Colourful 8 - Runic (only works with CAPS) 9 - Small, light Added timestamp to worldsaves in console, to make it easier to see when a particular world-save was done Added info about compiler/environment displayed at the top of the UOX3 console during startup Updated dictionary files with new messages primarily related to housing
2020-11-04 02:00:37 +08:00
break;
case CIP_MAXBANS:
if( gPriv->GetObjType() == OT_MULTI )
{
( static_cast<CMultiObj *>( gPriv ))->SetMaxBans( static_cast<UI16>( encaps.toInt() ));
}
Housing Revamp and more Updated JS SysMessage function to accept up to 10 extra, optional arguments, which can be used with dictionary messages that require additional parameters like %s or %i Added new type of house privilege in cMultiObj.cpp to keep track of friends of the multi - HOUSEPRIV_FRIEND - which is stored during worldsaves as one or more Friend=<player serial> tags in house.wsc Added new type of house privilege in cMultiObj.cpp to keep track of guests of the multi - HOUSEPRIV_GUEST - which is stored during worldsaves as one or more Guest=<player serial> tags in house.wsc When items are created for houses upon house placement, a reference to the multi's serial is now stored in the house sign's MORE property to allow easier tracking of which house a particular sign belongs to Added tracking of new, persistent properties for houses via cMultiObj.cpp/h: lockdowns, secure containers, vendors, guests, friends, owners, ban location, public status, number of visits, timestamps Added a multitude of new methods in cMultiObj.cpp/h to assist in improving the functionality of houses Added new tags for houses in house.dfn (default values applied if tag not specified): MAXSECURECONTAINERS=4 - Max amount of secure containers allowed in a multi MAXLOCKDOWNS=256 - Max amount of lockdowns allowed in a multi MAXVENDORS=10 - Max amount of vendors allowed in a multi MAXBANS=50 - Max amount of bans in a multi's ban list MAXFRIENDS=50 - Max amount of friends in a multi's friend list MAXGUESTS=50 - Max amount of guests in a multi's guest list MAXOWNERS=8 - Max amount of owners and co-owners in a multi's owner list MAXTRASHCONTAINERS=1 - Max amount of trash containers allowed in multi SCRIPT=<scriptID> - Assign a JS script-ID directly to a multi FRONTDOOR - indicates that a door is the front door of a house. Cannot be locked in public houses! INTERIORDOOR - indicates that a door is an interior door of a house. Can be locked in public houses. BANX - Location X offset for multi's ban location, if not used, will try to use SE corner of multi instead BANY - Location Y offset for multi's ban location, if not used, will try to use SE corner of multi instead Added JS Event: onHouseCommand( tSock, multiObj, cmdID ) - For handling spoken house commands via JS scripts attached to multi. Updated JS Events: onEntrance() - can now trigger both for multi being entered and/or object entering onLeaving() - can now trigger both for multi being left and/or object entering onSpeech() - can now also trigger for items (in addition to chars) with event & script attached, if UOX.INI setting ITEMSDETECTSPEECH is enabled Added JS Multi methods: .IsBoat() - Returns whether the item (or multi) is a boat .IsOwner( playerToCheck ) - Returns whether a player is the owner of a multi .IsOnOwnerList( playerToCheck ) - Returns whether a player is on the (co-)owner list of a multi .IsOnFriendList( playerToCheck ) - Returns whether a player is on the friend list of a multi .IsOnGuestList( playerToCheck ) - Returns whether a player is on the guest list of a multi .IsOnBanList( playerToCheck ) - Returns whether a player is on the ban list of a multi .AddToFriendList( playertoAdd ) - Adds player to the friend list of a multi .RemoveFromFriendList( playertoRemove ) - Removes player from the friend list of a multi .AddToGuestList( playertoAdd ) - Adds player to the guest list of a multi .RemoveFromGuestList( playertoRemove ) - Removes player from the guest list of a multi .ClearOwnerList() - Clears all entries from a multi's (co-)owner list .ClearFriendList() - Clears all entries from a multi's friend list .ClearGuestList() - Clears all entries from a multi's guest list .ClearBanList() - Clears all entries from a multi's ban list .SecureContainer( itemToSecure ) - Secures a container in a multi .UnsecureContainer( itemToUnsecure ) - Unsecures a container in a multi .IsSecureContainer( itemToCheck ) - Checks if specified item is a secure container in a multi .LockDownItem( itemToLockDown) - Locks down an item in a multi .ReleaseItem( itemToRelease ) - Releases a locked down item in a multi .KillKeys() - Deletes ALL keys associated with a multi .AddTrashCont( itemToAdd ) - Add trash container to multi's list of trash containers .RemoveTrashCont( itemToRemove ) - Remove trash container from multi's list of trash containers Added JS Item (Multi only) properties: .lockdowns - Get the number of lockdowns in a multi .maxLockdowns - Get/Set the max number of lockdowns allowed in a multi .secureContainers - Get the number of secure containers in a multi .maxSecureContainers - Get/Set the max number of secure containers allowed in a multi .trashContainers - Get the number of trash containers in a multi .maxTrashContainers - Get/Set the max number of trash containers allowed in a multi .friends - Get the number of friends in a multi's friend list .maxFriends - Get/Set the max number of friends allowed in a multi's friend list .guests - Get the number of guests in a multi's guest list .maxGuests - Get/Set the max number of guests allowed in a multi's guest list .owners - Get the number of owners in a multi's owner list .maxOwners - Get/Set the max number of owners allowed in a multi's owner list .bans - Get the number of banned players in a multi's ban list .maxBans - Get/Set the max number of banned players allowed in a multi's ban list .vendors - Get the number of player vendors in a multi .maxVendors - Get the max number of player vendors allowed in a multi .deed - Get the item sectionID for deed used to place multi .isPublic - Get/Set the private/public state of a multi .buildTimestamp - Get the timestamp for when the house was originally placed .tradeTimestamp - Get the timestamp for when the house was last traded to another player .banX - Get/Set the ban location X offset for the multi .banY - Get/Set the ban location Y offset for the multi Added JS Character properties: .multi = Get/Set the multi object the character is in .accountNum = Get the account number the character belongs to .housesOwned = Get a count of houses owned by the character .housesCoOwned = Get a count of houses co-owned by the character Updated JS cBaseObject Methods .FirstItem(), .NextItem() and .FinishedItems() to also support iterating through items in multis Updated JS multi Methods .FirstChar(), .NextChar() and .FinishedChars() to support an additional parameter to specify what kind of characters to loop through: "default" or no parameter - all characters inside the multi "owner" - players on multi's owner list "friend" - players on multi's friend list "guest" - players on multi's guest list "banned" - players on multi's ban list Added new INI tags to a new section of uox.ini called [houses] DECAYTIMERINHOUSE=3600 // Decay timer in seconds for non-locked down items inside houses PROTECTPRIVATEHOUSES=1 // Toggles whether private houses will automatically boot unauthorized visitors (1) or not (0) TRACKHOUSESPERACCOUNT=1 // Toggles whether to track (and restrict) house ownership per account (1) or per character (0) MAXHOUSESOWNABLE=1 // Specifies the max amount of houses a player can own per account/char, depending on how house ownership is tracked MAXHOUSESCOOWNABLE=10 // Specifies the max amount of houses a player can co-own per character CANOWNANDCOOWNHOUSES=1 // Toggles whether players can own and co-own houses at the same time COOWNHOUSESONSAMEACCOUNT=1 // Toggles whether characters on same account as house owner will be treated as co-owners Added new INI tags in [settings] section of uox.ini: ITEMSDETECTSPEECH=0 // If enabled, server will search for nearby items with onSpeech JS event running whenever a character speaks. Disabled by default. MAXPLAYERPACKITEMS=125 // Defines max item capacity for player (and NPC) backpacks. Defaults to 125. Moved most of the existing house functionality to JS and expanded upon it to reach feature parity with houses in regular UO around Publish 15/16, with various extras thrown in for good measure and all functionality being customizable: js/server/house/house.js (15000) - handles detection of house commands and characters entering/leaving houses js/server/house/houseSign.js (15001) - contains and handles all house-related gumps/menus and what is shown when players interact with house sign js/server/house/houseCommands.js (15002) - handles functionality of house commands and other functionality such as transfer of ownership, demolishing house, etc. js/server/house/houseDeed.js (15003) - handles initial rules that allow/disallow placement of additional houses for players All house-related menus now fully handled through JS All house commands and other functionality now fully handled through JS Removed redundant hard-coded house functionality Implemented Co-owners, friends, guests for houses, with access rules in place for entry, lockdowns, house commands, etc. Implemented Private and Public houses Implemented Secure Containers and Trash Barrels Definable max lockdowns, secure containers, player vendors, bans, friends, guests, owners, trash containers and more - per house type JS scripts can now be attached directly to houses Doors in houses can be marked as front doors or interior doors, and will be treated differently with regards to private and public houses Added new item to dfndata/items/containers/misc.dfn - [trashbarrel] Added new JS script (js/items/trashbarrel.js) with trash barrel functionality for houses. Trash barrels that are marked as secure containers are only accessible by owners, co-owners and friends of the house. Various options available at top of script. Updated js/items/axe.js to support chopping up trash barrels and house add-ons in houses owned by the player Fixed an issue with house doors being left behind after demolishing houses while their doors were open Fixed an issue where GMs could be banned from player houses Added Line of Sight checks to speech, to give players some privacy in their own homes Updated house placement code to more accurately check for other multis, dynamic and static objects when placing houses; now requires free space around each house that cannot be blocked by other houses or items that can block player movement, and disallows placement of houses on roads Updated house placement code to move characters blocking house placement to SE corner of the house Updated house placement code to disallow placing houses in guarded regions, or in dungeons Added new DFN tag for regions to enable/disable player houses in specific regions: HOUSING=0/1 Added new region (247) that covers path to Valley of Eodon in Felucca Added new region (248) that covers Valley of Eodon in Ter-Mur, with player housing disabled Added new region (249) that covers entire T2A lands, with player housing disabled Updated SPACEX and SPACEY values for all houses in dfndata/house/house.dfn to match updated house placement code Added new JS property to Regions that can be used to determine or change state of player housing in a region: .canPlaceHouse() Updated rules for usage of dye tubs to dye locked down items; now only house owners or co-owners may dye locked down items Updated rules for usage of the following locked down items in a house, which are now only usable by house owners and co-owners Dyes, Guildstone Deeds, Recall Runes (renaming), Rename Deeds, Townstone Deeds, House Deeds, Boat Models, Player Vendor Deeds, Ore, Hair Dye Updated rules for usage of the following locked down items in a house, which are now only usable by house owners, co-owners and friends: Keys, Dye Tubs, Magic Scrolls, Fireworks Wands, Magic Wands, Smithing Tools, Mining Tools, Fishing Poles Updated item lockdown rules to allow locking down (and releasing) items in a container as long as the container is locked down, and to only allow releasing a locked down container if it's empty of locked down items Updated item lockdown rules to only allow locking down movement-blocking items further than 2 tiles away from doors Updated rules for releasing items in houses - now the house owner can release any locked down items, co-owners can release items locked down by themselves or by friends, while friends can release only items locked down by themselves Added some feedback to player about why their attempted house placement failed Items added by GMs directly into multis will now decay based on the house-specific decay timer instead of the regular one Fixed an issue that could cause items to almost instantly decay after being released from lockdown in a house Placing house add-ons now properly takes into account SPACEX and SPACEY values when checking if they can fit in selected area of houses Re-added SPACEX and SPACEY values for Pentagram and Loom house add-ons House add-ons can now be converted back into house add-on deeds by chopping them with an axe Added new item type - IT_HOUSEADDON (201) - used by house add-ons placed in player houses Fixed a bug where keys would stop working after being added to a keyring, and would turn into blank keys upon release from the keyring Added visitor count for public player houses, which keeps track of how many visits a public house has received, with each player counted max 1 time every 24 hours Fixed an issue with FindPlayersInOldVisrange() where it didn't take into account that players could see buildings further away than the standard update range. This could cause players to see ghost images of buildings if they were at the "right" distance when the building was being demolished Added NODECAY tag to all signs and doors in dfndata/house/house.dfn Added FRONTDOOR or INTERIORDOOR (as appropriate) to all doors in dfndata/house/house.dfn Added BANX and BANY to specify ban location for some houses in dfndata/house/house.dfn instead of relying on finding SE corner automatically Implemented strongboxes (js/server/house/strongbox.js) for co-owners of a house, which can be placed with the house command "i wish to place a strongbox". Max capacity is 25 items Updated 'REMOVE command to take an optional parameter - itemID. If supplied, the command will remove all items with this itemID from a targeted container Fixed a bug when checking if dynamic items were blocking valid spawn locations for NPCs, some function arguments were in the wrong order! Improved code that finds valid spawn locations for items and NPCs spawned via spawn regions. As server gradually builds up lists of valid spawn locations per region over time, it will start using these lists more often, rather than always look for brand new spawn locations. Fixed a bug with CMulHandler::CheckStaticFlag() that prevented NPCs from spawning inside buildings with no static floors! Fixed an issue with repeating commands that prevented GMs from being able to cancel them when using the ClassicUO client Exposed character property .accountNum to JS engine Extended CDataList class to include a Clear() method for clearing lists Updated JS File method .Open() to support an optional, third argument - subFolderName - that defines in which sub-folder of UOX3/shared/ to store/look for a file. If no third argument is supplied, UOX3 will default to using the shared folder itself. Updated JS File method .Length() to return a value of -1 for files that don't exist Added new code function, exposed to JS engine with same parameters, which simply checks if a given tile ID has a specific flag bool CheckTileFlag( UI16 itemID, TILEFLAG flagToCheck ) Added JS function used to find the root container of an item (if any) FindRootContainer( itemSerial ) FindRootContainer( item ) Added new JS function that allows deleting files from UOX3/shared/ folder or subfolders of shared folder. If no subFolderName is provided, looks for file directly in shared folder itself. Restrictions on file- and folder-names apply. bool DeleteFile( fileName, subFolderName ) Added new JS functions for checking if a specific client or server feature is enabled. See documentation for full list of client/server features. GetClientFeature( bitNum ) // Returns true if specified client feature is enabled on server GetServerFeature( bitNum ) // Returns true if specified server feature is enabled on server Added new JS function for returning the value of almost any server setting from UOX.INI GetServerSetting( settingNameInDoubleQuotes ) Updated JS function DoesDynamicBlock() with two new parameters - checkOnlyMultis and checkOnlyNonMultis Updated JS function DoesMapBlock() with two new parameters - checkMultiPlacement and checkForRoad Fixed an issue where a LoS check would prevent players from accessing containers in their own backpack Added new functions in findfuncs.cpp to make it easier to find items near another object or location: findNearbyItems( object, distance ) findNearbyItems( x, y, worldNumber, instanceID, distance ) Added new Item property - maxItems - used by containers to determine their max item capacity Added new Item property - totalItemCount - used to get total item count in a container (including sub-containers) Added check for max item capacity when creating new items that are added to a character's backpack - items will be created below character's feet if backpack is full! Added new DFN tag for items, used by containers to determine item capacity for a given container: MAXITEMS=# // 125 is the default for all containers if not set Added new JS Item properties: .maxItems // gets/sets item capacity for a given container .totalItemCount // gets total item count in a container, including sub-containers Updated item tooltips for containers to show accurate total item count, as well as to display max item capacity Fixed a bug where picking up items from a non-locked down pile of items on the floor inside a multi could cause the remaining pile to be seen as no longer inside the multi, disallowing locking it back down and causing it to decay based on regular decay timer instead of house-specific one Updated JS command set to allow setting poison-level on items ('set poison #) and hunger-level on characters ('set hunger #) Fixed an issue with js/item/food.js that prevented poisoned food from poisoning characters when eaten Fixed an issue with js/skill/poisoning.js that prevented players from poisoning food! Updated various JS scripts and hardcoded targeting functions to disallow the targeting of locked down resources using skills and tools Updated JS Method TextMessage() to support three extra, optional parameters. Note that if one optional parameter is included, all preceding optional parameters are also required! speechTarget - What kind of target is this message intended for? 0 - Only visible for sender and receiver of message 1 - Visible to all players in range 2 - Visible to all NPCs and players in range 3 - Visible to all PCs everywhere + NPCs in range 4 - Visible to all PCs everywhere (broadcast) 5 - Only visible for the receiver of the message speechTargetSerial - The serial of the receiver of the message, used if speechTarget is 0 or 5 speechFontType - The type of font to display the text in. Defaults to normal. 0 - Bold 1 - Normal with shadow 2 - Bold with shadow 3 - Normal 4 - Gothic 5 - Italic 6 - Small, dark 7 - Colourful 8 - Runic (only works with CAPS) 9 - Small, light Added timestamp to worldsaves in console, to make it easier to see when a particular world-save was done Added info about compiler/environment displayed at the top of the UOX3 console during startup Updated dictionary files with new messages primarily related to housing
2020-11-04 02:00:37 +08:00
break;
case CIP_MAXVENDORS:
if( gPriv->GetObjType() == OT_MULTI )
{
( static_cast<CMultiObj *>( gPriv ))->SetMaxVendors( static_cast<UI16>( encaps.toInt() ));
}
Housing Revamp and more Updated JS SysMessage function to accept up to 10 extra, optional arguments, which can be used with dictionary messages that require additional parameters like %s or %i Added new type of house privilege in cMultiObj.cpp to keep track of friends of the multi - HOUSEPRIV_FRIEND - which is stored during worldsaves as one or more Friend=<player serial> tags in house.wsc Added new type of house privilege in cMultiObj.cpp to keep track of guests of the multi - HOUSEPRIV_GUEST - which is stored during worldsaves as one or more Guest=<player serial> tags in house.wsc When items are created for houses upon house placement, a reference to the multi's serial is now stored in the house sign's MORE property to allow easier tracking of which house a particular sign belongs to Added tracking of new, persistent properties for houses via cMultiObj.cpp/h: lockdowns, secure containers, vendors, guests, friends, owners, ban location, public status, number of visits, timestamps Added a multitude of new methods in cMultiObj.cpp/h to assist in improving the functionality of houses Added new tags for houses in house.dfn (default values applied if tag not specified): MAXSECURECONTAINERS=4 - Max amount of secure containers allowed in a multi MAXLOCKDOWNS=256 - Max amount of lockdowns allowed in a multi MAXVENDORS=10 - Max amount of vendors allowed in a multi MAXBANS=50 - Max amount of bans in a multi's ban list MAXFRIENDS=50 - Max amount of friends in a multi's friend list MAXGUESTS=50 - Max amount of guests in a multi's guest list MAXOWNERS=8 - Max amount of owners and co-owners in a multi's owner list MAXTRASHCONTAINERS=1 - Max amount of trash containers allowed in multi SCRIPT=<scriptID> - Assign a JS script-ID directly to a multi FRONTDOOR - indicates that a door is the front door of a house. Cannot be locked in public houses! INTERIORDOOR - indicates that a door is an interior door of a house. Can be locked in public houses. BANX - Location X offset for multi's ban location, if not used, will try to use SE corner of multi instead BANY - Location Y offset for multi's ban location, if not used, will try to use SE corner of multi instead Added JS Event: onHouseCommand( tSock, multiObj, cmdID ) - For handling spoken house commands via JS scripts attached to multi. Updated JS Events: onEntrance() - can now trigger both for multi being entered and/or object entering onLeaving() - can now trigger both for multi being left and/or object entering onSpeech() - can now also trigger for items (in addition to chars) with event & script attached, if UOX.INI setting ITEMSDETECTSPEECH is enabled Added JS Multi methods: .IsBoat() - Returns whether the item (or multi) is a boat .IsOwner( playerToCheck ) - Returns whether a player is the owner of a multi .IsOnOwnerList( playerToCheck ) - Returns whether a player is on the (co-)owner list of a multi .IsOnFriendList( playerToCheck ) - Returns whether a player is on the friend list of a multi .IsOnGuestList( playerToCheck ) - Returns whether a player is on the guest list of a multi .IsOnBanList( playerToCheck ) - Returns whether a player is on the ban list of a multi .AddToFriendList( playertoAdd ) - Adds player to the friend list of a multi .RemoveFromFriendList( playertoRemove ) - Removes player from the friend list of a multi .AddToGuestList( playertoAdd ) - Adds player to the guest list of a multi .RemoveFromGuestList( playertoRemove ) - Removes player from the guest list of a multi .ClearOwnerList() - Clears all entries from a multi's (co-)owner list .ClearFriendList() - Clears all entries from a multi's friend list .ClearGuestList() - Clears all entries from a multi's guest list .ClearBanList() - Clears all entries from a multi's ban list .SecureContainer( itemToSecure ) - Secures a container in a multi .UnsecureContainer( itemToUnsecure ) - Unsecures a container in a multi .IsSecureContainer( itemToCheck ) - Checks if specified item is a secure container in a multi .LockDownItem( itemToLockDown) - Locks down an item in a multi .ReleaseItem( itemToRelease ) - Releases a locked down item in a multi .KillKeys() - Deletes ALL keys associated with a multi .AddTrashCont( itemToAdd ) - Add trash container to multi's list of trash containers .RemoveTrashCont( itemToRemove ) - Remove trash container from multi's list of trash containers Added JS Item (Multi only) properties: .lockdowns - Get the number of lockdowns in a multi .maxLockdowns - Get/Set the max number of lockdowns allowed in a multi .secureContainers - Get the number of secure containers in a multi .maxSecureContainers - Get/Set the max number of secure containers allowed in a multi .trashContainers - Get the number of trash containers in a multi .maxTrashContainers - Get/Set the max number of trash containers allowed in a multi .friends - Get the number of friends in a multi's friend list .maxFriends - Get/Set the max number of friends allowed in a multi's friend list .guests - Get the number of guests in a multi's guest list .maxGuests - Get/Set the max number of guests allowed in a multi's guest list .owners - Get the number of owners in a multi's owner list .maxOwners - Get/Set the max number of owners allowed in a multi's owner list .bans - Get the number of banned players in a multi's ban list .maxBans - Get/Set the max number of banned players allowed in a multi's ban list .vendors - Get the number of player vendors in a multi .maxVendors - Get the max number of player vendors allowed in a multi .deed - Get the item sectionID for deed used to place multi .isPublic - Get/Set the private/public state of a multi .buildTimestamp - Get the timestamp for when the house was originally placed .tradeTimestamp - Get the timestamp for when the house was last traded to another player .banX - Get/Set the ban location X offset for the multi .banY - Get/Set the ban location Y offset for the multi Added JS Character properties: .multi = Get/Set the multi object the character is in .accountNum = Get the account number the character belongs to .housesOwned = Get a count of houses owned by the character .housesCoOwned = Get a count of houses co-owned by the character Updated JS cBaseObject Methods .FirstItem(), .NextItem() and .FinishedItems() to also support iterating through items in multis Updated JS multi Methods .FirstChar(), .NextChar() and .FinishedChars() to support an additional parameter to specify what kind of characters to loop through: "default" or no parameter - all characters inside the multi "owner" - players on multi's owner list "friend" - players on multi's friend list "guest" - players on multi's guest list "banned" - players on multi's ban list Added new INI tags to a new section of uox.ini called [houses] DECAYTIMERINHOUSE=3600 // Decay timer in seconds for non-locked down items inside houses PROTECTPRIVATEHOUSES=1 // Toggles whether private houses will automatically boot unauthorized visitors (1) or not (0) TRACKHOUSESPERACCOUNT=1 // Toggles whether to track (and restrict) house ownership per account (1) or per character (0) MAXHOUSESOWNABLE=1 // Specifies the max amount of houses a player can own per account/char, depending on how house ownership is tracked MAXHOUSESCOOWNABLE=10 // Specifies the max amount of houses a player can co-own per character CANOWNANDCOOWNHOUSES=1 // Toggles whether players can own and co-own houses at the same time COOWNHOUSESONSAMEACCOUNT=1 // Toggles whether characters on same account as house owner will be treated as co-owners Added new INI tags in [settings] section of uox.ini: ITEMSDETECTSPEECH=0 // If enabled, server will search for nearby items with onSpeech JS event running whenever a character speaks. Disabled by default. MAXPLAYERPACKITEMS=125 // Defines max item capacity for player (and NPC) backpacks. Defaults to 125. Moved most of the existing house functionality to JS and expanded upon it to reach feature parity with houses in regular UO around Publish 15/16, with various extras thrown in for good measure and all functionality being customizable: js/server/house/house.js (15000) - handles detection of house commands and characters entering/leaving houses js/server/house/houseSign.js (15001) - contains and handles all house-related gumps/menus and what is shown when players interact with house sign js/server/house/houseCommands.js (15002) - handles functionality of house commands and other functionality such as transfer of ownership, demolishing house, etc. js/server/house/houseDeed.js (15003) - handles initial rules that allow/disallow placement of additional houses for players All house-related menus now fully handled through JS All house commands and other functionality now fully handled through JS Removed redundant hard-coded house functionality Implemented Co-owners, friends, guests for houses, with access rules in place for entry, lockdowns, house commands, etc. Implemented Private and Public houses Implemented Secure Containers and Trash Barrels Definable max lockdowns, secure containers, player vendors, bans, friends, guests, owners, trash containers and more - per house type JS scripts can now be attached directly to houses Doors in houses can be marked as front doors or interior doors, and will be treated differently with regards to private and public houses Added new item to dfndata/items/containers/misc.dfn - [trashbarrel] Added new JS script (js/items/trashbarrel.js) with trash barrel functionality for houses. Trash barrels that are marked as secure containers are only accessible by owners, co-owners and friends of the house. Various options available at top of script. Updated js/items/axe.js to support chopping up trash barrels and house add-ons in houses owned by the player Fixed an issue with house doors being left behind after demolishing houses while their doors were open Fixed an issue where GMs could be banned from player houses Added Line of Sight checks to speech, to give players some privacy in their own homes Updated house placement code to more accurately check for other multis, dynamic and static objects when placing houses; now requires free space around each house that cannot be blocked by other houses or items that can block player movement, and disallows placement of houses on roads Updated house placement code to move characters blocking house placement to SE corner of the house Updated house placement code to disallow placing houses in guarded regions, or in dungeons Added new DFN tag for regions to enable/disable player houses in specific regions: HOUSING=0/1 Added new region (247) that covers path to Valley of Eodon in Felucca Added new region (248) that covers Valley of Eodon in Ter-Mur, with player housing disabled Added new region (249) that covers entire T2A lands, with player housing disabled Updated SPACEX and SPACEY values for all houses in dfndata/house/house.dfn to match updated house placement code Added new JS property to Regions that can be used to determine or change state of player housing in a region: .canPlaceHouse() Updated rules for usage of dye tubs to dye locked down items; now only house owners or co-owners may dye locked down items Updated rules for usage of the following locked down items in a house, which are now only usable by house owners and co-owners Dyes, Guildstone Deeds, Recall Runes (renaming), Rename Deeds, Townstone Deeds, House Deeds, Boat Models, Player Vendor Deeds, Ore, Hair Dye Updated rules for usage of the following locked down items in a house, which are now only usable by house owners, co-owners and friends: Keys, Dye Tubs, Magic Scrolls, Fireworks Wands, Magic Wands, Smithing Tools, Mining Tools, Fishing Poles Updated item lockdown rules to allow locking down (and releasing) items in a container as long as the container is locked down, and to only allow releasing a locked down container if it's empty of locked down items Updated item lockdown rules to only allow locking down movement-blocking items further than 2 tiles away from doors Updated rules for releasing items in houses - now the house owner can release any locked down items, co-owners can release items locked down by themselves or by friends, while friends can release only items locked down by themselves Added some feedback to player about why their attempted house placement failed Items added by GMs directly into multis will now decay based on the house-specific decay timer instead of the regular one Fixed an issue that could cause items to almost instantly decay after being released from lockdown in a house Placing house add-ons now properly takes into account SPACEX and SPACEY values when checking if they can fit in selected area of houses Re-added SPACEX and SPACEY values for Pentagram and Loom house add-ons House add-ons can now be converted back into house add-on deeds by chopping them with an axe Added new item type - IT_HOUSEADDON (201) - used by house add-ons placed in player houses Fixed a bug where keys would stop working after being added to a keyring, and would turn into blank keys upon release from the keyring Added visitor count for public player houses, which keeps track of how many visits a public house has received, with each player counted max 1 time every 24 hours Fixed an issue with FindPlayersInOldVisrange() where it didn't take into account that players could see buildings further away than the standard update range. This could cause players to see ghost images of buildings if they were at the "right" distance when the building was being demolished Added NODECAY tag to all signs and doors in dfndata/house/house.dfn Added FRONTDOOR or INTERIORDOOR (as appropriate) to all doors in dfndata/house/house.dfn Added BANX and BANY to specify ban location for some houses in dfndata/house/house.dfn instead of relying on finding SE corner automatically Implemented strongboxes (js/server/house/strongbox.js) for co-owners of a house, which can be placed with the house command "i wish to place a strongbox". Max capacity is 25 items Updated 'REMOVE command to take an optional parameter - itemID. If supplied, the command will remove all items with this itemID from a targeted container Fixed a bug when checking if dynamic items were blocking valid spawn locations for NPCs, some function arguments were in the wrong order! Improved code that finds valid spawn locations for items and NPCs spawned via spawn regions. As server gradually builds up lists of valid spawn locations per region over time, it will start using these lists more often, rather than always look for brand new spawn locations. Fixed a bug with CMulHandler::CheckStaticFlag() that prevented NPCs from spawning inside buildings with no static floors! Fixed an issue with repeating commands that prevented GMs from being able to cancel them when using the ClassicUO client Exposed character property .accountNum to JS engine Extended CDataList class to include a Clear() method for clearing lists Updated JS File method .Open() to support an optional, third argument - subFolderName - that defines in which sub-folder of UOX3/shared/ to store/look for a file. If no third argument is supplied, UOX3 will default to using the shared folder itself. Updated JS File method .Length() to return a value of -1 for files that don't exist Added new code function, exposed to JS engine with same parameters, which simply checks if a given tile ID has a specific flag bool CheckTileFlag( UI16 itemID, TILEFLAG flagToCheck ) Added JS function used to find the root container of an item (if any) FindRootContainer( itemSerial ) FindRootContainer( item ) Added new JS function that allows deleting files from UOX3/shared/ folder or subfolders of shared folder. If no subFolderName is provided, looks for file directly in shared folder itself. Restrictions on file- and folder-names apply. bool DeleteFile( fileName, subFolderName ) Added new JS functions for checking if a specific client or server feature is enabled. See documentation for full list of client/server features. GetClientFeature( bitNum ) // Returns true if specified client feature is enabled on server GetServerFeature( bitNum ) // Returns true if specified server feature is enabled on server Added new JS function for returning the value of almost any server setting from UOX.INI GetServerSetting( settingNameInDoubleQuotes ) Updated JS function DoesDynamicBlock() with two new parameters - checkOnlyMultis and checkOnlyNonMultis Updated JS function DoesMapBlock() with two new parameters - checkMultiPlacement and checkForRoad Fixed an issue where a LoS check would prevent players from accessing containers in their own backpack Added new functions in findfuncs.cpp to make it easier to find items near another object or location: findNearbyItems( object, distance ) findNearbyItems( x, y, worldNumber, instanceID, distance ) Added new Item property - maxItems - used by containers to determine their max item capacity Added new Item property - totalItemCount - used to get total item count in a container (including sub-containers) Added check for max item capacity when creating new items that are added to a character's backpack - items will be created below character's feet if backpack is full! Added new DFN tag for items, used by containers to determine item capacity for a given container: MAXITEMS=# // 125 is the default for all containers if not set Added new JS Item properties: .maxItems // gets/sets item capacity for a given container .totalItemCount // gets total item count in a container, including sub-containers Updated item tooltips for containers to show accurate total item count, as well as to display max item capacity Fixed a bug where picking up items from a non-locked down pile of items on the floor inside a multi could cause the remaining pile to be seen as no longer inside the multi, disallowing locking it back down and causing it to decay based on regular decay timer instead of house-specific one Updated JS command set to allow setting poison-level on items ('set poison #) and hunger-level on characters ('set hunger #) Fixed an issue with js/item/food.js that prevented poisoned food from poisoning characters when eaten Fixed an issue with js/skill/poisoning.js that prevented players from poisoning food! Updated various JS scripts and hardcoded targeting functions to disallow the targeting of locked down resources using skills and tools Updated JS Method TextMessage() to support three extra, optional parameters. Note that if one optional parameter is included, all preceding optional parameters are also required! speechTarget - What kind of target is this message intended for? 0 - Only visible for sender and receiver of message 1 - Visible to all players in range 2 - Visible to all NPCs and players in range 3 - Visible to all PCs everywhere + NPCs in range 4 - Visible to all PCs everywhere (broadcast) 5 - Only visible for the receiver of the message speechTargetSerial - The serial of the receiver of the message, used if speechTarget is 0 or 5 speechFontType - The type of font to display the text in. Defaults to normal. 0 - Bold 1 - Normal with shadow 2 - Bold with shadow 3 - Normal 4 - Gothic 5 - Italic 6 - Small, dark 7 - Colourful 8 - Runic (only works with CAPS) 9 - Small, light Added timestamp to worldsaves in console, to make it easier to see when a particular world-save was done Added info about compiler/environment displayed at the top of the UOX3 console during startup Updated dictionary files with new messages primarily related to housing
2020-11-04 02:00:37 +08:00
break;
case CIP_DEED:
if( gPriv->GetObjType() == OT_MULTI )
{
( static_cast<CMultiObj *>( gPriv ))->SetDeed( encaps.toString() );
}
Housing Revamp and more Updated JS SysMessage function to accept up to 10 extra, optional arguments, which can be used with dictionary messages that require additional parameters like %s or %i Added new type of house privilege in cMultiObj.cpp to keep track of friends of the multi - HOUSEPRIV_FRIEND - which is stored during worldsaves as one or more Friend=<player serial> tags in house.wsc Added new type of house privilege in cMultiObj.cpp to keep track of guests of the multi - HOUSEPRIV_GUEST - which is stored during worldsaves as one or more Guest=<player serial> tags in house.wsc When items are created for houses upon house placement, a reference to the multi's serial is now stored in the house sign's MORE property to allow easier tracking of which house a particular sign belongs to Added tracking of new, persistent properties for houses via cMultiObj.cpp/h: lockdowns, secure containers, vendors, guests, friends, owners, ban location, public status, number of visits, timestamps Added a multitude of new methods in cMultiObj.cpp/h to assist in improving the functionality of houses Added new tags for houses in house.dfn (default values applied if tag not specified): MAXSECURECONTAINERS=4 - Max amount of secure containers allowed in a multi MAXLOCKDOWNS=256 - Max amount of lockdowns allowed in a multi MAXVENDORS=10 - Max amount of vendors allowed in a multi MAXBANS=50 - Max amount of bans in a multi's ban list MAXFRIENDS=50 - Max amount of friends in a multi's friend list MAXGUESTS=50 - Max amount of guests in a multi's guest list MAXOWNERS=8 - Max amount of owners and co-owners in a multi's owner list MAXTRASHCONTAINERS=1 - Max amount of trash containers allowed in multi SCRIPT=<scriptID> - Assign a JS script-ID directly to a multi FRONTDOOR - indicates that a door is the front door of a house. Cannot be locked in public houses! INTERIORDOOR - indicates that a door is an interior door of a house. Can be locked in public houses. BANX - Location X offset for multi's ban location, if not used, will try to use SE corner of multi instead BANY - Location Y offset for multi's ban location, if not used, will try to use SE corner of multi instead Added JS Event: onHouseCommand( tSock, multiObj, cmdID ) - For handling spoken house commands via JS scripts attached to multi. Updated JS Events: onEntrance() - can now trigger both for multi being entered and/or object entering onLeaving() - can now trigger both for multi being left and/or object entering onSpeech() - can now also trigger for items (in addition to chars) with event & script attached, if UOX.INI setting ITEMSDETECTSPEECH is enabled Added JS Multi methods: .IsBoat() - Returns whether the item (or multi) is a boat .IsOwner( playerToCheck ) - Returns whether a player is the owner of a multi .IsOnOwnerList( playerToCheck ) - Returns whether a player is on the (co-)owner list of a multi .IsOnFriendList( playerToCheck ) - Returns whether a player is on the friend list of a multi .IsOnGuestList( playerToCheck ) - Returns whether a player is on the guest list of a multi .IsOnBanList( playerToCheck ) - Returns whether a player is on the ban list of a multi .AddToFriendList( playertoAdd ) - Adds player to the friend list of a multi .RemoveFromFriendList( playertoRemove ) - Removes player from the friend list of a multi .AddToGuestList( playertoAdd ) - Adds player to the guest list of a multi .RemoveFromGuestList( playertoRemove ) - Removes player from the guest list of a multi .ClearOwnerList() - Clears all entries from a multi's (co-)owner list .ClearFriendList() - Clears all entries from a multi's friend list .ClearGuestList() - Clears all entries from a multi's guest list .ClearBanList() - Clears all entries from a multi's ban list .SecureContainer( itemToSecure ) - Secures a container in a multi .UnsecureContainer( itemToUnsecure ) - Unsecures a container in a multi .IsSecureContainer( itemToCheck ) - Checks if specified item is a secure container in a multi .LockDownItem( itemToLockDown) - Locks down an item in a multi .ReleaseItem( itemToRelease ) - Releases a locked down item in a multi .KillKeys() - Deletes ALL keys associated with a multi .AddTrashCont( itemToAdd ) - Add trash container to multi's list of trash containers .RemoveTrashCont( itemToRemove ) - Remove trash container from multi's list of trash containers Added JS Item (Multi only) properties: .lockdowns - Get the number of lockdowns in a multi .maxLockdowns - Get/Set the max number of lockdowns allowed in a multi .secureContainers - Get the number of secure containers in a multi .maxSecureContainers - Get/Set the max number of secure containers allowed in a multi .trashContainers - Get the number of trash containers in a multi .maxTrashContainers - Get/Set the max number of trash containers allowed in a multi .friends - Get the number of friends in a multi's friend list .maxFriends - Get/Set the max number of friends allowed in a multi's friend list .guests - Get the number of guests in a multi's guest list .maxGuests - Get/Set the max number of guests allowed in a multi's guest list .owners - Get the number of owners in a multi's owner list .maxOwners - Get/Set the max number of owners allowed in a multi's owner list .bans - Get the number of banned players in a multi's ban list .maxBans - Get/Set the max number of banned players allowed in a multi's ban list .vendors - Get the number of player vendors in a multi .maxVendors - Get the max number of player vendors allowed in a multi .deed - Get the item sectionID for deed used to place multi .isPublic - Get/Set the private/public state of a multi .buildTimestamp - Get the timestamp for when the house was originally placed .tradeTimestamp - Get the timestamp for when the house was last traded to another player .banX - Get/Set the ban location X offset for the multi .banY - Get/Set the ban location Y offset for the multi Added JS Character properties: .multi = Get/Set the multi object the character is in .accountNum = Get the account number the character belongs to .housesOwned = Get a count of houses owned by the character .housesCoOwned = Get a count of houses co-owned by the character Updated JS cBaseObject Methods .FirstItem(), .NextItem() and .FinishedItems() to also support iterating through items in multis Updated JS multi Methods .FirstChar(), .NextChar() and .FinishedChars() to support an additional parameter to specify what kind of characters to loop through: "default" or no parameter - all characters inside the multi "owner" - players on multi's owner list "friend" - players on multi's friend list "guest" - players on multi's guest list "banned" - players on multi's ban list Added new INI tags to a new section of uox.ini called [houses] DECAYTIMERINHOUSE=3600 // Decay timer in seconds for non-locked down items inside houses PROTECTPRIVATEHOUSES=1 // Toggles whether private houses will automatically boot unauthorized visitors (1) or not (0) TRACKHOUSESPERACCOUNT=1 // Toggles whether to track (and restrict) house ownership per account (1) or per character (0) MAXHOUSESOWNABLE=1 // Specifies the max amount of houses a player can own per account/char, depending on how house ownership is tracked MAXHOUSESCOOWNABLE=10 // Specifies the max amount of houses a player can co-own per character CANOWNANDCOOWNHOUSES=1 // Toggles whether players can own and co-own houses at the same time COOWNHOUSESONSAMEACCOUNT=1 // Toggles whether characters on same account as house owner will be treated as co-owners Added new INI tags in [settings] section of uox.ini: ITEMSDETECTSPEECH=0 // If enabled, server will search for nearby items with onSpeech JS event running whenever a character speaks. Disabled by default. MAXPLAYERPACKITEMS=125 // Defines max item capacity for player (and NPC) backpacks. Defaults to 125. Moved most of the existing house functionality to JS and expanded upon it to reach feature parity with houses in regular UO around Publish 15/16, with various extras thrown in for good measure and all functionality being customizable: js/server/house/house.js (15000) - handles detection of house commands and characters entering/leaving houses js/server/house/houseSign.js (15001) - contains and handles all house-related gumps/menus and what is shown when players interact with house sign js/server/house/houseCommands.js (15002) - handles functionality of house commands and other functionality such as transfer of ownership, demolishing house, etc. js/server/house/houseDeed.js (15003) - handles initial rules that allow/disallow placement of additional houses for players All house-related menus now fully handled through JS All house commands and other functionality now fully handled through JS Removed redundant hard-coded house functionality Implemented Co-owners, friends, guests for houses, with access rules in place for entry, lockdowns, house commands, etc. Implemented Private and Public houses Implemented Secure Containers and Trash Barrels Definable max lockdowns, secure containers, player vendors, bans, friends, guests, owners, trash containers and more - per house type JS scripts can now be attached directly to houses Doors in houses can be marked as front doors or interior doors, and will be treated differently with regards to private and public houses Added new item to dfndata/items/containers/misc.dfn - [trashbarrel] Added new JS script (js/items/trashbarrel.js) with trash barrel functionality for houses. Trash barrels that are marked as secure containers are only accessible by owners, co-owners and friends of the house. Various options available at top of script. Updated js/items/axe.js to support chopping up trash barrels and house add-ons in houses owned by the player Fixed an issue with house doors being left behind after demolishing houses while their doors were open Fixed an issue where GMs could be banned from player houses Added Line of Sight checks to speech, to give players some privacy in their own homes Updated house placement code to more accurately check for other multis, dynamic and static objects when placing houses; now requires free space around each house that cannot be blocked by other houses or items that can block player movement, and disallows placement of houses on roads Updated house placement code to move characters blocking house placement to SE corner of the house Updated house placement code to disallow placing houses in guarded regions, or in dungeons Added new DFN tag for regions to enable/disable player houses in specific regions: HOUSING=0/1 Added new region (247) that covers path to Valley of Eodon in Felucca Added new region (248) that covers Valley of Eodon in Ter-Mur, with player housing disabled Added new region (249) that covers entire T2A lands, with player housing disabled Updated SPACEX and SPACEY values for all houses in dfndata/house/house.dfn to match updated house placement code Added new JS property to Regions that can be used to determine or change state of player housing in a region: .canPlaceHouse() Updated rules for usage of dye tubs to dye locked down items; now only house owners or co-owners may dye locked down items Updated rules for usage of the following locked down items in a house, which are now only usable by house owners and co-owners Dyes, Guildstone Deeds, Recall Runes (renaming), Rename Deeds, Townstone Deeds, House Deeds, Boat Models, Player Vendor Deeds, Ore, Hair Dye Updated rules for usage of the following locked down items in a house, which are now only usable by house owners, co-owners and friends: Keys, Dye Tubs, Magic Scrolls, Fireworks Wands, Magic Wands, Smithing Tools, Mining Tools, Fishing Poles Updated item lockdown rules to allow locking down (and releasing) items in a container as long as the container is locked down, and to only allow releasing a locked down container if it's empty of locked down items Updated item lockdown rules to only allow locking down movement-blocking items further than 2 tiles away from doors Updated rules for releasing items in houses - now the house owner can release any locked down items, co-owners can release items locked down by themselves or by friends, while friends can release only items locked down by themselves Added some feedback to player about why their attempted house placement failed Items added by GMs directly into multis will now decay based on the house-specific decay timer instead of the regular one Fixed an issue that could cause items to almost instantly decay after being released from lockdown in a house Placing house add-ons now properly takes into account SPACEX and SPACEY values when checking if they can fit in selected area of houses Re-added SPACEX and SPACEY values for Pentagram and Loom house add-ons House add-ons can now be converted back into house add-on deeds by chopping them with an axe Added new item type - IT_HOUSEADDON (201) - used by house add-ons placed in player houses Fixed a bug where keys would stop working after being added to a keyring, and would turn into blank keys upon release from the keyring Added visitor count for public player houses, which keeps track of how many visits a public house has received, with each player counted max 1 time every 24 hours Fixed an issue with FindPlayersInOldVisrange() where it didn't take into account that players could see buildings further away than the standard update range. This could cause players to see ghost images of buildings if they were at the "right" distance when the building was being demolished Added NODECAY tag to all signs and doors in dfndata/house/house.dfn Added FRONTDOOR or INTERIORDOOR (as appropriate) to all doors in dfndata/house/house.dfn Added BANX and BANY to specify ban location for some houses in dfndata/house/house.dfn instead of relying on finding SE corner automatically Implemented strongboxes (js/server/house/strongbox.js) for co-owners of a house, which can be placed with the house command "i wish to place a strongbox". Max capacity is 25 items Updated 'REMOVE command to take an optional parameter - itemID. If supplied, the command will remove all items with this itemID from a targeted container Fixed a bug when checking if dynamic items were blocking valid spawn locations for NPCs, some function arguments were in the wrong order! Improved code that finds valid spawn locations for items and NPCs spawned via spawn regions. As server gradually builds up lists of valid spawn locations per region over time, it will start using these lists more often, rather than always look for brand new spawn locations. Fixed a bug with CMulHandler::CheckStaticFlag() that prevented NPCs from spawning inside buildings with no static floors! Fixed an issue with repeating commands that prevented GMs from being able to cancel them when using the ClassicUO client Exposed character property .accountNum to JS engine Extended CDataList class to include a Clear() method for clearing lists Updated JS File method .Open() to support an optional, third argument - subFolderName - that defines in which sub-folder of UOX3/shared/ to store/look for a file. If no third argument is supplied, UOX3 will default to using the shared folder itself. Updated JS File method .Length() to return a value of -1 for files that don't exist Added new code function, exposed to JS engine with same parameters, which simply checks if a given tile ID has a specific flag bool CheckTileFlag( UI16 itemID, TILEFLAG flagToCheck ) Added JS function used to find the root container of an item (if any) FindRootContainer( itemSerial ) FindRootContainer( item ) Added new JS function that allows deleting files from UOX3/shared/ folder or subfolders of shared folder. If no subFolderName is provided, looks for file directly in shared folder itself. Restrictions on file- and folder-names apply. bool DeleteFile( fileName, subFolderName ) Added new JS functions for checking if a specific client or server feature is enabled. See documentation for full list of client/server features. GetClientFeature( bitNum ) // Returns true if specified client feature is enabled on server GetServerFeature( bitNum ) // Returns true if specified server feature is enabled on server Added new JS function for returning the value of almost any server setting from UOX.INI GetServerSetting( settingNameInDoubleQuotes ) Updated JS function DoesDynamicBlock() with two new parameters - checkOnlyMultis and checkOnlyNonMultis Updated JS function DoesMapBlock() with two new parameters - checkMultiPlacement and checkForRoad Fixed an issue where a LoS check would prevent players from accessing containers in their own backpack Added new functions in findfuncs.cpp to make it easier to find items near another object or location: findNearbyItems( object, distance ) findNearbyItems( x, y, worldNumber, instanceID, distance ) Added new Item property - maxItems - used by containers to determine their max item capacity Added new Item property - totalItemCount - used to get total item count in a container (including sub-containers) Added check for max item capacity when creating new items that are added to a character's backpack - items will be created below character's feet if backpack is full! Added new DFN tag for items, used by containers to determine item capacity for a given container: MAXITEMS=# // 125 is the default for all containers if not set Added new JS Item properties: .maxItems // gets/sets item capacity for a given container .totalItemCount // gets total item count in a container, including sub-containers Updated item tooltips for containers to show accurate total item count, as well as to display max item capacity Fixed a bug where picking up items from a non-locked down pile of items on the floor inside a multi could cause the remaining pile to be seen as no longer inside the multi, disallowing locking it back down and causing it to decay based on regular decay timer instead of house-specific one Updated JS command set to allow setting poison-level on items ('set poison #) and hunger-level on characters ('set hunger #) Fixed an issue with js/item/food.js that prevented poisoned food from poisoning characters when eaten Fixed an issue with js/skill/poisoning.js that prevented players from poisoning food! Updated various JS scripts and hardcoded targeting functions to disallow the targeting of locked down resources using skills and tools Updated JS Method TextMessage() to support three extra, optional parameters. Note that if one optional parameter is included, all preceding optional parameters are also required! speechTarget - What kind of target is this message intended for? 0 - Only visible for sender and receiver of message 1 - Visible to all players in range 2 - Visible to all NPCs and players in range 3 - Visible to all PCs everywhere + NPCs in range 4 - Visible to all PCs everywhere (broadcast) 5 - Only visible for the receiver of the message speechTargetSerial - The serial of the receiver of the message, used if speechTarget is 0 or 5 speechFontType - The type of font to display the text in. Defaults to normal. 0 - Bold 1 - Normal with shadow 2 - Bold with shadow 3 - Normal 4 - Gothic 5 - Italic 6 - Small, dark 7 - Colourful 8 - Runic (only works with CAPS) 9 - Small, light Added timestamp to worldsaves in console, to make it easier to see when a particular world-save was done Added info about compiler/environment displayed at the top of the UOX3 console during startup Updated dictionary files with new messages primarily related to housing
2020-11-04 02:00:37 +08:00
break;
case CIP_ISPUBLIC:
if( gPriv->GetObjType() == OT_MULTI )
{
( static_cast<CMultiObj *>( gPriv ))->SetPublicStatus( encaps.toBool() );
}
Housing Revamp and more Updated JS SysMessage function to accept up to 10 extra, optional arguments, which can be used with dictionary messages that require additional parameters like %s or %i Added new type of house privilege in cMultiObj.cpp to keep track of friends of the multi - HOUSEPRIV_FRIEND - which is stored during worldsaves as one or more Friend=<player serial> tags in house.wsc Added new type of house privilege in cMultiObj.cpp to keep track of guests of the multi - HOUSEPRIV_GUEST - which is stored during worldsaves as one or more Guest=<player serial> tags in house.wsc When items are created for houses upon house placement, a reference to the multi's serial is now stored in the house sign's MORE property to allow easier tracking of which house a particular sign belongs to Added tracking of new, persistent properties for houses via cMultiObj.cpp/h: lockdowns, secure containers, vendors, guests, friends, owners, ban location, public status, number of visits, timestamps Added a multitude of new methods in cMultiObj.cpp/h to assist in improving the functionality of houses Added new tags for houses in house.dfn (default values applied if tag not specified): MAXSECURECONTAINERS=4 - Max amount of secure containers allowed in a multi MAXLOCKDOWNS=256 - Max amount of lockdowns allowed in a multi MAXVENDORS=10 - Max amount of vendors allowed in a multi MAXBANS=50 - Max amount of bans in a multi's ban list MAXFRIENDS=50 - Max amount of friends in a multi's friend list MAXGUESTS=50 - Max amount of guests in a multi's guest list MAXOWNERS=8 - Max amount of owners and co-owners in a multi's owner list MAXTRASHCONTAINERS=1 - Max amount of trash containers allowed in multi SCRIPT=<scriptID> - Assign a JS script-ID directly to a multi FRONTDOOR - indicates that a door is the front door of a house. Cannot be locked in public houses! INTERIORDOOR - indicates that a door is an interior door of a house. Can be locked in public houses. BANX - Location X offset for multi's ban location, if not used, will try to use SE corner of multi instead BANY - Location Y offset for multi's ban location, if not used, will try to use SE corner of multi instead Added JS Event: onHouseCommand( tSock, multiObj, cmdID ) - For handling spoken house commands via JS scripts attached to multi. Updated JS Events: onEntrance() - can now trigger both for multi being entered and/or object entering onLeaving() - can now trigger both for multi being left and/or object entering onSpeech() - can now also trigger for items (in addition to chars) with event & script attached, if UOX.INI setting ITEMSDETECTSPEECH is enabled Added JS Multi methods: .IsBoat() - Returns whether the item (or multi) is a boat .IsOwner( playerToCheck ) - Returns whether a player is the owner of a multi .IsOnOwnerList( playerToCheck ) - Returns whether a player is on the (co-)owner list of a multi .IsOnFriendList( playerToCheck ) - Returns whether a player is on the friend list of a multi .IsOnGuestList( playerToCheck ) - Returns whether a player is on the guest list of a multi .IsOnBanList( playerToCheck ) - Returns whether a player is on the ban list of a multi .AddToFriendList( playertoAdd ) - Adds player to the friend list of a multi .RemoveFromFriendList( playertoRemove ) - Removes player from the friend list of a multi .AddToGuestList( playertoAdd ) - Adds player to the guest list of a multi .RemoveFromGuestList( playertoRemove ) - Removes player from the guest list of a multi .ClearOwnerList() - Clears all entries from a multi's (co-)owner list .ClearFriendList() - Clears all entries from a multi's friend list .ClearGuestList() - Clears all entries from a multi's guest list .ClearBanList() - Clears all entries from a multi's ban list .SecureContainer( itemToSecure ) - Secures a container in a multi .UnsecureContainer( itemToUnsecure ) - Unsecures a container in a multi .IsSecureContainer( itemToCheck ) - Checks if specified item is a secure container in a multi .LockDownItem( itemToLockDown) - Locks down an item in a multi .ReleaseItem( itemToRelease ) - Releases a locked down item in a multi .KillKeys() - Deletes ALL keys associated with a multi .AddTrashCont( itemToAdd ) - Add trash container to multi's list of trash containers .RemoveTrashCont( itemToRemove ) - Remove trash container from multi's list of trash containers Added JS Item (Multi only) properties: .lockdowns - Get the number of lockdowns in a multi .maxLockdowns - Get/Set the max number of lockdowns allowed in a multi .secureContainers - Get the number of secure containers in a multi .maxSecureContainers - Get/Set the max number of secure containers allowed in a multi .trashContainers - Get the number of trash containers in a multi .maxTrashContainers - Get/Set the max number of trash containers allowed in a multi .friends - Get the number of friends in a multi's friend list .maxFriends - Get/Set the max number of friends allowed in a multi's friend list .guests - Get the number of guests in a multi's guest list .maxGuests - Get/Set the max number of guests allowed in a multi's guest list .owners - Get the number of owners in a multi's owner list .maxOwners - Get/Set the max number of owners allowed in a multi's owner list .bans - Get the number of banned players in a multi's ban list .maxBans - Get/Set the max number of banned players allowed in a multi's ban list .vendors - Get the number of player vendors in a multi .maxVendors - Get the max number of player vendors allowed in a multi .deed - Get the item sectionID for deed used to place multi .isPublic - Get/Set the private/public state of a multi .buildTimestamp - Get the timestamp for when the house was originally placed .tradeTimestamp - Get the timestamp for when the house was last traded to another player .banX - Get/Set the ban location X offset for the multi .banY - Get/Set the ban location Y offset for the multi Added JS Character properties: .multi = Get/Set the multi object the character is in .accountNum = Get the account number the character belongs to .housesOwned = Get a count of houses owned by the character .housesCoOwned = Get a count of houses co-owned by the character Updated JS cBaseObject Methods .FirstItem(), .NextItem() and .FinishedItems() to also support iterating through items in multis Updated JS multi Methods .FirstChar(), .NextChar() and .FinishedChars() to support an additional parameter to specify what kind of characters to loop through: "default" or no parameter - all characters inside the multi "owner" - players on multi's owner list "friend" - players on multi's friend list "guest" - players on multi's guest list "banned" - players on multi's ban list Added new INI tags to a new section of uox.ini called [houses] DECAYTIMERINHOUSE=3600 // Decay timer in seconds for non-locked down items inside houses PROTECTPRIVATEHOUSES=1 // Toggles whether private houses will automatically boot unauthorized visitors (1) or not (0) TRACKHOUSESPERACCOUNT=1 // Toggles whether to track (and restrict) house ownership per account (1) or per character (0) MAXHOUSESOWNABLE=1 // Specifies the max amount of houses a player can own per account/char, depending on how house ownership is tracked MAXHOUSESCOOWNABLE=10 // Specifies the max amount of houses a player can co-own per character CANOWNANDCOOWNHOUSES=1 // Toggles whether players can own and co-own houses at the same time COOWNHOUSESONSAMEACCOUNT=1 // Toggles whether characters on same account as house owner will be treated as co-owners Added new INI tags in [settings] section of uox.ini: ITEMSDETECTSPEECH=0 // If enabled, server will search for nearby items with onSpeech JS event running whenever a character speaks. Disabled by default. MAXPLAYERPACKITEMS=125 // Defines max item capacity for player (and NPC) backpacks. Defaults to 125. Moved most of the existing house functionality to JS and expanded upon it to reach feature parity with houses in regular UO around Publish 15/16, with various extras thrown in for good measure and all functionality being customizable: js/server/house/house.js (15000) - handles detection of house commands and characters entering/leaving houses js/server/house/houseSign.js (15001) - contains and handles all house-related gumps/menus and what is shown when players interact with house sign js/server/house/houseCommands.js (15002) - handles functionality of house commands and other functionality such as transfer of ownership, demolishing house, etc. js/server/house/houseDeed.js (15003) - handles initial rules that allow/disallow placement of additional houses for players All house-related menus now fully handled through JS All house commands and other functionality now fully handled through JS Removed redundant hard-coded house functionality Implemented Co-owners, friends, guests for houses, with access rules in place for entry, lockdowns, house commands, etc. Implemented Private and Public houses Implemented Secure Containers and Trash Barrels Definable max lockdowns, secure containers, player vendors, bans, friends, guests, owners, trash containers and more - per house type JS scripts can now be attached directly to houses Doors in houses can be marked as front doors or interior doors, and will be treated differently with regards to private and public houses Added new item to dfndata/items/containers/misc.dfn - [trashbarrel] Added new JS script (js/items/trashbarrel.js) with trash barrel functionality for houses. Trash barrels that are marked as secure containers are only accessible by owners, co-owners and friends of the house. Various options available at top of script. Updated js/items/axe.js to support chopping up trash barrels and house add-ons in houses owned by the player Fixed an issue with house doors being left behind after demolishing houses while their doors were open Fixed an issue where GMs could be banned from player houses Added Line of Sight checks to speech, to give players some privacy in their own homes Updated house placement code to more accurately check for other multis, dynamic and static objects when placing houses; now requires free space around each house that cannot be blocked by other houses or items that can block player movement, and disallows placement of houses on roads Updated house placement code to move characters blocking house placement to SE corner of the house Updated house placement code to disallow placing houses in guarded regions, or in dungeons Added new DFN tag for regions to enable/disable player houses in specific regions: HOUSING=0/1 Added new region (247) that covers path to Valley of Eodon in Felucca Added new region (248) that covers Valley of Eodon in Ter-Mur, with player housing disabled Added new region (249) that covers entire T2A lands, with player housing disabled Updated SPACEX and SPACEY values for all houses in dfndata/house/house.dfn to match updated house placement code Added new JS property to Regions that can be used to determine or change state of player housing in a region: .canPlaceHouse() Updated rules for usage of dye tubs to dye locked down items; now only house owners or co-owners may dye locked down items Updated rules for usage of the following locked down items in a house, which are now only usable by house owners and co-owners Dyes, Guildstone Deeds, Recall Runes (renaming), Rename Deeds, Townstone Deeds, House Deeds, Boat Models, Player Vendor Deeds, Ore, Hair Dye Updated rules for usage of the following locked down items in a house, which are now only usable by house owners, co-owners and friends: Keys, Dye Tubs, Magic Scrolls, Fireworks Wands, Magic Wands, Smithing Tools, Mining Tools, Fishing Poles Updated item lockdown rules to allow locking down (and releasing) items in a container as long as the container is locked down, and to only allow releasing a locked down container if it's empty of locked down items Updated item lockdown rules to only allow locking down movement-blocking items further than 2 tiles away from doors Updated rules for releasing items in houses - now the house owner can release any locked down items, co-owners can release items locked down by themselves or by friends, while friends can release only items locked down by themselves Added some feedback to player about why their attempted house placement failed Items added by GMs directly into multis will now decay based on the house-specific decay timer instead of the regular one Fixed an issue that could cause items to almost instantly decay after being released from lockdown in a house Placing house add-ons now properly takes into account SPACEX and SPACEY values when checking if they can fit in selected area of houses Re-added SPACEX and SPACEY values for Pentagram and Loom house add-ons House add-ons can now be converted back into house add-on deeds by chopping them with an axe Added new item type - IT_HOUSEADDON (201) - used by house add-ons placed in player houses Fixed a bug where keys would stop working after being added to a keyring, and would turn into blank keys upon release from the keyring Added visitor count for public player houses, which keeps track of how many visits a public house has received, with each player counted max 1 time every 24 hours Fixed an issue with FindPlayersInOldVisrange() where it didn't take into account that players could see buildings further away than the standard update range. This could cause players to see ghost images of buildings if they were at the "right" distance when the building was being demolished Added NODECAY tag to all signs and doors in dfndata/house/house.dfn Added FRONTDOOR or INTERIORDOOR (as appropriate) to all doors in dfndata/house/house.dfn Added BANX and BANY to specify ban location for some houses in dfndata/house/house.dfn instead of relying on finding SE corner automatically Implemented strongboxes (js/server/house/strongbox.js) for co-owners of a house, which can be placed with the house command "i wish to place a strongbox". Max capacity is 25 items Updated 'REMOVE command to take an optional parameter - itemID. If supplied, the command will remove all items with this itemID from a targeted container Fixed a bug when checking if dynamic items were blocking valid spawn locations for NPCs, some function arguments were in the wrong order! Improved code that finds valid spawn locations for items and NPCs spawned via spawn regions. As server gradually builds up lists of valid spawn locations per region over time, it will start using these lists more often, rather than always look for brand new spawn locations. Fixed a bug with CMulHandler::CheckStaticFlag() that prevented NPCs from spawning inside buildings with no static floors! Fixed an issue with repeating commands that prevented GMs from being able to cancel them when using the ClassicUO client Exposed character property .accountNum to JS engine Extended CDataList class to include a Clear() method for clearing lists Updated JS File method .Open() to support an optional, third argument - subFolderName - that defines in which sub-folder of UOX3/shared/ to store/look for a file. If no third argument is supplied, UOX3 will default to using the shared folder itself. Updated JS File method .Length() to return a value of -1 for files that don't exist Added new code function, exposed to JS engine with same parameters, which simply checks if a given tile ID has a specific flag bool CheckTileFlag( UI16 itemID, TILEFLAG flagToCheck ) Added JS function used to find the root container of an item (if any) FindRootContainer( itemSerial ) FindRootContainer( item ) Added new JS function that allows deleting files from UOX3/shared/ folder or subfolders of shared folder. If no subFolderName is provided, looks for file directly in shared folder itself. Restrictions on file- and folder-names apply. bool DeleteFile( fileName, subFolderName ) Added new JS functions for checking if a specific client or server feature is enabled. See documentation for full list of client/server features. GetClientFeature( bitNum ) // Returns true if specified client feature is enabled on server GetServerFeature( bitNum ) // Returns true if specified server feature is enabled on server Added new JS function for returning the value of almost any server setting from UOX.INI GetServerSetting( settingNameInDoubleQuotes ) Updated JS function DoesDynamicBlock() with two new parameters - checkOnlyMultis and checkOnlyNonMultis Updated JS function DoesMapBlock() with two new parameters - checkMultiPlacement and checkForRoad Fixed an issue where a LoS check would prevent players from accessing containers in their own backpack Added new functions in findfuncs.cpp to make it easier to find items near another object or location: findNearbyItems( object, distance ) findNearbyItems( x, y, worldNumber, instanceID, distance ) Added new Item property - maxItems - used by containers to determine their max item capacity Added new Item property - totalItemCount - used to get total item count in a container (including sub-containers) Added check for max item capacity when creating new items that are added to a character's backpack - items will be created below character's feet if backpack is full! Added new DFN tag for items, used by containers to determine item capacity for a given container: MAXITEMS=# // 125 is the default for all containers if not set Added new JS Item properties: .maxItems // gets/sets item capacity for a given container .totalItemCount // gets total item count in a container, including sub-containers Updated item tooltips for containers to show accurate total item count, as well as to display max item capacity Fixed a bug where picking up items from a non-locked down pile of items on the floor inside a multi could cause the remaining pile to be seen as no longer inside the multi, disallowing locking it back down and causing it to decay based on regular decay timer instead of house-specific one Updated JS command set to allow setting poison-level on items ('set poison #) and hunger-level on characters ('set hunger #) Fixed an issue with js/item/food.js that prevented poisoned food from poisoning characters when eaten Fixed an issue with js/skill/poisoning.js that prevented players from poisoning food! Updated various JS scripts and hardcoded targeting functions to disallow the targeting of locked down resources using skills and tools Updated JS Method TextMessage() to support three extra, optional parameters. Note that if one optional parameter is included, all preceding optional parameters are also required! speechTarget - What kind of target is this message intended for? 0 - Only visible for sender and receiver of message 1 - Visible to all players in range 2 - Visible to all NPCs and players in range 3 - Visible to all PCs everywhere + NPCs in range 4 - Visible to all PCs everywhere (broadcast) 5 - Only visible for the receiver of the message speechTargetSerial - The serial of the receiver of the message, used if speechTarget is 0 or 5 speechFontType - The type of font to display the text in. Defaults to normal. 0 - Bold 1 - Normal with shadow 2 - Bold with shadow 3 - Normal 4 - Gothic 5 - Italic 6 - Small, dark 7 - Colourful 8 - Runic (only works with CAPS) 9 - Small, light Added timestamp to worldsaves in console, to make it easier to see when a particular world-save was done Added info about compiler/environment displayed at the top of the UOX3 console during startup Updated dictionary files with new messages primarily related to housing
2020-11-04 02:00:37 +08:00
break;
case CIP_BUILDTIMESTAMP:
{
if( gPriv->GetObjType() == OT_MULTI )
{
time_t buildTimestamp = std::chrono::system_clock::to_time_t( std::chrono::system_clock::now() );
( static_cast<CMultiObj *>( gPriv ))->SetBuildTimestamp( buildTimestamp );
Housing Revamp and more Updated JS SysMessage function to accept up to 10 extra, optional arguments, which can be used with dictionary messages that require additional parameters like %s or %i Added new type of house privilege in cMultiObj.cpp to keep track of friends of the multi - HOUSEPRIV_FRIEND - which is stored during worldsaves as one or more Friend=<player serial> tags in house.wsc Added new type of house privilege in cMultiObj.cpp to keep track of guests of the multi - HOUSEPRIV_GUEST - which is stored during worldsaves as one or more Guest=<player serial> tags in house.wsc When items are created for houses upon house placement, a reference to the multi's serial is now stored in the house sign's MORE property to allow easier tracking of which house a particular sign belongs to Added tracking of new, persistent properties for houses via cMultiObj.cpp/h: lockdowns, secure containers, vendors, guests, friends, owners, ban location, public status, number of visits, timestamps Added a multitude of new methods in cMultiObj.cpp/h to assist in improving the functionality of houses Added new tags for houses in house.dfn (default values applied if tag not specified): MAXSECURECONTAINERS=4 - Max amount of secure containers allowed in a multi MAXLOCKDOWNS=256 - Max amount of lockdowns allowed in a multi MAXVENDORS=10 - Max amount of vendors allowed in a multi MAXBANS=50 - Max amount of bans in a multi's ban list MAXFRIENDS=50 - Max amount of friends in a multi's friend list MAXGUESTS=50 - Max amount of guests in a multi's guest list MAXOWNERS=8 - Max amount of owners and co-owners in a multi's owner list MAXTRASHCONTAINERS=1 - Max amount of trash containers allowed in multi SCRIPT=<scriptID> - Assign a JS script-ID directly to a multi FRONTDOOR - indicates that a door is the front door of a house. Cannot be locked in public houses! INTERIORDOOR - indicates that a door is an interior door of a house. Can be locked in public houses. BANX - Location X offset for multi's ban location, if not used, will try to use SE corner of multi instead BANY - Location Y offset for multi's ban location, if not used, will try to use SE corner of multi instead Added JS Event: onHouseCommand( tSock, multiObj, cmdID ) - For handling spoken house commands via JS scripts attached to multi. Updated JS Events: onEntrance() - can now trigger both for multi being entered and/or object entering onLeaving() - can now trigger both for multi being left and/or object entering onSpeech() - can now also trigger for items (in addition to chars) with event & script attached, if UOX.INI setting ITEMSDETECTSPEECH is enabled Added JS Multi methods: .IsBoat() - Returns whether the item (or multi) is a boat .IsOwner( playerToCheck ) - Returns whether a player is the owner of a multi .IsOnOwnerList( playerToCheck ) - Returns whether a player is on the (co-)owner list of a multi .IsOnFriendList( playerToCheck ) - Returns whether a player is on the friend list of a multi .IsOnGuestList( playerToCheck ) - Returns whether a player is on the guest list of a multi .IsOnBanList( playerToCheck ) - Returns whether a player is on the ban list of a multi .AddToFriendList( playertoAdd ) - Adds player to the friend list of a multi .RemoveFromFriendList( playertoRemove ) - Removes player from the friend list of a multi .AddToGuestList( playertoAdd ) - Adds player to the guest list of a multi .RemoveFromGuestList( playertoRemove ) - Removes player from the guest list of a multi .ClearOwnerList() - Clears all entries from a multi's (co-)owner list .ClearFriendList() - Clears all entries from a multi's friend list .ClearGuestList() - Clears all entries from a multi's guest list .ClearBanList() - Clears all entries from a multi's ban list .SecureContainer( itemToSecure ) - Secures a container in a multi .UnsecureContainer( itemToUnsecure ) - Unsecures a container in a multi .IsSecureContainer( itemToCheck ) - Checks if specified item is a secure container in a multi .LockDownItem( itemToLockDown) - Locks down an item in a multi .ReleaseItem( itemToRelease ) - Releases a locked down item in a multi .KillKeys() - Deletes ALL keys associated with a multi .AddTrashCont( itemToAdd ) - Add trash container to multi's list of trash containers .RemoveTrashCont( itemToRemove ) - Remove trash container from multi's list of trash containers Added JS Item (Multi only) properties: .lockdowns - Get the number of lockdowns in a multi .maxLockdowns - Get/Set the max number of lockdowns allowed in a multi .secureContainers - Get the number of secure containers in a multi .maxSecureContainers - Get/Set the max number of secure containers allowed in a multi .trashContainers - Get the number of trash containers in a multi .maxTrashContainers - Get/Set the max number of trash containers allowed in a multi .friends - Get the number of friends in a multi's friend list .maxFriends - Get/Set the max number of friends allowed in a multi's friend list .guests - Get the number of guests in a multi's guest list .maxGuests - Get/Set the max number of guests allowed in a multi's guest list .owners - Get the number of owners in a multi's owner list .maxOwners - Get/Set the max number of owners allowed in a multi's owner list .bans - Get the number of banned players in a multi's ban list .maxBans - Get/Set the max number of banned players allowed in a multi's ban list .vendors - Get the number of player vendors in a multi .maxVendors - Get the max number of player vendors allowed in a multi .deed - Get the item sectionID for deed used to place multi .isPublic - Get/Set the private/public state of a multi .buildTimestamp - Get the timestamp for when the house was originally placed .tradeTimestamp - Get the timestamp for when the house was last traded to another player .banX - Get/Set the ban location X offset for the multi .banY - Get/Set the ban location Y offset for the multi Added JS Character properties: .multi = Get/Set the multi object the character is in .accountNum = Get the account number the character belongs to .housesOwned = Get a count of houses owned by the character .housesCoOwned = Get a count of houses co-owned by the character Updated JS cBaseObject Methods .FirstItem(), .NextItem() and .FinishedItems() to also support iterating through items in multis Updated JS multi Methods .FirstChar(), .NextChar() and .FinishedChars() to support an additional parameter to specify what kind of characters to loop through: "default" or no parameter - all characters inside the multi "owner" - players on multi's owner list "friend" - players on multi's friend list "guest" - players on multi's guest list "banned" - players on multi's ban list Added new INI tags to a new section of uox.ini called [houses] DECAYTIMERINHOUSE=3600 // Decay timer in seconds for non-locked down items inside houses PROTECTPRIVATEHOUSES=1 // Toggles whether private houses will automatically boot unauthorized visitors (1) or not (0) TRACKHOUSESPERACCOUNT=1 // Toggles whether to track (and restrict) house ownership per account (1) or per character (0) MAXHOUSESOWNABLE=1 // Specifies the max amount of houses a player can own per account/char, depending on how house ownership is tracked MAXHOUSESCOOWNABLE=10 // Specifies the max amount of houses a player can co-own per character CANOWNANDCOOWNHOUSES=1 // Toggles whether players can own and co-own houses at the same time COOWNHOUSESONSAMEACCOUNT=1 // Toggles whether characters on same account as house owner will be treated as co-owners Added new INI tags in [settings] section of uox.ini: ITEMSDETECTSPEECH=0 // If enabled, server will search for nearby items with onSpeech JS event running whenever a character speaks. Disabled by default. MAXPLAYERPACKITEMS=125 // Defines max item capacity for player (and NPC) backpacks. Defaults to 125. Moved most of the existing house functionality to JS and expanded upon it to reach feature parity with houses in regular UO around Publish 15/16, with various extras thrown in for good measure and all functionality being customizable: js/server/house/house.js (15000) - handles detection of house commands and characters entering/leaving houses js/server/house/houseSign.js (15001) - contains and handles all house-related gumps/menus and what is shown when players interact with house sign js/server/house/houseCommands.js (15002) - handles functionality of house commands and other functionality such as transfer of ownership, demolishing house, etc. js/server/house/houseDeed.js (15003) - handles initial rules that allow/disallow placement of additional houses for players All house-related menus now fully handled through JS All house commands and other functionality now fully handled through JS Removed redundant hard-coded house functionality Implemented Co-owners, friends, guests for houses, with access rules in place for entry, lockdowns, house commands, etc. Implemented Private and Public houses Implemented Secure Containers and Trash Barrels Definable max lockdowns, secure containers, player vendors, bans, friends, guests, owners, trash containers and more - per house type JS scripts can now be attached directly to houses Doors in houses can be marked as front doors or interior doors, and will be treated differently with regards to private and public houses Added new item to dfndata/items/containers/misc.dfn - [trashbarrel] Added new JS script (js/items/trashbarrel.js) with trash barrel functionality for houses. Trash barrels that are marked as secure containers are only accessible by owners, co-owners and friends of the house. Various options available at top of script. Updated js/items/axe.js to support chopping up trash barrels and house add-ons in houses owned by the player Fixed an issue with house doors being left behind after demolishing houses while their doors were open Fixed an issue where GMs could be banned from player houses Added Line of Sight checks to speech, to give players some privacy in their own homes Updated house placement code to more accurately check for other multis, dynamic and static objects when placing houses; now requires free space around each house that cannot be blocked by other houses or items that can block player movement, and disallows placement of houses on roads Updated house placement code to move characters blocking house placement to SE corner of the house Updated house placement code to disallow placing houses in guarded regions, or in dungeons Added new DFN tag for regions to enable/disable player houses in specific regions: HOUSING=0/1 Added new region (247) that covers path to Valley of Eodon in Felucca Added new region (248) that covers Valley of Eodon in Ter-Mur, with player housing disabled Added new region (249) that covers entire T2A lands, with player housing disabled Updated SPACEX and SPACEY values for all houses in dfndata/house/house.dfn to match updated house placement code Added new JS property to Regions that can be used to determine or change state of player housing in a region: .canPlaceHouse() Updated rules for usage of dye tubs to dye locked down items; now only house owners or co-owners may dye locked down items Updated rules for usage of the following locked down items in a house, which are now only usable by house owners and co-owners Dyes, Guildstone Deeds, Recall Runes (renaming), Rename Deeds, Townstone Deeds, House Deeds, Boat Models, Player Vendor Deeds, Ore, Hair Dye Updated rules for usage of the following locked down items in a house, which are now only usable by house owners, co-owners and friends: Keys, Dye Tubs, Magic Scrolls, Fireworks Wands, Magic Wands, Smithing Tools, Mining Tools, Fishing Poles Updated item lockdown rules to allow locking down (and releasing) items in a container as long as the container is locked down, and to only allow releasing a locked down container if it's empty of locked down items Updated item lockdown rules to only allow locking down movement-blocking items further than 2 tiles away from doors Updated rules for releasing items in houses - now the house owner can release any locked down items, co-owners can release items locked down by themselves or by friends, while friends can release only items locked down by themselves Added some feedback to player about why their attempted house placement failed Items added by GMs directly into multis will now decay based on the house-specific decay timer instead of the regular one Fixed an issue that could cause items to almost instantly decay after being released from lockdown in a house Placing house add-ons now properly takes into account SPACEX and SPACEY values when checking if they can fit in selected area of houses Re-added SPACEX and SPACEY values for Pentagram and Loom house add-ons House add-ons can now be converted back into house add-on deeds by chopping them with an axe Added new item type - IT_HOUSEADDON (201) - used by house add-ons placed in player houses Fixed a bug where keys would stop working after being added to a keyring, and would turn into blank keys upon release from the keyring Added visitor count for public player houses, which keeps track of how many visits a public house has received, with each player counted max 1 time every 24 hours Fixed an issue with FindPlayersInOldVisrange() where it didn't take into account that players could see buildings further away than the standard update range. This could cause players to see ghost images of buildings if they were at the "right" distance when the building was being demolished Added NODECAY tag to all signs and doors in dfndata/house/house.dfn Added FRONTDOOR or INTERIORDOOR (as appropriate) to all doors in dfndata/house/house.dfn Added BANX and BANY to specify ban location for some houses in dfndata/house/house.dfn instead of relying on finding SE corner automatically Implemented strongboxes (js/server/house/strongbox.js) for co-owners of a house, which can be placed with the house command "i wish to place a strongbox". Max capacity is 25 items Updated 'REMOVE command to take an optional parameter - itemID. If supplied, the command will remove all items with this itemID from a targeted container Fixed a bug when checking if dynamic items were blocking valid spawn locations for NPCs, some function arguments were in the wrong order! Improved code that finds valid spawn locations for items and NPCs spawned via spawn regions. As server gradually builds up lists of valid spawn locations per region over time, it will start using these lists more often, rather than always look for brand new spawn locations. Fixed a bug with CMulHandler::CheckStaticFlag() that prevented NPCs from spawning inside buildings with no static floors! Fixed an issue with repeating commands that prevented GMs from being able to cancel them when using the ClassicUO client Exposed character property .accountNum to JS engine Extended CDataList class to include a Clear() method for clearing lists Updated JS File method .Open() to support an optional, third argument - subFolderName - that defines in which sub-folder of UOX3/shared/ to store/look for a file. If no third argument is supplied, UOX3 will default to using the shared folder itself. Updated JS File method .Length() to return a value of -1 for files that don't exist Added new code function, exposed to JS engine with same parameters, which simply checks if a given tile ID has a specific flag bool CheckTileFlag( UI16 itemID, TILEFLAG flagToCheck ) Added JS function used to find the root container of an item (if any) FindRootContainer( itemSerial ) FindRootContainer( item ) Added new JS function that allows deleting files from UOX3/shared/ folder or subfolders of shared folder. If no subFolderName is provided, looks for file directly in shared folder itself. Restrictions on file- and folder-names apply. bool DeleteFile( fileName, subFolderName ) Added new JS functions for checking if a specific client or server feature is enabled. See documentation for full list of client/server features. GetClientFeature( bitNum ) // Returns true if specified client feature is enabled on server GetServerFeature( bitNum ) // Returns true if specified server feature is enabled on server Added new JS function for returning the value of almost any server setting from UOX.INI GetServerSetting( settingNameInDoubleQuotes ) Updated JS function DoesDynamicBlock() with two new parameters - checkOnlyMultis and checkOnlyNonMultis Updated JS function DoesMapBlock() with two new parameters - checkMultiPlacement and checkForRoad Fixed an issue where a LoS check would prevent players from accessing containers in their own backpack Added new functions in findfuncs.cpp to make it easier to find items near another object or location: findNearbyItems( object, distance ) findNearbyItems( x, y, worldNumber, instanceID, distance ) Added new Item property - maxItems - used by containers to determine their max item capacity Added new Item property - totalItemCount - used to get total item count in a container (including sub-containers) Added check for max item capacity when creating new items that are added to a character's backpack - items will be created below character's feet if backpack is full! Added new DFN tag for items, used by containers to determine item capacity for a given container: MAXITEMS=# // 125 is the default for all containers if not set Added new JS Item properties: .maxItems // gets/sets item capacity for a given container .totalItemCount // gets total item count in a container, including sub-containers Updated item tooltips for containers to show accurate total item count, as well as to display max item capacity Fixed a bug where picking up items from a non-locked down pile of items on the floor inside a multi could cause the remaining pile to be seen as no longer inside the multi, disallowing locking it back down and causing it to decay based on regular decay timer instead of house-specific one Updated JS command set to allow setting poison-level on items ('set poison #) and hunger-level on characters ('set hunger #) Fixed an issue with js/item/food.js that prevented poisoned food from poisoning characters when eaten Fixed an issue with js/skill/poisoning.js that prevented players from poisoning food! Updated various JS scripts and hardcoded targeting functions to disallow the targeting of locked down resources using skills and tools Updated JS Method TextMessage() to support three extra, optional parameters. Note that if one optional parameter is included, all preceding optional parameters are also required! speechTarget - What kind of target is this message intended for? 0 - Only visible for sender and receiver of message 1 - Visible to all players in range 2 - Visible to all NPCs and players in range 3 - Visible to all PCs everywhere + NPCs in range 4 - Visible to all PCs everywhere (broadcast) 5 - Only visible for the receiver of the message speechTargetSerial - The serial of the receiver of the message, used if speechTarget is 0 or 5 speechFontType - The type of font to display the text in. Defaults to normal. 0 - Bold 1 - Normal with shadow 2 - Bold with shadow 3 - Normal 4 - Gothic 5 - Italic 6 - Small, dark 7 - Colourful 8 - Runic (only works with CAPS) 9 - Small, light Added timestamp to worldsaves in console, to make it easier to see when a particular world-save was done Added info about compiler/environment displayed at the top of the UOX3 console during startup Updated dictionary files with new messages primarily related to housing
2020-11-04 02:00:37 +08:00
}
break;
}
case CIP_TRADETIMESTAMP:
{
if( gPriv->GetObjType() == OT_MULTI )
{
time_t tradeTimestamp = std::chrono::system_clock::to_time_t( std::chrono::system_clock::now() );
( static_cast<CMultiObj *>( gPriv ))->SetTradeTimestamp( tradeTimestamp );
Housing Revamp and more Updated JS SysMessage function to accept up to 10 extra, optional arguments, which can be used with dictionary messages that require additional parameters like %s or %i Added new type of house privilege in cMultiObj.cpp to keep track of friends of the multi - HOUSEPRIV_FRIEND - which is stored during worldsaves as one or more Friend=<player serial> tags in house.wsc Added new type of house privilege in cMultiObj.cpp to keep track of guests of the multi - HOUSEPRIV_GUEST - which is stored during worldsaves as one or more Guest=<player serial> tags in house.wsc When items are created for houses upon house placement, a reference to the multi's serial is now stored in the house sign's MORE property to allow easier tracking of which house a particular sign belongs to Added tracking of new, persistent properties for houses via cMultiObj.cpp/h: lockdowns, secure containers, vendors, guests, friends, owners, ban location, public status, number of visits, timestamps Added a multitude of new methods in cMultiObj.cpp/h to assist in improving the functionality of houses Added new tags for houses in house.dfn (default values applied if tag not specified): MAXSECURECONTAINERS=4 - Max amount of secure containers allowed in a multi MAXLOCKDOWNS=256 - Max amount of lockdowns allowed in a multi MAXVENDORS=10 - Max amount of vendors allowed in a multi MAXBANS=50 - Max amount of bans in a multi's ban list MAXFRIENDS=50 - Max amount of friends in a multi's friend list MAXGUESTS=50 - Max amount of guests in a multi's guest list MAXOWNERS=8 - Max amount of owners and co-owners in a multi's owner list MAXTRASHCONTAINERS=1 - Max amount of trash containers allowed in multi SCRIPT=<scriptID> - Assign a JS script-ID directly to a multi FRONTDOOR - indicates that a door is the front door of a house. Cannot be locked in public houses! INTERIORDOOR - indicates that a door is an interior door of a house. Can be locked in public houses. BANX - Location X offset for multi's ban location, if not used, will try to use SE corner of multi instead BANY - Location Y offset for multi's ban location, if not used, will try to use SE corner of multi instead Added JS Event: onHouseCommand( tSock, multiObj, cmdID ) - For handling spoken house commands via JS scripts attached to multi. Updated JS Events: onEntrance() - can now trigger both for multi being entered and/or object entering onLeaving() - can now trigger both for multi being left and/or object entering onSpeech() - can now also trigger for items (in addition to chars) with event & script attached, if UOX.INI setting ITEMSDETECTSPEECH is enabled Added JS Multi methods: .IsBoat() - Returns whether the item (or multi) is a boat .IsOwner( playerToCheck ) - Returns whether a player is the owner of a multi .IsOnOwnerList( playerToCheck ) - Returns whether a player is on the (co-)owner list of a multi .IsOnFriendList( playerToCheck ) - Returns whether a player is on the friend list of a multi .IsOnGuestList( playerToCheck ) - Returns whether a player is on the guest list of a multi .IsOnBanList( playerToCheck ) - Returns whether a player is on the ban list of a multi .AddToFriendList( playertoAdd ) - Adds player to the friend list of a multi .RemoveFromFriendList( playertoRemove ) - Removes player from the friend list of a multi .AddToGuestList( playertoAdd ) - Adds player to the guest list of a multi .RemoveFromGuestList( playertoRemove ) - Removes player from the guest list of a multi .ClearOwnerList() - Clears all entries from a multi's (co-)owner list .ClearFriendList() - Clears all entries from a multi's friend list .ClearGuestList() - Clears all entries from a multi's guest list .ClearBanList() - Clears all entries from a multi's ban list .SecureContainer( itemToSecure ) - Secures a container in a multi .UnsecureContainer( itemToUnsecure ) - Unsecures a container in a multi .IsSecureContainer( itemToCheck ) - Checks if specified item is a secure container in a multi .LockDownItem( itemToLockDown) - Locks down an item in a multi .ReleaseItem( itemToRelease ) - Releases a locked down item in a multi .KillKeys() - Deletes ALL keys associated with a multi .AddTrashCont( itemToAdd ) - Add trash container to multi's list of trash containers .RemoveTrashCont( itemToRemove ) - Remove trash container from multi's list of trash containers Added JS Item (Multi only) properties: .lockdowns - Get the number of lockdowns in a multi .maxLockdowns - Get/Set the max number of lockdowns allowed in a multi .secureContainers - Get the number of secure containers in a multi .maxSecureContainers - Get/Set the max number of secure containers allowed in a multi .trashContainers - Get the number of trash containers in a multi .maxTrashContainers - Get/Set the max number of trash containers allowed in a multi .friends - Get the number of friends in a multi's friend list .maxFriends - Get/Set the max number of friends allowed in a multi's friend list .guests - Get the number of guests in a multi's guest list .maxGuests - Get/Set the max number of guests allowed in a multi's guest list .owners - Get the number of owners in a multi's owner list .maxOwners - Get/Set the max number of owners allowed in a multi's owner list .bans - Get the number of banned players in a multi's ban list .maxBans - Get/Set the max number of banned players allowed in a multi's ban list .vendors - Get the number of player vendors in a multi .maxVendors - Get the max number of player vendors allowed in a multi .deed - Get the item sectionID for deed used to place multi .isPublic - Get/Set the private/public state of a multi .buildTimestamp - Get the timestamp for when the house was originally placed .tradeTimestamp - Get the timestamp for when the house was last traded to another player .banX - Get/Set the ban location X offset for the multi .banY - Get/Set the ban location Y offset for the multi Added JS Character properties: .multi = Get/Set the multi object the character is in .accountNum = Get the account number the character belongs to .housesOwned = Get a count of houses owned by the character .housesCoOwned = Get a count of houses co-owned by the character Updated JS cBaseObject Methods .FirstItem(), .NextItem() and .FinishedItems() to also support iterating through items in multis Updated JS multi Methods .FirstChar(), .NextChar() and .FinishedChars() to support an additional parameter to specify what kind of characters to loop through: "default" or no parameter - all characters inside the multi "owner" - players on multi's owner list "friend" - players on multi's friend list "guest" - players on multi's guest list "banned" - players on multi's ban list Added new INI tags to a new section of uox.ini called [houses] DECAYTIMERINHOUSE=3600 // Decay timer in seconds for non-locked down items inside houses PROTECTPRIVATEHOUSES=1 // Toggles whether private houses will automatically boot unauthorized visitors (1) or not (0) TRACKHOUSESPERACCOUNT=1 // Toggles whether to track (and restrict) house ownership per account (1) or per character (0) MAXHOUSESOWNABLE=1 // Specifies the max amount of houses a player can own per account/char, depending on how house ownership is tracked MAXHOUSESCOOWNABLE=10 // Specifies the max amount of houses a player can co-own per character CANOWNANDCOOWNHOUSES=1 // Toggles whether players can own and co-own houses at the same time COOWNHOUSESONSAMEACCOUNT=1 // Toggles whether characters on same account as house owner will be treated as co-owners Added new INI tags in [settings] section of uox.ini: ITEMSDETECTSPEECH=0 // If enabled, server will search for nearby items with onSpeech JS event running whenever a character speaks. Disabled by default. MAXPLAYERPACKITEMS=125 // Defines max item capacity for player (and NPC) backpacks. Defaults to 125. Moved most of the existing house functionality to JS and expanded upon it to reach feature parity with houses in regular UO around Publish 15/16, with various extras thrown in for good measure and all functionality being customizable: js/server/house/house.js (15000) - handles detection of house commands and characters entering/leaving houses js/server/house/houseSign.js (15001) - contains and handles all house-related gumps/menus and what is shown when players interact with house sign js/server/house/houseCommands.js (15002) - handles functionality of house commands and other functionality such as transfer of ownership, demolishing house, etc. js/server/house/houseDeed.js (15003) - handles initial rules that allow/disallow placement of additional houses for players All house-related menus now fully handled through JS All house commands and other functionality now fully handled through JS Removed redundant hard-coded house functionality Implemented Co-owners, friends, guests for houses, with access rules in place for entry, lockdowns, house commands, etc. Implemented Private and Public houses Implemented Secure Containers and Trash Barrels Definable max lockdowns, secure containers, player vendors, bans, friends, guests, owners, trash containers and more - per house type JS scripts can now be attached directly to houses Doors in houses can be marked as front doors or interior doors, and will be treated differently with regards to private and public houses Added new item to dfndata/items/containers/misc.dfn - [trashbarrel] Added new JS script (js/items/trashbarrel.js) with trash barrel functionality for houses. Trash barrels that are marked as secure containers are only accessible by owners, co-owners and friends of the house. Various options available at top of script. Updated js/items/axe.js to support chopping up trash barrels and house add-ons in houses owned by the player Fixed an issue with house doors being left behind after demolishing houses while their doors were open Fixed an issue where GMs could be banned from player houses Added Line of Sight checks to speech, to give players some privacy in their own homes Updated house placement code to more accurately check for other multis, dynamic and static objects when placing houses; now requires free space around each house that cannot be blocked by other houses or items that can block player movement, and disallows placement of houses on roads Updated house placement code to move characters blocking house placement to SE corner of the house Updated house placement code to disallow placing houses in guarded regions, or in dungeons Added new DFN tag for regions to enable/disable player houses in specific regions: HOUSING=0/1 Added new region (247) that covers path to Valley of Eodon in Felucca Added new region (248) that covers Valley of Eodon in Ter-Mur, with player housing disabled Added new region (249) that covers entire T2A lands, with player housing disabled Updated SPACEX and SPACEY values for all houses in dfndata/house/house.dfn to match updated house placement code Added new JS property to Regions that can be used to determine or change state of player housing in a region: .canPlaceHouse() Updated rules for usage of dye tubs to dye locked down items; now only house owners or co-owners may dye locked down items Updated rules for usage of the following locked down items in a house, which are now only usable by house owners and co-owners Dyes, Guildstone Deeds, Recall Runes (renaming), Rename Deeds, Townstone Deeds, House Deeds, Boat Models, Player Vendor Deeds, Ore, Hair Dye Updated rules for usage of the following locked down items in a house, which are now only usable by house owners, co-owners and friends: Keys, Dye Tubs, Magic Scrolls, Fireworks Wands, Magic Wands, Smithing Tools, Mining Tools, Fishing Poles Updated item lockdown rules to allow locking down (and releasing) items in a container as long as the container is locked down, and to only allow releasing a locked down container if it's empty of locked down items Updated item lockdown rules to only allow locking down movement-blocking items further than 2 tiles away from doors Updated rules for releasing items in houses - now the house owner can release any locked down items, co-owners can release items locked down by themselves or by friends, while friends can release only items locked down by themselves Added some feedback to player about why their attempted house placement failed Items added by GMs directly into multis will now decay based on the house-specific decay timer instead of the regular one Fixed an issue that could cause items to almost instantly decay after being released from lockdown in a house Placing house add-ons now properly takes into account SPACEX and SPACEY values when checking if they can fit in selected area of houses Re-added SPACEX and SPACEY values for Pentagram and Loom house add-ons House add-ons can now be converted back into house add-on deeds by chopping them with an axe Added new item type - IT_HOUSEADDON (201) - used by house add-ons placed in player houses Fixed a bug where keys would stop working after being added to a keyring, and would turn into blank keys upon release from the keyring Added visitor count for public player houses, which keeps track of how many visits a public house has received, with each player counted max 1 time every 24 hours Fixed an issue with FindPlayersInOldVisrange() where it didn't take into account that players could see buildings further away than the standard update range. This could cause players to see ghost images of buildings if they were at the "right" distance when the building was being demolished Added NODECAY tag to all signs and doors in dfndata/house/house.dfn Added FRONTDOOR or INTERIORDOOR (as appropriate) to all doors in dfndata/house/house.dfn Added BANX and BANY to specify ban location for some houses in dfndata/house/house.dfn instead of relying on finding SE corner automatically Implemented strongboxes (js/server/house/strongbox.js) for co-owners of a house, which can be placed with the house command "i wish to place a strongbox". Max capacity is 25 items Updated 'REMOVE command to take an optional parameter - itemID. If supplied, the command will remove all items with this itemID from a targeted container Fixed a bug when checking if dynamic items were blocking valid spawn locations for NPCs, some function arguments were in the wrong order! Improved code that finds valid spawn locations for items and NPCs spawned via spawn regions. As server gradually builds up lists of valid spawn locations per region over time, it will start using these lists more often, rather than always look for brand new spawn locations. Fixed a bug with CMulHandler::CheckStaticFlag() that prevented NPCs from spawning inside buildings with no static floors! Fixed an issue with repeating commands that prevented GMs from being able to cancel them when using the ClassicUO client Exposed character property .accountNum to JS engine Extended CDataList class to include a Clear() method for clearing lists Updated JS File method .Open() to support an optional, third argument - subFolderName - that defines in which sub-folder of UOX3/shared/ to store/look for a file. If no third argument is supplied, UOX3 will default to using the shared folder itself. Updated JS File method .Length() to return a value of -1 for files that don't exist Added new code function, exposed to JS engine with same parameters, which simply checks if a given tile ID has a specific flag bool CheckTileFlag( UI16 itemID, TILEFLAG flagToCheck ) Added JS function used to find the root container of an item (if any) FindRootContainer( itemSerial ) FindRootContainer( item ) Added new JS function that allows deleting files from UOX3/shared/ folder or subfolders of shared folder. If no subFolderName is provided, looks for file directly in shared folder itself. Restrictions on file- and folder-names apply. bool DeleteFile( fileName, subFolderName ) Added new JS functions for checking if a specific client or server feature is enabled. See documentation for full list of client/server features. GetClientFeature( bitNum ) // Returns true if specified client feature is enabled on server GetServerFeature( bitNum ) // Returns true if specified server feature is enabled on server Added new JS function for returning the value of almost any server setting from UOX.INI GetServerSetting( settingNameInDoubleQuotes ) Updated JS function DoesDynamicBlock() with two new parameters - checkOnlyMultis and checkOnlyNonMultis Updated JS function DoesMapBlock() with two new parameters - checkMultiPlacement and checkForRoad Fixed an issue where a LoS check would prevent players from accessing containers in their own backpack Added new functions in findfuncs.cpp to make it easier to find items near another object or location: findNearbyItems( object, distance ) findNearbyItems( x, y, worldNumber, instanceID, distance ) Added new Item property - maxItems - used by containers to determine their max item capacity Added new Item property - totalItemCount - used to get total item count in a container (including sub-containers) Added check for max item capacity when creating new items that are added to a character's backpack - items will be created below character's feet if backpack is full! Added new DFN tag for items, used by containers to determine item capacity for a given container: MAXITEMS=# // 125 is the default for all containers if not set Added new JS Item properties: .maxItems // gets/sets item capacity for a given container .totalItemCount // gets total item count in a container, including sub-containers Updated item tooltips for containers to show accurate total item count, as well as to display max item capacity Fixed a bug where picking up items from a non-locked down pile of items on the floor inside a multi could cause the remaining pile to be seen as no longer inside the multi, disallowing locking it back down and causing it to decay based on regular decay timer instead of house-specific one Updated JS command set to allow setting poison-level on items ('set poison #) and hunger-level on characters ('set hunger #) Fixed an issue with js/item/food.js that prevented poisoned food from poisoning characters when eaten Fixed an issue with js/skill/poisoning.js that prevented players from poisoning food! Updated various JS scripts and hardcoded targeting functions to disallow the targeting of locked down resources using skills and tools Updated JS Method TextMessage() to support three extra, optional parameters. Note that if one optional parameter is included, all preceding optional parameters are also required! speechTarget - What kind of target is this message intended for? 0 - Only visible for sender and receiver of message 1 - Visible to all players in range 2 - Visible to all NPCs and players in range 3 - Visible to all PCs everywhere + NPCs in range 4 - Visible to all PCs everywhere (broadcast) 5 - Only visible for the receiver of the message speechTargetSerial - The serial of the receiver of the message, used if speechTarget is 0 or 5 speechFontType - The type of font to display the text in. Defaults to normal. 0 - Bold 1 - Normal with shadow 2 - Bold with shadow 3 - Normal 4 - Gothic 5 - Italic 6 - Small, dark 7 - Colourful 8 - Runic (only works with CAPS) 9 - Small, light Added timestamp to worldsaves in console, to make it easier to see when a particular world-save was done Added info about compiler/environment displayed at the top of the UOX3 console during startup Updated dictionary files with new messages primarily related to housing
2020-11-04 02:00:37 +08:00
}
break;
}
case CIP_BANX:
if( gPriv->GetObjType() == OT_MULTI )
{
( static_cast<CMultiObj *>( gPriv ))->SetBanX( static_cast<SI16>( encaps.toInt() ));
}
Housing Revamp and more Updated JS SysMessage function to accept up to 10 extra, optional arguments, which can be used with dictionary messages that require additional parameters like %s or %i Added new type of house privilege in cMultiObj.cpp to keep track of friends of the multi - HOUSEPRIV_FRIEND - which is stored during worldsaves as one or more Friend=<player serial> tags in house.wsc Added new type of house privilege in cMultiObj.cpp to keep track of guests of the multi - HOUSEPRIV_GUEST - which is stored during worldsaves as one or more Guest=<player serial> tags in house.wsc When items are created for houses upon house placement, a reference to the multi's serial is now stored in the house sign's MORE property to allow easier tracking of which house a particular sign belongs to Added tracking of new, persistent properties for houses via cMultiObj.cpp/h: lockdowns, secure containers, vendors, guests, friends, owners, ban location, public status, number of visits, timestamps Added a multitude of new methods in cMultiObj.cpp/h to assist in improving the functionality of houses Added new tags for houses in house.dfn (default values applied if tag not specified): MAXSECURECONTAINERS=4 - Max amount of secure containers allowed in a multi MAXLOCKDOWNS=256 - Max amount of lockdowns allowed in a multi MAXVENDORS=10 - Max amount of vendors allowed in a multi MAXBANS=50 - Max amount of bans in a multi's ban list MAXFRIENDS=50 - Max amount of friends in a multi's friend list MAXGUESTS=50 - Max amount of guests in a multi's guest list MAXOWNERS=8 - Max amount of owners and co-owners in a multi's owner list MAXTRASHCONTAINERS=1 - Max amount of trash containers allowed in multi SCRIPT=<scriptID> - Assign a JS script-ID directly to a multi FRONTDOOR - indicates that a door is the front door of a house. Cannot be locked in public houses! INTERIORDOOR - indicates that a door is an interior door of a house. Can be locked in public houses. BANX - Location X offset for multi's ban location, if not used, will try to use SE corner of multi instead BANY - Location Y offset for multi's ban location, if not used, will try to use SE corner of multi instead Added JS Event: onHouseCommand( tSock, multiObj, cmdID ) - For handling spoken house commands via JS scripts attached to multi. Updated JS Events: onEntrance() - can now trigger both for multi being entered and/or object entering onLeaving() - can now trigger both for multi being left and/or object entering onSpeech() - can now also trigger for items (in addition to chars) with event & script attached, if UOX.INI setting ITEMSDETECTSPEECH is enabled Added JS Multi methods: .IsBoat() - Returns whether the item (or multi) is a boat .IsOwner( playerToCheck ) - Returns whether a player is the owner of a multi .IsOnOwnerList( playerToCheck ) - Returns whether a player is on the (co-)owner list of a multi .IsOnFriendList( playerToCheck ) - Returns whether a player is on the friend list of a multi .IsOnGuestList( playerToCheck ) - Returns whether a player is on the guest list of a multi .IsOnBanList( playerToCheck ) - Returns whether a player is on the ban list of a multi .AddToFriendList( playertoAdd ) - Adds player to the friend list of a multi .RemoveFromFriendList( playertoRemove ) - Removes player from the friend list of a multi .AddToGuestList( playertoAdd ) - Adds player to the guest list of a multi .RemoveFromGuestList( playertoRemove ) - Removes player from the guest list of a multi .ClearOwnerList() - Clears all entries from a multi's (co-)owner list .ClearFriendList() - Clears all entries from a multi's friend list .ClearGuestList() - Clears all entries from a multi's guest list .ClearBanList() - Clears all entries from a multi's ban list .SecureContainer( itemToSecure ) - Secures a container in a multi .UnsecureContainer( itemToUnsecure ) - Unsecures a container in a multi .IsSecureContainer( itemToCheck ) - Checks if specified item is a secure container in a multi .LockDownItem( itemToLockDown) - Locks down an item in a multi .ReleaseItem( itemToRelease ) - Releases a locked down item in a multi .KillKeys() - Deletes ALL keys associated with a multi .AddTrashCont( itemToAdd ) - Add trash container to multi's list of trash containers .RemoveTrashCont( itemToRemove ) - Remove trash container from multi's list of trash containers Added JS Item (Multi only) properties: .lockdowns - Get the number of lockdowns in a multi .maxLockdowns - Get/Set the max number of lockdowns allowed in a multi .secureContainers - Get the number of secure containers in a multi .maxSecureContainers - Get/Set the max number of secure containers allowed in a multi .trashContainers - Get the number of trash containers in a multi .maxTrashContainers - Get/Set the max number of trash containers allowed in a multi .friends - Get the number of friends in a multi's friend list .maxFriends - Get/Set the max number of friends allowed in a multi's friend list .guests - Get the number of guests in a multi's guest list .maxGuests - Get/Set the max number of guests allowed in a multi's guest list .owners - Get the number of owners in a multi's owner list .maxOwners - Get/Set the max number of owners allowed in a multi's owner list .bans - Get the number of banned players in a multi's ban list .maxBans - Get/Set the max number of banned players allowed in a multi's ban list .vendors - Get the number of player vendors in a multi .maxVendors - Get the max number of player vendors allowed in a multi .deed - Get the item sectionID for deed used to place multi .isPublic - Get/Set the private/public state of a multi .buildTimestamp - Get the timestamp for when the house was originally placed .tradeTimestamp - Get the timestamp for when the house was last traded to another player .banX - Get/Set the ban location X offset for the multi .banY - Get/Set the ban location Y offset for the multi Added JS Character properties: .multi = Get/Set the multi object the character is in .accountNum = Get the account number the character belongs to .housesOwned = Get a count of houses owned by the character .housesCoOwned = Get a count of houses co-owned by the character Updated JS cBaseObject Methods .FirstItem(), .NextItem() and .FinishedItems() to also support iterating through items in multis Updated JS multi Methods .FirstChar(), .NextChar() and .FinishedChars() to support an additional parameter to specify what kind of characters to loop through: "default" or no parameter - all characters inside the multi "owner" - players on multi's owner list "friend" - players on multi's friend list "guest" - players on multi's guest list "banned" - players on multi's ban list Added new INI tags to a new section of uox.ini called [houses] DECAYTIMERINHOUSE=3600 // Decay timer in seconds for non-locked down items inside houses PROTECTPRIVATEHOUSES=1 // Toggles whether private houses will automatically boot unauthorized visitors (1) or not (0) TRACKHOUSESPERACCOUNT=1 // Toggles whether to track (and restrict) house ownership per account (1) or per character (0) MAXHOUSESOWNABLE=1 // Specifies the max amount of houses a player can own per account/char, depending on how house ownership is tracked MAXHOUSESCOOWNABLE=10 // Specifies the max amount of houses a player can co-own per character CANOWNANDCOOWNHOUSES=1 // Toggles whether players can own and co-own houses at the same time COOWNHOUSESONSAMEACCOUNT=1 // Toggles whether characters on same account as house owner will be treated as co-owners Added new INI tags in [settings] section of uox.ini: ITEMSDETECTSPEECH=0 // If enabled, server will search for nearby items with onSpeech JS event running whenever a character speaks. Disabled by default. MAXPLAYERPACKITEMS=125 // Defines max item capacity for player (and NPC) backpacks. Defaults to 125. Moved most of the existing house functionality to JS and expanded upon it to reach feature parity with houses in regular UO around Publish 15/16, with various extras thrown in for good measure and all functionality being customizable: js/server/house/house.js (15000) - handles detection of house commands and characters entering/leaving houses js/server/house/houseSign.js (15001) - contains and handles all house-related gumps/menus and what is shown when players interact with house sign js/server/house/houseCommands.js (15002) - handles functionality of house commands and other functionality such as transfer of ownership, demolishing house, etc. js/server/house/houseDeed.js (15003) - handles initial rules that allow/disallow placement of additional houses for players All house-related menus now fully handled through JS All house commands and other functionality now fully handled through JS Removed redundant hard-coded house functionality Implemented Co-owners, friends, guests for houses, with access rules in place for entry, lockdowns, house commands, etc. Implemented Private and Public houses Implemented Secure Containers and Trash Barrels Definable max lockdowns, secure containers, player vendors, bans, friends, guests, owners, trash containers and more - per house type JS scripts can now be attached directly to houses Doors in houses can be marked as front doors or interior doors, and will be treated differently with regards to private and public houses Added new item to dfndata/items/containers/misc.dfn - [trashbarrel] Added new JS script (js/items/trashbarrel.js) with trash barrel functionality for houses. Trash barrels that are marked as secure containers are only accessible by owners, co-owners and friends of the house. Various options available at top of script. Updated js/items/axe.js to support chopping up trash barrels and house add-ons in houses owned by the player Fixed an issue with house doors being left behind after demolishing houses while their doors were open Fixed an issue where GMs could be banned from player houses Added Line of Sight checks to speech, to give players some privacy in their own homes Updated house placement code to more accurately check for other multis, dynamic and static objects when placing houses; now requires free space around each house that cannot be blocked by other houses or items that can block player movement, and disallows placement of houses on roads Updated house placement code to move characters blocking house placement to SE corner of the house Updated house placement code to disallow placing houses in guarded regions, or in dungeons Added new DFN tag for regions to enable/disable player houses in specific regions: HOUSING=0/1 Added new region (247) that covers path to Valley of Eodon in Felucca Added new region (248) that covers Valley of Eodon in Ter-Mur, with player housing disabled Added new region (249) that covers entire T2A lands, with player housing disabled Updated SPACEX and SPACEY values for all houses in dfndata/house/house.dfn to match updated house placement code Added new JS property to Regions that can be used to determine or change state of player housing in a region: .canPlaceHouse() Updated rules for usage of dye tubs to dye locked down items; now only house owners or co-owners may dye locked down items Updated rules for usage of the following locked down items in a house, which are now only usable by house owners and co-owners Dyes, Guildstone Deeds, Recall Runes (renaming), Rename Deeds, Townstone Deeds, House Deeds, Boat Models, Player Vendor Deeds, Ore, Hair Dye Updated rules for usage of the following locked down items in a house, which are now only usable by house owners, co-owners and friends: Keys, Dye Tubs, Magic Scrolls, Fireworks Wands, Magic Wands, Smithing Tools, Mining Tools, Fishing Poles Updated item lockdown rules to allow locking down (and releasing) items in a container as long as the container is locked down, and to only allow releasing a locked down container if it's empty of locked down items Updated item lockdown rules to only allow locking down movement-blocking items further than 2 tiles away from doors Updated rules for releasing items in houses - now the house owner can release any locked down items, co-owners can release items locked down by themselves or by friends, while friends can release only items locked down by themselves Added some feedback to player about why their attempted house placement failed Items added by GMs directly into multis will now decay based on the house-specific decay timer instead of the regular one Fixed an issue that could cause items to almost instantly decay after being released from lockdown in a house Placing house add-ons now properly takes into account SPACEX and SPACEY values when checking if they can fit in selected area of houses Re-added SPACEX and SPACEY values for Pentagram and Loom house add-ons House add-ons can now be converted back into house add-on deeds by chopping them with an axe Added new item type - IT_HOUSEADDON (201) - used by house add-ons placed in player houses Fixed a bug where keys would stop working after being added to a keyring, and would turn into blank keys upon release from the keyring Added visitor count for public player houses, which keeps track of how many visits a public house has received, with each player counted max 1 time every 24 hours Fixed an issue with FindPlayersInOldVisrange() where it didn't take into account that players could see buildings further away than the standard update range. This could cause players to see ghost images of buildings if they were at the "right" distance when the building was being demolished Added NODECAY tag to all signs and doors in dfndata/house/house.dfn Added FRONTDOOR or INTERIORDOOR (as appropriate) to all doors in dfndata/house/house.dfn Added BANX and BANY to specify ban location for some houses in dfndata/house/house.dfn instead of relying on finding SE corner automatically Implemented strongboxes (js/server/house/strongbox.js) for co-owners of a house, which can be placed with the house command "i wish to place a strongbox". Max capacity is 25 items Updated 'REMOVE command to take an optional parameter - itemID. If supplied, the command will remove all items with this itemID from a targeted container Fixed a bug when checking if dynamic items were blocking valid spawn locations for NPCs, some function arguments were in the wrong order! Improved code that finds valid spawn locations for items and NPCs spawned via spawn regions. As server gradually builds up lists of valid spawn locations per region over time, it will start using these lists more often, rather than always look for brand new spawn locations. Fixed a bug with CMulHandler::CheckStaticFlag() that prevented NPCs from spawning inside buildings with no static floors! Fixed an issue with repeating commands that prevented GMs from being able to cancel them when using the ClassicUO client Exposed character property .accountNum to JS engine Extended CDataList class to include a Clear() method for clearing lists Updated JS File method .Open() to support an optional, third argument - subFolderName - that defines in which sub-folder of UOX3/shared/ to store/look for a file. If no third argument is supplied, UOX3 will default to using the shared folder itself. Updated JS File method .Length() to return a value of -1 for files that don't exist Added new code function, exposed to JS engine with same parameters, which simply checks if a given tile ID has a specific flag bool CheckTileFlag( UI16 itemID, TILEFLAG flagToCheck ) Added JS function used to find the root container of an item (if any) FindRootContainer( itemSerial ) FindRootContainer( item ) Added new JS function that allows deleting files from UOX3/shared/ folder or subfolders of shared folder. If no subFolderName is provided, looks for file directly in shared folder itself. Restrictions on file- and folder-names apply. bool DeleteFile( fileName, subFolderName ) Added new JS functions for checking if a specific client or server feature is enabled. See documentation for full list of client/server features. GetClientFeature( bitNum ) // Returns true if specified client feature is enabled on server GetServerFeature( bitNum ) // Returns true if specified server feature is enabled on server Added new JS function for returning the value of almost any server setting from UOX.INI GetServerSetting( settingNameInDoubleQuotes ) Updated JS function DoesDynamicBlock() with two new parameters - checkOnlyMultis and checkOnlyNonMultis Updated JS function DoesMapBlock() with two new parameters - checkMultiPlacement and checkForRoad Fixed an issue where a LoS check would prevent players from accessing containers in their own backpack Added new functions in findfuncs.cpp to make it easier to find items near another object or location: findNearbyItems( object, distance ) findNearbyItems( x, y, worldNumber, instanceID, distance ) Added new Item property - maxItems - used by containers to determine their max item capacity Added new Item property - totalItemCount - used to get total item count in a container (including sub-containers) Added check for max item capacity when creating new items that are added to a character's backpack - items will be created below character's feet if backpack is full! Added new DFN tag for items, used by containers to determine item capacity for a given container: MAXITEMS=# // 125 is the default for all containers if not set Added new JS Item properties: .maxItems // gets/sets item capacity for a given container .totalItemCount // gets total item count in a container, including sub-containers Updated item tooltips for containers to show accurate total item count, as well as to display max item capacity Fixed a bug where picking up items from a non-locked down pile of items on the floor inside a multi could cause the remaining pile to be seen as no longer inside the multi, disallowing locking it back down and causing it to decay based on regular decay timer instead of house-specific one Updated JS command set to allow setting poison-level on items ('set poison #) and hunger-level on characters ('set hunger #) Fixed an issue with js/item/food.js that prevented poisoned food from poisoning characters when eaten Fixed an issue with js/skill/poisoning.js that prevented players from poisoning food! Updated various JS scripts and hardcoded targeting functions to disallow the targeting of locked down resources using skills and tools Updated JS Method TextMessage() to support three extra, optional parameters. Note that if one optional parameter is included, all preceding optional parameters are also required! speechTarget - What kind of target is this message intended for? 0 - Only visible for sender and receiver of message 1 - Visible to all players in range 2 - Visible to all NPCs and players in range 3 - Visible to all PCs everywhere + NPCs in range 4 - Visible to all PCs everywhere (broadcast) 5 - Only visible for the receiver of the message speechTargetSerial - The serial of the receiver of the message, used if speechTarget is 0 or 5 speechFontType - The type of font to display the text in. Defaults to normal. 0 - Bold 1 - Normal with shadow 2 - Bold with shadow 3 - Normal 4 - Gothic 5 - Italic 6 - Small, dark 7 - Colourful 8 - Runic (only works with CAPS) 9 - Small, light Added timestamp to worldsaves in console, to make it easier to see when a particular world-save was done Added info about compiler/environment displayed at the top of the UOX3 console during startup Updated dictionary files with new messages primarily related to housing
2020-11-04 02:00:37 +08:00
break;
case CIP_BANY:
if( gPriv->GetObjType() == OT_MULTI )
{
( static_cast<CMultiObj *>( gPriv ))->SetBanY( static_cast<SI16>( encaps.toInt() ));
}
Housing Revamp and more Updated JS SysMessage function to accept up to 10 extra, optional arguments, which can be used with dictionary messages that require additional parameters like %s or %i Added new type of house privilege in cMultiObj.cpp to keep track of friends of the multi - HOUSEPRIV_FRIEND - which is stored during worldsaves as one or more Friend=<player serial> tags in house.wsc Added new type of house privilege in cMultiObj.cpp to keep track of guests of the multi - HOUSEPRIV_GUEST - which is stored during worldsaves as one or more Guest=<player serial> tags in house.wsc When items are created for houses upon house placement, a reference to the multi's serial is now stored in the house sign's MORE property to allow easier tracking of which house a particular sign belongs to Added tracking of new, persistent properties for houses via cMultiObj.cpp/h: lockdowns, secure containers, vendors, guests, friends, owners, ban location, public status, number of visits, timestamps Added a multitude of new methods in cMultiObj.cpp/h to assist in improving the functionality of houses Added new tags for houses in house.dfn (default values applied if tag not specified): MAXSECURECONTAINERS=4 - Max amount of secure containers allowed in a multi MAXLOCKDOWNS=256 - Max amount of lockdowns allowed in a multi MAXVENDORS=10 - Max amount of vendors allowed in a multi MAXBANS=50 - Max amount of bans in a multi's ban list MAXFRIENDS=50 - Max amount of friends in a multi's friend list MAXGUESTS=50 - Max amount of guests in a multi's guest list MAXOWNERS=8 - Max amount of owners and co-owners in a multi's owner list MAXTRASHCONTAINERS=1 - Max amount of trash containers allowed in multi SCRIPT=<scriptID> - Assign a JS script-ID directly to a multi FRONTDOOR - indicates that a door is the front door of a house. Cannot be locked in public houses! INTERIORDOOR - indicates that a door is an interior door of a house. Can be locked in public houses. BANX - Location X offset for multi's ban location, if not used, will try to use SE corner of multi instead BANY - Location Y offset for multi's ban location, if not used, will try to use SE corner of multi instead Added JS Event: onHouseCommand( tSock, multiObj, cmdID ) - For handling spoken house commands via JS scripts attached to multi. Updated JS Events: onEntrance() - can now trigger both for multi being entered and/or object entering onLeaving() - can now trigger both for multi being left and/or object entering onSpeech() - can now also trigger for items (in addition to chars) with event & script attached, if UOX.INI setting ITEMSDETECTSPEECH is enabled Added JS Multi methods: .IsBoat() - Returns whether the item (or multi) is a boat .IsOwner( playerToCheck ) - Returns whether a player is the owner of a multi .IsOnOwnerList( playerToCheck ) - Returns whether a player is on the (co-)owner list of a multi .IsOnFriendList( playerToCheck ) - Returns whether a player is on the friend list of a multi .IsOnGuestList( playerToCheck ) - Returns whether a player is on the guest list of a multi .IsOnBanList( playerToCheck ) - Returns whether a player is on the ban list of a multi .AddToFriendList( playertoAdd ) - Adds player to the friend list of a multi .RemoveFromFriendList( playertoRemove ) - Removes player from the friend list of a multi .AddToGuestList( playertoAdd ) - Adds player to the guest list of a multi .RemoveFromGuestList( playertoRemove ) - Removes player from the guest list of a multi .ClearOwnerList() - Clears all entries from a multi's (co-)owner list .ClearFriendList() - Clears all entries from a multi's friend list .ClearGuestList() - Clears all entries from a multi's guest list .ClearBanList() - Clears all entries from a multi's ban list .SecureContainer( itemToSecure ) - Secures a container in a multi .UnsecureContainer( itemToUnsecure ) - Unsecures a container in a multi .IsSecureContainer( itemToCheck ) - Checks if specified item is a secure container in a multi .LockDownItem( itemToLockDown) - Locks down an item in a multi .ReleaseItem( itemToRelease ) - Releases a locked down item in a multi .KillKeys() - Deletes ALL keys associated with a multi .AddTrashCont( itemToAdd ) - Add trash container to multi's list of trash containers .RemoveTrashCont( itemToRemove ) - Remove trash container from multi's list of trash containers Added JS Item (Multi only) properties: .lockdowns - Get the number of lockdowns in a multi .maxLockdowns - Get/Set the max number of lockdowns allowed in a multi .secureContainers - Get the number of secure containers in a multi .maxSecureContainers - Get/Set the max number of secure containers allowed in a multi .trashContainers - Get the number of trash containers in a multi .maxTrashContainers - Get/Set the max number of trash containers allowed in a multi .friends - Get the number of friends in a multi's friend list .maxFriends - Get/Set the max number of friends allowed in a multi's friend list .guests - Get the number of guests in a multi's guest list .maxGuests - Get/Set the max number of guests allowed in a multi's guest list .owners - Get the number of owners in a multi's owner list .maxOwners - Get/Set the max number of owners allowed in a multi's owner list .bans - Get the number of banned players in a multi's ban list .maxBans - Get/Set the max number of banned players allowed in a multi's ban list .vendors - Get the number of player vendors in a multi .maxVendors - Get the max number of player vendors allowed in a multi .deed - Get the item sectionID for deed used to place multi .isPublic - Get/Set the private/public state of a multi .buildTimestamp - Get the timestamp for when the house was originally placed .tradeTimestamp - Get the timestamp for when the house was last traded to another player .banX - Get/Set the ban location X offset for the multi .banY - Get/Set the ban location Y offset for the multi Added JS Character properties: .multi = Get/Set the multi object the character is in .accountNum = Get the account number the character belongs to .housesOwned = Get a count of houses owned by the character .housesCoOwned = Get a count of houses co-owned by the character Updated JS cBaseObject Methods .FirstItem(), .NextItem() and .FinishedItems() to also support iterating through items in multis Updated JS multi Methods .FirstChar(), .NextChar() and .FinishedChars() to support an additional parameter to specify what kind of characters to loop through: "default" or no parameter - all characters inside the multi "owner" - players on multi's owner list "friend" - players on multi's friend list "guest" - players on multi's guest list "banned" - players on multi's ban list Added new INI tags to a new section of uox.ini called [houses] DECAYTIMERINHOUSE=3600 // Decay timer in seconds for non-locked down items inside houses PROTECTPRIVATEHOUSES=1 // Toggles whether private houses will automatically boot unauthorized visitors (1) or not (0) TRACKHOUSESPERACCOUNT=1 // Toggles whether to track (and restrict) house ownership per account (1) or per character (0) MAXHOUSESOWNABLE=1 // Specifies the max amount of houses a player can own per account/char, depending on how house ownership is tracked MAXHOUSESCOOWNABLE=10 // Specifies the max amount of houses a player can co-own per character CANOWNANDCOOWNHOUSES=1 // Toggles whether players can own and co-own houses at the same time COOWNHOUSESONSAMEACCOUNT=1 // Toggles whether characters on same account as house owner will be treated as co-owners Added new INI tags in [settings] section of uox.ini: ITEMSDETECTSPEECH=0 // If enabled, server will search for nearby items with onSpeech JS event running whenever a character speaks. Disabled by default. MAXPLAYERPACKITEMS=125 // Defines max item capacity for player (and NPC) backpacks. Defaults to 125. Moved most of the existing house functionality to JS and expanded upon it to reach feature parity with houses in regular UO around Publish 15/16, with various extras thrown in for good measure and all functionality being customizable: js/server/house/house.js (15000) - handles detection of house commands and characters entering/leaving houses js/server/house/houseSign.js (15001) - contains and handles all house-related gumps/menus and what is shown when players interact with house sign js/server/house/houseCommands.js (15002) - handles functionality of house commands and other functionality such as transfer of ownership, demolishing house, etc. js/server/house/houseDeed.js (15003) - handles initial rules that allow/disallow placement of additional houses for players All house-related menus now fully handled through JS All house commands and other functionality now fully handled through JS Removed redundant hard-coded house functionality Implemented Co-owners, friends, guests for houses, with access rules in place for entry, lockdowns, house commands, etc. Implemented Private and Public houses Implemented Secure Containers and Trash Barrels Definable max lockdowns, secure containers, player vendors, bans, friends, guests, owners, trash containers and more - per house type JS scripts can now be attached directly to houses Doors in houses can be marked as front doors or interior doors, and will be treated differently with regards to private and public houses Added new item to dfndata/items/containers/misc.dfn - [trashbarrel] Added new JS script (js/items/trashbarrel.js) with trash barrel functionality for houses. Trash barrels that are marked as secure containers are only accessible by owners, co-owners and friends of the house. Various options available at top of script. Updated js/items/axe.js to support chopping up trash barrels and house add-ons in houses owned by the player Fixed an issue with house doors being left behind after demolishing houses while their doors were open Fixed an issue where GMs could be banned from player houses Added Line of Sight checks to speech, to give players some privacy in their own homes Updated house placement code to more accurately check for other multis, dynamic and static objects when placing houses; now requires free space around each house that cannot be blocked by other houses or items that can block player movement, and disallows placement of houses on roads Updated house placement code to move characters blocking house placement to SE corner of the house Updated house placement code to disallow placing houses in guarded regions, or in dungeons Added new DFN tag for regions to enable/disable player houses in specific regions: HOUSING=0/1 Added new region (247) that covers path to Valley of Eodon in Felucca Added new region (248) that covers Valley of Eodon in Ter-Mur, with player housing disabled Added new region (249) that covers entire T2A lands, with player housing disabled Updated SPACEX and SPACEY values for all houses in dfndata/house/house.dfn to match updated house placement code Added new JS property to Regions that can be used to determine or change state of player housing in a region: .canPlaceHouse() Updated rules for usage of dye tubs to dye locked down items; now only house owners or co-owners may dye locked down items Updated rules for usage of the following locked down items in a house, which are now only usable by house owners and co-owners Dyes, Guildstone Deeds, Recall Runes (renaming), Rename Deeds, Townstone Deeds, House Deeds, Boat Models, Player Vendor Deeds, Ore, Hair Dye Updated rules for usage of the following locked down items in a house, which are now only usable by house owners, co-owners and friends: Keys, Dye Tubs, Magic Scrolls, Fireworks Wands, Magic Wands, Smithing Tools, Mining Tools, Fishing Poles Updated item lockdown rules to allow locking down (and releasing) items in a container as long as the container is locked down, and to only allow releasing a locked down container if it's empty of locked down items Updated item lockdown rules to only allow locking down movement-blocking items further than 2 tiles away from doors Updated rules for releasing items in houses - now the house owner can release any locked down items, co-owners can release items locked down by themselves or by friends, while friends can release only items locked down by themselves Added some feedback to player about why their attempted house placement failed Items added by GMs directly into multis will now decay based on the house-specific decay timer instead of the regular one Fixed an issue that could cause items to almost instantly decay after being released from lockdown in a house Placing house add-ons now properly takes into account SPACEX and SPACEY values when checking if they can fit in selected area of houses Re-added SPACEX and SPACEY values for Pentagram and Loom house add-ons House add-ons can now be converted back into house add-on deeds by chopping them with an axe Added new item type - IT_HOUSEADDON (201) - used by house add-ons placed in player houses Fixed a bug where keys would stop working after being added to a keyring, and would turn into blank keys upon release from the keyring Added visitor count for public player houses, which keeps track of how many visits a public house has received, with each player counted max 1 time every 24 hours Fixed an issue with FindPlayersInOldVisrange() where it didn't take into account that players could see buildings further away than the standard update range. This could cause players to see ghost images of buildings if they were at the "right" distance when the building was being demolished Added NODECAY tag to all signs and doors in dfndata/house/house.dfn Added FRONTDOOR or INTERIORDOOR (as appropriate) to all doors in dfndata/house/house.dfn Added BANX and BANY to specify ban location for some houses in dfndata/house/house.dfn instead of relying on finding SE corner automatically Implemented strongboxes (js/server/house/strongbox.js) for co-owners of a house, which can be placed with the house command "i wish to place a strongbox". Max capacity is 25 items Updated 'REMOVE command to take an optional parameter - itemID. If supplied, the command will remove all items with this itemID from a targeted container Fixed a bug when checking if dynamic items were blocking valid spawn locations for NPCs, some function arguments were in the wrong order! Improved code that finds valid spawn locations for items and NPCs spawned via spawn regions. As server gradually builds up lists of valid spawn locations per region over time, it will start using these lists more often, rather than always look for brand new spawn locations. Fixed a bug with CMulHandler::CheckStaticFlag() that prevented NPCs from spawning inside buildings with no static floors! Fixed an issue with repeating commands that prevented GMs from being able to cancel them when using the ClassicUO client Exposed character property .accountNum to JS engine Extended CDataList class to include a Clear() method for clearing lists Updated JS File method .Open() to support an optional, third argument - subFolderName - that defines in which sub-folder of UOX3/shared/ to store/look for a file. If no third argument is supplied, UOX3 will default to using the shared folder itself. Updated JS File method .Length() to return a value of -1 for files that don't exist Added new code function, exposed to JS engine with same parameters, which simply checks if a given tile ID has a specific flag bool CheckTileFlag( UI16 itemID, TILEFLAG flagToCheck ) Added JS function used to find the root container of an item (if any) FindRootContainer( itemSerial ) FindRootContainer( item ) Added new JS function that allows deleting files from UOX3/shared/ folder or subfolders of shared folder. If no subFolderName is provided, looks for file directly in shared folder itself. Restrictions on file- and folder-names apply. bool DeleteFile( fileName, subFolderName ) Added new JS functions for checking if a specific client or server feature is enabled. See documentation for full list of client/server features. GetClientFeature( bitNum ) // Returns true if specified client feature is enabled on server GetServerFeature( bitNum ) // Returns true if specified server feature is enabled on server Added new JS function for returning the value of almost any server setting from UOX.INI GetServerSetting( settingNameInDoubleQuotes ) Updated JS function DoesDynamicBlock() with two new parameters - checkOnlyMultis and checkOnlyNonMultis Updated JS function DoesMapBlock() with two new parameters - checkMultiPlacement and checkForRoad Fixed an issue where a LoS check would prevent players from accessing containers in their own backpack Added new functions in findfuncs.cpp to make it easier to find items near another object or location: findNearbyItems( object, distance ) findNearbyItems( x, y, worldNumber, instanceID, distance ) Added new Item property - maxItems - used by containers to determine their max item capacity Added new Item property - totalItemCount - used to get total item count in a container (including sub-containers) Added check for max item capacity when creating new items that are added to a character's backpack - items will be created below character's feet if backpack is full! Added new DFN tag for items, used by containers to determine item capacity for a given container: MAXITEMS=# // 125 is the default for all containers if not set Added new JS Item properties: .maxItems // gets/sets item capacity for a given container .totalItemCount // gets total item count in a container, including sub-containers Updated item tooltips for containers to show accurate total item count, as well as to display max item capacity Fixed a bug where picking up items from a non-locked down pile of items on the floor inside a multi could cause the remaining pile to be seen as no longer inside the multi, disallowing locking it back down and causing it to decay based on regular decay timer instead of house-specific one Updated JS command set to allow setting poison-level on items ('set poison #) and hunger-level on characters ('set hunger #) Fixed an issue with js/item/food.js that prevented poisoned food from poisoning characters when eaten Fixed an issue with js/skill/poisoning.js that prevented players from poisoning food! Updated various JS scripts and hardcoded targeting functions to disallow the targeting of locked down resources using skills and tools Updated JS Method TextMessage() to support three extra, optional parameters. Note that if one optional parameter is included, all preceding optional parameters are also required! speechTarget - What kind of target is this message intended for? 0 - Only visible for sender and receiver of message 1 - Visible to all players in range 2 - Visible to all NPCs and players in range 3 - Visible to all PCs everywhere + NPCs in range 4 - Visible to all PCs everywhere (broadcast) 5 - Only visible for the receiver of the message speechTargetSerial - The serial of the receiver of the message, used if speechTarget is 0 or 5 speechFontType - The type of font to display the text in. Defaults to normal. 0 - Bold 1 - Normal with shadow 2 - Bold with shadow 3 - Normal 4 - Gothic 5 - Italic 6 - Small, dark 7 - Colourful 8 - Runic (only works with CAPS) 9 - Small, light Added timestamp to worldsaves in console, to make it easier to see when a particular world-save was done Added info about compiler/environment displayed at the top of the UOX3 console during startup Updated dictionary files with new messages primarily related to housing
2020-11-04 02:00:37 +08:00
break;
Misc Fixes and Updates Added support for MAXWEIGHTBONUS DFN tag for races, to allow increasing weight that can be carried by specific race, and a new GetWeightMax() code function to do the necessary calculations on demand Updated [default race bonuses] UOX.INI section with the following new settings for the 3 default playable races (only used if nothing else specified in races.dfn): HUMANMAXWEIGHTBONUS=0 ELFMAXWEIGHTBONUS=0 GARGOYLEMAXWEIGHTBONUS=0 Added support for ALLSKILLSG and ALLSKILLSL DFN tags for races, which allow defining skill bonus or loss across all skills for a given race Added new Character JS Method for adding skill points without triggering skillchange JS Events: .AddSkill( skillID, skillAmt, triggerEvents[true/false] ) Added new Boat JS Property to allow getting/setting movement types for Boats via scripts: .moveType // See UOX3 JS Engine Docs > JS Object Properties > Multi Properties for a detailed list of all supported movement types Added new Boat JS Method to allow turning boats via scripts: .TurnBoat( turnDir ) // 0 = straight (no turning), 1 = turn left, 2 = turn right, 3 = flip around Updated IterateOver/OnIterate JS Function/Event to support passing in optional socket parameter. New syntax: IterateOver( objectType[, socket ]); .OnIterate( sourceObject, targetObject, socket ) Updated Character/Item JS Method .Refresh() to support an optional socket argument, to specify which player to refresh the object for. New syntax: .Refresh( [socket] ) Added support for new region setting that can define a region as disabled/enabled via DFN (tag) or script (JS property). Disabled regions will be ignored by UOX3: DISABLED=0/1 // Region DFN tag .isDisabled // Region JS Property Fixed issue where JS tags and temporary JS tags would not be copied over when duplicating a character or item Removed strength requirements from base shield definitions - stats like these are handled per era (dfndata/items/gear/armor/base_armor.dfn) Fixed an issue where necromancer newbie armor would incorrectly inherit base versions of leather armor without stats (dfndata/items/gear/armor/leather_armor/leather.dfn) Fixed an issue where players would not correctly leave combat after hiding (js/skill/hiding.js) Fixed an issue with Healing skill where skill-checks for healing/veterinary would fail due to a misspelled variable (js/skill/healing.js) Updated smart-turn furniture script to prevent players from being able to turn furnitures that are occupied by characters (js/server/misc/furniture_smartturn.js) Updated Buff-bar script to only add buffs for client versions higher than 5.0.2, the client patch where this feature was added (js/server/network/0xDF_buffBar.js) Updated Vendor BDO Dispenser script to add alternative reward-table for AoS era (js/npc/ai/vendor_bdo_dispenser.js) Cleaned up some code (spaces to tabs, indentation, spacing)
2025-04-23 00:01:53 +08:00
case CIP_MOVETYPE:
if( gPriv->GetObjType() == OT_BOAT )
{
( static_cast<CBoatObj *>( gPriv ))->SetMoveType( static_cast<SI08>( encaps.toInt() ));
}
break;
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
default:
break;
}
}
UOX3 0.99.6-RC4 Fixed an issue that prevented onBuyFromVendor() and onBoughtFromVendor() JS Events from triggering when attached to NPC shopkeepers Fixed an issue with help gump that prevented password management section from working as intended (js/server/misc/helpgump.js) Fixed an issue where UOX3 would fail to load pre-HS multi.mul files Added chess board to Misc->Games add menu (dfndata/items/ItemMenu.bulk.dfn) Fixed an issue with 'move (alias for 'telestuff) command that referenced the wrong variable name (js/commands/targeting/tele.js) When a player is teleported via the GM 'wholist menu, any pets within range are now also brought along for the ride Consolidated error-reporting for JS Functions, Object Methods and Object Properties to provide more context (scriptID, filename, line number) when something goes wrong Added some missing shield IDs (0xA649, 0xA64A, 0xA831, 0xA832) to IsShieldType() function MAXRANGE item property previously only worked for ranged weapons; now it works for melee weapons too, and potentially allows melee weapons with combat range longer than 1 tile MAXRANGE item property can now be used to define max combat range for melee weapons Fixed an issue (non-critical) with .PlaceInPack() JS Method that would cause UOX3 to try adding items marked for deletion to refreshQueue and spam console with errors Added missing AI scripts to summoned Blade Spirits and Energy Vortexes (dfndata/npc/magicsummon.dfn) Fixed an issue with weight calculation for hireling backpacks (js/npc/ai/hireling.js) Fixed an issue with the 'fix command, which would in most cases set character's Z to -1 regardless of location, but now adheres to map elevation instead Fixed an issue with Pack AI (js/npc/ai/pack_ai.js) that prevented pack members from attacking target correctly (thanks Dragon Slayer) Fixed an issue with DoesMapBlock JS Function that incorrectly checked for 6 function arguments, when it actually requires 8 Fixed an issue with DoesDynamicBlock JS Function that incorrectly checked for 8 function arguments, when it actually requires 9 Fixed an issue with runebook script (js/item/runebook.js) that prevented players from being able to use recall charges without having spellbook with spell in inventory Fixed issues with placement of tall items on ground/floor, and with stacking of items in houses Fixed incorrect alias for woodland armor (dfndata/items/gear/armor/other/armor/wood.dfn - thanks Dragon Slayer) Fixed a critical issue with script context sometimes changing while executing a script, because of events in other scripts being triggered. Affected scripts can be safeguarded against this by the addition of a dummy callback function anywhere in the script: function _restorecontext_() {} Fixed an issue with non-animal pets not gaining loyalty when being fed (thanks Dragon Slayer) Added new JS Object Methods for Chars/Items/Multis to fetch list of custom tags associated with object: .GetTagMap() // Gets list of persistent custom tags associated with object .GetTempTagMap() // Gets list of temporary custom tags associated with object Added new JS commands ('GETTAGMAP and 'GETTEMPTAGMAP) that spits out details of custom tags associated with targeted object (js/commands/custom/misc-cmd.js) Added new JS command ('USEITEM) that acts as a short-cut for double-clicking on targeted item (js/commands/custom/misc-cmd.js) Updated 'ADD # and 'ADD ITEM # JS commands to support targeting a container directly and adding the new item inside (js/commands/targeting/add.js) Updated axe script to only perform lumberjacking skill-check when there's still wood available in a given area, and to play appropriate animations for Gargoyle players (js/item/axe.js) Updated script for gameboards to make generated pieces newbiefied so they won't appear on ground if board decays (js/item/gameboards.js) Updated script for stablemasters to avoid relying on global variables (js/npc/ai/stablemaster.js) Updated names of items crafted with runic hammers to include the material name of the hammers used to craft them (js/skill/craft/crafting_complete.js) Fixed a small issue with Detect Hidden skill that would return the wrong message if players found anyone hiding nearby (js/skill/detecthidden.js) Fixed an issue that prevented tile overrides in dfndata/maps/tiles.dfn from loading properly Added entries for a couple of walls with missing no-shoot flags to tile overrides in dfndata/maps/tiles.dfn Updated JS Method .SoundEffect() to support optional third argument (creatureSoundNum) to play creature-defined sounds from dfndata/creatures/creatures.dfn. New syntax: .SoundEffect( soundID, allHear[, creatureSoundNum] ) // 0=SOUND_STARTATTACK, 1=SOUND_IDLE, 2=SOUND_ATTACK, 3=SOUND_DEFEND, 4=SOUND_DIE Added new Character JS Methods: .SetRandomName( nameListID ) // apply a random name from specified namelist to character .FindItemSection( sectionID ) // find item in player's backpack with specified sectionID Added new Socket JS Method: .OpenContainer() // Opens specified container for socket
2023-05-30 01:47:26 +08:00
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
return JS_TRUE;
}
2025-03-28 13:23:59 +10:00
JSBool CCharacterProps_getProperty( JSContext *cx, JSObject *obj, jsid id, jsval *vp )
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
{
CChar *gPriv = static_cast<CChar *>( JS_GetPrivate( cx, obj ));
if( !ValidateObject( gPriv ))
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
return JS_FALSE;
UI16 propID = getScriptID( cx, id, JSP_CHAR );
if( propID != 0xFFFF )
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
{
2021-06-12 07:30:23 -04:00
CItem *TempItem = nullptr;
JSObject *TempObject = nullptr;
JSString *tString = nullptr;
switch( propID )
{
Housing Revamp and more Updated JS SysMessage function to accept up to 10 extra, optional arguments, which can be used with dictionary messages that require additional parameters like %s or %i Added new type of house privilege in cMultiObj.cpp to keep track of friends of the multi - HOUSEPRIV_FRIEND - which is stored during worldsaves as one or more Friend=<player serial> tags in house.wsc Added new type of house privilege in cMultiObj.cpp to keep track of guests of the multi - HOUSEPRIV_GUEST - which is stored during worldsaves as one or more Guest=<player serial> tags in house.wsc When items are created for houses upon house placement, a reference to the multi's serial is now stored in the house sign's MORE property to allow easier tracking of which house a particular sign belongs to Added tracking of new, persistent properties for houses via cMultiObj.cpp/h: lockdowns, secure containers, vendors, guests, friends, owners, ban location, public status, number of visits, timestamps Added a multitude of new methods in cMultiObj.cpp/h to assist in improving the functionality of houses Added new tags for houses in house.dfn (default values applied if tag not specified): MAXSECURECONTAINERS=4 - Max amount of secure containers allowed in a multi MAXLOCKDOWNS=256 - Max amount of lockdowns allowed in a multi MAXVENDORS=10 - Max amount of vendors allowed in a multi MAXBANS=50 - Max amount of bans in a multi's ban list MAXFRIENDS=50 - Max amount of friends in a multi's friend list MAXGUESTS=50 - Max amount of guests in a multi's guest list MAXOWNERS=8 - Max amount of owners and co-owners in a multi's owner list MAXTRASHCONTAINERS=1 - Max amount of trash containers allowed in multi SCRIPT=<scriptID> - Assign a JS script-ID directly to a multi FRONTDOOR - indicates that a door is the front door of a house. Cannot be locked in public houses! INTERIORDOOR - indicates that a door is an interior door of a house. Can be locked in public houses. BANX - Location X offset for multi's ban location, if not used, will try to use SE corner of multi instead BANY - Location Y offset for multi's ban location, if not used, will try to use SE corner of multi instead Added JS Event: onHouseCommand( tSock, multiObj, cmdID ) - For handling spoken house commands via JS scripts attached to multi. Updated JS Events: onEntrance() - can now trigger both for multi being entered and/or object entering onLeaving() - can now trigger both for multi being left and/or object entering onSpeech() - can now also trigger for items (in addition to chars) with event & script attached, if UOX.INI setting ITEMSDETECTSPEECH is enabled Added JS Multi methods: .IsBoat() - Returns whether the item (or multi) is a boat .IsOwner( playerToCheck ) - Returns whether a player is the owner of a multi .IsOnOwnerList( playerToCheck ) - Returns whether a player is on the (co-)owner list of a multi .IsOnFriendList( playerToCheck ) - Returns whether a player is on the friend list of a multi .IsOnGuestList( playerToCheck ) - Returns whether a player is on the guest list of a multi .IsOnBanList( playerToCheck ) - Returns whether a player is on the ban list of a multi .AddToFriendList( playertoAdd ) - Adds player to the friend list of a multi .RemoveFromFriendList( playertoRemove ) - Removes player from the friend list of a multi .AddToGuestList( playertoAdd ) - Adds player to the guest list of a multi .RemoveFromGuestList( playertoRemove ) - Removes player from the guest list of a multi .ClearOwnerList() - Clears all entries from a multi's (co-)owner list .ClearFriendList() - Clears all entries from a multi's friend list .ClearGuestList() - Clears all entries from a multi's guest list .ClearBanList() - Clears all entries from a multi's ban list .SecureContainer( itemToSecure ) - Secures a container in a multi .UnsecureContainer( itemToUnsecure ) - Unsecures a container in a multi .IsSecureContainer( itemToCheck ) - Checks if specified item is a secure container in a multi .LockDownItem( itemToLockDown) - Locks down an item in a multi .ReleaseItem( itemToRelease ) - Releases a locked down item in a multi .KillKeys() - Deletes ALL keys associated with a multi .AddTrashCont( itemToAdd ) - Add trash container to multi's list of trash containers .RemoveTrashCont( itemToRemove ) - Remove trash container from multi's list of trash containers Added JS Item (Multi only) properties: .lockdowns - Get the number of lockdowns in a multi .maxLockdowns - Get/Set the max number of lockdowns allowed in a multi .secureContainers - Get the number of secure containers in a multi .maxSecureContainers - Get/Set the max number of secure containers allowed in a multi .trashContainers - Get the number of trash containers in a multi .maxTrashContainers - Get/Set the max number of trash containers allowed in a multi .friends - Get the number of friends in a multi's friend list .maxFriends - Get/Set the max number of friends allowed in a multi's friend list .guests - Get the number of guests in a multi's guest list .maxGuests - Get/Set the max number of guests allowed in a multi's guest list .owners - Get the number of owners in a multi's owner list .maxOwners - Get/Set the max number of owners allowed in a multi's owner list .bans - Get the number of banned players in a multi's ban list .maxBans - Get/Set the max number of banned players allowed in a multi's ban list .vendors - Get the number of player vendors in a multi .maxVendors - Get the max number of player vendors allowed in a multi .deed - Get the item sectionID for deed used to place multi .isPublic - Get/Set the private/public state of a multi .buildTimestamp - Get the timestamp for when the house was originally placed .tradeTimestamp - Get the timestamp for when the house was last traded to another player .banX - Get/Set the ban location X offset for the multi .banY - Get/Set the ban location Y offset for the multi Added JS Character properties: .multi = Get/Set the multi object the character is in .accountNum = Get the account number the character belongs to .housesOwned = Get a count of houses owned by the character .housesCoOwned = Get a count of houses co-owned by the character Updated JS cBaseObject Methods .FirstItem(), .NextItem() and .FinishedItems() to also support iterating through items in multis Updated JS multi Methods .FirstChar(), .NextChar() and .FinishedChars() to support an additional parameter to specify what kind of characters to loop through: "default" or no parameter - all characters inside the multi "owner" - players on multi's owner list "friend" - players on multi's friend list "guest" - players on multi's guest list "banned" - players on multi's ban list Added new INI tags to a new section of uox.ini called [houses] DECAYTIMERINHOUSE=3600 // Decay timer in seconds for non-locked down items inside houses PROTECTPRIVATEHOUSES=1 // Toggles whether private houses will automatically boot unauthorized visitors (1) or not (0) TRACKHOUSESPERACCOUNT=1 // Toggles whether to track (and restrict) house ownership per account (1) or per character (0) MAXHOUSESOWNABLE=1 // Specifies the max amount of houses a player can own per account/char, depending on how house ownership is tracked MAXHOUSESCOOWNABLE=10 // Specifies the max amount of houses a player can co-own per character CANOWNANDCOOWNHOUSES=1 // Toggles whether players can own and co-own houses at the same time COOWNHOUSESONSAMEACCOUNT=1 // Toggles whether characters on same account as house owner will be treated as co-owners Added new INI tags in [settings] section of uox.ini: ITEMSDETECTSPEECH=0 // If enabled, server will search for nearby items with onSpeech JS event running whenever a character speaks. Disabled by default. MAXPLAYERPACKITEMS=125 // Defines max item capacity for player (and NPC) backpacks. Defaults to 125. Moved most of the existing house functionality to JS and expanded upon it to reach feature parity with houses in regular UO around Publish 15/16, with various extras thrown in for good measure and all functionality being customizable: js/server/house/house.js (15000) - handles detection of house commands and characters entering/leaving houses js/server/house/houseSign.js (15001) - contains and handles all house-related gumps/menus and what is shown when players interact with house sign js/server/house/houseCommands.js (15002) - handles functionality of house commands and other functionality such as transfer of ownership, demolishing house, etc. js/server/house/houseDeed.js (15003) - handles initial rules that allow/disallow placement of additional houses for players All house-related menus now fully handled through JS All house commands and other functionality now fully handled through JS Removed redundant hard-coded house functionality Implemented Co-owners, friends, guests for houses, with access rules in place for entry, lockdowns, house commands, etc. Implemented Private and Public houses Implemented Secure Containers and Trash Barrels Definable max lockdowns, secure containers, player vendors, bans, friends, guests, owners, trash containers and more - per house type JS scripts can now be attached directly to houses Doors in houses can be marked as front doors or interior doors, and will be treated differently with regards to private and public houses Added new item to dfndata/items/containers/misc.dfn - [trashbarrel] Added new JS script (js/items/trashbarrel.js) with trash barrel functionality for houses. Trash barrels that are marked as secure containers are only accessible by owners, co-owners and friends of the house. Various options available at top of script. Updated js/items/axe.js to support chopping up trash barrels and house add-ons in houses owned by the player Fixed an issue with house doors being left behind after demolishing houses while their doors were open Fixed an issue where GMs could be banned from player houses Added Line of Sight checks to speech, to give players some privacy in their own homes Updated house placement code to more accurately check for other multis, dynamic and static objects when placing houses; now requires free space around each house that cannot be blocked by other houses or items that can block player movement, and disallows placement of houses on roads Updated house placement code to move characters blocking house placement to SE corner of the house Updated house placement code to disallow placing houses in guarded regions, or in dungeons Added new DFN tag for regions to enable/disable player houses in specific regions: HOUSING=0/1 Added new region (247) that covers path to Valley of Eodon in Felucca Added new region (248) that covers Valley of Eodon in Ter-Mur, with player housing disabled Added new region (249) that covers entire T2A lands, with player housing disabled Updated SPACEX and SPACEY values for all houses in dfndata/house/house.dfn to match updated house placement code Added new JS property to Regions that can be used to determine or change state of player housing in a region: .canPlaceHouse() Updated rules for usage of dye tubs to dye locked down items; now only house owners or co-owners may dye locked down items Updated rules for usage of the following locked down items in a house, which are now only usable by house owners and co-owners Dyes, Guildstone Deeds, Recall Runes (renaming), Rename Deeds, Townstone Deeds, House Deeds, Boat Models, Player Vendor Deeds, Ore, Hair Dye Updated rules for usage of the following locked down items in a house, which are now only usable by house owners, co-owners and friends: Keys, Dye Tubs, Magic Scrolls, Fireworks Wands, Magic Wands, Smithing Tools, Mining Tools, Fishing Poles Updated item lockdown rules to allow locking down (and releasing) items in a container as long as the container is locked down, and to only allow releasing a locked down container if it's empty of locked down items Updated item lockdown rules to only allow locking down movement-blocking items further than 2 tiles away from doors Updated rules for releasing items in houses - now the house owner can release any locked down items, co-owners can release items locked down by themselves or by friends, while friends can release only items locked down by themselves Added some feedback to player about why their attempted house placement failed Items added by GMs directly into multis will now decay based on the house-specific decay timer instead of the regular one Fixed an issue that could cause items to almost instantly decay after being released from lockdown in a house Placing house add-ons now properly takes into account SPACEX and SPACEY values when checking if they can fit in selected area of houses Re-added SPACEX and SPACEY values for Pentagram and Loom house add-ons House add-ons can now be converted back into house add-on deeds by chopping them with an axe Added new item type - IT_HOUSEADDON (201) - used by house add-ons placed in player houses Fixed a bug where keys would stop working after being added to a keyring, and would turn into blank keys upon release from the keyring Added visitor count for public player houses, which keeps track of how many visits a public house has received, with each player counted max 1 time every 24 hours Fixed an issue with FindPlayersInOldVisrange() where it didn't take into account that players could see buildings further away than the standard update range. This could cause players to see ghost images of buildings if they were at the "right" distance when the building was being demolished Added NODECAY tag to all signs and doors in dfndata/house/house.dfn Added FRONTDOOR or INTERIORDOOR (as appropriate) to all doors in dfndata/house/house.dfn Added BANX and BANY to specify ban location for some houses in dfndata/house/house.dfn instead of relying on finding SE corner automatically Implemented strongboxes (js/server/house/strongbox.js) for co-owners of a house, which can be placed with the house command "i wish to place a strongbox". Max capacity is 25 items Updated 'REMOVE command to take an optional parameter - itemID. If supplied, the command will remove all items with this itemID from a targeted container Fixed a bug when checking if dynamic items were blocking valid spawn locations for NPCs, some function arguments were in the wrong order! Improved code that finds valid spawn locations for items and NPCs spawned via spawn regions. As server gradually builds up lists of valid spawn locations per region over time, it will start using these lists more often, rather than always look for brand new spawn locations. Fixed a bug with CMulHandler::CheckStaticFlag() that prevented NPCs from spawning inside buildings with no static floors! Fixed an issue with repeating commands that prevented GMs from being able to cancel them when using the ClassicUO client Exposed character property .accountNum to JS engine Extended CDataList class to include a Clear() method for clearing lists Updated JS File method .Open() to support an optional, third argument - subFolderName - that defines in which sub-folder of UOX3/shared/ to store/look for a file. If no third argument is supplied, UOX3 will default to using the shared folder itself. Updated JS File method .Length() to return a value of -1 for files that don't exist Added new code function, exposed to JS engine with same parameters, which simply checks if a given tile ID has a specific flag bool CheckTileFlag( UI16 itemID, TILEFLAG flagToCheck ) Added JS function used to find the root container of an item (if any) FindRootContainer( itemSerial ) FindRootContainer( item ) Added new JS function that allows deleting files from UOX3/shared/ folder or subfolders of shared folder. If no subFolderName is provided, looks for file directly in shared folder itself. Restrictions on file- and folder-names apply. bool DeleteFile( fileName, subFolderName ) Added new JS functions for checking if a specific client or server feature is enabled. See documentation for full list of client/server features. GetClientFeature( bitNum ) // Returns true if specified client feature is enabled on server GetServerFeature( bitNum ) // Returns true if specified server feature is enabled on server Added new JS function for returning the value of almost any server setting from UOX.INI GetServerSetting( settingNameInDoubleQuotes ) Updated JS function DoesDynamicBlock() with two new parameters - checkOnlyMultis and checkOnlyNonMultis Updated JS function DoesMapBlock() with two new parameters - checkMultiPlacement and checkForRoad Fixed an issue where a LoS check would prevent players from accessing containers in their own backpack Added new functions in findfuncs.cpp to make it easier to find items near another object or location: findNearbyItems( object, distance ) findNearbyItems( x, y, worldNumber, instanceID, distance ) Added new Item property - maxItems - used by containers to determine their max item capacity Added new Item property - totalItemCount - used to get total item count in a container (including sub-containers) Added check for max item capacity when creating new items that are added to a character's backpack - items will be created below character's feet if backpack is full! Added new DFN tag for items, used by containers to determine item capacity for a given container: MAXITEMS=# // 125 is the default for all containers if not set Added new JS Item properties: .maxItems // gets/sets item capacity for a given container .totalItemCount // gets total item count in a container, including sub-containers Updated item tooltips for containers to show accurate total item count, as well as to display max item capacity Fixed a bug where picking up items from a non-locked down pile of items on the floor inside a multi could cause the remaining pile to be seen as no longer inside the multi, disallowing locking it back down and causing it to decay based on regular decay timer instead of house-specific one Updated JS command set to allow setting poison-level on items ('set poison #) and hunger-level on characters ('set hunger #) Fixed an issue with js/item/food.js that prevented poisoned food from poisoning characters when eaten Fixed an issue with js/skill/poisoning.js that prevented players from poisoning food! Updated various JS scripts and hardcoded targeting functions to disallow the targeting of locked down resources using skills and tools Updated JS Method TextMessage() to support three extra, optional parameters. Note that if one optional parameter is included, all preceding optional parameters are also required! speechTarget - What kind of target is this message intended for? 0 - Only visible for sender and receiver of message 1 - Visible to all players in range 2 - Visible to all NPCs and players in range 3 - Visible to all PCs everywhere + NPCs in range 4 - Visible to all PCs everywhere (broadcast) 5 - Only visible for the receiver of the message speechTargetSerial - The serial of the receiver of the message, used if speechTarget is 0 or 5 speechFontType - The type of font to display the text in. Defaults to normal. 0 - Bold 1 - Normal with shadow 2 - Bold with shadow 3 - Normal 4 - Gothic 5 - Italic 6 - Small, dark 7 - Colourful 8 - Runic (only works with CAPS) 9 - Small, light Added timestamp to worldsaves in console, to make it easier to see when a particular world-save was done Added info about compiler/environment displayed at the top of the UOX3 console during startup Updated dictionary files with new messages primarily related to housing
2020-11-04 02:00:37 +08:00
case CCP_ACCOUNTNUM: *vp = INT_TO_JSVAL( gPriv->GetAccountNum() ); break;
Fixes for Console behaviour on Linux and Windows, addition of JS properties for user accounts Fixed long-standing issue with UOX3 console not resetting terminal properly after shutdown on Linux, after updating cConsole.cpp/h to conform to standard unix terminal commands/settings for certain features (punt) Fixed an issue that could cause a crash on Windows when attempting to broadcast system messages from the UOX3 console (punt) Fixed an issue that prevented text input in UOX3 console for system broadcasts from being displayed on Linux and MacOS (punt) Added support for new JS Object - IUE_ACCOUNT - which can be accessed via character property .account. The following account properties have been exposed to the JS engine: .id // Account ID (Read-Only) .username // Account Username (Read-Only) .flags // Flags set on account (Read-Only) .comment // Comment/contact info .character1 // Character in account slot 1 (Read-Only) .character2 // Character in account slot 2 (Read-Only) .character3 // Character in account slot 3 (Read-Only) .character4 // Character in account slot 4 (Read-Only) .character5 // Character in account slot 5 (Read-Only) .character6 // Character in account slot 6 (Read-Only) .character7 // Character in account slot 7 (Read-Only) .currentChar // Currently logged in character (if any) (Read-Only) .lastIP // Last IP used to connect to account (Read-Only) // Flag shortcuts .isBanned // Is account banned? .isSuspended // Is account suspended? .isPublic // Is comment/contact info to be considered public info? .isOnline // Is account online? .isSlot1Blocked // Is character slot 1 blocked? .isSlot2Blocked // Is character slot 2 blocked? .isSlot3Blocked // Is character slot 3 blocked? .isSlot4Blocked // Is character slot 4 blocked? .isSlot5Blocked // Is character slot 5 blocked? .isSlot6Blocked // Is character slot 6 blocked? .isSlot7Blocked // Is character slot 7 blocked? .unused9 // Unused flag .unused10 // Unused flag .isSeer // Is account marked as Seer account? .isCounselor // Is account marked as Counselor account? .isGM // Is account marked as GM account? Fixed 'addaccount command - can now once again be used to add a new user account to the server from in-game. See accounts.adm for info on available flags. Syntax: 'addaccount [username] [password] [(optional)flags] Updated 'get command to allow retrieving certain account properties for targeted player characters: username, flags, comment, character1, character2, character3, character4, character5, character6, character7, lastIP, isBanned, isSuspended, isPublic, isOnline, isSlot1Blocked, isSlot2Blocked, isSlot3Blocked, isSlot4Blocked, isSlot5Blocked, isSlot6Blocked, isSlot7Blocked, unused9, unused10, isSeer, isCounselor and isGM Updated 'set command to allow setting certain account properties for targeted player characters: comment, password, isBanned, isSuspended, isPublic, isOnline, isSlot1Blocked, isSlot2Blocked, isSlot3Blocked, isSlot4Blocked, isSlot5Blocked, isSlot6Blocked, isSlot7Blocked, unused9, unused10, isSeer, isCounselor, isGM Updated 'tweak command to allow viewing and modifying of certain account properties for targeted player characters Note that any changes to account properties will not go into effect until a worldsave or manual save of accounts via console has taken place. Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2021-04-16 21:14:50 +08:00
case CCP_ACCOUNT:
{
CAccountBlock_st *accountBlock = &gPriv->GetAccount();
2021-06-12 07:30:23 -04:00
if( accountBlock == nullptr )
{
Fixes for Console behaviour on Linux and Windows, addition of JS properties for user accounts Fixed long-standing issue with UOX3 console not resetting terminal properly after shutdown on Linux, after updating cConsole.cpp/h to conform to standard unix terminal commands/settings for certain features (punt) Fixed an issue that could cause a crash on Windows when attempting to broadcast system messages from the UOX3 console (punt) Fixed an issue that prevented text input in UOX3 console for system broadcasts from being displayed on Linux and MacOS (punt) Added support for new JS Object - IUE_ACCOUNT - which can be accessed via character property .account. The following account properties have been exposed to the JS engine: .id // Account ID (Read-Only) .username // Account Username (Read-Only) .flags // Flags set on account (Read-Only) .comment // Comment/contact info .character1 // Character in account slot 1 (Read-Only) .character2 // Character in account slot 2 (Read-Only) .character3 // Character in account slot 3 (Read-Only) .character4 // Character in account slot 4 (Read-Only) .character5 // Character in account slot 5 (Read-Only) .character6 // Character in account slot 6 (Read-Only) .character7 // Character in account slot 7 (Read-Only) .currentChar // Currently logged in character (if any) (Read-Only) .lastIP // Last IP used to connect to account (Read-Only) // Flag shortcuts .isBanned // Is account banned? .isSuspended // Is account suspended? .isPublic // Is comment/contact info to be considered public info? .isOnline // Is account online? .isSlot1Blocked // Is character slot 1 blocked? .isSlot2Blocked // Is character slot 2 blocked? .isSlot3Blocked // Is character slot 3 blocked? .isSlot4Blocked // Is character slot 4 blocked? .isSlot5Blocked // Is character slot 5 blocked? .isSlot6Blocked // Is character slot 6 blocked? .isSlot7Blocked // Is character slot 7 blocked? .unused9 // Unused flag .unused10 // Unused flag .isSeer // Is account marked as Seer account? .isCounselor // Is account marked as Counselor account? .isGM // Is account marked as GM account? Fixed 'addaccount command - can now once again be used to add a new user account to the server from in-game. See accounts.adm for info on available flags. Syntax: 'addaccount [username] [password] [(optional)flags] Updated 'get command to allow retrieving certain account properties for targeted player characters: username, flags, comment, character1, character2, character3, character4, character5, character6, character7, lastIP, isBanned, isSuspended, isPublic, isOnline, isSlot1Blocked, isSlot2Blocked, isSlot3Blocked, isSlot4Blocked, isSlot5Blocked, isSlot6Blocked, isSlot7Blocked, unused9, unused10, isSeer, isCounselor and isGM Updated 'set command to allow setting certain account properties for targeted player characters: comment, password, isBanned, isSuspended, isPublic, isOnline, isSlot1Blocked, isSlot2Blocked, isSlot3Blocked, isSlot4Blocked, isSlot5Blocked, isSlot6Blocked, isSlot7Blocked, unused9, unused10, isSeer, isCounselor, isGM Updated 'tweak command to allow viewing and modifying of certain account properties for targeted player characters Note that any changes to account properties will not go into effect until a worldsave or manual save of accounts via console has taken place. Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2021-04-16 21:14:50 +08:00
*vp = JSVAL_NULL;
}
Fixes for Console behaviour on Linux and Windows, addition of JS properties for user accounts Fixed long-standing issue with UOX3 console not resetting terminal properly after shutdown on Linux, after updating cConsole.cpp/h to conform to standard unix terminal commands/settings for certain features (punt) Fixed an issue that could cause a crash on Windows when attempting to broadcast system messages from the UOX3 console (punt) Fixed an issue that prevented text input in UOX3 console for system broadcasts from being displayed on Linux and MacOS (punt) Added support for new JS Object - IUE_ACCOUNT - which can be accessed via character property .account. The following account properties have been exposed to the JS engine: .id // Account ID (Read-Only) .username // Account Username (Read-Only) .flags // Flags set on account (Read-Only) .comment // Comment/contact info .character1 // Character in account slot 1 (Read-Only) .character2 // Character in account slot 2 (Read-Only) .character3 // Character in account slot 3 (Read-Only) .character4 // Character in account slot 4 (Read-Only) .character5 // Character in account slot 5 (Read-Only) .character6 // Character in account slot 6 (Read-Only) .character7 // Character in account slot 7 (Read-Only) .currentChar // Currently logged in character (if any) (Read-Only) .lastIP // Last IP used to connect to account (Read-Only) // Flag shortcuts .isBanned // Is account banned? .isSuspended // Is account suspended? .isPublic // Is comment/contact info to be considered public info? .isOnline // Is account online? .isSlot1Blocked // Is character slot 1 blocked? .isSlot2Blocked // Is character slot 2 blocked? .isSlot3Blocked // Is character slot 3 blocked? .isSlot4Blocked // Is character slot 4 blocked? .isSlot5Blocked // Is character slot 5 blocked? .isSlot6Blocked // Is character slot 6 blocked? .isSlot7Blocked // Is character slot 7 blocked? .unused9 // Unused flag .unused10 // Unused flag .isSeer // Is account marked as Seer account? .isCounselor // Is account marked as Counselor account? .isGM // Is account marked as GM account? Fixed 'addaccount command - can now once again be used to add a new user account to the server from in-game. See accounts.adm for info on available flags. Syntax: 'addaccount [username] [password] [(optional)flags] Updated 'get command to allow retrieving certain account properties for targeted player characters: username, flags, comment, character1, character2, character3, character4, character5, character6, character7, lastIP, isBanned, isSuspended, isPublic, isOnline, isSlot1Blocked, isSlot2Blocked, isSlot3Blocked, isSlot4Blocked, isSlot5Blocked, isSlot6Blocked, isSlot7Blocked, unused9, unused10, isSeer, isCounselor and isGM Updated 'set command to allow setting certain account properties for targeted player characters: comment, password, isBanned, isSuspended, isPublic, isOnline, isSlot1Blocked, isSlot2Blocked, isSlot3Blocked, isSlot4Blocked, isSlot5Blocked, isSlot6Blocked, isSlot7Blocked, unused9, unused10, isSeer, isCounselor, isGM Updated 'tweak command to allow viewing and modifying of certain account properties for targeted player characters Note that any changes to account properties will not go into effect until a worldsave or manual save of accounts via console has taken place. Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2021-04-16 21:14:50 +08:00
else
{ // Otherwise Acquire an object
JSObject *accountObj = JSEngine->AcquireObject( IUE_ACCOUNT, accountBlock, JSEngine->FindActiveRuntime( JS_GetRuntime( cx )));
Fixes for Console behaviour on Linux and Windows, addition of JS properties for user accounts Fixed long-standing issue with UOX3 console not resetting terminal properly after shutdown on Linux, after updating cConsole.cpp/h to conform to standard unix terminal commands/settings for certain features (punt) Fixed an issue that could cause a crash on Windows when attempting to broadcast system messages from the UOX3 console (punt) Fixed an issue that prevented text input in UOX3 console for system broadcasts from being displayed on Linux and MacOS (punt) Added support for new JS Object - IUE_ACCOUNT - which can be accessed via character property .account. The following account properties have been exposed to the JS engine: .id // Account ID (Read-Only) .username // Account Username (Read-Only) .flags // Flags set on account (Read-Only) .comment // Comment/contact info .character1 // Character in account slot 1 (Read-Only) .character2 // Character in account slot 2 (Read-Only) .character3 // Character in account slot 3 (Read-Only) .character4 // Character in account slot 4 (Read-Only) .character5 // Character in account slot 5 (Read-Only) .character6 // Character in account slot 6 (Read-Only) .character7 // Character in account slot 7 (Read-Only) .currentChar // Currently logged in character (if any) (Read-Only) .lastIP // Last IP used to connect to account (Read-Only) // Flag shortcuts .isBanned // Is account banned? .isSuspended // Is account suspended? .isPublic // Is comment/contact info to be considered public info? .isOnline // Is account online? .isSlot1Blocked // Is character slot 1 blocked? .isSlot2Blocked // Is character slot 2 blocked? .isSlot3Blocked // Is character slot 3 blocked? .isSlot4Blocked // Is character slot 4 blocked? .isSlot5Blocked // Is character slot 5 blocked? .isSlot6Blocked // Is character slot 6 blocked? .isSlot7Blocked // Is character slot 7 blocked? .unused9 // Unused flag .unused10 // Unused flag .isSeer // Is account marked as Seer account? .isCounselor // Is account marked as Counselor account? .isGM // Is account marked as GM account? Fixed 'addaccount command - can now once again be used to add a new user account to the server from in-game. See accounts.adm for info on available flags. Syntax: 'addaccount [username] [password] [(optional)flags] Updated 'get command to allow retrieving certain account properties for targeted player characters: username, flags, comment, character1, character2, character3, character4, character5, character6, character7, lastIP, isBanned, isSuspended, isPublic, isOnline, isSlot1Blocked, isSlot2Blocked, isSlot3Blocked, isSlot4Blocked, isSlot5Blocked, isSlot6Blocked, isSlot7Blocked, unused9, unused10, isSeer, isCounselor and isGM Updated 'set command to allow setting certain account properties for targeted player characters: comment, password, isBanned, isSuspended, isPublic, isOnline, isSlot1Blocked, isSlot2Blocked, isSlot3Blocked, isSlot4Blocked, isSlot5Blocked, isSlot6Blocked, isSlot7Blocked, unused9, unused10, isSeer, isCounselor, isGM Updated 'tweak command to allow viewing and modifying of certain account properties for targeted player characters Note that any changes to account properties will not go into effect until a worldsave or manual save of accounts via console has taken place. Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2021-04-16 21:14:50 +08:00
*vp = OBJECT_TO_JSVAL( accountObj );
}
break;
}
case CCP_CREATEDON: *vp = INT_TO_JSVAL( gPriv->GetCreatedOn() ); break;
UOX3 0.99.6-RC6 Removed arbitrary and hidden restrictions on refreshing list of online players shown with 'wholist command Fixed an issue where player ghosts that get teleported would not see themselves get updated to new location Fixed a server crash from clients disconnecting while running server in debug mode Improved how container updates are sent to players; now only sends to clients that have actually opened the container, and who are still within range Added more information about UO data files being loaded during server startup Enhanced the GM 'add menu to allow clicking directly on images of items/npcs to add them, and adjusted size of menus to accommodate this Fixed an issue with fleeing NPCs that could cause them to attempt to flee across time and space, regardless of distance to target/attacker in combat Added NPC AI that runs away from players if they get too close (even outside combat). Applied to hind, rabbits, squirrels, ferrets and various birds by default: AI_ANIMAL_SCARED (aitype 12) Fixed issues with NPCs fleeing forever, or getting stuck in flee/don't flee loop, by introducing max fleeing distance (50 tiles) and cooldown (30 sec) on fleeing Updated onNameRequest JS Event to include third parameter with origin of name request, so script responses can be tailored appropriately: onNameRequest( myObj, requestedBy, requestSource ) Potential values for requestSource: 0 - Speech/System Messages 1 - Guild Menus 2 - Stat Window (self) 3 - Stat Window (other) 4 - Tooltip 5 - Paperdoll Journal 6 - Paperdoll 7 - Single Click / All-Names 8 - System 9 - Secure Trade Window Added Adaptive Performance System (APS) that dynamically adjust how often NPC AI/movement is checked based on overall shard performance. If performance drops below defined threshold, UOX3 gradually slows down checks for NPC AI/movement to prioritize player movement/speech/command responsiveness. If performance climbs back up above threshold, slowdowns are gradually removed. The following UOX.INI options have been added under [system] category to support this system: APSPERFTHRESHOLD=50 // Performance threshold (measured in simulation cycles/sec) below which the APS kicks in APSINTERVAL=100 // How often (in milliseconds) the APS checks performance and makes adjustments (if needed) to balance out shard performance APSDELAYSTEP=50 // How much the delay timer is modified by (in milliseconds) each time APS makes adjustments APSDELAYMAXCAP=2000 // Max amount of of delay APS can introduce for NPC AI/movement handling when attempting to restore shard performance Added new JS Methods for Region objects: .GetOrePrefs( oreType ) // Get ore preference data for ore type found in town region. Returned as an array containing the following data: orePrefData -> [ oreName, // name of ore color, // color of ore minskill, // min skill to mine ore ingotName, // name of ingot created from ore makemenu, // makemenu entry for crafting something from ingot oreChance, // default global chance of finding this ore type scriptID // script attached to mined ore ], orePrefChance // Chance of finding this ore type in given town region .GetOreChance() // Get base chance of finding any ore in town region Moved Mining skill plus gravedigging feature from hard code to scripts (js/skill/mining.js) to make it easier to maintain and/or customize, and removed hard coded variants Gravedigging now relies on the ore resource system behind the scenes to restrict how often graves in a given area can be dug up Fixed some incorrect references to .worldNumber Character property in misc scripts (should be .worldnumber) Made some "hard-scripted" system messages in misc scripts use dictionary system instead Added spawn region for banker NPCs in Serpent's Hold (dfndata/spawn/felucca/spawn_town_serpents_hold.dfn, dfndata/spawn/trammel/spawn_town_serpents_hold.dfn) Fixed region definition of Ocllo to actually cover the entire town (dfndata/regions/regions.dfn) Added numerous additional locations accessible with 'goplace # command, for key locations in Ilshenar, Malas, Tokuno Islands and Ter Mur (dfndata/location/location.dfn) Revised travel-menu portion of GM menu (shortcut: 'travel) to include more travel options based on new locations (dfndata/items/travelmenu.dfn and travelmenu.bulk.dfn) Fixed an issue where NPCs could attempt to attack targets in other worlds/instances Added new JS Event that triggers for characters who are about to deal damage in combat. Complimentary to onDamage, which triggers for chars receiving damage: onDamageDeal( dmgDealer, dmgReceiver, damageValue, damageType ) Added new JS Event that can trigger in global script upon creation of new player chars. Note that this will trigger in place of onCreateDFN event for player characters: onCreatePlayer( pChar ) Added new JS Event that triggers for characters selecting a target with a spell. Complimentary to onSpellTarget, which triggers for targets selected with a spell: onSpellTargetSelect( caster, target, spellNum ) Updated onCombatStart and onCombatEnd JS Events to also trigger for the other party in combat Updated onPickup JS Event to include a third parameter - the potential container item was picked up from. Event now also triggers event in scripts attached to said containers: onPickup( iPickedUp, pChar, iCont ) Added tracking of total playtime per individual character, and per account across all characters, and exposed these properties to JS engine: .totalPlayTime // Account property, total playtime across all chars .playTime // Character property, total playtime on given character only Added new player-accessible command ('playtime) to spit out the playtime of current character/account as a whole (js/commands/playtime.js) Implemented first version of Young Player System: Replaced the UNUSED9 account flag with YOUNG, to be used by Young/New Player System Added new JS Account property that gets/sets whether player account is considered Young: .isYoung Added new Char timers: TIMER_YOUNGHEAL // Restricts how often Young players are healed by NPC healers TIMER_YOUNGMESSAGE // Restricts how often Young players are warned about dangerous looking monsters in overworld Updated GM commands 'get and 'set to get/set .isYoung property of player's account (js/commands/targeting/get.js and set.js) Added new UOX.INI setting to enable/disable Young Player System (enabled by default): YOUNGPLAYERSYSTEM=1 If Young Player System is enabled, all newly created player accounts are automatically marked with Young flag Added new script to handle various restrictions and functions related to Young characters (js/player/young_player.js): Young characters will have [Young] displayed over their head Young characters will have their Young status checked and verified on every login + every stat/skill gain, to revoke the Young status if any of the following is true: Account has a total playtime of more than 40 hours Any character has more than 350 total (base) skill points Any character has more than 70 skill points in a single skill Any character has more than 150 total stat points Any character has more than 80 stat points in a single stat Young characters can renounce their Young status manually by saying the words "I renounce my young player status" Young characters get two additional items upon creation: a new player ticket (can be combined with any other players new player ticket for both players to get a reward) a sextant (shows Young players directions to nearest moongate/bank regardless of where they are, as long as outdoors) Young characters cannot target other player characters with hostile spells or skills Young characters cannot be the target of other player characters' hostile spells or skills Young characters can only cast beneficial spells upon themselves or other Young characters Young characters can only be the target of beneficial spells from other Young players Young players (and their pets/followers) cannot attack or harm any other players (or their pets/followers), nor themselves be attacked or harmed by any other players (or their pets/followers), whether from combat, spells, skills or items Young players don't lose any of their items on death, and are teleported to the nearest healer upon death with all their items intact Young players receive a warning upon entering dungeons that monsters there will be hostile Updated global script (js/server/global.js) to: Check/Verify Young status of players upon login Attach young player script on login/creation for players on Young accounts Give specific items to Young players upon creation Added new script (js/item/corpse.js) that is assigned to all freshly created corpses. This script handles restrictions related to Young players interactions with corpses, and the interactions of other players with corpses of Young players Updated JS Method .Carve() to return true/false depending on whether carving a corpse was successful Updated Healer AI in code to heal nearby injured Young players Updated Evil AI and Evil Caster AI in code to avoid selecting Young players as targets in combat outside of dungeons Added a new section to UOX.INI - [young player starting locations] - that can be used to define starting locations for Young players. If only one such location is provided, all players start there. Otherwise, it matches the same starting location setup as the regular one - with one entry per town in Britannia. Restricted transferring and/or friending of pets (code) and hirelings (hirelings.js) between Young and non-Young players Restricted Young players from recalling or gating to Felucca facet Young players can instantly logout from anywhere, at any time
2023-07-01 20:02:40 +08:00
case CCP_PLAYTIME: *vp = INT_TO_JSVAL( gPriv->GetPlayTime() ); break;
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
case CCP_NAME:
0.99.4v Added JS command to reload dictionaries 'reloaddictionaries Fixed a server crash related to casting of spells Fixed some issues with Line-of-Sight checks related to items under/above ground, LoS checks between different floors of buildings, etc. Updated handling of skill-training keywords to be based on language-independent keyword IDs rather than trying to match player-input text to specific skill-names Updated animal-trainer/stablemasterscript (js/npc/ai/stablemaster.js) with several changes: Fixed an issue where the same pet would be stabled in all available slots if payment was taken from player's bank account instead of their backpack Fixed an issue where stablemaster would not pause walking for a while when a player interacts with them Converted all system messages and text messages in stablemaster script to dictionary entries Added new NPC AI type to source - AI_STABLEMASTER (9) - and assigned this to animal trainers. This is used to identify this type of NPCs for the purpose of displaying relevant context menus Reworked banker AI script (js/npc/ai/banker.js) to use triggerwords from client instead of hard-defined strings, to work better with multiple languages (and work with all relevant triggerwords) Fixed a bug with banker AI script (js/npc/ai/banker.js) that prevented players from using the "withdraw" command Re-added NPC AI 8 to banker NPCs (dfndata/npc/male_vendors.dfn and female_vendors.dfn) so code can check for presence of this AI when handling context menus Removed remaining hard-coded banking functionality - all handled by script anyway Added new context menu option for NPC bankers - Open Bankbox Updated code handling of context menus to only show context menus when relevant: Open Paperdoll - Shows for all characters with a paperdoll Open Backpack - Shows for player's character, pack animals and hirelings Open Bankbox - Shows for banker NPCs (if within 8 tiles) Buy/Sell - Shows for vendor NPCs (if within 8 tiles, and if they have anything for sale/are buying anything) Added new context menu entries for pets, which can be used if player is within 12 tiles of pet: Command: Kill Command: Stop Command: Follow Command: Stay Command: Guard Add Friend Remove Friend Transfer Release Added new context menu entries for stablemasters/animal trainers: Claim All Pets Stable Pet Added new context menu entries for Escort Quest NPCs Ask Destination (if within 3 tiles) Accept Escort (if within 3 tiles) Abandon Escort Added new context menus for NPCs that can teach skills to players (limited to max 10 per NPC) Train [skillName] Added new AI script for NPC hirelings (3204=js/npc/ai/hireling.js), who can be hired to follow the player around for a limited amount of time, and function the same way as pets. In addition to the regular pet commands, these speech commands are supported: hire // The hireling will respond with the cost to hire them dismiss // Replaces the "release" command for pets; will dismiss the hireling patrol // The hireling will patrol between it's current location and a second targeted location nearby move // The hireling will try to shuffle out of the way fetch // The hireling will try to fetch a targeted item drop // The hireling will drop to the ground all loot they're currently carrying report // The hireling will report on the remaining time they're hired for Added new NPC DFN tag used by code to detect hireling NPCs for the purpose of displaying context menus: HIRELING // No additional value/data needed for tag Added new context menu entries for Hireling NPCs, in addition to the ones for regular pets: Hire // Can be used within 3 steps of the hireling, who will respond with cost to hire them Dismiss // Replaces the "release" command for pets, will dismiss the hireling Added HIRELING tag and SCRIPT=3204 to and updated stats of various NPCs that will be hireable: m_fighter, f_fighter, m_beggar, f_beggar, m_peasant, f_peasant, m_sailor, f_sailor, m_pirate, f_pirate Added new hireling NPC: m_paladin, f_paladin Added new UOX ini setting to enable/disable context menus CONTEXTMENUS=1/0 (defaults to 1) Added new Item JS Method to check if an item's ID is on a specified food list .IsOnFoodList( foodList ) // Returns true/false if item's ID is on specified foodList Added new OMNIVORE food list and assigned it to [basehuman] DFN section Added new Character JS Properties .isGuarded // Gets/Sets whether character is guarded by a pet/hireling .guarding // Gets/Sets the object (if any) being guarded by a pet/hireling Fixed multiple issues with health bars, flagging and character highlighting Added some crash protection for invalid data used with CUSTOMINTTAG and CUSTOMSTRINGTAG DFN tags for Items, NPCs and Multis Fixed an issue which prevented hard-coded checks from running when using items Added new global js object (Timer) to make the use of character timers in JS more robust, with properties matching timer names from enum in source. Properties: .TIMEOUT // Time until next attack can be done in combat .INVIS // Time until invisible character becomes visible .HUNGER // Time until character grows more hungry .THIRST // Time until character grows more thirsty .POISONTIME // Time until next tick of poison damage .POISONTEXT // Time until next message about suffering from poison .POISONWEAROFF // Time until poison wears off .SPELLTIME // Time until spell cast is completed. Can be set to 0 to interrupt .ANTISPAM // Time until next speech message can be sent (for anti spam purposes) .CRIMFLAG // Time until criminal flag runs out .MURDERRATE // Time until next murder count decay .PEACETIMER // Time until character can re-enter combat after being affected by peacemaking .FLYINGTOGGLE // Time until next time flying ability can be toggled for gargoyles .MOVETIME // Time until NPC can move again .SPATIMER // Time until next time NPC can cast a spell .SUMMONTIME // Time until a summoned NPC will vanish .EVADETIME // Time until an NPC will exit evade state .LOGOUT // Time it takes for a player char to vanish after logout Examples of use: var hungerTimer = myChar.GetTimer( Timer.HUNGER ) myChar.SetTimer( Timer.HUNGER, 15000 ) Added new Character JS Methods to add, remove and list friends of a pet/hireling: .AddFriend( playerToAdd ) // Adds player to friend list .RemoveFriend( playerToRemove ) // Removes player from friend list .GetFriendList() // Gets list of friends .ClearFriendList() // Clears list of friends Added new Character JS Method to fetch a player character's list of pets/followers .GetPetList() // Gets list of pets/followers Added new persistent NPC property to keep track of a pet's previous owners, whether those tamed the pet or had it transferred to them. Every time a pet is tamed, or is transferred to a new owner, this list is updated: GenericList< CChar * > petOwnerList Added new Character JS Method to check if a player is on a pet's owner list as a previous owner: .HasBeenOwner( mChar ) Previous owners of a pet can re-tame it with guaranteed chance of success Updated JS Method Refresh() to be usable with both items or characters, to send updated state of object to nearby players Added character tooltip [Guarded] for characters being guarded by a pet/hireling Pets/hirelings that are transferred will now immediately start following their new master instead of wandering freely Pets/hirelings can no longer be transferred between players as long as either party is flagged as a criminal Pets/hirelings can no longer be transferred to dead players Pets/hirelings can no longer be transferred to NPCs Summoned creatures can no longer be transferred to other players Summoned creatures can no longer have friends Friend lists of pets/hirelings are now cleared when the pet/hireling is transferred to another player Added new UOX.INI settings to control how many pets players can have active: MAXCONTROLSLOTS=0 // Maximum number of pet control slots available to player. Disabled if 0 MAXFOLLOWERS=5 // Maximum pets/followers a player can have active at the same time. Used if control slots are disabled MAXPETOWNERS=5 // Maximum number of different owners a pet can have over its lifetime before it becomes impossible to retame Added new NPC property and NPC DFN tag that keeps track of how many pet control slots an NPC would take up if owned by a player: UI08 controlSlots // source property CONTROLSLOTS=# // DFN tag Added new Character JS properties: .ownerCount // Get the total number of owners a pet/hireling has had, based on NPC's petOwnerList .controlSlots // Get/Set number of pet control slots an NPC will occupy .controlSlotsUsed // Get/Set the number of control slots used by a player Updated get (js/commands/targeting/get.js) and set (js/commands/targeting/set.js) commands to support getting/setting the following character properties: deaths ownerCount (read only) controlSlots controlSlotsUsed Updated NPC DFNs with default CONTROLSLOT=# tags Increased the max distance from player that onSpeech JS event will trigger from 7 to 12 Updated how "all attack" and "all follow" commands for pets are handled. Now loops through all pets owned by character and executes command for each eligible pet Fixed an issue where NPCs could follow characters in different worlds/instances than them selves Updated default max amount of items that can be sold to NPC vendors from 5 to 250 Guards can no longer train players in skills Updated equipment itemlists (dfndata/items/itemlists/itemlists.dfn) with blank entries to introduce some more variety in the type of clothes NPCs wear in general Added new NPCs to DFNs (dfndata/npc/undead.dfn) and added them to undead npclist: [skeletalmage] // variation of [bonemage] [skeletalknight] // variation of [boneknight] Updated Titles (dfndata/titles/titles.dfn) with up-to-date titles for skills around Pub 15, and added titles for skills added after that. Also added "Elder" and "Legendary" titles for 110 and 120 skillpoints Updated EQUIPITEM tag in newbie.dfn (dfndata/newbie/newbie.dfn) to support an optional hue parameter (EQUIPITEM=id,hue) Updated starting equipment for new characters (dfndata/newbie/newbie.dfn), with commented out practice weapons. Uncomment to use Added item definitions for practice weapons (dfndata/items/gear/weapons/practice_weapons.dfn): practice_skinning_knife practice_hatchet practice_axe practice_mace practice_longsword practice_spear practice_bow practice_club practice_crook practice_gnarled_staff Updated mount statues DFN (dfndata/items/misc/mount-statues.dfn) and JS (js/npc/pets/*.js) files to include pet control slot related stuff Pets now inherit the karma of their owners, but revert to their original karma upon release Pets and hirelings will no longer follow the ghosts of their dead owners, but stay to guard their corpse Added optional 9th parameter for JS Function CreateDFNItem to specify a color for item created. This comes before the other optional parameters - worldNumber and instanceID (which are only used if character is NULL): CreateDFNItem( mSock, mChar, sectionName, inPack, iAmount, itemType, iColor, worldNumber, instanceID ) Added ID of Giant Beetle to various pack animal checks Pack animals will now drop any newbie/blessed items stored in their packs upon death Added new NPC properties to track pet loyalty, and exposed these as Character JS properties, and NPC DFN tags: JS Properties .maxLoyalty // Defaults to 100 .loyalty // Starts at 25 DFN Tags MAXLOYALTY=# // Defaults to 100 LOYALTY=# // Starts at 25 Updated TriggerEvent JS function to support return values (int, bool, string, object) from called script Updated various JS scripts to make use of new TriggerEvent functionality and reduce reliance on custom tags: js/item/archerybutte.js js/item/trainingdummy.js js/server/data/combatanims.js js/server/data/weapontypes.js Updated archerybutte script to use dictionary for system and text messages Updated archerybutte script to support increased range, distance penalty and dex/str bonuses when calculating score Added new UOX.INI settings under [pets and hirelings] section related to pet control and loyalty: CHECKPETCONTROLDIFFICULTY=1 // Enable/Disable pet control difficulty system PETLOYALTYGAINONSUCCESS=1 // Amount of pet loyalty gained on successful pet command use PETLOYALTYLOSSONFAILURE=3 // Amount of pet loyalty lost on failed pet command use PETLOYALTYRATE=900 // Amount of seconds between each time pet loyalty is automatically reduced by 1. Takes 25 hours to deplete completely from max Added new persistent NPC property that keeps track of the difficulty of taming and controlling a pet, and exposed it as a Character JS property: .orneriness Every time a tamed pet is released or goes wild, its "orneriness" increases, making it more difficult for other players to tame, and more difficult for anyone to control. Updated CBasePetResponse::canControlPet() function to use pet control difficulty system if enabled, which checks player's animal taming/animal lore skill vs a pet's "orneriness" to determine chance of pet accepting a given pet command On successful use of pet command, increases pet loyalty by value defined in PETLOYALTYGAINONSUCCESS ini setting On failed use of pet command, decreases pet loyalty by value defined in PETLOYALTYLOSSONFAILURE ini setting Added new Character JS Method to calculate chance of a player successfully controlling the pet: .CalculateControlChance( mChar ) // Returns value between 0 and 1000 indicating chance of success Feeding a pet will now restore its loyalty to maximum Pets will now lose loyalty on hunger checks when at maximum hunger Pets that are maximum hungry will now only have a chance to go wild if loyalty has dropped to zero Added new DFN tag for creatures.dfn - TYPE - which contains a string describing the type of creature Added secure pet trading. Players who trade pets will now see a pet transfer deed appear in a secure trade window with the name and type of creature, and upon completion of the trade the associated pet will be instantly transferred to the other player Updated resource JS scripts (js/server/resource/*) to use dictionaries for all system messages Updated skill JS scripts (js/skill/*) to use dictionaries for all system messages Updated housing JS scripts (js/server/house/*) to use dictionaries for all system messages Updated item JS scripts (js/item/*) to use dictionaries for all system messages Updated magic JS scripts (js/magic/*) to use dictionaries for all system messages Updated NPC AI JS scripts (js/npc/ai/*) to use dictionaries for all system messages Updated command JS scripts (js/commands/*) to use dictionaries for all system messages, gump tooltips, etc Updated code to use dictionaries for all system messages Fixed incorrect spelling for UOX.INI setting HIDEW(H)ILEMOUNTED and updated hiding skill (js/skill/hiding.js) to actually allow/disallow hiding while mounted based on this setting Added new Character JS Method to make it easier to make one NPC initiate combat with another: .InitiateCombat( targetChar ) // Character attempts to initiate combat with target character Updated parrying portion of combat code to be in line with Pub15/pre-AoS parrying mechanics. High AR shields now absorb more damage on a successful parry, while low AR shields have a higher chance of parrying. Shields are also now more effective against archery attacks (full absorption potential) than melee attacks (half absorption potential). Updated combat damage calculations to be in line with Pub15/pre-AoS damage calculations Adjusted default value of COMBATNPCDAMAGERATE ini setting (damage divisor when target is a player) from 2 to 1 to account for these changes. Removed dictionary.UNK, and made dictionary.ZRO the default dictionary used for all unsupported languages Added dictionary support for additional languages: Portuguese, Italian, Czech Updated default dictionaries for the following languages: English, French Added default dictionaries for the following languages: German, Spanish, Portuguese, Italian, Czech (note that translations have been provided by automatic services and will contain inaccuracies!) Added new UOX.INI setting to allow specifying a default dictionary language for server, which if set will force that language for all dictionary messages, regardless of client settings: SERVERLANGUAGE=0 // Set default server dictionary language. Supported languages: 0 - None/language used by each client, 1 - English, 2 - German, 3 - Spanish, 5 - French, 6 - Portuguese, 7 - Italian, 8 - Czech Added new function in combat.cpp - AdjustArmorClassDamage() - which adjusts the damage dealt in combat based on whether armour class (AC DFN tag or .ac JS property) of weapon and armour equipped on hit location of target match up. A weapon with armour class 1 would essentially be doubly effective against armour of armour class 1. Allows setting up things like piercing weapons being better against some armor types than mace weapons, etc. Added new UOX.INI setting under [combat] to enable/disable double damage from armour class bonuses: ARMORCLASSDAMAGEBONUS=0/1 //defaults to 0)
2021-07-28 16:02:56 +08:00
{
CSocket *tSock = nullptr;
UOX3 0.99.6-RC6 Removed arbitrary and hidden restrictions on refreshing list of online players shown with 'wholist command Fixed an issue where player ghosts that get teleported would not see themselves get updated to new location Fixed a server crash from clients disconnecting while running server in debug mode Improved how container updates are sent to players; now only sends to clients that have actually opened the container, and who are still within range Added more information about UO data files being loaded during server startup Enhanced the GM 'add menu to allow clicking directly on images of items/npcs to add them, and adjusted size of menus to accommodate this Fixed an issue with fleeing NPCs that could cause them to attempt to flee across time and space, regardless of distance to target/attacker in combat Added NPC AI that runs away from players if they get too close (even outside combat). Applied to hind, rabbits, squirrels, ferrets and various birds by default: AI_ANIMAL_SCARED (aitype 12) Fixed issues with NPCs fleeing forever, or getting stuck in flee/don't flee loop, by introducing max fleeing distance (50 tiles) and cooldown (30 sec) on fleeing Updated onNameRequest JS Event to include third parameter with origin of name request, so script responses can be tailored appropriately: onNameRequest( myObj, requestedBy, requestSource ) Potential values for requestSource: 0 - Speech/System Messages 1 - Guild Menus 2 - Stat Window (self) 3 - Stat Window (other) 4 - Tooltip 5 - Paperdoll Journal 6 - Paperdoll 7 - Single Click / All-Names 8 - System 9 - Secure Trade Window Added Adaptive Performance System (APS) that dynamically adjust how often NPC AI/movement is checked based on overall shard performance. If performance drops below defined threshold, UOX3 gradually slows down checks for NPC AI/movement to prioritize player movement/speech/command responsiveness. If performance climbs back up above threshold, slowdowns are gradually removed. The following UOX.INI options have been added under [system] category to support this system: APSPERFTHRESHOLD=50 // Performance threshold (measured in simulation cycles/sec) below which the APS kicks in APSINTERVAL=100 // How often (in milliseconds) the APS checks performance and makes adjustments (if needed) to balance out shard performance APSDELAYSTEP=50 // How much the delay timer is modified by (in milliseconds) each time APS makes adjustments APSDELAYMAXCAP=2000 // Max amount of of delay APS can introduce for NPC AI/movement handling when attempting to restore shard performance Added new JS Methods for Region objects: .GetOrePrefs( oreType ) // Get ore preference data for ore type found in town region. Returned as an array containing the following data: orePrefData -> [ oreName, // name of ore color, // color of ore minskill, // min skill to mine ore ingotName, // name of ingot created from ore makemenu, // makemenu entry for crafting something from ingot oreChance, // default global chance of finding this ore type scriptID // script attached to mined ore ], orePrefChance // Chance of finding this ore type in given town region .GetOreChance() // Get base chance of finding any ore in town region Moved Mining skill plus gravedigging feature from hard code to scripts (js/skill/mining.js) to make it easier to maintain and/or customize, and removed hard coded variants Gravedigging now relies on the ore resource system behind the scenes to restrict how often graves in a given area can be dug up Fixed some incorrect references to .worldNumber Character property in misc scripts (should be .worldnumber) Made some "hard-scripted" system messages in misc scripts use dictionary system instead Added spawn region for banker NPCs in Serpent's Hold (dfndata/spawn/felucca/spawn_town_serpents_hold.dfn, dfndata/spawn/trammel/spawn_town_serpents_hold.dfn) Fixed region definition of Ocllo to actually cover the entire town (dfndata/regions/regions.dfn) Added numerous additional locations accessible with 'goplace # command, for key locations in Ilshenar, Malas, Tokuno Islands and Ter Mur (dfndata/location/location.dfn) Revised travel-menu portion of GM menu (shortcut: 'travel) to include more travel options based on new locations (dfndata/items/travelmenu.dfn and travelmenu.bulk.dfn) Fixed an issue where NPCs could attempt to attack targets in other worlds/instances Added new JS Event that triggers for characters who are about to deal damage in combat. Complimentary to onDamage, which triggers for chars receiving damage: onDamageDeal( dmgDealer, dmgReceiver, damageValue, damageType ) Added new JS Event that can trigger in global script upon creation of new player chars. Note that this will trigger in place of onCreateDFN event for player characters: onCreatePlayer( pChar ) Added new JS Event that triggers for characters selecting a target with a spell. Complimentary to onSpellTarget, which triggers for targets selected with a spell: onSpellTargetSelect( caster, target, spellNum ) Updated onCombatStart and onCombatEnd JS Events to also trigger for the other party in combat Updated onPickup JS Event to include a third parameter - the potential container item was picked up from. Event now also triggers event in scripts attached to said containers: onPickup( iPickedUp, pChar, iCont ) Added tracking of total playtime per individual character, and per account across all characters, and exposed these properties to JS engine: .totalPlayTime // Account property, total playtime across all chars .playTime // Character property, total playtime on given character only Added new player-accessible command ('playtime) to spit out the playtime of current character/account as a whole (js/commands/playtime.js) Implemented first version of Young Player System: Replaced the UNUSED9 account flag with YOUNG, to be used by Young/New Player System Added new JS Account property that gets/sets whether player account is considered Young: .isYoung Added new Char timers: TIMER_YOUNGHEAL // Restricts how often Young players are healed by NPC healers TIMER_YOUNGMESSAGE // Restricts how often Young players are warned about dangerous looking monsters in overworld Updated GM commands 'get and 'set to get/set .isYoung property of player's account (js/commands/targeting/get.js and set.js) Added new UOX.INI setting to enable/disable Young Player System (enabled by default): YOUNGPLAYERSYSTEM=1 If Young Player System is enabled, all newly created player accounts are automatically marked with Young flag Added new script to handle various restrictions and functions related to Young characters (js/player/young_player.js): Young characters will have [Young] displayed over their head Young characters will have their Young status checked and verified on every login + every stat/skill gain, to revoke the Young status if any of the following is true: Account has a total playtime of more than 40 hours Any character has more than 350 total (base) skill points Any character has more than 70 skill points in a single skill Any character has more than 150 total stat points Any character has more than 80 stat points in a single stat Young characters can renounce their Young status manually by saying the words "I renounce my young player status" Young characters get two additional items upon creation: a new player ticket (can be combined with any other players new player ticket for both players to get a reward) a sextant (shows Young players directions to nearest moongate/bank regardless of where they are, as long as outdoors) Young characters cannot target other player characters with hostile spells or skills Young characters cannot be the target of other player characters' hostile spells or skills Young characters can only cast beneficial spells upon themselves or other Young characters Young characters can only be the target of beneficial spells from other Young players Young players (and their pets/followers) cannot attack or harm any other players (or their pets/followers), nor themselves be attacked or harmed by any other players (or their pets/followers), whether from combat, spells, skills or items Young players don't lose any of their items on death, and are teleported to the nearest healer upon death with all their items intact Young players receive a warning upon entering dungeons that monsters there will be hostile Updated global script (js/server/global.js) to: Check/Verify Young status of players upon login Attach young player script on login/creation for players on Young accounts Give specific items to Young players upon creation Added new script (js/item/corpse.js) that is assigned to all freshly created corpses. This script handles restrictions related to Young players interactions with corpses, and the interactions of other players with corpses of Young players Updated JS Method .Carve() to return true/false depending on whether carving a corpse was successful Updated Healer AI in code to heal nearby injured Young players Updated Evil AI and Evil Caster AI in code to avoid selecting Young players as targets in combat outside of dungeons Added a new section to UOX.INI - [young player starting locations] - that can be used to define starting locations for Young players. If only one such location is provided, all players start there. Otherwise, it matches the same starting location setup as the regular one - with one entry per town in Britannia. Restricted transferring and/or friending of pets (code) and hirelings (hirelings.js) between Young and non-Young players Restricted Young players from recalling or gating to Felucca facet Young players can instantly logout from anywhere, at any time
2023-07-01 20:02:40 +08:00
std::string mCharName = GetNpcDictName( gPriv, tSock, NRS_SCRIPT );
std::string convertedString = oldstrutil::stringToWstringToString( mCharName );
0.99.4v Added JS command to reload dictionaries 'reloaddictionaries Fixed a server crash related to casting of spells Fixed some issues with Line-of-Sight checks related to items under/above ground, LoS checks between different floors of buildings, etc. Updated handling of skill-training keywords to be based on language-independent keyword IDs rather than trying to match player-input text to specific skill-names Updated animal-trainer/stablemasterscript (js/npc/ai/stablemaster.js) with several changes: Fixed an issue where the same pet would be stabled in all available slots if payment was taken from player's bank account instead of their backpack Fixed an issue where stablemaster would not pause walking for a while when a player interacts with them Converted all system messages and text messages in stablemaster script to dictionary entries Added new NPC AI type to source - AI_STABLEMASTER (9) - and assigned this to animal trainers. This is used to identify this type of NPCs for the purpose of displaying relevant context menus Reworked banker AI script (js/npc/ai/banker.js) to use triggerwords from client instead of hard-defined strings, to work better with multiple languages (and work with all relevant triggerwords) Fixed a bug with banker AI script (js/npc/ai/banker.js) that prevented players from using the "withdraw" command Re-added NPC AI 8 to banker NPCs (dfndata/npc/male_vendors.dfn and female_vendors.dfn) so code can check for presence of this AI when handling context menus Removed remaining hard-coded banking functionality - all handled by script anyway Added new context menu option for NPC bankers - Open Bankbox Updated code handling of context menus to only show context menus when relevant: Open Paperdoll - Shows for all characters with a paperdoll Open Backpack - Shows for player's character, pack animals and hirelings Open Bankbox - Shows for banker NPCs (if within 8 tiles) Buy/Sell - Shows for vendor NPCs (if within 8 tiles, and if they have anything for sale/are buying anything) Added new context menu entries for pets, which can be used if player is within 12 tiles of pet: Command: Kill Command: Stop Command: Follow Command: Stay Command: Guard Add Friend Remove Friend Transfer Release Added new context menu entries for stablemasters/animal trainers: Claim All Pets Stable Pet Added new context menu entries for Escort Quest NPCs Ask Destination (if within 3 tiles) Accept Escort (if within 3 tiles) Abandon Escort Added new context menus for NPCs that can teach skills to players (limited to max 10 per NPC) Train [skillName] Added new AI script for NPC hirelings (3204=js/npc/ai/hireling.js), who can be hired to follow the player around for a limited amount of time, and function the same way as pets. In addition to the regular pet commands, these speech commands are supported: hire // The hireling will respond with the cost to hire them dismiss // Replaces the "release" command for pets; will dismiss the hireling patrol // The hireling will patrol between it's current location and a second targeted location nearby move // The hireling will try to shuffle out of the way fetch // The hireling will try to fetch a targeted item drop // The hireling will drop to the ground all loot they're currently carrying report // The hireling will report on the remaining time they're hired for Added new NPC DFN tag used by code to detect hireling NPCs for the purpose of displaying context menus: HIRELING // No additional value/data needed for tag Added new context menu entries for Hireling NPCs, in addition to the ones for regular pets: Hire // Can be used within 3 steps of the hireling, who will respond with cost to hire them Dismiss // Replaces the "release" command for pets, will dismiss the hireling Added HIRELING tag and SCRIPT=3204 to and updated stats of various NPCs that will be hireable: m_fighter, f_fighter, m_beggar, f_beggar, m_peasant, f_peasant, m_sailor, f_sailor, m_pirate, f_pirate Added new hireling NPC: m_paladin, f_paladin Added new UOX ini setting to enable/disable context menus CONTEXTMENUS=1/0 (defaults to 1) Added new Item JS Method to check if an item's ID is on a specified food list .IsOnFoodList( foodList ) // Returns true/false if item's ID is on specified foodList Added new OMNIVORE food list and assigned it to [basehuman] DFN section Added new Character JS Properties .isGuarded // Gets/Sets whether character is guarded by a pet/hireling .guarding // Gets/Sets the object (if any) being guarded by a pet/hireling Fixed multiple issues with health bars, flagging and character highlighting Added some crash protection for invalid data used with CUSTOMINTTAG and CUSTOMSTRINGTAG DFN tags for Items, NPCs and Multis Fixed an issue which prevented hard-coded checks from running when using items Added new global js object (Timer) to make the use of character timers in JS more robust, with properties matching timer names from enum in source. Properties: .TIMEOUT // Time until next attack can be done in combat .INVIS // Time until invisible character becomes visible .HUNGER // Time until character grows more hungry .THIRST // Time until character grows more thirsty .POISONTIME // Time until next tick of poison damage .POISONTEXT // Time until next message about suffering from poison .POISONWEAROFF // Time until poison wears off .SPELLTIME // Time until spell cast is completed. Can be set to 0 to interrupt .ANTISPAM // Time until next speech message can be sent (for anti spam purposes) .CRIMFLAG // Time until criminal flag runs out .MURDERRATE // Time until next murder count decay .PEACETIMER // Time until character can re-enter combat after being affected by peacemaking .FLYINGTOGGLE // Time until next time flying ability can be toggled for gargoyles .MOVETIME // Time until NPC can move again .SPATIMER // Time until next time NPC can cast a spell .SUMMONTIME // Time until a summoned NPC will vanish .EVADETIME // Time until an NPC will exit evade state .LOGOUT // Time it takes for a player char to vanish after logout Examples of use: var hungerTimer = myChar.GetTimer( Timer.HUNGER ) myChar.SetTimer( Timer.HUNGER, 15000 ) Added new Character JS Methods to add, remove and list friends of a pet/hireling: .AddFriend( playerToAdd ) // Adds player to friend list .RemoveFriend( playerToRemove ) // Removes player from friend list .GetFriendList() // Gets list of friends .ClearFriendList() // Clears list of friends Added new Character JS Method to fetch a player character's list of pets/followers .GetPetList() // Gets list of pets/followers Added new persistent NPC property to keep track of a pet's previous owners, whether those tamed the pet or had it transferred to them. Every time a pet is tamed, or is transferred to a new owner, this list is updated: GenericList< CChar * > petOwnerList Added new Character JS Method to check if a player is on a pet's owner list as a previous owner: .HasBeenOwner( mChar ) Previous owners of a pet can re-tame it with guaranteed chance of success Updated JS Method Refresh() to be usable with both items or characters, to send updated state of object to nearby players Added character tooltip [Guarded] for characters being guarded by a pet/hireling Pets/hirelings that are transferred will now immediately start following their new master instead of wandering freely Pets/hirelings can no longer be transferred between players as long as either party is flagged as a criminal Pets/hirelings can no longer be transferred to dead players Pets/hirelings can no longer be transferred to NPCs Summoned creatures can no longer be transferred to other players Summoned creatures can no longer have friends Friend lists of pets/hirelings are now cleared when the pet/hireling is transferred to another player Added new UOX.INI settings to control how many pets players can have active: MAXCONTROLSLOTS=0 // Maximum number of pet control slots available to player. Disabled if 0 MAXFOLLOWERS=5 // Maximum pets/followers a player can have active at the same time. Used if control slots are disabled MAXPETOWNERS=5 // Maximum number of different owners a pet can have over its lifetime before it becomes impossible to retame Added new NPC property and NPC DFN tag that keeps track of how many pet control slots an NPC would take up if owned by a player: UI08 controlSlots // source property CONTROLSLOTS=# // DFN tag Added new Character JS properties: .ownerCount // Get the total number of owners a pet/hireling has had, based on NPC's petOwnerList .controlSlots // Get/Set number of pet control slots an NPC will occupy .controlSlotsUsed // Get/Set the number of control slots used by a player Updated get (js/commands/targeting/get.js) and set (js/commands/targeting/set.js) commands to support getting/setting the following character properties: deaths ownerCount (read only) controlSlots controlSlotsUsed Updated NPC DFNs with default CONTROLSLOT=# tags Increased the max distance from player that onSpeech JS event will trigger from 7 to 12 Updated how "all attack" and "all follow" commands for pets are handled. Now loops through all pets owned by character and executes command for each eligible pet Fixed an issue where NPCs could follow characters in different worlds/instances than them selves Updated default max amount of items that can be sold to NPC vendors from 5 to 250 Guards can no longer train players in skills Updated equipment itemlists (dfndata/items/itemlists/itemlists.dfn) with blank entries to introduce some more variety in the type of clothes NPCs wear in general Added new NPCs to DFNs (dfndata/npc/undead.dfn) and added them to undead npclist: [skeletalmage] // variation of [bonemage] [skeletalknight] // variation of [boneknight] Updated Titles (dfndata/titles/titles.dfn) with up-to-date titles for skills around Pub 15, and added titles for skills added after that. Also added "Elder" and "Legendary" titles for 110 and 120 skillpoints Updated EQUIPITEM tag in newbie.dfn (dfndata/newbie/newbie.dfn) to support an optional hue parameter (EQUIPITEM=id,hue) Updated starting equipment for new characters (dfndata/newbie/newbie.dfn), with commented out practice weapons. Uncomment to use Added item definitions for practice weapons (dfndata/items/gear/weapons/practice_weapons.dfn): practice_skinning_knife practice_hatchet practice_axe practice_mace practice_longsword practice_spear practice_bow practice_club practice_crook practice_gnarled_staff Updated mount statues DFN (dfndata/items/misc/mount-statues.dfn) and JS (js/npc/pets/*.js) files to include pet control slot related stuff Pets now inherit the karma of their owners, but revert to their original karma upon release Pets and hirelings will no longer follow the ghosts of their dead owners, but stay to guard their corpse Added optional 9th parameter for JS Function CreateDFNItem to specify a color for item created. This comes before the other optional parameters - worldNumber and instanceID (which are only used if character is NULL): CreateDFNItem( mSock, mChar, sectionName, inPack, iAmount, itemType, iColor, worldNumber, instanceID ) Added ID of Giant Beetle to various pack animal checks Pack animals will now drop any newbie/blessed items stored in their packs upon death Added new NPC properties to track pet loyalty, and exposed these as Character JS properties, and NPC DFN tags: JS Properties .maxLoyalty // Defaults to 100 .loyalty // Starts at 25 DFN Tags MAXLOYALTY=# // Defaults to 100 LOYALTY=# // Starts at 25 Updated TriggerEvent JS function to support return values (int, bool, string, object) from called script Updated various JS scripts to make use of new TriggerEvent functionality and reduce reliance on custom tags: js/item/archerybutte.js js/item/trainingdummy.js js/server/data/combatanims.js js/server/data/weapontypes.js Updated archerybutte script to use dictionary for system and text messages Updated archerybutte script to support increased range, distance penalty and dex/str bonuses when calculating score Added new UOX.INI settings under [pets and hirelings] section related to pet control and loyalty: CHECKPETCONTROLDIFFICULTY=1 // Enable/Disable pet control difficulty system PETLOYALTYGAINONSUCCESS=1 // Amount of pet loyalty gained on successful pet command use PETLOYALTYLOSSONFAILURE=3 // Amount of pet loyalty lost on failed pet command use PETLOYALTYRATE=900 // Amount of seconds between each time pet loyalty is automatically reduced by 1. Takes 25 hours to deplete completely from max Added new persistent NPC property that keeps track of the difficulty of taming and controlling a pet, and exposed it as a Character JS property: .orneriness Every time a tamed pet is released or goes wild, its "orneriness" increases, making it more difficult for other players to tame, and more difficult for anyone to control. Updated CBasePetResponse::canControlPet() function to use pet control difficulty system if enabled, which checks player's animal taming/animal lore skill vs a pet's "orneriness" to determine chance of pet accepting a given pet command On successful use of pet command, increases pet loyalty by value defined in PETLOYALTYGAINONSUCCESS ini setting On failed use of pet command, decreases pet loyalty by value defined in PETLOYALTYLOSSONFAILURE ini setting Added new Character JS Method to calculate chance of a player successfully controlling the pet: .CalculateControlChance( mChar ) // Returns value between 0 and 1000 indicating chance of success Feeding a pet will now restore its loyalty to maximum Pets will now lose loyalty on hunger checks when at maximum hunger Pets that are maximum hungry will now only have a chance to go wild if loyalty has dropped to zero Added new DFN tag for creatures.dfn - TYPE - which contains a string describing the type of creature Added secure pet trading. Players who trade pets will now see a pet transfer deed appear in a secure trade window with the name and type of creature, and upon completion of the trade the associated pet will be instantly transferred to the other player Updated resource JS scripts (js/server/resource/*) to use dictionaries for all system messages Updated skill JS scripts (js/skill/*) to use dictionaries for all system messages Updated housing JS scripts (js/server/house/*) to use dictionaries for all system messages Updated item JS scripts (js/item/*) to use dictionaries for all system messages Updated magic JS scripts (js/magic/*) to use dictionaries for all system messages Updated NPC AI JS scripts (js/npc/ai/*) to use dictionaries for all system messages Updated command JS scripts (js/commands/*) to use dictionaries for all system messages, gump tooltips, etc Updated code to use dictionaries for all system messages Fixed incorrect spelling for UOX.INI setting HIDEW(H)ILEMOUNTED and updated hiding skill (js/skill/hiding.js) to actually allow/disallow hiding while mounted based on this setting Added new Character JS Method to make it easier to make one NPC initiate combat with another: .InitiateCombat( targetChar ) // Character attempts to initiate combat with target character Updated parrying portion of combat code to be in line with Pub15/pre-AoS parrying mechanics. High AR shields now absorb more damage on a successful parry, while low AR shields have a higher chance of parrying. Shields are also now more effective against archery attacks (full absorption potential) than melee attacks (half absorption potential). Updated combat damage calculations to be in line with Pub15/pre-AoS damage calculations Adjusted default value of COMBATNPCDAMAGERATE ini setting (damage divisor when target is a player) from 2 to 1 to account for these changes. Removed dictionary.UNK, and made dictionary.ZRO the default dictionary used for all unsupported languages Added dictionary support for additional languages: Portuguese, Italian, Czech Updated default dictionaries for the following languages: English, French Added default dictionaries for the following languages: German, Spanish, Portuguese, Italian, Czech (note that translations have been provided by automatic services and will contain inaccuracies!) Added new UOX.INI setting to allow specifying a default dictionary language for server, which if set will force that language for all dictionary messages, regardless of client settings: SERVERLANGUAGE=0 // Set default server dictionary language. Supported languages: 0 - None/language used by each client, 1 - English, 2 - German, 3 - Spanish, 5 - French, 6 - Portuguese, 7 - Italian, 8 - Czech Added new function in combat.cpp - AdjustArmorClassDamage() - which adjusts the damage dealt in combat based on whether armour class (AC DFN tag or .ac JS property) of weapon and armour equipped on hit location of target match up. A weapon with armour class 1 would essentially be doubly effective against armour of armour class 1. Allows setting up things like piercing weapons being better against some armor types than mace weapons, etc. Added new UOX.INI setting under [combat] to enable/disable double damage from armour class bonuses: ARMORCLASSDAMAGEBONUS=0/1 //defaults to 0)
2021-07-28 16:02:56 +08:00
tString = JS_NewStringCopyZ( cx, convertedString.c_str() );
*vp = STRING_TO_JSVAL( tString );
break;
}
Thief Revamp - 0.99.6-RC5 Added script for NPC guildmasters (js/npc/ai/guildmaster.js). Only one NPC guild has been setup in the script so far (more can be easily added) - the Thieves Guild - which if joined grants players the ability to steal from other players and to buy disguise kits Added two new NPCs, which there will now spawn one of in a random location in each city in Britannia (felucca facet): m_thief_guildmaster (dfndata/npc/male_human.dfn) f_thief_guildmaster (dfndata/npc/female_Human.dfn) Added two new character properties to keep track of which NPC guild a player (or NPC) belongs to. These properties have been exposed as the following Character JS properties: .npcGuild // ID of NPC guild, as defined in script .npcGuildJoined // Timestamp for when player joined NPC guild Added script for Disguise Kits (js/item/disguisekit.js). These allow members of the Thieves Guild to disguise themselves from the prying eyes of other players. Added two new character properties: .isDisguised // true/false flag for character being disguised .origName // used to store character's original name before disguise went into effect Moved implementation of Stealing skill from code to script (js/skill/stealing.js) and revamped it completely in the process. Changes include: New features: Town rare stealing - any item marked as "special stealable" with new item property .stealable can be stolen, even if it's locked down by a GM on the ground, or inside a container When stealing from item piles, thief can potentially steal the amount of items that makes up the max weight limit for what they can steal, from those piles Chance to successfully steal is now affected by whether there are any characters (NPCs or Players) that witness the attempt. Depends on distance to character, and direction character is facing Players now become "permagrey" when successfully stealing from another player, regardless of whether it's witnessed Players now receive a "stealing" flag when stealing from another player, regardless of whether it's witnessed Stolen items cannot be removed from thief's backpack for 30 seconds following the theft of the item (AoS core shard era and above) Optional AoS feature to steal special consumable items from monsters Updated default stealing rules: Updated calculations to determine chance of success when stealing Players cannot steal while engaged in combat Players are revealed if hidden as soon as they use the stealing skill Players can no longer steal items in the secure trade window Players can no longer steal items from NPC shopkeepers Both hands must be free to steal Stealing now checks line of sight to target player/object Only members of Thieves Guild (NPC guild) can now steal from other players, unless they are guild enemies Players can no longer steal from NPC guards by default Players can no longer steal from the same NPC monster more than once Only gold and gems can be stolen from innocent players in dungeon/ll areas of Felucca, if core shard era is set to AoS or higher Players can no longer steal items held on cursor by other players Orcish masks now eplode if player steals from orcs while wearing it If core shard era is set to LBR or lower, player is marked as an aggressor if they steal from another player Guards can only be called on players that are flagged as criminals within the first 10 seconds of them being flagged Stealing script options: Allow stealing entire containers (off by default pre-AoS) Return stolen items on thief death (off by default) Temporarily make stolen items immovable in thief's backpack (on by default post-AoS) Temporarily protect traded items (on by default) Let dexterity affect chance for successful theft (off by default) Let light level affect chance for successful theft (off by default) Allow stealing from NPC Guards (off by default) Allow stealing special loot from monsters (on by default post-ml) Moved implementation of Snooping skill from code to script (js/skill/snooping.js), with some changes: Players cannot snoop pack animals from inside a house, if the animal is outside The deeper inside main backpack a container sits, the harder it becomes to snoop inside it Included an optional feature that lets targets of snooping gradually become more aware, increasing the difficulty of succeeding. This awareness fades over time. Players have a chance to stay hidden while snooping, based on their Hiding skill Karma is now lowered by snooping regardless of success or failure Added tracking system for "aggressors" in combat. A player attacking someone (regardless of flag status) will be marked as aggressor to that someone for 2 minutes Added tracking system for "permagrey" flags - these are stored on a per-target basis, so a player can be flagged visibly as permagrey to multiple other players. Persists until player dies. Player combat targets and war mode are now cleared on logout Players will now be unable to hide if within visual distance and in line of sight of their attacker or current target in combat Server leave-announcement now only happens after the logout timer has expired, instead of the exact moment the player presses the logout button Fixed an issue that could cause swimming NPCs to swim on land NPCs now have the ability to temporarily ignore unreachable targets in combat. If attacked by someone they are ignoring, they will enter evade state and try to move away from that someone. SpawnRegions now support NPCLISTS with weighted entries. Example of an NPCLIST with 75% chance of spawning some kind of orc, and 25% chance of spawning a ratman archer: [NPCLIST example] { 75|NPCLIST=allorc 25|ratman } Added 3 additional "all purpose" item properties (.more0, .more1 and .more2) and exposed those to JS engine. These work the same as more/morex/morey/morez Mark spell now stores a 4th property on recall runes - instanceID. This is stored in the rune's .more0 property. Recall and Gate spells now check the recall rune (or runebook)'s 4th location property - instanceID - to determine where the player ends up Fixed a server crash related to equipment being automatically unequipped if character is no longer strong enough to have it equipped Added new JS Function to check if any characters at specified location potentially block movement: DoesCharacterBlock( x, y, z, worldNum, instanceID ) // returns true if a character exists at given coordinate (within z +/- 4)
2023-06-20 02:21:16 +08:00
case CCP_ORIGNAME:
{
2023-07-08 14:25:04 -04:00
[[maybe_unused]] CSocket *tSock = nullptr;
Thief Revamp - 0.99.6-RC5 Added script for NPC guildmasters (js/npc/ai/guildmaster.js). Only one NPC guild has been setup in the script so far (more can be easily added) - the Thieves Guild - which if joined grants players the ability to steal from other players and to buy disguise kits Added two new NPCs, which there will now spawn one of in a random location in each city in Britannia (felucca facet): m_thief_guildmaster (dfndata/npc/male_human.dfn) f_thief_guildmaster (dfndata/npc/female_Human.dfn) Added two new character properties to keep track of which NPC guild a player (or NPC) belongs to. These properties have been exposed as the following Character JS properties: .npcGuild // ID of NPC guild, as defined in script .npcGuildJoined // Timestamp for when player joined NPC guild Added script for Disguise Kits (js/item/disguisekit.js). These allow members of the Thieves Guild to disguise themselves from the prying eyes of other players. Added two new character properties: .isDisguised // true/false flag for character being disguised .origName // used to store character's original name before disguise went into effect Moved implementation of Stealing skill from code to script (js/skill/stealing.js) and revamped it completely in the process. Changes include: New features: Town rare stealing - any item marked as "special stealable" with new item property .stealable can be stolen, even if it's locked down by a GM on the ground, or inside a container When stealing from item piles, thief can potentially steal the amount of items that makes up the max weight limit for what they can steal, from those piles Chance to successfully steal is now affected by whether there are any characters (NPCs or Players) that witness the attempt. Depends on distance to character, and direction character is facing Players now become "permagrey" when successfully stealing from another player, regardless of whether it's witnessed Players now receive a "stealing" flag when stealing from another player, regardless of whether it's witnessed Stolen items cannot be removed from thief's backpack for 30 seconds following the theft of the item (AoS core shard era and above) Optional AoS feature to steal special consumable items from monsters Updated default stealing rules: Updated calculations to determine chance of success when stealing Players cannot steal while engaged in combat Players are revealed if hidden as soon as they use the stealing skill Players can no longer steal items in the secure trade window Players can no longer steal items from NPC shopkeepers Both hands must be free to steal Stealing now checks line of sight to target player/object Only members of Thieves Guild (NPC guild) can now steal from other players, unless they are guild enemies Players can no longer steal from NPC guards by default Players can no longer steal from the same NPC monster more than once Only gold and gems can be stolen from innocent players in dungeon/ll areas of Felucca, if core shard era is set to AoS or higher Players can no longer steal items held on cursor by other players Orcish masks now eplode if player steals from orcs while wearing it If core shard era is set to LBR or lower, player is marked as an aggressor if they steal from another player Guards can only be called on players that are flagged as criminals within the first 10 seconds of them being flagged Stealing script options: Allow stealing entire containers (off by default pre-AoS) Return stolen items on thief death (off by default) Temporarily make stolen items immovable in thief's backpack (on by default post-AoS) Temporarily protect traded items (on by default) Let dexterity affect chance for successful theft (off by default) Let light level affect chance for successful theft (off by default) Allow stealing from NPC Guards (off by default) Allow stealing special loot from monsters (on by default post-ml) Moved implementation of Snooping skill from code to script (js/skill/snooping.js), with some changes: Players cannot snoop pack animals from inside a house, if the animal is outside The deeper inside main backpack a container sits, the harder it becomes to snoop inside it Included an optional feature that lets targets of snooping gradually become more aware, increasing the difficulty of succeeding. This awareness fades over time. Players have a chance to stay hidden while snooping, based on their Hiding skill Karma is now lowered by snooping regardless of success or failure Added tracking system for "aggressors" in combat. A player attacking someone (regardless of flag status) will be marked as aggressor to that someone for 2 minutes Added tracking system for "permagrey" flags - these are stored on a per-target basis, so a player can be flagged visibly as permagrey to multiple other players. Persists until player dies. Player combat targets and war mode are now cleared on logout Players will now be unable to hide if within visual distance and in line of sight of their attacker or current target in combat Server leave-announcement now only happens after the logout timer has expired, instead of the exact moment the player presses the logout button Fixed an issue that could cause swimming NPCs to swim on land NPCs now have the ability to temporarily ignore unreachable targets in combat. If attacked by someone they are ignoring, they will enter evade state and try to move away from that someone. SpawnRegions now support NPCLISTS with weighted entries. Example of an NPCLIST with 75% chance of spawning some kind of orc, and 25% chance of spawning a ratman archer: [NPCLIST example] { 75|NPCLIST=allorc 25|ratman } Added 3 additional "all purpose" item properties (.more0, .more1 and .more2) and exposed those to JS engine. These work the same as more/morex/morey/morez Mark spell now stores a 4th property on recall runes - instanceID. This is stored in the rune's .more0 property. Recall and Gate spells now check the recall rune (or runebook)'s 4th location property - instanceID - to determine where the player ends up Fixed a server crash related to equipment being automatically unequipped if character is no longer strong enough to have it equipped Added new JS Function to check if any characters at specified location potentially block movement: DoesCharacterBlock( x, y, z, worldNum, instanceID ) // returns true if a character exists at given coordinate (within z +/- 4)
2023-06-20 02:21:16 +08:00
std::string mCharName = gPriv->GetOrgName();
std::string convertedString = oldstrutil::stringToWstringToString( mCharName );
tString = JS_NewStringCopyZ( cx, convertedString.c_str() );
*vp = STRING_TO_JSVAL( tString );
break;
}
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
case CCP_TITLE:
tString = JS_NewStringCopyZ( cx, gPriv->GetTitle().c_str() );
*vp = STRING_TO_JSVAL( tString );
break;
case CCP_SECTIONID:
tString = JS_NewStringCopyZ( cx, gPriv->GetSectionId().c_str() );
*vp = STRING_TO_JSVAL( tString );
break;
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
case CCP_X: *vp = INT_TO_JSVAL( gPriv->GetX() ); break;
case CCP_Y: *vp = INT_TO_JSVAL( gPriv->GetY() ); break;
case CCP_Z: *vp = INT_TO_JSVAL( gPriv->GetZ() ); break;
0.99.4e Added support for packet 0xE2 (New Character Animation, used to play animations in client v7.0.0.0+) via cEffects::PlayNewCharacterAnimation( CChar *mChar, UI16 actionID, UI16 subActionID, UI08 subSubActionID ) Added support for new animation packet in JS Character method DoAction() using a second parameter that specifies animation variation, which if present forces server to send new animation packet instead of old. This means the 'action/npcaction commands can now be used to play animations on gargoyles/humans in client v7.0.0.0+ using the following syntax: 'action [action subAction] Created new enums for character actions and sub-actions, and updated code to refer to these instead of using "magic" numbers Added new options in UOX.INI under [settings] section: FORCENEWANIMATIONPACKET=0/1 // If enabled (default), forces the use of the new animation packet for playing various character animations for both NPCs in general and for player characters connected with client v7.0.0.0+ Updated various actions performed by players and NPCs to use new animation packet (combat, spellcasting, mining) if connected with client v7.0.0.0+ and ini setting to force new animation packet is enabled Added basic support for gargoyle flying ability. Can now use flying ability itself to enter/exit flying state, and the state change will also get sent to nearby players. Flying players are treated the same way as mounted players; polymorph spells will auto-dismounts mounted/flying player, same rules for stealth applies to flying as riding, etc. Exposed Character property to JS engine: .isFlying // returns true if character is flying Moved Orc and Ratman races from RACE 1 and 2 to RACE 22 and 23 in dfndata/race/races.dfn to make room for two new player races, that are applied to new player characters during character creation: [RACE 1] - Elf [RACE 2] - Gargoyle Updated orcs and ratmen in dfndata/npc/humanoids.dfn with race IDs 22 and 23 respectively Added items in dfndata/items/skills/tools/cooking.dfn to item menu under Skills > Tools > Cooking Fixed an issue where moving items around within a container at max item capacity was not allowed The GM command 'set can now modify a character's current mana using 'set mana # Added JS command to get specific object property values (using same property names as 'set command): 'get [objectProperty] Exposed Item/Character properties to JS: .oldX // Previous X coordinate for object .oldY // Previous Y coordinate for object .oldZ // Previous Z coordinate for object Exposed Character properties to JS: .mana // Character's current amount of mana Updated version of Winsock requested by UOX3 from 2.0 to 2.2 Exposed timer for updating NPC flags to [timers] section of UOX.INI: NPCFLAGUPDATETIMER=5 // Interval in seconds between each time NPC flags are updated. Default adjusted down from 30 to 5 seconds Fixed an issue where UOX3 was trying to output some debug/warning messages to console using the wrong console method Made some small tweaks to NPC pathfinding to make NPCs more likely to pick a new target location when their old one is blocked Added HP DFN tag to guard NPCs to prevent them from spawning with half health Removed -lstdc++fs from Makefile and replaced with special instructions for users of gcc below v9.x Fixed a buffer overrun issue with tiledata item names Eliminated a bunch of compilation warnings in VS2017 Updated JS Method CreateDFNItem to allow creating items without referencing a socket/character. Syntax: var myItem = CreateDFNItem( null, null, itemSectionID, amount, "ITEM", false, worldNumber, instanceID ); Added functional chessboard that operates on standard chess rules. Pieces cannot be removed from the board, snap to the chessboard grid when dropped, are subject to movement restrictions per chesspiece, will capture opponent pieces if landing on their square. Board can be reset by dragging king-piece off to the side of the board (js/item/gameboards.js and js/item/chesspiece.js) Added functional checkerboard, with pieces that cannot be removed, can only move in diagonals, can jump across opponent pieces to capture them. Board can be reset by ??? (js/item/gameboards.js and js/item/checkerpiece.js) Using the 'go command without any additional parameters will now open the GM travel menu (js/commands/go.js)
2021-04-08 18:54:15 +08:00
case CCP_OLDX:
{
auto oldLocation = gPriv->GetOldLocation();
*vp = INT_TO_JSVAL( oldLocation.x );
break;
}
case CCP_OLDY:
{
auto oldLocation = gPriv->GetOldLocation();
*vp = INT_TO_JSVAL( oldLocation.y );
break;
}
case CCP_OLDZ:
{
auto oldLocation = gPriv->GetOldLocation();
*vp = INT_TO_JSVAL( oldLocation.z );
break;
}
case CCP_ID: *vp = INT_TO_JSVAL( gPriv->GetId() ); break;
case CCP_COLOUR: *vp = INT_TO_JSVAL( gPriv->GetColour() ); break;
case CCP_CONTROLSLOTS: *vp = INT_TO_JSVAL( static_cast<UI08>( gPriv->GetControlSlots() )); break;
case CCP_CONTROLSLOTSUSED: *vp = INT_TO_JSVAL( static_cast<UI08>( gPriv->GetControlSlotsUsed() )); break;
case CCP_ORNERINESS: *vp = INT_TO_JSVAL( gPriv->GetOrneriness() ); break;
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
case CCP_OWNER:
CBaseObject *TempObj;
TempObj = gPriv->GetOwnerObj();
if( !ValidateObject( TempObj ))
{
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
*vp = JSVAL_NULL;
}
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
else
{
// Otherwise Acquire an object
JSObject *myChar = JSEngine->AcquireObject( IUE_CHAR, TempObj, JSEngine->FindActiveRuntime( JS_GetRuntime( cx )));
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
*vp = OBJECT_TO_JSVAL( myChar );
}
break;
case CCP_VISIBLE: *vp = INT_TO_JSVAL( static_cast<UI08>( gPriv->GetVisible() )); break;
Exposed various map and statics related functions to JS engine Updated JS item properties MORE, MOREX, MOREY, MOREZ and SERIAL, and character property SERIAL, to pass values to JS scripts using JS_NewNumberValue() instead of INT_TO_JSVAL if the property value cannot fit inside JSVAL (checked with INT_FITS_IN_JSVAL) Added support in CResponse.cpp for client trigger word for securing containers in houses - TW_HOUSESECURE Updated CMulHandler::CheckStaticFlag() to match with statics that cover/extend across the specified Z coordinate, not just ones that have the same base Z level Updated CMulHandler::DoesMapBlock() to not deem map tiles as blocking if they are more than 16 Z (height of a character) higher than the specified Z coordinate to check Exposed method for finding corners of a multi to JS engine: .GetMultiCorner( cornerID ) - Gets coordinates for specified corner of multi (0 = NW, 1 = NE, 2 = SW, 3 = SE) Exposed various functions related to map, statics and multis to JS engine: CalcMultiFromSer( serial ) - Find a multi from a provided serial GetMapElevation( x, y, z, world) - Returns the map elevation at specified coordinates IsInBuilding( x, y, z, world, instance, checkHeight ) - Returns true if the specified location is inside a static building (underneath static items), or if player is inside a multi. If the checkHeight argument is true, player is only deemed inside a multi if there are multi-items above the player's head. If player is in a courtyard/on a rooftop, they will be deemed to be NOT in the building. checkHeight is not used for the static part of the function. CheckStaticFlag( x, y, z, world, tileFlagID ) - Checks to see if any statics at given coordinates has specified tile flag DoesStaticBlock( x, y, z, world, checkWater ) - Checks if statics at/above given location blocks characters DoesDynamicBlock( x, y, z, world, instance, checkWater, waterWalk ) - Checks if dynamics at/above given location blocks characters DoesMapBlock( x, y, z, world, checkWater, waterWalk ) - Checks if map tile at/above given location blocks characters
2020-10-05 23:12:34 +08:00
case CCP_SERIAL:
{
2025-03-28 13:12:02 +10:00
JS_NewNumberValue( cx, gPriv->GetSerial(), vp );
Exposed various map and statics related functions to JS engine Updated JS item properties MORE, MOREX, MOREY, MOREZ and SERIAL, and character property SERIAL, to pass values to JS scripts using JS_NewNumberValue() instead of INT_TO_JSVAL if the property value cannot fit inside JSVAL (checked with INT_FITS_IN_JSVAL) Added support in CResponse.cpp for client trigger word for securing containers in houses - TW_HOUSESECURE Updated CMulHandler::CheckStaticFlag() to match with statics that cover/extend across the specified Z coordinate, not just ones that have the same base Z level Updated CMulHandler::DoesMapBlock() to not deem map tiles as blocking if they are more than 16 Z (height of a character) higher than the specified Z coordinate to check Exposed method for finding corners of a multi to JS engine: .GetMultiCorner( cornerID ) - Gets coordinates for specified corner of multi (0 = NW, 1 = NE, 2 = SW, 3 = SE) Exposed various functions related to map, statics and multis to JS engine: CalcMultiFromSer( serial ) - Find a multi from a provided serial GetMapElevation( x, y, z, world) - Returns the map elevation at specified coordinates IsInBuilding( x, y, z, world, instance, checkHeight ) - Returns true if the specified location is inside a static building (underneath static items), or if player is inside a multi. If the checkHeight argument is true, player is only deemed inside a multi if there are multi-items above the player's head. If player is in a courtyard/on a rooftop, they will be deemed to be NOT in the building. checkHeight is not used for the static part of the function. CheckStaticFlag( x, y, z, world, tileFlagID ) - Checks to see if any statics at given coordinates has specified tile flag DoesStaticBlock( x, y, z, world, checkWater ) - Checks if statics at/above given location blocks characters DoesDynamicBlock( x, y, z, world, instance, checkWater, waterWalk ) - Checks if dynamics at/above given location blocks characters DoesMapBlock( x, y, z, world, checkWater, waterWalk ) - Checks if map tile at/above given location blocks characters
2020-10-05 23:12:34 +08:00
break;
}
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
case CCP_HEALTH: *vp = INT_TO_JSVAL( gPriv->GetHP() ); break;
Minor JS revamp - multiple scripts per object! Added TryParseJSVal() helper function in cScript.cpp, used to parse jsval values returned from script events. Provides results matching 0 (0, false), 1 (1, true) or any specific int value returned from script. JS events updated to use new TryParseJSVal helper function (no change in behaviour): onDecay, onResurrect, onCommand, onBuyFromVendor, onSellToVendor, onPickup, onCharDoubleClick, onSkillGump, onUseBandageMacro, onCombatStart, onCombatEnd, onDeathBlow, onBuy, onSell JS events with slight change of behaviour after update to use TryParseJSVal: onDrop, onDropItemOnItem, onDropItemOnNpc - previously, a blank or non-existent return value would be treated the same as a return true. This will now be treated as a return false. Update scripts accordingly! JS events updated to support return values from scripts: onCollide, onTalk, onSnooped, OnHungerChange Return false or nothing to prevent hard code from running Return true to allow hard code to run like normal onStolenFrom, onAISliver, onLightChange, onVirtueGumpPress, onQuestGump, onSpecialMove, onSwing, onClick, onHouseCommand, onSellToVendor, onSkillCheck, onSpellGain, onSpellLoss Return false to allow hard code and other scripts with event to run like normal Return true to prevent hard code and other scripts with event from running onSteal Return false or nothing to allow hard code and other scripts with event to run like normal Return true to prevent hard code and onStolenFrom event from running (theft failed?) Return 2 to prevent hard code, but allow onStolenFrom event to run (theft succeeded, but handled in script?) onLeaving, onEntrance, onEquip, onUnequip, onEnterEvadeState, onSoldToVendor, onBoughtFromVendor, onSpellSuccess, onSpellTarget, onFlagChange, onDeath Return false or nothing to allow other scripts with event to run like normal Return true to prevent other scripts with event from running Added new JS events that run prior to items being equipped/unequipped, with support for return values: onEquipAttempt( pEquipper, iEquipping ) onUnequipAttempt( pEquipper, iUnequipping ) Return false or nothing to reject attempt to equip/unequip item, and prevent hard-code or other scripts with event from running Return true to allow hard code to run like normal Added new JS event that runs prior to onSnooped event, for character doing the snooping: onSnoopAttempt( snooped, snooper ) Return false or nothing to prevent hard code and other snooping-related events from running Return true to allow hard code and other snooping-related events to run like normal Updated onSnooped JS event to accept return values: Return true when success state is true to prevent other scripts with event from running Return true when success state is false to prevent hard code and other scripts with event from running Updated onClick JS event to also run for characters with event attached (return 1 to prevent showing hard-coded name for whatever object is clicked) Updated onSteal JS event to include a third parameter, an object reference for the target of the theft Added support for assigning multiple JS scripts per object (item, multi, char, region). Any time a scriptID is added to an object, the list of such IDs for that object will be sorted from lowest to highest scriptID, which also determines the execution order for the scripts. Note that if the same JS event is present in several scripts assigned to an object, each of those events will trigger, unless the rules about return values for said event prevent this DFNs for Items, Multis, Characters and Regions can now contain multiple SCRIPT=scriptID tags per definition. Each such SCRIPT tag will be applied to the object in question, then sorted from lowest to highest scriptID by server. Added new JS property for Items, Multis, Characters and Regions: .scriptTriggers // If used to get property, will return array object with all script IDs assigned to object. If used to set property, will add script ID to existing list of script IDs for object. Modified JS property for Items, Multis, Characters and Regions, which for backwards compatibility functions similar to in older versions: .scripttrigger // If used to get property, will return last script ID in list of script IDs assigned to object. If used to set property, will clear list of script IDs and assign only the new ID Added new JS Methods for Items, Multis, Characters and Regions: .AddScriptTrigger( scriptID ) // Adds a new scriptID to list of scripts assigned to object .RemoveScriptTrigger( scriptID ) // Remove a specific scriptID from object (0 = remove all) Moved SETSCPTRIG command from code to JS (js/commands/targeting/scptrig.js), and supplemented it with some additional commands: GETSCPTRIG // List out all scriptIDs assigned to object SETSCPTRIG scriptID // Clears list of scriptIDs for object, then assigns the specified scriptID ADDSCPTRIG scriptID // Adds specified scriptID to list of scriptsIDs assigned to object REMOVESCPTRIG scriptID // Removes specified scriptID from list of scriptIDs assigned to object (0 = remove all)
2021-05-25 19:37:52 +08:00
case CCP_SCRIPTTRIGGER:
{
// For backwards compatibility, get last scripttrigger from vector
// For older worldfiles, this will be the only scripttrigger added to the vector after load
std::vector<UI16> scriptTriggers = gPriv->GetScriptTriggers();
UI16 lastScriptTrigger = 0;
auto numberOfTriggers = scriptTriggers.size();
if( numberOfTriggers > 0 )
{
lastScriptTrigger = scriptTriggers[numberOfTriggers-1];
}
*vp = INT_TO_JSVAL( lastScriptTrigger );
break;
}
case CCP_SCRIPTTRIGGERS:
{
jsval scriptId;
JSObject *scriptTriggersJS = JS_NewArrayObject( cx, 0, nullptr );
Minor JS revamp - multiple scripts per object! Added TryParseJSVal() helper function in cScript.cpp, used to parse jsval values returned from script events. Provides results matching 0 (0, false), 1 (1, true) or any specific int value returned from script. JS events updated to use new TryParseJSVal helper function (no change in behaviour): onDecay, onResurrect, onCommand, onBuyFromVendor, onSellToVendor, onPickup, onCharDoubleClick, onSkillGump, onUseBandageMacro, onCombatStart, onCombatEnd, onDeathBlow, onBuy, onSell JS events with slight change of behaviour after update to use TryParseJSVal: onDrop, onDropItemOnItem, onDropItemOnNpc - previously, a blank or non-existent return value would be treated the same as a return true. This will now be treated as a return false. Update scripts accordingly! JS events updated to support return values from scripts: onCollide, onTalk, onSnooped, OnHungerChange Return false or nothing to prevent hard code from running Return true to allow hard code to run like normal onStolenFrom, onAISliver, onLightChange, onVirtueGumpPress, onQuestGump, onSpecialMove, onSwing, onClick, onHouseCommand, onSellToVendor, onSkillCheck, onSpellGain, onSpellLoss Return false to allow hard code and other scripts with event to run like normal Return true to prevent hard code and other scripts with event from running onSteal Return false or nothing to allow hard code and other scripts with event to run like normal Return true to prevent hard code and onStolenFrom event from running (theft failed?) Return 2 to prevent hard code, but allow onStolenFrom event to run (theft succeeded, but handled in script?) onLeaving, onEntrance, onEquip, onUnequip, onEnterEvadeState, onSoldToVendor, onBoughtFromVendor, onSpellSuccess, onSpellTarget, onFlagChange, onDeath Return false or nothing to allow other scripts with event to run like normal Return true to prevent other scripts with event from running Added new JS events that run prior to items being equipped/unequipped, with support for return values: onEquipAttempt( pEquipper, iEquipping ) onUnequipAttempt( pEquipper, iUnequipping ) Return false or nothing to reject attempt to equip/unequip item, and prevent hard-code or other scripts with event from running Return true to allow hard code to run like normal Added new JS event that runs prior to onSnooped event, for character doing the snooping: onSnoopAttempt( snooped, snooper ) Return false or nothing to prevent hard code and other snooping-related events from running Return true to allow hard code and other snooping-related events to run like normal Updated onSnooped JS event to accept return values: Return true when success state is true to prevent other scripts with event from running Return true when success state is false to prevent hard code and other scripts with event from running Updated onClick JS event to also run for characters with event attached (return 1 to prevent showing hard-coded name for whatever object is clicked) Updated onSteal JS event to include a third parameter, an object reference for the target of the theft Added support for assigning multiple JS scripts per object (item, multi, char, region). Any time a scriptID is added to an object, the list of such IDs for that object will be sorted from lowest to highest scriptID, which also determines the execution order for the scripts. Note that if the same JS event is present in several scripts assigned to an object, each of those events will trigger, unless the rules about return values for said event prevent this DFNs for Items, Multis, Characters and Regions can now contain multiple SCRIPT=scriptID tags per definition. Each such SCRIPT tag will be applied to the object in question, then sorted from lowest to highest scriptID by server. Added new JS property for Items, Multis, Characters and Regions: .scriptTriggers // If used to get property, will return array object with all script IDs assigned to object. If used to set property, will add script ID to existing list of script IDs for object. Modified JS property for Items, Multis, Characters and Regions, which for backwards compatibility functions similar to in older versions: .scripttrigger // If used to get property, will return last script ID in list of script IDs assigned to object. If used to set property, will clear list of script IDs and assign only the new ID Added new JS Methods for Items, Multis, Characters and Regions: .AddScriptTrigger( scriptID ) // Adds a new scriptID to list of scripts assigned to object .RemoveScriptTrigger( scriptID ) // Remove a specific scriptID from object (0 = remove all) Moved SETSCPTRIG command from code to JS (js/commands/targeting/scptrig.js), and supplemented it with some additional commands: GETSCPTRIG // List out all scriptIDs assigned to object SETSCPTRIG scriptID // Clears list of scriptIDs for object, then assigns the specified scriptID ADDSCPTRIG scriptID // Adds specified scriptID to list of scriptsIDs assigned to object REMOVESCPTRIG scriptID // Removes specified scriptID from list of scriptIDs assigned to object (0 = remove all)
2021-05-25 19:37:52 +08:00
std::vector<UI16> scriptTriggers = gPriv->GetScriptTriggers();
for( auto i = 0; i < static_cast<int>( scriptTriggers.size() ); i++ )
Minor JS revamp - multiple scripts per object! Added TryParseJSVal() helper function in cScript.cpp, used to parse jsval values returned from script events. Provides results matching 0 (0, false), 1 (1, true) or any specific int value returned from script. JS events updated to use new TryParseJSVal helper function (no change in behaviour): onDecay, onResurrect, onCommand, onBuyFromVendor, onSellToVendor, onPickup, onCharDoubleClick, onSkillGump, onUseBandageMacro, onCombatStart, onCombatEnd, onDeathBlow, onBuy, onSell JS events with slight change of behaviour after update to use TryParseJSVal: onDrop, onDropItemOnItem, onDropItemOnNpc - previously, a blank or non-existent return value would be treated the same as a return true. This will now be treated as a return false. Update scripts accordingly! JS events updated to support return values from scripts: onCollide, onTalk, onSnooped, OnHungerChange Return false or nothing to prevent hard code from running Return true to allow hard code to run like normal onStolenFrom, onAISliver, onLightChange, onVirtueGumpPress, onQuestGump, onSpecialMove, onSwing, onClick, onHouseCommand, onSellToVendor, onSkillCheck, onSpellGain, onSpellLoss Return false to allow hard code and other scripts with event to run like normal Return true to prevent hard code and other scripts with event from running onSteal Return false or nothing to allow hard code and other scripts with event to run like normal Return true to prevent hard code and onStolenFrom event from running (theft failed?) Return 2 to prevent hard code, but allow onStolenFrom event to run (theft succeeded, but handled in script?) onLeaving, onEntrance, onEquip, onUnequip, onEnterEvadeState, onSoldToVendor, onBoughtFromVendor, onSpellSuccess, onSpellTarget, onFlagChange, onDeath Return false or nothing to allow other scripts with event to run like normal Return true to prevent other scripts with event from running Added new JS events that run prior to items being equipped/unequipped, with support for return values: onEquipAttempt( pEquipper, iEquipping ) onUnequipAttempt( pEquipper, iUnequipping ) Return false or nothing to reject attempt to equip/unequip item, and prevent hard-code or other scripts with event from running Return true to allow hard code to run like normal Added new JS event that runs prior to onSnooped event, for character doing the snooping: onSnoopAttempt( snooped, snooper ) Return false or nothing to prevent hard code and other snooping-related events from running Return true to allow hard code and other snooping-related events to run like normal Updated onSnooped JS event to accept return values: Return true when success state is true to prevent other scripts with event from running Return true when success state is false to prevent hard code and other scripts with event from running Updated onClick JS event to also run for characters with event attached (return 1 to prevent showing hard-coded name for whatever object is clicked) Updated onSteal JS event to include a third parameter, an object reference for the target of the theft Added support for assigning multiple JS scripts per object (item, multi, char, region). Any time a scriptID is added to an object, the list of such IDs for that object will be sorted from lowest to highest scriptID, which also determines the execution order for the scripts. Note that if the same JS event is present in several scripts assigned to an object, each of those events will trigger, unless the rules about return values for said event prevent this DFNs for Items, Multis, Characters and Regions can now contain multiple SCRIPT=scriptID tags per definition. Each such SCRIPT tag will be applied to the object in question, then sorted from lowest to highest scriptID by server. Added new JS property for Items, Multis, Characters and Regions: .scriptTriggers // If used to get property, will return array object with all script IDs assigned to object. If used to set property, will add script ID to existing list of script IDs for object. Modified JS property for Items, Multis, Characters and Regions, which for backwards compatibility functions similar to in older versions: .scripttrigger // If used to get property, will return last script ID in list of script IDs assigned to object. If used to set property, will clear list of script IDs and assign only the new ID Added new JS Methods for Items, Multis, Characters and Regions: .AddScriptTrigger( scriptID ) // Adds a new scriptID to list of scripts assigned to object .RemoveScriptTrigger( scriptID ) // Remove a specific scriptID from object (0 = remove all) Moved SETSCPTRIG command from code to JS (js/commands/targeting/scptrig.js), and supplemented it with some additional commands: GETSCPTRIG // List out all scriptIDs assigned to object SETSCPTRIG scriptID // Clears list of scriptIDs for object, then assigns the specified scriptID ADDSCPTRIG scriptID // Adds specified scriptID to list of scriptsIDs assigned to object REMOVESCPTRIG scriptID // Removes specified scriptID from list of scriptIDs assigned to object (0 = remove all)
2021-05-25 19:37:52 +08:00
{
scriptId = INT_TO_JSVAL( scriptTriggers[i] );
JS_SetElement( cx, scriptTriggersJS, i, &scriptId );
Minor JS revamp - multiple scripts per object! Added TryParseJSVal() helper function in cScript.cpp, used to parse jsval values returned from script events. Provides results matching 0 (0, false), 1 (1, true) or any specific int value returned from script. JS events updated to use new TryParseJSVal helper function (no change in behaviour): onDecay, onResurrect, onCommand, onBuyFromVendor, onSellToVendor, onPickup, onCharDoubleClick, onSkillGump, onUseBandageMacro, onCombatStart, onCombatEnd, onDeathBlow, onBuy, onSell JS events with slight change of behaviour after update to use TryParseJSVal: onDrop, onDropItemOnItem, onDropItemOnNpc - previously, a blank or non-existent return value would be treated the same as a return true. This will now be treated as a return false. Update scripts accordingly! JS events updated to support return values from scripts: onCollide, onTalk, onSnooped, OnHungerChange Return false or nothing to prevent hard code from running Return true to allow hard code to run like normal onStolenFrom, onAISliver, onLightChange, onVirtueGumpPress, onQuestGump, onSpecialMove, onSwing, onClick, onHouseCommand, onSellToVendor, onSkillCheck, onSpellGain, onSpellLoss Return false to allow hard code and other scripts with event to run like normal Return true to prevent hard code and other scripts with event from running onSteal Return false or nothing to allow hard code and other scripts with event to run like normal Return true to prevent hard code and onStolenFrom event from running (theft failed?) Return 2 to prevent hard code, but allow onStolenFrom event to run (theft succeeded, but handled in script?) onLeaving, onEntrance, onEquip, onUnequip, onEnterEvadeState, onSoldToVendor, onBoughtFromVendor, onSpellSuccess, onSpellTarget, onFlagChange, onDeath Return false or nothing to allow other scripts with event to run like normal Return true to prevent other scripts with event from running Added new JS events that run prior to items being equipped/unequipped, with support for return values: onEquipAttempt( pEquipper, iEquipping ) onUnequipAttempt( pEquipper, iUnequipping ) Return false or nothing to reject attempt to equip/unequip item, and prevent hard-code or other scripts with event from running Return true to allow hard code to run like normal Added new JS event that runs prior to onSnooped event, for character doing the snooping: onSnoopAttempt( snooped, snooper ) Return false or nothing to prevent hard code and other snooping-related events from running Return true to allow hard code and other snooping-related events to run like normal Updated onSnooped JS event to accept return values: Return true when success state is true to prevent other scripts with event from running Return true when success state is false to prevent hard code and other scripts with event from running Updated onClick JS event to also run for characters with event attached (return 1 to prevent showing hard-coded name for whatever object is clicked) Updated onSteal JS event to include a third parameter, an object reference for the target of the theft Added support for assigning multiple JS scripts per object (item, multi, char, region). Any time a scriptID is added to an object, the list of such IDs for that object will be sorted from lowest to highest scriptID, which also determines the execution order for the scripts. Note that if the same JS event is present in several scripts assigned to an object, each of those events will trigger, unless the rules about return values for said event prevent this DFNs for Items, Multis, Characters and Regions can now contain multiple SCRIPT=scriptID tags per definition. Each such SCRIPT tag will be applied to the object in question, then sorted from lowest to highest scriptID by server. Added new JS property for Items, Multis, Characters and Regions: .scriptTriggers // If used to get property, will return array object with all script IDs assigned to object. If used to set property, will add script ID to existing list of script IDs for object. Modified JS property for Items, Multis, Characters and Regions, which for backwards compatibility functions similar to in older versions: .scripttrigger // If used to get property, will return last script ID in list of script IDs assigned to object. If used to set property, will clear list of script IDs and assign only the new ID Added new JS Methods for Items, Multis, Characters and Regions: .AddScriptTrigger( scriptID ) // Adds a new scriptID to list of scripts assigned to object .RemoveScriptTrigger( scriptID ) // Remove a specific scriptID from object (0 = remove all) Moved SETSCPTRIG command from code to JS (js/commands/targeting/scptrig.js), and supplemented it with some additional commands: GETSCPTRIG // List out all scriptIDs assigned to object SETSCPTRIG scriptID // Clears list of scriptIDs for object, then assigns the specified scriptID ADDSCPTRIG scriptID // Adds specified scriptID to list of scriptsIDs assigned to object REMOVESCPTRIG scriptID // Removes specified scriptID from list of scriptIDs assigned to object (0 = remove all)
2021-05-25 19:37:52 +08:00
}
*vp = OBJECT_TO_JSVAL( scriptTriggersJS );
break;
}
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
case CCP_WORLDNUMBER: *vp = INT_TO_JSVAL( gPriv->WorldNumber() ); break;
case CCP_INSTANCEID: *vp = INT_TO_JSVAL( gPriv->GetInstanceId() ); break;
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
case CCP_TARGET:
CChar *tempChar;
tempChar = gPriv->GetTarg();
if( !ValidateObject( tempChar ))
{
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
*vp = JSVAL_NULL;
}
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
else
{
// Otherwise Acquire an object
JSObject *myChar = JSEngine->AcquireObject( IUE_CHAR, tempChar, JSEngine->FindActiveRuntime( JS_GetRuntime( cx )));
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
*vp = OBJECT_TO_JSVAL( myChar );
}
break;
case CCP_DEXTERITY: *vp = INT_TO_JSVAL( gPriv->GetDexterity() ); break;
case CCP_INTELLIGENCE: *vp = INT_TO_JSVAL( gPriv->GetIntelligence() ); break;
case CCP_STRENGTH: *vp = INT_TO_JSVAL( gPriv->GetStrength() ); break;
case CCP_ACTUALDEXTERITY: *vp = INT_TO_JSVAL( gPriv->ActualDexterity() ); break;
case CCP_ACTUALINTELLIGENCE: *vp = INT_TO_JSVAL( gPriv->ActualIntelligence() ); break;
case CCP_ACTUALSTRENGTH: *vp = INT_TO_JSVAL( gPriv->ActualStrength() ); break;
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
case CCP_BASESKILLS:
2021-06-12 07:30:23 -04:00
TempObject = JS_NewObject( cx, &UOXBaseSkills_class, nullptr, obj );
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
JS_DefineProperties( cx, TempObject, CSkillsProps );
JS_SetPrivate( cx, TempObject, gPriv );
*vp = OBJECT_TO_JSVAL( TempObject );
break;
case CCP_SKILLS:
2021-06-12 07:30:23 -04:00
TempObject = JS_NewObject( cx, &UOXSkills_class, nullptr, obj );
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
JS_DefineProperties( cx, TempObject, CSkillsProps );
JS_SetPrivate( cx, TempObject, gPriv );
*vp = OBJECT_TO_JSVAL( TempObject );
break;
case CCP_SKILLUSE:
2021-06-12 07:30:23 -04:00
TempObject = JS_NewObject( cx, &UOXSkillsUsed_class, nullptr, obj );
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
JS_DefineProperties( cx, TempObject, CSkillsProps );
JS_SetPrivate( cx, TempObject, gPriv );
*vp = OBJECT_TO_JSVAL( TempObject );
break;
case CCP_MANA: *vp = INT_TO_JSVAL( gPriv->GetMana() ); break;
case CCP_STAMINA: *vp = INT_TO_JSVAL( gPriv->GetStamina() ); break;
case CCP_CHARPACK:
TempItem = gPriv->GetPackItem();
if( !ValidateObject( TempItem ))
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
*vp = JSVAL_NULL;
else
{
// Otherwise Acquire an object
JSObject *myItem = JSEngine->AcquireObject( IUE_ITEM, TempItem, JSEngine->FindActiveRuntime( JS_GetRuntime( cx )));
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
*vp = OBJECT_TO_JSVAL( myItem );
}
break;
case CCP_FAME: *vp = INT_TO_JSVAL( gPriv->GetFame() ); break;
case CCP_KARMA: *vp = INT_TO_JSVAL( gPriv->GetKarma() ); break;
case CCP_ATTACK: *vp = INT_TO_JSVAL( Combat->CalcAttackPower( gPriv, true )); break;
case CCP_CANATTACK: *vp = BOOLEAN_TO_JSVAL( gPriv->GetCanAttack() ); break;
case CCP_KARMALOCK: *vp = BOOLEAN_TO_JSVAL( gPriv->GetKarmaLock() ); break;
case CCP_FLEEAT: *vp = INT_TO_JSVAL( gPriv->GetFleeAt() ); break;
case CCP_REATTACKAT: *vp = INT_TO_JSVAL( gPriv->GetReattackAt() ); break;
case CCP_BRKPEACE: *vp = INT_TO_JSVAL( gPriv->GetBrkPeaceChance() ); break;
case CCP_HUNGER: *vp = INT_TO_JSVAL( gPriv->GetHunger() ); break;
0.99.4h Exposed a (read-only) JS property for characters to fetch their hunger rate. Uses race's hunger rate if defined, otherwise uses HUNGERRATE form uox.ini: .hungerRate // Seconds between becoming hungrier Updated 'get command to allow retrieving a character's hungerRate property Added some details to console during UOX3 startup about which IPs and Ports UOX3 is listening to Added new JS event that triggers when a player clicks on the Quest button in the paperdoll. Triggers from character script if present, or global script if not: onQuestGump( pUser ) Added new JS event that triggers when player toggles a special move from a combat book. See packet 0xBF, subCmd 0x19 in packet guides for details on the special moves, whose IDs range from 0x00 to 0x1D: onSpecialMove( pUser, abilityID ) Fixed invalid ID for items [0x0174] and [0x0175] in dfndata/items/building/walls/stone_walls.dfn Updated FileSize() function in regions.cpp to fetch file size using std::filesystem::file_size() instead of creating an input stream, opening a file and then trying to seek the last position in the file Added findNearbyObjects() function to findfuncs.cpp, to find all objects (characters and items) of CBaseObject class near a specified location Improved performance when initializing multis on startup; now checks for items near multis, instead of checking for multis near every single item! Improved performance when loading items and characters from worldfiles during startup; around 33% faster for release builds, around ~50% faster when running in debug mode through visual studio (punt) Updated createSection() in ssection.cpp to use std::string and StringUtility functions instead of UString, and added some error handling (punt) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2021-04-23 02:13:17 +08:00
case CCP_HUNGERRATE:
{
CRace *TempRace = nullptr;
0.99.4h Exposed a (read-only) JS property for characters to fetch their hunger rate. Uses race's hunger rate if defined, otherwise uses HUNGERRATE form uox.ini: .hungerRate // Seconds between becoming hungrier Updated 'get command to allow retrieving a character's hungerRate property Added some details to console during UOX3 startup about which IPs and Ports UOX3 is listening to Added new JS event that triggers when a player clicks on the Quest button in the paperdoll. Triggers from character script if present, or global script if not: onQuestGump( pUser ) Added new JS event that triggers when player toggles a special move from a combat book. See packet 0xBF, subCmd 0x19 in packet guides for details on the special moves, whose IDs range from 0x00 to 0x1D: onSpecialMove( pUser, abilityID ) Fixed invalid ID for items [0x0174] and [0x0175] in dfndata/items/building/walls/stone_walls.dfn Updated FileSize() function in regions.cpp to fetch file size using std::filesystem::file_size() instead of creating an input stream, opening a file and then trying to seek the last position in the file Added findNearbyObjects() function to findfuncs.cpp, to find all objects (characters and items) of CBaseObject class near a specified location Improved performance when initializing multis on startup; now checks for items near multis, instead of checking for multis near every single item! Improved performance when loading items and characters from worldfiles during startup; around 33% faster for release builds, around ~50% faster when running in debug mode through visual studio (punt) Updated createSection() in ssection.cpp to use std::string and StringUtility functions instead of UString, and added some error handling (punt) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2021-04-23 02:13:17 +08:00
TempRace = Races->Race( gPriv->GetRace() );
// Try to fetch hungerRate from character's race
UI16 hungerRate = 0;
2021-06-12 07:30:23 -04:00
if( TempRace != nullptr )
{
0.99.4h Exposed a (read-only) JS property for characters to fetch their hunger rate. Uses race's hunger rate if defined, otherwise uses HUNGERRATE form uox.ini: .hungerRate // Seconds between becoming hungrier Updated 'get command to allow retrieving a character's hungerRate property Added some details to console during UOX3 startup about which IPs and Ports UOX3 is listening to Added new JS event that triggers when a player clicks on the Quest button in the paperdoll. Triggers from character script if present, or global script if not: onQuestGump( pUser ) Added new JS event that triggers when player toggles a special move from a combat book. See packet 0xBF, subCmd 0x19 in packet guides for details on the special moves, whose IDs range from 0x00 to 0x1D: onSpecialMove( pUser, abilityID ) Fixed invalid ID for items [0x0174] and [0x0175] in dfndata/items/building/walls/stone_walls.dfn Updated FileSize() function in regions.cpp to fetch file size using std::filesystem::file_size() instead of creating an input stream, opening a file and then trying to seek the last position in the file Added findNearbyObjects() function to findfuncs.cpp, to find all objects (characters and items) of CBaseObject class near a specified location Improved performance when initializing multis on startup; now checks for items near multis, instead of checking for multis near every single item! Improved performance when loading items and characters from worldfiles during startup; around 33% faster for release builds, around ~50% faster when running in debug mode through visual studio (punt) Updated createSection() in ssection.cpp to use std::string and StringUtility functions instead of UString, and added some error handling (punt) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2021-04-23 02:13:17 +08:00
hungerRate = TempRace->GetHungerRate();
}
0.99.4h Exposed a (read-only) JS property for characters to fetch their hunger rate. Uses race's hunger rate if defined, otherwise uses HUNGERRATE form uox.ini: .hungerRate // Seconds between becoming hungrier Updated 'get command to allow retrieving a character's hungerRate property Added some details to console during UOX3 startup about which IPs and Ports UOX3 is listening to Added new JS event that triggers when a player clicks on the Quest button in the paperdoll. Triggers from character script if present, or global script if not: onQuestGump( pUser ) Added new JS event that triggers when player toggles a special move from a combat book. See packet 0xBF, subCmd 0x19 in packet guides for details on the special moves, whose IDs range from 0x00 to 0x1D: onSpecialMove( pUser, abilityID ) Fixed invalid ID for items [0x0174] and [0x0175] in dfndata/items/building/walls/stone_walls.dfn Updated FileSize() function in regions.cpp to fetch file size using std::filesystem::file_size() instead of creating an input stream, opening a file and then trying to seek the last position in the file Added findNearbyObjects() function to findfuncs.cpp, to find all objects (characters and items) of CBaseObject class near a specified location Improved performance when initializing multis on startup; now checks for items near multis, instead of checking for multis near every single item! Improved performance when loading items and characters from worldfiles during startup; around 33% faster for release builds, around ~50% faster when running in debug mode through visual studio (punt) Updated createSection() in ssection.cpp to use std::string and StringUtility functions instead of UString, and added some error handling (punt) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2021-04-23 02:13:17 +08:00
// If hungerRate from Race is zero, use the global hunger rate from UOX.INI instead
if( hungerRate == 0 )
{
0.99.4h Exposed a (read-only) JS property for characters to fetch their hunger rate. Uses race's hunger rate if defined, otherwise uses HUNGERRATE form uox.ini: .hungerRate // Seconds between becoming hungrier Updated 'get command to allow retrieving a character's hungerRate property Added some details to console during UOX3 startup about which IPs and Ports UOX3 is listening to Added new JS event that triggers when a player clicks on the Quest button in the paperdoll. Triggers from character script if present, or global script if not: onQuestGump( pUser ) Added new JS event that triggers when player toggles a special move from a combat book. See packet 0xBF, subCmd 0x19 in packet guides for details on the special moves, whose IDs range from 0x00 to 0x1D: onSpecialMove( pUser, abilityID ) Fixed invalid ID for items [0x0174] and [0x0175] in dfndata/items/building/walls/stone_walls.dfn Updated FileSize() function in regions.cpp to fetch file size using std::filesystem::file_size() instead of creating an input stream, opening a file and then trying to seek the last position in the file Added findNearbyObjects() function to findfuncs.cpp, to find all objects (characters and items) of CBaseObject class near a specified location Improved performance when initializing multis on startup; now checks for items near multis, instead of checking for multis near every single item! Improved performance when loading items and characters from worldfiles during startup; around 33% faster for release builds, around ~50% faster when running in debug mode through visual studio (punt) Updated createSection() in ssection.cpp to use std::string and StringUtility functions instead of UString, and added some error handling (punt) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2021-04-23 02:13:17 +08:00
hungerRate = cwmWorldState->ServerData()->SystemTimer( tSERVER_HUNGERRATE );
}
0.99.4h Exposed a (read-only) JS property for characters to fetch their hunger rate. Uses race's hunger rate if defined, otherwise uses HUNGERRATE form uox.ini: .hungerRate // Seconds between becoming hungrier Updated 'get command to allow retrieving a character's hungerRate property Added some details to console during UOX3 startup about which IPs and Ports UOX3 is listening to Added new JS event that triggers when a player clicks on the Quest button in the paperdoll. Triggers from character script if present, or global script if not: onQuestGump( pUser ) Added new JS event that triggers when player toggles a special move from a combat book. See packet 0xBF, subCmd 0x19 in packet guides for details on the special moves, whose IDs range from 0x00 to 0x1D: onSpecialMove( pUser, abilityID ) Fixed invalid ID for items [0x0174] and [0x0175] in dfndata/items/building/walls/stone_walls.dfn Updated FileSize() function in regions.cpp to fetch file size using std::filesystem::file_size() instead of creating an input stream, opening a file and then trying to seek the last position in the file Added findNearbyObjects() function to findfuncs.cpp, to find all objects (characters and items) of CBaseObject class near a specified location Improved performance when initializing multis on startup; now checks for items near multis, instead of checking for multis near every single item! Improved performance when loading items and characters from worldfiles during startup; around 33% faster for release builds, around ~50% faster when running in debug mode through visual studio (punt) Updated createSection() in ssection.cpp to use std::string and StringUtility functions instead of UString, and added some error handling (punt) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2021-04-23 02:13:17 +08:00
*vp = INT_TO_JSVAL( hungerRate );
break;
}
case CCP_THIRST: *vp = INT_TO_JSVAL( gPriv->GetThirst() ); break;
case CCP_THIRSTRATE:
{
CRace *TempRace = nullptr;
TempRace = Races->Race( gPriv->GetRace() );
// Try to fetch thirstRate from character's race
UI16 thirstRate = 0;
2021-06-12 07:30:23 -04:00
if( TempRace != nullptr )
{
thirstRate = TempRace->GetThirstRate();
}
// If thirstRate from Race is zero, use the global thirst rate from UOX.INI instead
if( thirstRate == 0 )
{
thirstRate = cwmWorldState->ServerData()->SystemTimer( tSERVER_THIRSTRATE );
}
*vp = INT_TO_JSVAL( thirstRate );
break;
}
case CCP_FROZEN: *vp = BOOLEAN_TO_JSVAL( gPriv->IsFrozen() ); break;
case CCP_COMMANDLEVEL: *vp = INT_TO_JSVAL( gPriv->GetCommandLevel() ); break;
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
case CCP_RACE:
{
CRace *TempRace = nullptr;
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
TempRace = Races->Race( gPriv->GetRace() );
2021-06-12 07:30:23 -04:00
if( TempRace == nullptr )
{
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
*vp = JSVAL_NULL;
}
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
else
{
// Otherwise Acquire an object
JSObject *myRace = JSEngine->AcquireObject( IUE_RACE, TempRace, JSEngine->FindActiveRuntime( JS_GetRuntime( cx )));
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
*vp = OBJECT_TO_JSVAL( myRace );
}
break;
}
Thief Revamp - 0.99.6-RC5 Added script for NPC guildmasters (js/npc/ai/guildmaster.js). Only one NPC guild has been setup in the script so far (more can be easily added) - the Thieves Guild - which if joined grants players the ability to steal from other players and to buy disguise kits Added two new NPCs, which there will now spawn one of in a random location in each city in Britannia (felucca facet): m_thief_guildmaster (dfndata/npc/male_human.dfn) f_thief_guildmaster (dfndata/npc/female_Human.dfn) Added two new character properties to keep track of which NPC guild a player (or NPC) belongs to. These properties have been exposed as the following Character JS properties: .npcGuild // ID of NPC guild, as defined in script .npcGuildJoined // Timestamp for when player joined NPC guild Added script for Disguise Kits (js/item/disguisekit.js). These allow members of the Thieves Guild to disguise themselves from the prying eyes of other players. Added two new character properties: .isDisguised // true/false flag for character being disguised .origName // used to store character's original name before disguise went into effect Moved implementation of Stealing skill from code to script (js/skill/stealing.js) and revamped it completely in the process. Changes include: New features: Town rare stealing - any item marked as "special stealable" with new item property .stealable can be stolen, even if it's locked down by a GM on the ground, or inside a container When stealing from item piles, thief can potentially steal the amount of items that makes up the max weight limit for what they can steal, from those piles Chance to successfully steal is now affected by whether there are any characters (NPCs or Players) that witness the attempt. Depends on distance to character, and direction character is facing Players now become "permagrey" when successfully stealing from another player, regardless of whether it's witnessed Players now receive a "stealing" flag when stealing from another player, regardless of whether it's witnessed Stolen items cannot be removed from thief's backpack for 30 seconds following the theft of the item (AoS core shard era and above) Optional AoS feature to steal special consumable items from monsters Updated default stealing rules: Updated calculations to determine chance of success when stealing Players cannot steal while engaged in combat Players are revealed if hidden as soon as they use the stealing skill Players can no longer steal items in the secure trade window Players can no longer steal items from NPC shopkeepers Both hands must be free to steal Stealing now checks line of sight to target player/object Only members of Thieves Guild (NPC guild) can now steal from other players, unless they are guild enemies Players can no longer steal from NPC guards by default Players can no longer steal from the same NPC monster more than once Only gold and gems can be stolen from innocent players in dungeon/ll areas of Felucca, if core shard era is set to AoS or higher Players can no longer steal items held on cursor by other players Orcish masks now eplode if player steals from orcs while wearing it If core shard era is set to LBR or lower, player is marked as an aggressor if they steal from another player Guards can only be called on players that are flagged as criminals within the first 10 seconds of them being flagged Stealing script options: Allow stealing entire containers (off by default pre-AoS) Return stolen items on thief death (off by default) Temporarily make stolen items immovable in thief's backpack (on by default post-AoS) Temporarily protect traded items (on by default) Let dexterity affect chance for successful theft (off by default) Let light level affect chance for successful theft (off by default) Allow stealing from NPC Guards (off by default) Allow stealing special loot from monsters (on by default post-ml) Moved implementation of Snooping skill from code to script (js/skill/snooping.js), with some changes: Players cannot snoop pack animals from inside a house, if the animal is outside The deeper inside main backpack a container sits, the harder it becomes to snoop inside it Included an optional feature that lets targets of snooping gradually become more aware, increasing the difficulty of succeeding. This awareness fades over time. Players have a chance to stay hidden while snooping, based on their Hiding skill Karma is now lowered by snooping regardless of success or failure Added tracking system for "aggressors" in combat. A player attacking someone (regardless of flag status) will be marked as aggressor to that someone for 2 minutes Added tracking system for "permagrey" flags - these are stored on a per-target basis, so a player can be flagged visibly as permagrey to multiple other players. Persists until player dies. Player combat targets and war mode are now cleared on logout Players will now be unable to hide if within visual distance and in line of sight of their attacker or current target in combat Server leave-announcement now only happens after the logout timer has expired, instead of the exact moment the player presses the logout button Fixed an issue that could cause swimming NPCs to swim on land NPCs now have the ability to temporarily ignore unreachable targets in combat. If attacked by someone they are ignoring, they will enter evade state and try to move away from that someone. SpawnRegions now support NPCLISTS with weighted entries. Example of an NPCLIST with 75% chance of spawning some kind of orc, and 25% chance of spawning a ratman archer: [NPCLIST example] { 75|NPCLIST=allorc 25|ratman } Added 3 additional "all purpose" item properties (.more0, .more1 and .more2) and exposed those to JS engine. These work the same as more/morex/morey/morez Mark spell now stores a 4th property on recall runes - instanceID. This is stored in the rune's .more0 property. Recall and Gate spells now check the recall rune (or runebook)'s 4th location property - instanceID - to determine where the player ends up Fixed a server crash related to equipment being automatically unequipped if character is no longer strong enough to have it equipped Added new JS Function to check if any characters at specified location potentially block movement: DoesCharacterBlock( x, y, z, worldNum, instanceID ) // returns true if a character exists at given coordinate (within z +/- 4)
2023-06-20 02:21:16 +08:00
case CCP_HASSTOLEN: *vp = BOOLEAN_TO_JSVAL( gPriv->HasStolen() ); break;
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
case CCP_CRIMINAL: *vp = BOOLEAN_TO_JSVAL( gPriv->IsCriminal() ); break;
case CCP_MURDERER: *vp = BOOLEAN_TO_JSVAL( gPriv->IsMurderer() ); break;
case CCP_INNOCENT: *vp = BOOLEAN_TO_JSVAL( gPriv->IsInnocent() ); break;
case CCP_NEUTRAL: *vp = BOOLEAN_TO_JSVAL( gPriv->IsNeutral() ); break;
case CCP_MURDERCOUNT: *vp = INT_TO_JSVAL( gPriv->GetKills() ); break;
case CCP_GENDER:
switch( gPriv->GetId() )
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
{
case 0x0190: // human male, dead or alive
case 0x0192: *vp = INT_TO_JSVAL( 0 ); break;
case 0x0191: // human female, dead or alive
case 0x0193: *vp = INT_TO_JSVAL( 1 ); break;
case 0x025D: // elf male, dead or alive
case 0x025F: *vp = INT_TO_JSVAL( 2 ); break;
case 0x025E: // elf female, dead or alive
case 0x0260: *vp = INT_TO_JSVAL( 3 ); break;
case 0x029A: // gargoyle male, dead or alive
case 0x02B6: *vp = INT_TO_JSVAL( 4 ); break;
case 0x029B: // gargoyle female, dead or alive
case 0x02B7: *vp = INT_TO_JSVAL( 5 ); break;
default: *vp = INT_TO_JSVAL( 0xFF ); break;
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
}
break;
case CCP_DEAD: *vp = BOOLEAN_TO_JSVAL( gPriv->IsDead() ); break;
case CCP_NPC: *vp = BOOLEAN_TO_JSVAL( gPriv->IsNpc() ); break;
case CCP_AWAKE: *vp = BOOLEAN_TO_JSVAL( gPriv->IsAwake() ); break;
case CCP_ONLINE: *vp = BOOLEAN_TO_JSVAL( IsOnline(( *gPriv ))); break;
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
case CCP_DIRECTION: *vp = INT_TO_JSVAL( gPriv->GetDir() ); break;
// 3 objects: regions + towns + guilds
2021-08-01 18:25:31 +08:00
case CCP_ISRUNNING: *vp = BOOLEAN_TO_JSVAL( gPriv->GetRunning() ); break;
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
case CCP_REGION:
{
CTownRegion *myReg = gPriv->GetRegion();
2021-06-12 07:30:23 -04:00
if( myReg == nullptr )
{
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
*vp = JSVAL_NULL;
}
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
else
{
JSObject *myTown = JSEngine->AcquireObject( IUE_REGION, myReg, JSEngine->FindActiveRuntime( JS_GetRuntime( cx )));
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
*vp = OBJECT_TO_JSVAL( myTown );
}
Housing Revamp and more Updated JS SysMessage function to accept up to 10 extra, optional arguments, which can be used with dictionary messages that require additional parameters like %s or %i Added new type of house privilege in cMultiObj.cpp to keep track of friends of the multi - HOUSEPRIV_FRIEND - which is stored during worldsaves as one or more Friend=<player serial> tags in house.wsc Added new type of house privilege in cMultiObj.cpp to keep track of guests of the multi - HOUSEPRIV_GUEST - which is stored during worldsaves as one or more Guest=<player serial> tags in house.wsc When items are created for houses upon house placement, a reference to the multi's serial is now stored in the house sign's MORE property to allow easier tracking of which house a particular sign belongs to Added tracking of new, persistent properties for houses via cMultiObj.cpp/h: lockdowns, secure containers, vendors, guests, friends, owners, ban location, public status, number of visits, timestamps Added a multitude of new methods in cMultiObj.cpp/h to assist in improving the functionality of houses Added new tags for houses in house.dfn (default values applied if tag not specified): MAXSECURECONTAINERS=4 - Max amount of secure containers allowed in a multi MAXLOCKDOWNS=256 - Max amount of lockdowns allowed in a multi MAXVENDORS=10 - Max amount of vendors allowed in a multi MAXBANS=50 - Max amount of bans in a multi's ban list MAXFRIENDS=50 - Max amount of friends in a multi's friend list MAXGUESTS=50 - Max amount of guests in a multi's guest list MAXOWNERS=8 - Max amount of owners and co-owners in a multi's owner list MAXTRASHCONTAINERS=1 - Max amount of trash containers allowed in multi SCRIPT=<scriptID> - Assign a JS script-ID directly to a multi FRONTDOOR - indicates that a door is the front door of a house. Cannot be locked in public houses! INTERIORDOOR - indicates that a door is an interior door of a house. Can be locked in public houses. BANX - Location X offset for multi's ban location, if not used, will try to use SE corner of multi instead BANY - Location Y offset for multi's ban location, if not used, will try to use SE corner of multi instead Added JS Event: onHouseCommand( tSock, multiObj, cmdID ) - For handling spoken house commands via JS scripts attached to multi. Updated JS Events: onEntrance() - can now trigger both for multi being entered and/or object entering onLeaving() - can now trigger both for multi being left and/or object entering onSpeech() - can now also trigger for items (in addition to chars) with event & script attached, if UOX.INI setting ITEMSDETECTSPEECH is enabled Added JS Multi methods: .IsBoat() - Returns whether the item (or multi) is a boat .IsOwner( playerToCheck ) - Returns whether a player is the owner of a multi .IsOnOwnerList( playerToCheck ) - Returns whether a player is on the (co-)owner list of a multi .IsOnFriendList( playerToCheck ) - Returns whether a player is on the friend list of a multi .IsOnGuestList( playerToCheck ) - Returns whether a player is on the guest list of a multi .IsOnBanList( playerToCheck ) - Returns whether a player is on the ban list of a multi .AddToFriendList( playertoAdd ) - Adds player to the friend list of a multi .RemoveFromFriendList( playertoRemove ) - Removes player from the friend list of a multi .AddToGuestList( playertoAdd ) - Adds player to the guest list of a multi .RemoveFromGuestList( playertoRemove ) - Removes player from the guest list of a multi .ClearOwnerList() - Clears all entries from a multi's (co-)owner list .ClearFriendList() - Clears all entries from a multi's friend list .ClearGuestList() - Clears all entries from a multi's guest list .ClearBanList() - Clears all entries from a multi's ban list .SecureContainer( itemToSecure ) - Secures a container in a multi .UnsecureContainer( itemToUnsecure ) - Unsecures a container in a multi .IsSecureContainer( itemToCheck ) - Checks if specified item is a secure container in a multi .LockDownItem( itemToLockDown) - Locks down an item in a multi .ReleaseItem( itemToRelease ) - Releases a locked down item in a multi .KillKeys() - Deletes ALL keys associated with a multi .AddTrashCont( itemToAdd ) - Add trash container to multi's list of trash containers .RemoveTrashCont( itemToRemove ) - Remove trash container from multi's list of trash containers Added JS Item (Multi only) properties: .lockdowns - Get the number of lockdowns in a multi .maxLockdowns - Get/Set the max number of lockdowns allowed in a multi .secureContainers - Get the number of secure containers in a multi .maxSecureContainers - Get/Set the max number of secure containers allowed in a multi .trashContainers - Get the number of trash containers in a multi .maxTrashContainers - Get/Set the max number of trash containers allowed in a multi .friends - Get the number of friends in a multi's friend list .maxFriends - Get/Set the max number of friends allowed in a multi's friend list .guests - Get the number of guests in a multi's guest list .maxGuests - Get/Set the max number of guests allowed in a multi's guest list .owners - Get the number of owners in a multi's owner list .maxOwners - Get/Set the max number of owners allowed in a multi's owner list .bans - Get the number of banned players in a multi's ban list .maxBans - Get/Set the max number of banned players allowed in a multi's ban list .vendors - Get the number of player vendors in a multi .maxVendors - Get the max number of player vendors allowed in a multi .deed - Get the item sectionID for deed used to place multi .isPublic - Get/Set the private/public state of a multi .buildTimestamp - Get the timestamp for when the house was originally placed .tradeTimestamp - Get the timestamp for when the house was last traded to another player .banX - Get/Set the ban location X offset for the multi .banY - Get/Set the ban location Y offset for the multi Added JS Character properties: .multi = Get/Set the multi object the character is in .accountNum = Get the account number the character belongs to .housesOwned = Get a count of houses owned by the character .housesCoOwned = Get a count of houses co-owned by the character Updated JS cBaseObject Methods .FirstItem(), .NextItem() and .FinishedItems() to also support iterating through items in multis Updated JS multi Methods .FirstChar(), .NextChar() and .FinishedChars() to support an additional parameter to specify what kind of characters to loop through: "default" or no parameter - all characters inside the multi "owner" - players on multi's owner list "friend" - players on multi's friend list "guest" - players on multi's guest list "banned" - players on multi's ban list Added new INI tags to a new section of uox.ini called [houses] DECAYTIMERINHOUSE=3600 // Decay timer in seconds for non-locked down items inside houses PROTECTPRIVATEHOUSES=1 // Toggles whether private houses will automatically boot unauthorized visitors (1) or not (0) TRACKHOUSESPERACCOUNT=1 // Toggles whether to track (and restrict) house ownership per account (1) or per character (0) MAXHOUSESOWNABLE=1 // Specifies the max amount of houses a player can own per account/char, depending on how house ownership is tracked MAXHOUSESCOOWNABLE=10 // Specifies the max amount of houses a player can co-own per character CANOWNANDCOOWNHOUSES=1 // Toggles whether players can own and co-own houses at the same time COOWNHOUSESONSAMEACCOUNT=1 // Toggles whether characters on same account as house owner will be treated as co-owners Added new INI tags in [settings] section of uox.ini: ITEMSDETECTSPEECH=0 // If enabled, server will search for nearby items with onSpeech JS event running whenever a character speaks. Disabled by default. MAXPLAYERPACKITEMS=125 // Defines max item capacity for player (and NPC) backpacks. Defaults to 125. Moved most of the existing house functionality to JS and expanded upon it to reach feature parity with houses in regular UO around Publish 15/16, with various extras thrown in for good measure and all functionality being customizable: js/server/house/house.js (15000) - handles detection of house commands and characters entering/leaving houses js/server/house/houseSign.js (15001) - contains and handles all house-related gumps/menus and what is shown when players interact with house sign js/server/house/houseCommands.js (15002) - handles functionality of house commands and other functionality such as transfer of ownership, demolishing house, etc. js/server/house/houseDeed.js (15003) - handles initial rules that allow/disallow placement of additional houses for players All house-related menus now fully handled through JS All house commands and other functionality now fully handled through JS Removed redundant hard-coded house functionality Implemented Co-owners, friends, guests for houses, with access rules in place for entry, lockdowns, house commands, etc. Implemented Private and Public houses Implemented Secure Containers and Trash Barrels Definable max lockdowns, secure containers, player vendors, bans, friends, guests, owners, trash containers and more - per house type JS scripts can now be attached directly to houses Doors in houses can be marked as front doors or interior doors, and will be treated differently with regards to private and public houses Added new item to dfndata/items/containers/misc.dfn - [trashbarrel] Added new JS script (js/items/trashbarrel.js) with trash barrel functionality for houses. Trash barrels that are marked as secure containers are only accessible by owners, co-owners and friends of the house. Various options available at top of script. Updated js/items/axe.js to support chopping up trash barrels and house add-ons in houses owned by the player Fixed an issue with house doors being left behind after demolishing houses while their doors were open Fixed an issue where GMs could be banned from player houses Added Line of Sight checks to speech, to give players some privacy in their own homes Updated house placement code to more accurately check for other multis, dynamic and static objects when placing houses; now requires free space around each house that cannot be blocked by other houses or items that can block player movement, and disallows placement of houses on roads Updated house placement code to move characters blocking house placement to SE corner of the house Updated house placement code to disallow placing houses in guarded regions, or in dungeons Added new DFN tag for regions to enable/disable player houses in specific regions: HOUSING=0/1 Added new region (247) that covers path to Valley of Eodon in Felucca Added new region (248) that covers Valley of Eodon in Ter-Mur, with player housing disabled Added new region (249) that covers entire T2A lands, with player housing disabled Updated SPACEX and SPACEY values for all houses in dfndata/house/house.dfn to match updated house placement code Added new JS property to Regions that can be used to determine or change state of player housing in a region: .canPlaceHouse() Updated rules for usage of dye tubs to dye locked down items; now only house owners or co-owners may dye locked down items Updated rules for usage of the following locked down items in a house, which are now only usable by house owners and co-owners Dyes, Guildstone Deeds, Recall Runes (renaming), Rename Deeds, Townstone Deeds, House Deeds, Boat Models, Player Vendor Deeds, Ore, Hair Dye Updated rules for usage of the following locked down items in a house, which are now only usable by house owners, co-owners and friends: Keys, Dye Tubs, Magic Scrolls, Fireworks Wands, Magic Wands, Smithing Tools, Mining Tools, Fishing Poles Updated item lockdown rules to allow locking down (and releasing) items in a container as long as the container is locked down, and to only allow releasing a locked down container if it's empty of locked down items Updated item lockdown rules to only allow locking down movement-blocking items further than 2 tiles away from doors Updated rules for releasing items in houses - now the house owner can release any locked down items, co-owners can release items locked down by themselves or by friends, while friends can release only items locked down by themselves Added some feedback to player about why their attempted house placement failed Items added by GMs directly into multis will now decay based on the house-specific decay timer instead of the regular one Fixed an issue that could cause items to almost instantly decay after being released from lockdown in a house Placing house add-ons now properly takes into account SPACEX and SPACEY values when checking if they can fit in selected area of houses Re-added SPACEX and SPACEY values for Pentagram and Loom house add-ons House add-ons can now be converted back into house add-on deeds by chopping them with an axe Added new item type - IT_HOUSEADDON (201) - used by house add-ons placed in player houses Fixed a bug where keys would stop working after being added to a keyring, and would turn into blank keys upon release from the keyring Added visitor count for public player houses, which keeps track of how many visits a public house has received, with each player counted max 1 time every 24 hours Fixed an issue with FindPlayersInOldVisrange() where it didn't take into account that players could see buildings further away than the standard update range. This could cause players to see ghost images of buildings if they were at the "right" distance when the building was being demolished Added NODECAY tag to all signs and doors in dfndata/house/house.dfn Added FRONTDOOR or INTERIORDOOR (as appropriate) to all doors in dfndata/house/house.dfn Added BANX and BANY to specify ban location for some houses in dfndata/house/house.dfn instead of relying on finding SE corner automatically Implemented strongboxes (js/server/house/strongbox.js) for co-owners of a house, which can be placed with the house command "i wish to place a strongbox". Max capacity is 25 items Updated 'REMOVE command to take an optional parameter - itemID. If supplied, the command will remove all items with this itemID from a targeted container Fixed a bug when checking if dynamic items were blocking valid spawn locations for NPCs, some function arguments were in the wrong order! Improved code that finds valid spawn locations for items and NPCs spawned via spawn regions. As server gradually builds up lists of valid spawn locations per region over time, it will start using these lists more often, rather than always look for brand new spawn locations. Fixed a bug with CMulHandler::CheckStaticFlag() that prevented NPCs from spawning inside buildings with no static floors! Fixed an issue with repeating commands that prevented GMs from being able to cancel them when using the ClassicUO client Exposed character property .accountNum to JS engine Extended CDataList class to include a Clear() method for clearing lists Updated JS File method .Open() to support an optional, third argument - subFolderName - that defines in which sub-folder of UOX3/shared/ to store/look for a file. If no third argument is supplied, UOX3 will default to using the shared folder itself. Updated JS File method .Length() to return a value of -1 for files that don't exist Added new code function, exposed to JS engine with same parameters, which simply checks if a given tile ID has a specific flag bool CheckTileFlag( UI16 itemID, TILEFLAG flagToCheck ) Added JS function used to find the root container of an item (if any) FindRootContainer( itemSerial ) FindRootContainer( item ) Added new JS function that allows deleting files from UOX3/shared/ folder or subfolders of shared folder. If no subFolderName is provided, looks for file directly in shared folder itself. Restrictions on file- and folder-names apply. bool DeleteFile( fileName, subFolderName ) Added new JS functions for checking if a specific client or server feature is enabled. See documentation for full list of client/server features. GetClientFeature( bitNum ) // Returns true if specified client feature is enabled on server GetServerFeature( bitNum ) // Returns true if specified server feature is enabled on server Added new JS function for returning the value of almost any server setting from UOX.INI GetServerSetting( settingNameInDoubleQuotes ) Updated JS function DoesDynamicBlock() with two new parameters - checkOnlyMultis and checkOnlyNonMultis Updated JS function DoesMapBlock() with two new parameters - checkMultiPlacement and checkForRoad Fixed an issue where a LoS check would prevent players from accessing containers in their own backpack Added new functions in findfuncs.cpp to make it easier to find items near another object or location: findNearbyItems( object, distance ) findNearbyItems( x, y, worldNumber, instanceID, distance ) Added new Item property - maxItems - used by containers to determine their max item capacity Added new Item property - totalItemCount - used to get total item count in a container (including sub-containers) Added check for max item capacity when creating new items that are added to a character's backpack - items will be created below character's feet if backpack is full! Added new DFN tag for items, used by containers to determine item capacity for a given container: MAXITEMS=# // 125 is the default for all containers if not set Added new JS Item properties: .maxItems // gets/sets item capacity for a given container .totalItemCount // gets total item count in a container, including sub-containers Updated item tooltips for containers to show accurate total item count, as well as to display max item capacity Fixed a bug where picking up items from a non-locked down pile of items on the floor inside a multi could cause the remaining pile to be seen as no longer inside the multi, disallowing locking it back down and causing it to decay based on regular decay timer instead of house-specific one Updated JS command set to allow setting poison-level on items ('set poison #) and hunger-level on characters ('set hunger #) Fixed an issue with js/item/food.js that prevented poisoned food from poisoning characters when eaten Fixed an issue with js/skill/poisoning.js that prevented players from poisoning food! Updated various JS scripts and hardcoded targeting functions to disallow the targeting of locked down resources using skills and tools Updated JS Method TextMessage() to support three extra, optional parameters. Note that if one optional parameter is included, all preceding optional parameters are also required! speechTarget - What kind of target is this message intended for? 0 - Only visible for sender and receiver of message 1 - Visible to all players in range 2 - Visible to all NPCs and players in range 3 - Visible to all PCs everywhere + NPCs in range 4 - Visible to all PCs everywhere (broadcast) 5 - Only visible for the receiver of the message speechTargetSerial - The serial of the receiver of the message, used if speechTarget is 0 or 5 speechFontType - The type of font to display the text in. Defaults to normal. 0 - Bold 1 - Normal with shadow 2 - Bold with shadow 3 - Normal 4 - Gothic 5 - Italic 6 - Small, dark 7 - Colourful 8 - Runic (only works with CAPS) 9 - Small, light Added timestamp to worldsaves in console, to make it easier to see when a particular world-save was done Added info about compiler/environment displayed at the top of the UOX3 console during startup Updated dictionary files with new messages primarily related to housing
2020-11-04 02:00:37 +08:00
break;
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
}
Rework of passive stat regeneration Updated code calculating passive health, stamina and mana regeneration for characters, based on new UOX.INI settings and bonuses from characters/items/races Added three new Character/Item/Race DFN tags to grant bonus health/stamina/mana regeneration: HEALTHREGENBONUS=# // 10 bonus points equates to 0.01 extra hp regen per second, independent of era STAMINAREGENBONUS=# // 10 bonus points equates to 0.05 extra stamina regen per second MANAREGENBONUS=# // 10 bonus point equates to 0.1 extra mana regen per second ...also available as JS Properties: .healthRegenBonus .staminaRegenBonus .manaRegenBonus Updated get/set JS commands to allow getting/setting regen bonuses for health, stamina and mana Updated races.dfn to include default +2 health regen bonus for humans, and +2 mana regen bonus for gargoyles. Added new UOX.INI settings under [Skills and Stats] section: HEALTHREGENMODE=1 // 0 = no passive health regen, 1 = default passive health regen STAMINAREGENMODE=1 // 0 = no passive stamina regen, 1 = default passive stamina regen (LBR or below), 2 = AoS or beyond, 3 = SA and beyond MANAREGENMODE=1 // 0 = no passive mana regen, 1 = default passive mana regen (LBR or below), 2 = AoS (Pub17), 3 = AoS/SE (Pub18 and beyond), 4 = ML, 5 = KR, 6 = SA and beyond HEALTHREGENCAP=# // Max cap for Health Regeneration Bonus stat per character STAMINAREGENCAP=# // Max cap for Stamina Regeneration Bonus stat per character MANAREGENCAP=# // Max cap for Mana Regeneration Bonus stat per character Added new UOX.INI section ([default race bonuses]) with the following new settings for the 3 default playable races (only used if nothing else specified in races.dfn): HUMANHEALTHREGENBONUS=0 // default health regen bonus for human race (2 from ML expansion onwards) HUMANSTAMINAREGENBONUS=0 // default stamina regen bonus for human race HUMANMANAREGENBONUS=0 // default mana regen bonus for human race ELFHEALTHREGENBONUS=0 // default health regen bonus for elf race ELFSTAMINAREGENBONUS=0 // default stamina regen bonus for elf race ELFMANAREGENBONUS=0 // default mana regen bonus for elf race GARGOYLEHEALTHREGENBONUS=0 // default health regen bonus for gargoyle race GARGOYLESTAMINAREGENBONUS=0 // default stamina regen bonus for gargoyle race GARGOYLEMANAREGENBONUS=0 // default mana regen bonus for gargoyle race (2 from SA expansion onwards) Updated UOX3 Documentation with new feature section on Stat Regeneration with details on stat regeneration rules and recommended settings per UO era Added support for Medable armors (have no effect on meditation skill and/or passive regen of mana when worn) and Mage Armors (can turn non-medable armor into medable armor) These properties are defined per armor piece using the first and second bits of the MORE property: MORE=0x1 0x0 0x0 0x0 // Medable Armor MORE=0x0 0x1 0x0 0x0 // Mage Armor The following armor types have been marked as medable by default: leather armor, leather ninja armor, leather samurai armor, leaf armor, gargish cloth armor, gargish leather armor and all hats and masks Updated JS Method .Defense() to support optional fourth and fifth parameters - excludeMedableArmor (true/false) and includeShield (true/false) Updated CalfDef function to support including shields in the calculations, and updated mana regen code to include shields when checking for equipped armor Updated Meditation skill JS script to exclude medable armor from armor check, include shields, and apply different rules for active meditation depending on mana regen mode Updated stat window to include defensive rating of shields (based on Parrying skill) and/or elemental resistances (if enabled in ini) Added a new property to CRace class, which is automatically set and incremented as UOX3 loads in races from races.dfn: raceID Added new Getters/Setters for CRace class to retrieve ID of a specific Race object Updated JS property .id for Race JS Object to return new race ID instead of iterating through list of races to compare race object and return index Reloading DFNs now also reloads Races
2025-04-20 06:05:44 +08:00
case CCP_HEALTHREGENBONUS: *vp = INT_TO_JSVAL( gPriv->GetHealthRegenBonus() ); break;
case CCP_STAMINAREGENBONUS: *vp = INT_TO_JSVAL( gPriv->GetStaminaRegenBonus() ); break;
case CCP_MANAREGENBONUS: *vp = INT_TO_JSVAL( gPriv->GetManaRegenBonus() ); break;
UOX3 0.99.6-RC3 Updated Item DFNs with ORIGIN and SECTIONID tags for relevant items Added JS Function to make comparing eras (based on object origin or server settings) easier: EraStringToNum( eraString ) // Takes an era string (uo, t2a, uor, td, lbr, aos, etc) and returns an int Updated some JS scripts to use EraStringToNum() for era comparisons (potionkeg.js) Default CORESHARDERA setting is now LBR Removed PUB15 as a separate "era" - it's identical to late stage LBR anyway: Removed support for GETPUB15 tag Added support for GETUO tag for items/NPCs: GETUO=<sectionID> // Inherit DFN section if core shard era is Ultima Online (original release, before T2A) Rewrote portions of MsgBoardQuestEscortCreate() function in msgboard.cpp to ensure only escort regions within same world as NPC can be selected as destinations Increased maximum number of possible escort regions that can exist from 255 to 65535 Added region definitions for all shrines in Britannia (Fel & Trammel), and marked them as valid destinations for NPC escorts (uox3/regions/regions.dfn) Moved bankers from vendor to human DFN files, and made them inherit basehuman instead of basevendor - since they are not vendors To address an issue with escorted NPCs not timing out and vanishing if they are left in a "dormant" area of the world with no player activity, the NPCs are marked as "always awake" the moment they arrive at their destination. Note that the uox.ini setting ALLOWAWAKENPCS needs to be enabled for this to work. Fixed an issue where spawnsection of spawners did not show up correctly in tweak menu Fixed an issue where the generic Orc AI script didn't have a return true at end of onDamage() event, which prevented all orcs from taking damage in combat (js/npc/ai/monster/orc.js) Moved Anatomy skill-check in healing script (js/skill/healing.js) from onCallback1() function to onTimer() to prevent the skill-check from being spammable Added mount ID for Frost Mite in creatures.dfn, allowing it to be used as mount Exposed the following character properties to JS engine, which can be used to view/adjust the permanent hair/beard options for a character: .hairStyle .hairColour .beardStyle .beardColour Updated 'kill hair, 'shavehair, 'shavebeard and 'remove commands to clear permanent hair/beard colour and style properties in addition to removing the item itself Added a GM override to let GMs place as many houses as they want (js/server/house/houseDeed.js) Fixed an issue where attempting to sell items to NPC shopkeepers could result in client crashing Added a new JS Event: onMultiLogout( iMulti, cPlayer ) // Handles players logging out while inside multis Updated house script (js/server/house/house.js) with onMultiLogout event, which allows owners (always) and co-owners/friends/guests (if option enabled in uox.ini) to safely log out inside the house (without getting booted). Added a "keyless" option for interacting with locked doors (js/item/doors.js) of player-owned houses, which lets owners/co-owners/friends/guests of a house use locked doors in the house without requiring a key in their backpack, if the options for that are enabled in UOX.INI. Enabled for owners/co-owners and friends by default (but not for guests) Note that if option to safely log out is enabled, but keyless option is NOT enabled, then the server will check if the player has a key to the house in their backpack, and eject them from the house upon logging out if not. This is to make sure players don't get stuck inside a house they can't get out of because they lack the rights to open doors etc. Added new UOX.INI options, under the [houses] section: SAFECOOWNERLOGOUT=1 // Allow co-owners to safely and instantly log out inside house SAFEFRIENDLOGOUT=1 // Allow friends to safely and instantly log out inside house SAFEGUESTLOGOUT=1 // Allow guests to safely and instantly log out inside house KEYLESSOWNERACCESS=1 // Allow owner of house to use locked doors in house without key in pack KEYLESSCOOWNERACCESS=1 // Allow co-owners of house to use locked doors in house without key in pack KEYLESSFRIENDACCESS=1 // Allow friends of house to use locked doors in house without key in pack KEYLESSGUESTACCESS=0 // Allow guests of house to use locked doors in house without key in pack Fixed NOHAIR tag from races.dfn not being loaded correctly
2023-03-04 22:50:55 +08:00
case CCP_ORIGIN:
tString = JS_NewStringCopyZ( cx, cwmWorldState->ServerData()->EraEnumToString( static_cast<ExpansionRuleset>( gPriv->GetOrigin() )).c_str() );
*vp = STRING_TO_JSVAL( tString );
break;
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
case CCP_TOWN:
{
UI16 tempTownId = 0xFF;
tempTownId = gPriv->GetTown();
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
// We need to decide here whether 0xFF is a valid town (wilderness) or not
// i would say no its not
if( tempTownId == 0xFF )
{
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
*vp = JSVAL_NULL;
}
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
else
{
// Should build the town here
JSObject *myTown = JSEngine->AcquireObject( IUE_REGION, cwmWorldState->townRegions[tempTownId], JSEngine->FindActiveRuntime( JS_GetRuntime( cx )));
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
*vp = OBJECT_TO_JSVAL( myTown );
}
break;
}
case CCP_GUILD:
{
GUILDID tempGuildId = -1;
tempGuildId = gPriv->GetGuildNumber();
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
// Character has no guild
if( tempGuildId == -1 ) // isn't there a constant or something like?
{
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
*vp = JSVAL_NULL;
}
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
else
{
JSObject *myGuild = JSEngine->AcquireObject( IUE_GUILD, GuildSys->Guild( tempGuildId ), JSEngine->FindActiveRuntime( JS_GetRuntime( cx )));
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
*vp = OBJECT_TO_JSVAL( myGuild );
}
break;
2002-04-07 20:53:41 +00:00
}
Guild-specific updates - [ADD] Integrated FindGuildId( const CGuild* ) in guild relation functions for better JS mapping (Thanks to Xuri for the base implementation) - [ADD] Added new JS Function: - CreateNewGuild() // Returns the guild object for further setup - [ADD] Added new Guild JS Methods: .AddMember( targChar ), .AddRecruit( targChar ), .RemoveRecruit( targChar ), .RemoveMember( targChar ), .RecruitToMember( targChar ), .IsAtWar( targetGuild ), .IsAlly( targetGuild ), IsNeutral( targetGuild ) Added documentation entries for all new guild/character functions and methods - [ADD] New JS Event that triggers when GUILD button in paperdoll is pressed: - onGuildButton( mChar ) - [ADD] Added new Guild JS Property: .id (guild number) - [ADD] Added new Character JS Property: .guildNumber - [UPD] Updated Guild JS Methods and renamed them: - Renamed .NewMember( trgChar ) to .AddMember( trgChar ) - Renamed .NewRecruit( trgChar ) to .AddRecruit( trgChar ) - Renamed .GuildIsAtWar( targetGuild ) to .IsAtWar( targetGuild ) - Renamed .GuildIsAlly( targetGuild) to .IsAlly( targetGuild ) - Renamed .GuildIsNeutral( targetGuild ) to .IsNeutral( targetGuild ) - [UPD] Removed Character JS Method .CheckGuild(). Can be checked via .guild and/or .guildNumber properties - [UPD] 'get command can now be used to fetch guild information for characters. Example: 'get guild / 'get guildnumber - [UPD] Updated 'add item sectionID command to support optional amount. New syntax: 'add item sectionID amount - [FIX] Fixed an issue with 'wholist command where characters with serials in the millions would not show up in the list
2025-08-05 04:05:43 +08:00
case CCP_GUILDNUMBER: *vp = INT_TO_JSVAL( gPriv->GetGuildNumber() ); break;
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
case CCP_SOCKET:
{ // So we can declare the variables here
CSocket *tSock = gPriv->GetSocket();
2021-06-12 07:30:23 -04:00
if( tSock == nullptr )
{
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
*vp = JSVAL_NULL;
}
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
else
{ // Otherwise Acquire an object
JSObject *mySock = JSEngine->AcquireObject( IUE_SOCK, tSock, JSEngine->FindActiveRuntime( JS_GetRuntime( cx )));
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
*vp = OBJECT_TO_JSVAL( mySock );
}
break;
Housing Revamp and more Updated JS SysMessage function to accept up to 10 extra, optional arguments, which can be used with dictionary messages that require additional parameters like %s or %i Added new type of house privilege in cMultiObj.cpp to keep track of friends of the multi - HOUSEPRIV_FRIEND - which is stored during worldsaves as one or more Friend=<player serial> tags in house.wsc Added new type of house privilege in cMultiObj.cpp to keep track of guests of the multi - HOUSEPRIV_GUEST - which is stored during worldsaves as one or more Guest=<player serial> tags in house.wsc When items are created for houses upon house placement, a reference to the multi's serial is now stored in the house sign's MORE property to allow easier tracking of which house a particular sign belongs to Added tracking of new, persistent properties for houses via cMultiObj.cpp/h: lockdowns, secure containers, vendors, guests, friends, owners, ban location, public status, number of visits, timestamps Added a multitude of new methods in cMultiObj.cpp/h to assist in improving the functionality of houses Added new tags for houses in house.dfn (default values applied if tag not specified): MAXSECURECONTAINERS=4 - Max amount of secure containers allowed in a multi MAXLOCKDOWNS=256 - Max amount of lockdowns allowed in a multi MAXVENDORS=10 - Max amount of vendors allowed in a multi MAXBANS=50 - Max amount of bans in a multi's ban list MAXFRIENDS=50 - Max amount of friends in a multi's friend list MAXGUESTS=50 - Max amount of guests in a multi's guest list MAXOWNERS=8 - Max amount of owners and co-owners in a multi's owner list MAXTRASHCONTAINERS=1 - Max amount of trash containers allowed in multi SCRIPT=<scriptID> - Assign a JS script-ID directly to a multi FRONTDOOR - indicates that a door is the front door of a house. Cannot be locked in public houses! INTERIORDOOR - indicates that a door is an interior door of a house. Can be locked in public houses. BANX - Location X offset for multi's ban location, if not used, will try to use SE corner of multi instead BANY - Location Y offset for multi's ban location, if not used, will try to use SE corner of multi instead Added JS Event: onHouseCommand( tSock, multiObj, cmdID ) - For handling spoken house commands via JS scripts attached to multi. Updated JS Events: onEntrance() - can now trigger both for multi being entered and/or object entering onLeaving() - can now trigger both for multi being left and/or object entering onSpeech() - can now also trigger for items (in addition to chars) with event & script attached, if UOX.INI setting ITEMSDETECTSPEECH is enabled Added JS Multi methods: .IsBoat() - Returns whether the item (or multi) is a boat .IsOwner( playerToCheck ) - Returns whether a player is the owner of a multi .IsOnOwnerList( playerToCheck ) - Returns whether a player is on the (co-)owner list of a multi .IsOnFriendList( playerToCheck ) - Returns whether a player is on the friend list of a multi .IsOnGuestList( playerToCheck ) - Returns whether a player is on the guest list of a multi .IsOnBanList( playerToCheck ) - Returns whether a player is on the ban list of a multi .AddToFriendList( playertoAdd ) - Adds player to the friend list of a multi .RemoveFromFriendList( playertoRemove ) - Removes player from the friend list of a multi .AddToGuestList( playertoAdd ) - Adds player to the guest list of a multi .RemoveFromGuestList( playertoRemove ) - Removes player from the guest list of a multi .ClearOwnerList() - Clears all entries from a multi's (co-)owner list .ClearFriendList() - Clears all entries from a multi's friend list .ClearGuestList() - Clears all entries from a multi's guest list .ClearBanList() - Clears all entries from a multi's ban list .SecureContainer( itemToSecure ) - Secures a container in a multi .UnsecureContainer( itemToUnsecure ) - Unsecures a container in a multi .IsSecureContainer( itemToCheck ) - Checks if specified item is a secure container in a multi .LockDownItem( itemToLockDown) - Locks down an item in a multi .ReleaseItem( itemToRelease ) - Releases a locked down item in a multi .KillKeys() - Deletes ALL keys associated with a multi .AddTrashCont( itemToAdd ) - Add trash container to multi's list of trash containers .RemoveTrashCont( itemToRemove ) - Remove trash container from multi's list of trash containers Added JS Item (Multi only) properties: .lockdowns - Get the number of lockdowns in a multi .maxLockdowns - Get/Set the max number of lockdowns allowed in a multi .secureContainers - Get the number of secure containers in a multi .maxSecureContainers - Get/Set the max number of secure containers allowed in a multi .trashContainers - Get the number of trash containers in a multi .maxTrashContainers - Get/Set the max number of trash containers allowed in a multi .friends - Get the number of friends in a multi's friend list .maxFriends - Get/Set the max number of friends allowed in a multi's friend list .guests - Get the number of guests in a multi's guest list .maxGuests - Get/Set the max number of guests allowed in a multi's guest list .owners - Get the number of owners in a multi's owner list .maxOwners - Get/Set the max number of owners allowed in a multi's owner list .bans - Get the number of banned players in a multi's ban list .maxBans - Get/Set the max number of banned players allowed in a multi's ban list .vendors - Get the number of player vendors in a multi .maxVendors - Get the max number of player vendors allowed in a multi .deed - Get the item sectionID for deed used to place multi .isPublic - Get/Set the private/public state of a multi .buildTimestamp - Get the timestamp for when the house was originally placed .tradeTimestamp - Get the timestamp for when the house was last traded to another player .banX - Get/Set the ban location X offset for the multi .banY - Get/Set the ban location Y offset for the multi Added JS Character properties: .multi = Get/Set the multi object the character is in .accountNum = Get the account number the character belongs to .housesOwned = Get a count of houses owned by the character .housesCoOwned = Get a count of houses co-owned by the character Updated JS cBaseObject Methods .FirstItem(), .NextItem() and .FinishedItems() to also support iterating through items in multis Updated JS multi Methods .FirstChar(), .NextChar() and .FinishedChars() to support an additional parameter to specify what kind of characters to loop through: "default" or no parameter - all characters inside the multi "owner" - players on multi's owner list "friend" - players on multi's friend list "guest" - players on multi's guest list "banned" - players on multi's ban list Added new INI tags to a new section of uox.ini called [houses] DECAYTIMERINHOUSE=3600 // Decay timer in seconds for non-locked down items inside houses PROTECTPRIVATEHOUSES=1 // Toggles whether private houses will automatically boot unauthorized visitors (1) or not (0) TRACKHOUSESPERACCOUNT=1 // Toggles whether to track (and restrict) house ownership per account (1) or per character (0) MAXHOUSESOWNABLE=1 // Specifies the max amount of houses a player can own per account/char, depending on how house ownership is tracked MAXHOUSESCOOWNABLE=10 // Specifies the max amount of houses a player can co-own per character CANOWNANDCOOWNHOUSES=1 // Toggles whether players can own and co-own houses at the same time COOWNHOUSESONSAMEACCOUNT=1 // Toggles whether characters on same account as house owner will be treated as co-owners Added new INI tags in [settings] section of uox.ini: ITEMSDETECTSPEECH=0 // If enabled, server will search for nearby items with onSpeech JS event running whenever a character speaks. Disabled by default. MAXPLAYERPACKITEMS=125 // Defines max item capacity for player (and NPC) backpacks. Defaults to 125. Moved most of the existing house functionality to JS and expanded upon it to reach feature parity with houses in regular UO around Publish 15/16, with various extras thrown in for good measure and all functionality being customizable: js/server/house/house.js (15000) - handles detection of house commands and characters entering/leaving houses js/server/house/houseSign.js (15001) - contains and handles all house-related gumps/menus and what is shown when players interact with house sign js/server/house/houseCommands.js (15002) - handles functionality of house commands and other functionality such as transfer of ownership, demolishing house, etc. js/server/house/houseDeed.js (15003) - handles initial rules that allow/disallow placement of additional houses for players All house-related menus now fully handled through JS All house commands and other functionality now fully handled through JS Removed redundant hard-coded house functionality Implemented Co-owners, friends, guests for houses, with access rules in place for entry, lockdowns, house commands, etc. Implemented Private and Public houses Implemented Secure Containers and Trash Barrels Definable max lockdowns, secure containers, player vendors, bans, friends, guests, owners, trash containers and more - per house type JS scripts can now be attached directly to houses Doors in houses can be marked as front doors or interior doors, and will be treated differently with regards to private and public houses Added new item to dfndata/items/containers/misc.dfn - [trashbarrel] Added new JS script (js/items/trashbarrel.js) with trash barrel functionality for houses. Trash barrels that are marked as secure containers are only accessible by owners, co-owners and friends of the house. Various options available at top of script. Updated js/items/axe.js to support chopping up trash barrels and house add-ons in houses owned by the player Fixed an issue with house doors being left behind after demolishing houses while their doors were open Fixed an issue where GMs could be banned from player houses Added Line of Sight checks to speech, to give players some privacy in their own homes Updated house placement code to more accurately check for other multis, dynamic and static objects when placing houses; now requires free space around each house that cannot be blocked by other houses or items that can block player movement, and disallows placement of houses on roads Updated house placement code to move characters blocking house placement to SE corner of the house Updated house placement code to disallow placing houses in guarded regions, or in dungeons Added new DFN tag for regions to enable/disable player houses in specific regions: HOUSING=0/1 Added new region (247) that covers path to Valley of Eodon in Felucca Added new region (248) that covers Valley of Eodon in Ter-Mur, with player housing disabled Added new region (249) that covers entire T2A lands, with player housing disabled Updated SPACEX and SPACEY values for all houses in dfndata/house/house.dfn to match updated house placement code Added new JS property to Regions that can be used to determine or change state of player housing in a region: .canPlaceHouse() Updated rules for usage of dye tubs to dye locked down items; now only house owners or co-owners may dye locked down items Updated rules for usage of the following locked down items in a house, which are now only usable by house owners and co-owners Dyes, Guildstone Deeds, Recall Runes (renaming), Rename Deeds, Townstone Deeds, House Deeds, Boat Models, Player Vendor Deeds, Ore, Hair Dye Updated rules for usage of the following locked down items in a house, which are now only usable by house owners, co-owners and friends: Keys, Dye Tubs, Magic Scrolls, Fireworks Wands, Magic Wands, Smithing Tools, Mining Tools, Fishing Poles Updated item lockdown rules to allow locking down (and releasing) items in a container as long as the container is locked down, and to only allow releasing a locked down container if it's empty of locked down items Updated item lockdown rules to only allow locking down movement-blocking items further than 2 tiles away from doors Updated rules for releasing items in houses - now the house owner can release any locked down items, co-owners can release items locked down by themselves or by friends, while friends can release only items locked down by themselves Added some feedback to player about why their attempted house placement failed Items added by GMs directly into multis will now decay based on the house-specific decay timer instead of the regular one Fixed an issue that could cause items to almost instantly decay after being released from lockdown in a house Placing house add-ons now properly takes into account SPACEX and SPACEY values when checking if they can fit in selected area of houses Re-added SPACEX and SPACEY values for Pentagram and Loom house add-ons House add-ons can now be converted back into house add-on deeds by chopping them with an axe Added new item type - IT_HOUSEADDON (201) - used by house add-ons placed in player houses Fixed a bug where keys would stop working after being added to a keyring, and would turn into blank keys upon release from the keyring Added visitor count for public player houses, which keeps track of how many visits a public house has received, with each player counted max 1 time every 24 hours Fixed an issue with FindPlayersInOldVisrange() where it didn't take into account that players could see buildings further away than the standard update range. This could cause players to see ghost images of buildings if they were at the "right" distance when the building was being demolished Added NODECAY tag to all signs and doors in dfndata/house/house.dfn Added FRONTDOOR or INTERIORDOOR (as appropriate) to all doors in dfndata/house/house.dfn Added BANX and BANY to specify ban location for some houses in dfndata/house/house.dfn instead of relying on finding SE corner automatically Implemented strongboxes (js/server/house/strongbox.js) for co-owners of a house, which can be placed with the house command "i wish to place a strongbox". Max capacity is 25 items Updated 'REMOVE command to take an optional parameter - itemID. If supplied, the command will remove all items with this itemID from a targeted container Fixed a bug when checking if dynamic items were blocking valid spawn locations for NPCs, some function arguments were in the wrong order! Improved code that finds valid spawn locations for items and NPCs spawned via spawn regions. As server gradually builds up lists of valid spawn locations per region over time, it will start using these lists more often, rather than always look for brand new spawn locations. Fixed a bug with CMulHandler::CheckStaticFlag() that prevented NPCs from spawning inside buildings with no static floors! Fixed an issue with repeating commands that prevented GMs from being able to cancel them when using the ClassicUO client Exposed character property .accountNum to JS engine Extended CDataList class to include a Clear() method for clearing lists Updated JS File method .Open() to support an optional, third argument - subFolderName - that defines in which sub-folder of UOX3/shared/ to store/look for a file. If no third argument is supplied, UOX3 will default to using the shared folder itself. Updated JS File method .Length() to return a value of -1 for files that don't exist Added new code function, exposed to JS engine with same parameters, which simply checks if a given tile ID has a specific flag bool CheckTileFlag( UI16 itemID, TILEFLAG flagToCheck ) Added JS function used to find the root container of an item (if any) FindRootContainer( itemSerial ) FindRootContainer( item ) Added new JS function that allows deleting files from UOX3/shared/ folder or subfolders of shared folder. If no subFolderName is provided, looks for file directly in shared folder itself. Restrictions on file- and folder-names apply. bool DeleteFile( fileName, subFolderName ) Added new JS functions for checking if a specific client or server feature is enabled. See documentation for full list of client/server features. GetClientFeature( bitNum ) // Returns true if specified client feature is enabled on server GetServerFeature( bitNum ) // Returns true if specified server feature is enabled on server Added new JS function for returning the value of almost any server setting from UOX.INI GetServerSetting( settingNameInDoubleQuotes ) Updated JS function DoesDynamicBlock() with two new parameters - checkOnlyMultis and checkOnlyNonMultis Updated JS function DoesMapBlock() with two new parameters - checkMultiPlacement and checkForRoad Fixed an issue where a LoS check would prevent players from accessing containers in their own backpack Added new functions in findfuncs.cpp to make it easier to find items near another object or location: findNearbyItems( object, distance ) findNearbyItems( x, y, worldNumber, instanceID, distance ) Added new Item property - maxItems - used by containers to determine their max item capacity Added new Item property - totalItemCount - used to get total item count in a container (including sub-containers) Added check for max item capacity when creating new items that are added to a character's backpack - items will be created below character's feet if backpack is full! Added new DFN tag for items, used by containers to determine item capacity for a given container: MAXITEMS=# // 125 is the default for all containers if not set Added new JS Item properties: .maxItems // gets/sets item capacity for a given container .totalItemCount // gets total item count in a container, including sub-containers Updated item tooltips for containers to show accurate total item count, as well as to display max item capacity Fixed a bug where picking up items from a non-locked down pile of items on the floor inside a multi could cause the remaining pile to be seen as no longer inside the multi, disallowing locking it back down and causing it to decay based on regular decay timer instead of house-specific one Updated JS command set to allow setting poison-level on items ('set poison #) and hunger-level on characters ('set hunger #) Fixed an issue with js/item/food.js that prevented poisoned food from poisoning characters when eaten Fixed an issue with js/skill/poisoning.js that prevented players from poisoning food! Updated various JS scripts and hardcoded targeting functions to disallow the targeting of locked down resources using skills and tools Updated JS Method TextMessage() to support three extra, optional parameters. Note that if one optional parameter is included, all preceding optional parameters are also required! speechTarget - What kind of target is this message intended for? 0 - Only visible for sender and receiver of message 1 - Visible to all players in range 2 - Visible to all NPCs and players in range 3 - Visible to all PCs everywhere + NPCs in range 4 - Visible to all PCs everywhere (broadcast) 5 - Only visible for the receiver of the message speechTargetSerial - The serial of the receiver of the message, used if speechTarget is 0 or 5 speechFontType - The type of font to display the text in. Defaults to normal. 0 - Bold 1 - Normal with shadow 2 - Bold with shadow 3 - Normal 4 - Gothic 5 - Italic 6 - Small, dark 7 - Colourful 8 - Runic (only works with CAPS) 9 - Small, light Added timestamp to worldsaves in console, to make it easier to see when a particular world-save was done Added info about compiler/environment displayed at the top of the UOX3 console during startup Updated dictionary files with new messages primarily related to housing
2020-11-04 02:00:37 +08:00
}
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
case CCP_ISCHAR: *vp = JSVAL_TRUE; break;
case CCP_ISITEM: *vp = JSVAL_FALSE; break;
case CCP_ISSPAWNER: *vp = JSVAL_FALSE; break;
Small update Fixed an issue with an internal movement check that prevented characters from moving in valid map areas in Felucca/Trammel from X 6144 to X 7168 Fixed an issue where .instanceID property was misspelled in 'xgo GM command script, causing characters to be teleported to an out of bounds area where they would no longer be saved (js/commands/targeting/x.js) Added some additional error-checking to .Teleport()/.SetLocation() JS Method to prevent script-accidents from sending characters out of bounds. Updated Poisoning skill to add poison-charges to weapons being poisoned. Charges are consumed when applying poison in combat (js/skill/poisoning.js) Updated combat code to consume poison-charges if a poisoned weapon is used to poison an opponent Updated shoplists for Blacksmiths and Weaponsmiths - they now buy/sell longswords (dfndata/items/shoplist.dfn) Updated MageShopping shoplist for mage vendors - they now buy/sell mass curse scrolls (dfndata/items/shoplist.dfn) Added new Spawn Region DFN tag that can specify which era or eras of UO (Multiple comma-separated entries supported) a given spawn region is valid for. Spawn region not valid for core shard era will be ignored. Syntax: ERAS=UO,T2A,UOR,LBR,AOS,SE,ML,SA,HS,TOL Added new Spawn Region DFN tag that allows using another spawn region as a "parent". All properties of this parent will be inherited except for these, which are ignored: ERAS, NPCLIST, ITEMLIST, NPC and ITEM. Syntax for new tag: GET=# // Inherit a specified spawn region Added spawn region for animal trainer vendor in Vesper stable Added spawn region for fur trader/tanner vendors in The Best Hides of Britain Added spawn region for spinner vendor in The Lord's Clothier's and The Right Fit shops in Britain Added spawn region for tanner NPC to Nujel'm Tannery (and fixed leatherworker spawn region for same area) Added spawn regions for banker NPCs in East Bank of Britain, First Bank of Moonglow, Jhelom Bank and Jeweler, Bank of Skara Brae Added spawn regions for stables, tailor and blacksmith inside Castle British Added spawn regions for mage shops, mage guilds and farm houses in Moonglow Added spawn regions for misc vendors and townfolk in multiple cities Added spawn regions for Fire Island Updated spawn regions for Dagger Isle/Ice Island Added spawn regions for forests and jungles in southern Britannia and on various islands including Bucc's Den, Moonglow, Serpent's Hold, and misc unpopulated islands Added spawn regions for area east of Skara Brae, around Hedge Maze and south of Britain Added spawn regions for wandering healers outside every dungeon entrance in Britannia and Lost Lands Re-integrated ocean spawn regions for ocean creatures (dolphin, walrus, water elemental, sea serpent) from the original community-based spawn file Added reagent spawns in overworld spawn regions in Britannia/Lost Lands Added special reagent spawns in swamp areas Added additional overworld spawn regions in Britannia/Lost Lands Added spawn regions for Khaldun dungeon that spawn some new and some old NPCs: Old: Zombies, skeletons, skeletal mages, skeletal knights, ancient liches New: Cursed (and named) NPCs, shadowfiends, zealots of khaldun (knights/summoners), tentacles of the harrower Updated size and positions of some existing overworld spawn regions Fixed incorrect spawn region size for small island south of Trinsic Added switch/door puzzle functionality in Khaldun dungeon using new switch/door combo script (js/item/dungeons/switch_door_combo.js) Added "smart objects" in Khaldun dungeon that activate when you come close enough (js/item/dungeons/smart_activate_item.js) Added teleport locations within Khaldun dungeon (js/teleport.scp) Added custom AIs to existing NPC spawning in Khaldun dungeon: Ancient Lich (summons other undead, and can turn into one of them for disguise) Added DFN entries for new NPCs spawning in Khaldun dungeon, some with custom AIs: [tentacles_of_the_harrower] -> Tentacles of the Harrower (life steal) [shadowfiend] -> Shadowfiends (seek out and reveal hidden players) [zealot_knight]/[zealot_summoner] -> Zealots of Khaldun (turn into undead on death, male/female variants) [cursed] -> Cursed (male/female variants) [spectralarmor] -> Spectral Armor Added DFN entries for new (named) NPCs spawning in Khaldun dungeon: [lysander_gathenwale] -> Lysander Gathenwale [grimmoch_drummel] -> Grimmoch Drummel [morg_bergen] -> Morg Bergen [tavara_sewel] -> Tavara Sewel Added new NPC DFN entries: [leatherworker] -> alias for male/female leatherworker vendors [mapmaker] -> alias for male/female mapmaker vendors Added new Race DFN entries: [RACE 29] -> Cursed (enemies of RACE 30) [RACE 30] -> Zealots (enemies of RACE 29) Added new book DFN entries for Khaldun journals of Lysander, Tavara and Grimmoch - available as loot from the respective NPCs (dfndata/misc/books.dfn and dfndata/items/misc/books.dfn) Added 25% chance for hit-animations and hit-SFX to play for targets in combat, instead of playing every time - can get very spammy Monsters with actual weapons equipped (like Ophidian Enforcer with Halberd/Bardiche) will now get appropriate combat SFX for hitting with that weapon Updated Healing skill to base cure/resurrection skill requirements on the calculated skill, rather than base skill (js/skill/healing.js) Fixed an issue where healing with bandages and dying in the process would not properly reset the healing-related tags and skills used Updated healing script to show a resurrection confirmation menu for players targeted with bandages for resurrect (js/skill/healing.js) All skill usage states now reset on death, to prevent cases of players being "busy" while trying to use skills that got stuck due to script bugs. The 'regspawn GM command now supports a new parameter called "max". Updated command syntax: 'regspawn # // perform a single respawn cycle in a specific spawn region 'regspawn all // perform a single respawn cycle across all spawn regions 'regspawn max // respawn ALL spawn regions to MAX capacity in one go Added new UOX.INI setting that determines the maximum range at which NPCs can initiate attacks on players/NPCs (the old MAXRANGE=10 setting now instead defines max range at which players can initiate attacks on players/NPCs): MAXNPCAGGRORANGE=10 Optimized performance by significantly reducing the number of line-of-sight checks performed by characters, especially in combat scenarios, or when evaluating potential targets for NPC AIs. The amount of checks done is also affected by the new ini setting for max aggro range. Fixed an issue where both NPC and player characters would instantly drop one hunger level (from 6 to 5) upon creation since hungerrate was not initialized until after first hunger-event Updated character priv property from UI16 to UI32, and added a new flag that determines if fame/karma title is hidden for character: HIDEFAMEKARMATITLE (0x10000) NPCs will no longer aggro other NPCs if the Z difference between them is greater or equal to 20 (i.e. they're on different floors), unless both are using ranged weapons and both are in range Fixed an issue where players could get discounts from shopkeepers even though neither player nor shopkeeper were members of a NPC guild (js/npc/ai/shopkeeper.js) Fixed an issue where the "premium" a player would get when selling items to a shopkeeper in the same NPC guild as them would be 110% extra on top of the item's value, instead of the intended 10% (js/npc/ai/shopkeeper.js) (Thanks, cobrag0318!) Added missing tall straw hat to tailoring crafting scripts (Thanks, Dragon Slayer!) Improved error reporting during compilation of individual scripts being reloaded - will now show more context and line number onCombatEnd JS Event now also triggers when NPCs ignore their target and/or evade during combat Updated 'decorate command to support saving/loading custom tags on items for world templates. These are stored after a @ symbol in the world template, each custom tag separated by a | symbol, and with each custom tag saved using this syntax: key$type$value Updated resource-harvesting scripts to use script-specific global (const) variables, to avoid interference between different scripts (js/server/resource/*) Added new resource-harvesting scripts and added spawn regions for these in fields on farms all over Britannia/Lost Lands cabbages (js/server/resource/cabbages.js) canteloupes (js/server/resource/canteloupes.js) carrots (js/server/resource/carrots.js) garlic (js/server/resource/garlic.js) gourds (js/server/resource/gourds.js) honeydew melons (js/server/resource/honeydewmelon.js) onions (js/server/resource/onions.js) pumpkins (js/server/resource/pumpkins.js) squashes (js/server/resource/squashes.js) turnips (js/server/resource/turnips.js) watermelons (js/server/resource/watermelon.js) Updated CSpawnRegion::FindItemSpotToSpawn() function in cSpawnRegion.cpp to prevent duplicate spawning of exact same item in exact same location Updated sectionid of all potion and scroll aliases to match main item, so they'll get correctly picked up by NPC shopkeepers (dfndata/items/magic/potions.dfn and scrolls.dfn) Specified sectionid for backpacks, so it also gets applied to packs added using the alias [backpack] (dfndata/items/misc/provisions.dfn) Fixed a code issue that prevented players from selling empty containers to NPC shopkeepers willing to buy such containers Fixed an issue where field-spells (wall of stone, poison field, etc) would ignore dynamic/static items that should block these Fixed an issue where field-spells could be cast into houses from the outside by standing next to a wall and targeting self Fixed a War/Peace-mode desync between client and server by having server always notify client (using war-toggle packet) when the "at war" flag is toggled for player character Fixed an issue with hiding skill that wouldn't allow player to hide after having acquired self as target in combat (through spellcasting, for instance) (Thanks, Dragon Slayer!) Fixed an issue where mana/reagents were consumed and skillcheck performed before all spellcast-validations had succeeded, resulting in the occasional loss of reagents/mana when spellcasting was disallowed (code and js/magic/clumsy.js and level1targ.js) Fixed an issue with lack of criminal-flagging for casting of hostile spells scripted in JS (clumsy, magic arrow, feeblemind) vs blue targets (js/magic/clumsy.js and level1targ.js) Fixed some issues with Line-of-Sight checking code that returned incorrect results, which amongst other things affected spellcasting in areas with uneven terrain Fixed some issues with movement code and climbing of ladders, in particular the rope ladder in the 2-story log cabin. Code now sets a "is climbing" flag when character steps onto a rope ladder, and uses that to help resolve some edge cases, and then unsets it when they step off. Renamed section headers of some map-items in DFNs from "locationname" to "locationnamemap" for clarity (example: "britain" to "britainmap") Fixed broken "map wrapping" when sailing to edges of map in Felucca or Trammel Fixed a server crash related to attempts at reading data from invalid map tiles
2025-06-27 08:40:02 +08:00
case CCP_SPAWNSERIAL:
JS_NewNumberValue( cx, gPriv->GetSpawn(), vp );
Small update Fixed an issue with an internal movement check that prevented characters from moving in valid map areas in Felucca/Trammel from X 6144 to X 7168 Fixed an issue where .instanceID property was misspelled in 'xgo GM command script, causing characters to be teleported to an out of bounds area where they would no longer be saved (js/commands/targeting/x.js) Added some additional error-checking to .Teleport()/.SetLocation() JS Method to prevent script-accidents from sending characters out of bounds. Updated Poisoning skill to add poison-charges to weapons being poisoned. Charges are consumed when applying poison in combat (js/skill/poisoning.js) Updated combat code to consume poison-charges if a poisoned weapon is used to poison an opponent Updated shoplists for Blacksmiths and Weaponsmiths - they now buy/sell longswords (dfndata/items/shoplist.dfn) Updated MageShopping shoplist for mage vendors - they now buy/sell mass curse scrolls (dfndata/items/shoplist.dfn) Added new Spawn Region DFN tag that can specify which era or eras of UO (Multiple comma-separated entries supported) a given spawn region is valid for. Spawn region not valid for core shard era will be ignored. Syntax: ERAS=UO,T2A,UOR,LBR,AOS,SE,ML,SA,HS,TOL Added new Spawn Region DFN tag that allows using another spawn region as a "parent". All properties of this parent will be inherited except for these, which are ignored: ERAS, NPCLIST, ITEMLIST, NPC and ITEM. Syntax for new tag: GET=# // Inherit a specified spawn region Added spawn region for animal trainer vendor in Vesper stable Added spawn region for fur trader/tanner vendors in The Best Hides of Britain Added spawn region for spinner vendor in The Lord's Clothier's and The Right Fit shops in Britain Added spawn region for tanner NPC to Nujel'm Tannery (and fixed leatherworker spawn region for same area) Added spawn regions for banker NPCs in East Bank of Britain, First Bank of Moonglow, Jhelom Bank and Jeweler, Bank of Skara Brae Added spawn regions for stables, tailor and blacksmith inside Castle British Added spawn regions for mage shops, mage guilds and farm houses in Moonglow Added spawn regions for misc vendors and townfolk in multiple cities Added spawn regions for Fire Island Updated spawn regions for Dagger Isle/Ice Island Added spawn regions for forests and jungles in southern Britannia and on various islands including Bucc's Den, Moonglow, Serpent's Hold, and misc unpopulated islands Added spawn regions for area east of Skara Brae, around Hedge Maze and south of Britain Added spawn regions for wandering healers outside every dungeon entrance in Britannia and Lost Lands Re-integrated ocean spawn regions for ocean creatures (dolphin, walrus, water elemental, sea serpent) from the original community-based spawn file Added reagent spawns in overworld spawn regions in Britannia/Lost Lands Added special reagent spawns in swamp areas Added additional overworld spawn regions in Britannia/Lost Lands Added spawn regions for Khaldun dungeon that spawn some new and some old NPCs: Old: Zombies, skeletons, skeletal mages, skeletal knights, ancient liches New: Cursed (and named) NPCs, shadowfiends, zealots of khaldun (knights/summoners), tentacles of the harrower Updated size and positions of some existing overworld spawn regions Fixed incorrect spawn region size for small island south of Trinsic Added switch/door puzzle functionality in Khaldun dungeon using new switch/door combo script (js/item/dungeons/switch_door_combo.js) Added "smart objects" in Khaldun dungeon that activate when you come close enough (js/item/dungeons/smart_activate_item.js) Added teleport locations within Khaldun dungeon (js/teleport.scp) Added custom AIs to existing NPC spawning in Khaldun dungeon: Ancient Lich (summons other undead, and can turn into one of them for disguise) Added DFN entries for new NPCs spawning in Khaldun dungeon, some with custom AIs: [tentacles_of_the_harrower] -> Tentacles of the Harrower (life steal) [shadowfiend] -> Shadowfiends (seek out and reveal hidden players) [zealot_knight]/[zealot_summoner] -> Zealots of Khaldun (turn into undead on death, male/female variants) [cursed] -> Cursed (male/female variants) [spectralarmor] -> Spectral Armor Added DFN entries for new (named) NPCs spawning in Khaldun dungeon: [lysander_gathenwale] -> Lysander Gathenwale [grimmoch_drummel] -> Grimmoch Drummel [morg_bergen] -> Morg Bergen [tavara_sewel] -> Tavara Sewel Added new NPC DFN entries: [leatherworker] -> alias for male/female leatherworker vendors [mapmaker] -> alias for male/female mapmaker vendors Added new Race DFN entries: [RACE 29] -> Cursed (enemies of RACE 30) [RACE 30] -> Zealots (enemies of RACE 29) Added new book DFN entries for Khaldun journals of Lysander, Tavara and Grimmoch - available as loot from the respective NPCs (dfndata/misc/books.dfn and dfndata/items/misc/books.dfn) Added 25% chance for hit-animations and hit-SFX to play for targets in combat, instead of playing every time - can get very spammy Monsters with actual weapons equipped (like Ophidian Enforcer with Halberd/Bardiche) will now get appropriate combat SFX for hitting with that weapon Updated Healing skill to base cure/resurrection skill requirements on the calculated skill, rather than base skill (js/skill/healing.js) Fixed an issue where healing with bandages and dying in the process would not properly reset the healing-related tags and skills used Updated healing script to show a resurrection confirmation menu for players targeted with bandages for resurrect (js/skill/healing.js) All skill usage states now reset on death, to prevent cases of players being "busy" while trying to use skills that got stuck due to script bugs. The 'regspawn GM command now supports a new parameter called "max". Updated command syntax: 'regspawn # // perform a single respawn cycle in a specific spawn region 'regspawn all // perform a single respawn cycle across all spawn regions 'regspawn max // respawn ALL spawn regions to MAX capacity in one go Added new UOX.INI setting that determines the maximum range at which NPCs can initiate attacks on players/NPCs (the old MAXRANGE=10 setting now instead defines max range at which players can initiate attacks on players/NPCs): MAXNPCAGGRORANGE=10 Optimized performance by significantly reducing the number of line-of-sight checks performed by characters, especially in combat scenarios, or when evaluating potential targets for NPC AIs. The amount of checks done is also affected by the new ini setting for max aggro range. Fixed an issue where both NPC and player characters would instantly drop one hunger level (from 6 to 5) upon creation since hungerrate was not initialized until after first hunger-event Updated character priv property from UI16 to UI32, and added a new flag that determines if fame/karma title is hidden for character: HIDEFAMEKARMATITLE (0x10000) NPCs will no longer aggro other NPCs if the Z difference between them is greater or equal to 20 (i.e. they're on different floors), unless both are using ranged weapons and both are in range Fixed an issue where players could get discounts from shopkeepers even though neither player nor shopkeeper were members of a NPC guild (js/npc/ai/shopkeeper.js) Fixed an issue where the "premium" a player would get when selling items to a shopkeeper in the same NPC guild as them would be 110% extra on top of the item's value, instead of the intended 10% (js/npc/ai/shopkeeper.js) (Thanks, cobrag0318!) Added missing tall straw hat to tailoring crafting scripts (Thanks, Dragon Slayer!) Improved error reporting during compilation of individual scripts being reloaded - will now show more context and line number onCombatEnd JS Event now also triggers when NPCs ignore their target and/or evade during combat Updated 'decorate command to support saving/loading custom tags on items for world templates. These are stored after a @ symbol in the world template, each custom tag separated by a | symbol, and with each custom tag saved using this syntax: key$type$value Updated resource-harvesting scripts to use script-specific global (const) variables, to avoid interference between different scripts (js/server/resource/*) Added new resource-harvesting scripts and added spawn regions for these in fields on farms all over Britannia/Lost Lands cabbages (js/server/resource/cabbages.js) canteloupes (js/server/resource/canteloupes.js) carrots (js/server/resource/carrots.js) garlic (js/server/resource/garlic.js) gourds (js/server/resource/gourds.js) honeydew melons (js/server/resource/honeydewmelon.js) onions (js/server/resource/onions.js) pumpkins (js/server/resource/pumpkins.js) squashes (js/server/resource/squashes.js) turnips (js/server/resource/turnips.js) watermelons (js/server/resource/watermelon.js) Updated CSpawnRegion::FindItemSpotToSpawn() function in cSpawnRegion.cpp to prevent duplicate spawning of exact same item in exact same location Updated sectionid of all potion and scroll aliases to match main item, so they'll get correctly picked up by NPC shopkeepers (dfndata/items/magic/potions.dfn and scrolls.dfn) Specified sectionid for backpacks, so it also gets applied to packs added using the alias [backpack] (dfndata/items/misc/provisions.dfn) Fixed a code issue that prevented players from selling empty containers to NPC shopkeepers willing to buy such containers Fixed an issue where field-spells (wall of stone, poison field, etc) would ignore dynamic/static items that should block these Fixed an issue where field-spells could be cast into houses from the outside by standing next to a wall and targeting self Fixed a War/Peace-mode desync between client and server by having server always notify client (using war-toggle packet) when the "at war" flag is toggled for player character Fixed an issue with hiding skill that wouldn't allow player to hide after having acquired self as target in combat (through spellcasting, for instance) (Thanks, Dragon Slayer!) Fixed an issue where mana/reagents were consumed and skillcheck performed before all spellcast-validations had succeeded, resulting in the occasional loss of reagents/mana when spellcasting was disallowed (code and js/magic/clumsy.js and level1targ.js) Fixed an issue with lack of criminal-flagging for casting of hostile spells scripted in JS (clumsy, magic arrow, feeblemind) vs blue targets (js/magic/clumsy.js and level1targ.js) Fixed some issues with Line-of-Sight checking code that returned incorrect results, which amongst other things affected spellcasting in areas with uneven terrain Fixed some issues with movement code and climbing of ladders, in particular the rope ladder in the 2-story log cabin. Code now sets a "is climbing" flag when character steps onto a rope ladder, and uses that to help resolve some edge cases, and then unsets it when they step off. Renamed section headers of some map-items in DFNs from "locationname" to "locationnamemap" for clarity (example: "britain" to "britainmap") Fixed broken "map wrapping" when sailing to edges of map in Felucca or Trammel Fixed a server crash related to attempts at reading data from invalid map tiles
2025-06-27 08:40:02 +08:00
break;
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
case CCP_MAXHP: *vp = INT_TO_JSVAL( gPriv->GetMaxHP() ); break;
case CCP_MAXSTAMINA: *vp = INT_TO_JSVAL( gPriv->GetMaxStam() ); break;
case CCP_MAXMANA: *vp = INT_TO_JSVAL( gPriv->GetMaxMana() ); break;
Misc Pathfinding fixes and other things - v0.99.4b Fixed an issue with NPC trainers where they would list incorrectly the available skills players could train Fixed an issue where house key could not be used to open locked doors if key was not contained in root of player's backpack (UOX3/js/item/doors.js) When NPCs in wanderTypes WT_BOX, WT_CIRCLE or WT_FREE are blocked too many times from moving by other characters, they will now pause for 60 seconds before attempting to move again Exposed .oldWanderType NPC property to JS engine, and updated 'set command to also update this property when manually changing NPC wanderType Reduced max attempts at calculating path for NPCs in wanderTypes WT_BOX, WT_CIRCLE or WT_FREE to 25 steps, unless they are evading and attempting to move back into their original wander box/circle NPCs who enter "evasion" state because they are unable to find a valid path to an attacker will now have their health reset to maximum, to prevent an exploit to take down any NPCs without risk of taking any damage in return JS Methods WalkTo() and RunTo() now actually make use of the provided maxSteps parameter when advanced pathfinding is enabled; previously it would default to 500 steps. Added new JS event that triggers when an NPC enters evasion state in combat due to being unable to reach their target onEnterEvadeState( mNPC, enemyChar ) // enemyChar would be the character they are unable to reach Added a new command - 'cure - that can cure a targeted character of any poisons (UOX3/js/commands/targeting/stats.js) NPCs of same race will no longer attack one another if hit by each other's AoE spells Fixed an issue with NPC pathfinding in combat that prevented ranged NPCs from closing in on their targets when losing LoS Spellcasting NPCs that cannot pathfind all the way to their target in combat will now attempt to pathfind to an area near the target instead Fixed an issue that prevented tiller-men from being correctly associated with their boats after a server restart Fixed an issue with combat where ranged characters could shoot bows further than the allowed max range for archery specified in uox.ini
2020-11-15 02:59:45 +08:00
case CCP_OLDWANDERTYPE: *vp = INT_TO_JSVAL( gPriv->GetOldNpcWander() ); break;
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
case CCP_WANDERTYPE: *vp = INT_TO_JSVAL( gPriv->GetNpcWander() ); break;
case CCP_FX1: *vp = INT_TO_JSVAL( gPriv->GetFx( 0 )); break;
case CCP_FY1: *vp = INT_TO_JSVAL( gPriv->GetFy( 0 )); break;
case CCP_FX2: *vp = INT_TO_JSVAL( gPriv->GetFx( 1 )); break;
case CCP_FY2: *vp = INT_TO_JSVAL( gPriv->GetFy( 1 )); break;
case CCP_FZ: *vp = INT_TO_JSVAL( gPriv->GetFz() ); break;
case CCP_SPAWNX: *vp = INT_TO_JSVAL( gPriv->GetSpawnX() ); break;
case CCP_SPAWNY: *vp = INT_TO_JSVAL( gPriv->GetSpawnY() ); break;
case CCP_SPAWNZ: *vp = INT_TO_JSVAL( gPriv->GetSpawnZ() ); break;
Minor pathfinding revamp plus misc fixes Updated target-based 'wipe command to also affect valid NPCs (non-invulnerable, non-pets) (js/commands/wipe.js) NPC admin gump (js/commands/wholist.js) will now force-refresh on next open after NPCs have been removed via the remove button in the menu Spawn Object admin gump (js/commands/spawnadmin.js) will now force-refresh on next open after spawn objects have been removed via the remove button in the menu Added three new GM commands (js/commands/targeting/xwalk.js) that can be used to control NPCs remotely: 'xwalk // Makes targeted NPC pathfind and walk to target location 'xrun // Makes targeted NPC pathfind and run to target location 'xturn // Makes targeted NPC turn towards target location Updated AdvancedPathfinding() in movement.cpp to include two optional parameters allowPartial // if true, move even if calculated path is blocked, until blocked (defaults to false) ignoreDoors // if true, ignore doors during pathfinding calculations and calculate the path is if the door was not there (defaults to false) Updated .WalkTo() and .RunTo() JS Character Methods to support the two additional pathfinding parameters, and also to support maxSteps values beyond 255 Updated pathfinding heuristic from Manhattan (4-way) to Octile (8-way) distance for improved pathfinding accuracy and increased performance with diagonal movement In some situations, UOX3 will now calculate a new partial path for NPCs who failed to follow their assigned path, to get them closer to their final destination Optimized pathfinding logic for NPCs following a target (like pets/hirelings, or NPCs in combat), to reduce the amount of pathfinding calculations required when target is moving. The NPCs will now keep track of the general direction towards their target, and if the NPCs are already heading in the right direction, they'll keep going as long as they have a path left to follow or until direction towards target has changed. This also eliminates a problem where NPCs would stick to their path until they reach the end, even if target has gone in a different direction. Updated logic for how NPCs turn during pathfinding. Instead of adding an extra "push" for direction into the calculated path itself to ensure NPC will both turn and move in that direction, which allowed some inaccuracies to creep into the calculated paths, that extra push is now handled while NPC is executing the path instead, whenever direction changes are needed Partial pathfinding is now enabled for fleeing NPCs by default, to increase their chances of getting further away from their opponent in combat Partial pathfinding is now enabled for NPCs in water by default, to allow them to get as close as possible to their opponent in combat Fixed an issue where NPC movement speeds would misbehave at certain speeds where the calculated movement time would get rounded down to zero NPCs will now play a fidgeting animation if they've remained motionless for 3 seconds or more while not in a state of actively trying to move/pathfind Increased max pathfinding steps for NPCs in combat from 50 to 75 Fixed an issue where NPCs would stop and wait when they should have been moving, after successful pathfinding calculation Fixed an issue where NPCs that ignore a target and enter evade state would not leave combat Added two new JS Character properties that can be used to evaluate pathfinding success (for instance in combination with onPathFindEnd Event), and/or opens for manipulating pathfinding target locations via scripts: .pathTargX // Current NPC pathfinding target, X coordinate .pathTargY // Current NPC pathfinding target, Y coordinate
2025-05-05 00:03:09 +08:00
case CCP_PATHTARGX: *vp = INT_TO_JSVAL( gPriv->GetPathTargX() ); break;
case CCP_PATHTARGY: *vp = INT_TO_JSVAL( gPriv->GetPathTargY() ); break;
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
case CCP_ISONHORSE: *vp = BOOLEAN_TO_JSVAL( gPriv->IsOnHorse() ); break;
0.99.4e Added support for packet 0xE2 (New Character Animation, used to play animations in client v7.0.0.0+) via cEffects::PlayNewCharacterAnimation( CChar *mChar, UI16 actionID, UI16 subActionID, UI08 subSubActionID ) Added support for new animation packet in JS Character method DoAction() using a second parameter that specifies animation variation, which if present forces server to send new animation packet instead of old. This means the 'action/npcaction commands can now be used to play animations on gargoyles/humans in client v7.0.0.0+ using the following syntax: 'action [action subAction] Created new enums for character actions and sub-actions, and updated code to refer to these instead of using "magic" numbers Added new options in UOX.INI under [settings] section: FORCENEWANIMATIONPACKET=0/1 // If enabled (default), forces the use of the new animation packet for playing various character animations for both NPCs in general and for player characters connected with client v7.0.0.0+ Updated various actions performed by players and NPCs to use new animation packet (combat, spellcasting, mining) if connected with client v7.0.0.0+ and ini setting to force new animation packet is enabled Added basic support for gargoyle flying ability. Can now use flying ability itself to enter/exit flying state, and the state change will also get sent to nearby players. Flying players are treated the same way as mounted players; polymorph spells will auto-dismounts mounted/flying player, same rules for stealth applies to flying as riding, etc. Exposed Character property to JS engine: .isFlying // returns true if character is flying Moved Orc and Ratman races from RACE 1 and 2 to RACE 22 and 23 in dfndata/race/races.dfn to make room for two new player races, that are applied to new player characters during character creation: [RACE 1] - Elf [RACE 2] - Gargoyle Updated orcs and ratmen in dfndata/npc/humanoids.dfn with race IDs 22 and 23 respectively Added items in dfndata/items/skills/tools/cooking.dfn to item menu under Skills > Tools > Cooking Fixed an issue where moving items around within a container at max item capacity was not allowed The GM command 'set can now modify a character's current mana using 'set mana # Added JS command to get specific object property values (using same property names as 'set command): 'get [objectProperty] Exposed Item/Character properties to JS: .oldX // Previous X coordinate for object .oldY // Previous Y coordinate for object .oldZ // Previous Z coordinate for object Exposed Character properties to JS: .mana // Character's current amount of mana Updated version of Winsock requested by UOX3 from 2.0 to 2.2 Exposed timer for updating NPC flags to [timers] section of UOX.INI: NPCFLAGUPDATETIMER=5 // Interval in seconds between each time NPC flags are updated. Default adjusted down from 30 to 5 seconds Fixed an issue where UOX3 was trying to output some debug/warning messages to console using the wrong console method Made some small tweaks to NPC pathfinding to make NPCs more likely to pick a new target location when their old one is blocked Added HP DFN tag to guard NPCs to prevent them from spawning with half health Removed -lstdc++fs from Makefile and replaced with special instructions for users of gcc below v9.x Fixed a buffer overrun issue with tiledata item names Eliminated a bunch of compilation warnings in VS2017 Updated JS Method CreateDFNItem to allow creating items without referencing a socket/character. Syntax: var myItem = CreateDFNItem( null, null, itemSectionID, amount, "ITEM", false, worldNumber, instanceID ); Added functional chessboard that operates on standard chess rules. Pieces cannot be removed from the board, snap to the chessboard grid when dropped, are subject to movement restrictions per chesspiece, will capture opponent pieces if landing on their square. Board can be reset by dragging king-piece off to the side of the board (js/item/gameboards.js and js/item/chesspiece.js) Added functional checkerboard, with pieces that cannot be removed, can only move in diagonals, can jump across opponent pieces to capture them. Board can be reset by ??? (js/item/gameboards.js and js/item/checkerpiece.js) Using the 'go command without any additional parameters will now open the GM travel menu (js/commands/go.js)
2021-04-08 18:54:15 +08:00
case CCP_ISFLYING: *vp = BOOLEAN_TO_JSVAL( gPriv->IsFlying() ); break;
0.99.4v Added JS command to reload dictionaries 'reloaddictionaries Fixed a server crash related to casting of spells Fixed some issues with Line-of-Sight checks related to items under/above ground, LoS checks between different floors of buildings, etc. Updated handling of skill-training keywords to be based on language-independent keyword IDs rather than trying to match player-input text to specific skill-names Updated animal-trainer/stablemasterscript (js/npc/ai/stablemaster.js) with several changes: Fixed an issue where the same pet would be stabled in all available slots if payment was taken from player's bank account instead of their backpack Fixed an issue where stablemaster would not pause walking for a while when a player interacts with them Converted all system messages and text messages in stablemaster script to dictionary entries Added new NPC AI type to source - AI_STABLEMASTER (9) - and assigned this to animal trainers. This is used to identify this type of NPCs for the purpose of displaying relevant context menus Reworked banker AI script (js/npc/ai/banker.js) to use triggerwords from client instead of hard-defined strings, to work better with multiple languages (and work with all relevant triggerwords) Fixed a bug with banker AI script (js/npc/ai/banker.js) that prevented players from using the "withdraw" command Re-added NPC AI 8 to banker NPCs (dfndata/npc/male_vendors.dfn and female_vendors.dfn) so code can check for presence of this AI when handling context menus Removed remaining hard-coded banking functionality - all handled by script anyway Added new context menu option for NPC bankers - Open Bankbox Updated code handling of context menus to only show context menus when relevant: Open Paperdoll - Shows for all characters with a paperdoll Open Backpack - Shows for player's character, pack animals and hirelings Open Bankbox - Shows for banker NPCs (if within 8 tiles) Buy/Sell - Shows for vendor NPCs (if within 8 tiles, and if they have anything for sale/are buying anything) Added new context menu entries for pets, which can be used if player is within 12 tiles of pet: Command: Kill Command: Stop Command: Follow Command: Stay Command: Guard Add Friend Remove Friend Transfer Release Added new context menu entries for stablemasters/animal trainers: Claim All Pets Stable Pet Added new context menu entries for Escort Quest NPCs Ask Destination (if within 3 tiles) Accept Escort (if within 3 tiles) Abandon Escort Added new context menus for NPCs that can teach skills to players (limited to max 10 per NPC) Train [skillName] Added new AI script for NPC hirelings (3204=js/npc/ai/hireling.js), who can be hired to follow the player around for a limited amount of time, and function the same way as pets. In addition to the regular pet commands, these speech commands are supported: hire // The hireling will respond with the cost to hire them dismiss // Replaces the "release" command for pets; will dismiss the hireling patrol // The hireling will patrol between it's current location and a second targeted location nearby move // The hireling will try to shuffle out of the way fetch // The hireling will try to fetch a targeted item drop // The hireling will drop to the ground all loot they're currently carrying report // The hireling will report on the remaining time they're hired for Added new NPC DFN tag used by code to detect hireling NPCs for the purpose of displaying context menus: HIRELING // No additional value/data needed for tag Added new context menu entries for Hireling NPCs, in addition to the ones for regular pets: Hire // Can be used within 3 steps of the hireling, who will respond with cost to hire them Dismiss // Replaces the "release" command for pets, will dismiss the hireling Added HIRELING tag and SCRIPT=3204 to and updated stats of various NPCs that will be hireable: m_fighter, f_fighter, m_beggar, f_beggar, m_peasant, f_peasant, m_sailor, f_sailor, m_pirate, f_pirate Added new hireling NPC: m_paladin, f_paladin Added new UOX ini setting to enable/disable context menus CONTEXTMENUS=1/0 (defaults to 1) Added new Item JS Method to check if an item's ID is on a specified food list .IsOnFoodList( foodList ) // Returns true/false if item's ID is on specified foodList Added new OMNIVORE food list and assigned it to [basehuman] DFN section Added new Character JS Properties .isGuarded // Gets/Sets whether character is guarded by a pet/hireling .guarding // Gets/Sets the object (if any) being guarded by a pet/hireling Fixed multiple issues with health bars, flagging and character highlighting Added some crash protection for invalid data used with CUSTOMINTTAG and CUSTOMSTRINGTAG DFN tags for Items, NPCs and Multis Fixed an issue which prevented hard-coded checks from running when using items Added new global js object (Timer) to make the use of character timers in JS more robust, with properties matching timer names from enum in source. Properties: .TIMEOUT // Time until next attack can be done in combat .INVIS // Time until invisible character becomes visible .HUNGER // Time until character grows more hungry .THIRST // Time until character grows more thirsty .POISONTIME // Time until next tick of poison damage .POISONTEXT // Time until next message about suffering from poison .POISONWEAROFF // Time until poison wears off .SPELLTIME // Time until spell cast is completed. Can be set to 0 to interrupt .ANTISPAM // Time until next speech message can be sent (for anti spam purposes) .CRIMFLAG // Time until criminal flag runs out .MURDERRATE // Time until next murder count decay .PEACETIMER // Time until character can re-enter combat after being affected by peacemaking .FLYINGTOGGLE // Time until next time flying ability can be toggled for gargoyles .MOVETIME // Time until NPC can move again .SPATIMER // Time until next time NPC can cast a spell .SUMMONTIME // Time until a summoned NPC will vanish .EVADETIME // Time until an NPC will exit evade state .LOGOUT // Time it takes for a player char to vanish after logout Examples of use: var hungerTimer = myChar.GetTimer( Timer.HUNGER ) myChar.SetTimer( Timer.HUNGER, 15000 ) Added new Character JS Methods to add, remove and list friends of a pet/hireling: .AddFriend( playerToAdd ) // Adds player to friend list .RemoveFriend( playerToRemove ) // Removes player from friend list .GetFriendList() // Gets list of friends .ClearFriendList() // Clears list of friends Added new Character JS Method to fetch a player character's list of pets/followers .GetPetList() // Gets list of pets/followers Added new persistent NPC property to keep track of a pet's previous owners, whether those tamed the pet or had it transferred to them. Every time a pet is tamed, or is transferred to a new owner, this list is updated: GenericList< CChar * > petOwnerList Added new Character JS Method to check if a player is on a pet's owner list as a previous owner: .HasBeenOwner( mChar ) Previous owners of a pet can re-tame it with guaranteed chance of success Updated JS Method Refresh() to be usable with both items or characters, to send updated state of object to nearby players Added character tooltip [Guarded] for characters being guarded by a pet/hireling Pets/hirelings that are transferred will now immediately start following their new master instead of wandering freely Pets/hirelings can no longer be transferred between players as long as either party is flagged as a criminal Pets/hirelings can no longer be transferred to dead players Pets/hirelings can no longer be transferred to NPCs Summoned creatures can no longer be transferred to other players Summoned creatures can no longer have friends Friend lists of pets/hirelings are now cleared when the pet/hireling is transferred to another player Added new UOX.INI settings to control how many pets players can have active: MAXCONTROLSLOTS=0 // Maximum number of pet control slots available to player. Disabled if 0 MAXFOLLOWERS=5 // Maximum pets/followers a player can have active at the same time. Used if control slots are disabled MAXPETOWNERS=5 // Maximum number of different owners a pet can have over its lifetime before it becomes impossible to retame Added new NPC property and NPC DFN tag that keeps track of how many pet control slots an NPC would take up if owned by a player: UI08 controlSlots // source property CONTROLSLOTS=# // DFN tag Added new Character JS properties: .ownerCount // Get the total number of owners a pet/hireling has had, based on NPC's petOwnerList .controlSlots // Get/Set number of pet control slots an NPC will occupy .controlSlotsUsed // Get/Set the number of control slots used by a player Updated get (js/commands/targeting/get.js) and set (js/commands/targeting/set.js) commands to support getting/setting the following character properties: deaths ownerCount (read only) controlSlots controlSlotsUsed Updated NPC DFNs with default CONTROLSLOT=# tags Increased the max distance from player that onSpeech JS event will trigger from 7 to 12 Updated how "all attack" and "all follow" commands for pets are handled. Now loops through all pets owned by character and executes command for each eligible pet Fixed an issue where NPCs could follow characters in different worlds/instances than them selves Updated default max amount of items that can be sold to NPC vendors from 5 to 250 Guards can no longer train players in skills Updated equipment itemlists (dfndata/items/itemlists/itemlists.dfn) with blank entries to introduce some more variety in the type of clothes NPCs wear in general Added new NPCs to DFNs (dfndata/npc/undead.dfn) and added them to undead npclist: [skeletalmage] // variation of [bonemage] [skeletalknight] // variation of [boneknight] Updated Titles (dfndata/titles/titles.dfn) with up-to-date titles for skills around Pub 15, and added titles for skills added after that. Also added "Elder" and "Legendary" titles for 110 and 120 skillpoints Updated EQUIPITEM tag in newbie.dfn (dfndata/newbie/newbie.dfn) to support an optional hue parameter (EQUIPITEM=id,hue) Updated starting equipment for new characters (dfndata/newbie/newbie.dfn), with commented out practice weapons. Uncomment to use Added item definitions for practice weapons (dfndata/items/gear/weapons/practice_weapons.dfn): practice_skinning_knife practice_hatchet practice_axe practice_mace practice_longsword practice_spear practice_bow practice_club practice_crook practice_gnarled_staff Updated mount statues DFN (dfndata/items/misc/mount-statues.dfn) and JS (js/npc/pets/*.js) files to include pet control slot related stuff Pets now inherit the karma of their owners, but revert to their original karma upon release Pets and hirelings will no longer follow the ghosts of their dead owners, but stay to guard their corpse Added optional 9th parameter for JS Function CreateDFNItem to specify a color for item created. This comes before the other optional parameters - worldNumber and instanceID (which are only used if character is NULL): CreateDFNItem( mSock, mChar, sectionName, inPack, iAmount, itemType, iColor, worldNumber, instanceID ) Added ID of Giant Beetle to various pack animal checks Pack animals will now drop any newbie/blessed items stored in their packs upon death Added new NPC properties to track pet loyalty, and exposed these as Character JS properties, and NPC DFN tags: JS Properties .maxLoyalty // Defaults to 100 .loyalty // Starts at 25 DFN Tags MAXLOYALTY=# // Defaults to 100 LOYALTY=# // Starts at 25 Updated TriggerEvent JS function to support return values (int, bool, string, object) from called script Updated various JS scripts to make use of new TriggerEvent functionality and reduce reliance on custom tags: js/item/archerybutte.js js/item/trainingdummy.js js/server/data/combatanims.js js/server/data/weapontypes.js Updated archerybutte script to use dictionary for system and text messages Updated archerybutte script to support increased range, distance penalty and dex/str bonuses when calculating score Added new UOX.INI settings under [pets and hirelings] section related to pet control and loyalty: CHECKPETCONTROLDIFFICULTY=1 // Enable/Disable pet control difficulty system PETLOYALTYGAINONSUCCESS=1 // Amount of pet loyalty gained on successful pet command use PETLOYALTYLOSSONFAILURE=3 // Amount of pet loyalty lost on failed pet command use PETLOYALTYRATE=900 // Amount of seconds between each time pet loyalty is automatically reduced by 1. Takes 25 hours to deplete completely from max Added new persistent NPC property that keeps track of the difficulty of taming and controlling a pet, and exposed it as a Character JS property: .orneriness Every time a tamed pet is released or goes wild, its "orneriness" increases, making it more difficult for other players to tame, and more difficult for anyone to control. Updated CBasePetResponse::canControlPet() function to use pet control difficulty system if enabled, which checks player's animal taming/animal lore skill vs a pet's "orneriness" to determine chance of pet accepting a given pet command On successful use of pet command, increases pet loyalty by value defined in PETLOYALTYGAINONSUCCESS ini setting On failed use of pet command, decreases pet loyalty by value defined in PETLOYALTYLOSSONFAILURE ini setting Added new Character JS Method to calculate chance of a player successfully controlling the pet: .CalculateControlChance( mChar ) // Returns value between 0 and 1000 indicating chance of success Feeding a pet will now restore its loyalty to maximum Pets will now lose loyalty on hunger checks when at maximum hunger Pets that are maximum hungry will now only have a chance to go wild if loyalty has dropped to zero Added new DFN tag for creatures.dfn - TYPE - which contains a string describing the type of creature Added secure pet trading. Players who trade pets will now see a pet transfer deed appear in a secure trade window with the name and type of creature, and upon completion of the trade the associated pet will be instantly transferred to the other player Updated resource JS scripts (js/server/resource/*) to use dictionaries for all system messages Updated skill JS scripts (js/skill/*) to use dictionaries for all system messages Updated housing JS scripts (js/server/house/*) to use dictionaries for all system messages Updated item JS scripts (js/item/*) to use dictionaries for all system messages Updated magic JS scripts (js/magic/*) to use dictionaries for all system messages Updated NPC AI JS scripts (js/npc/ai/*) to use dictionaries for all system messages Updated command JS scripts (js/commands/*) to use dictionaries for all system messages, gump tooltips, etc Updated code to use dictionaries for all system messages Fixed incorrect spelling for UOX.INI setting HIDEW(H)ILEMOUNTED and updated hiding skill (js/skill/hiding.js) to actually allow/disallow hiding while mounted based on this setting Added new Character JS Method to make it easier to make one NPC initiate combat with another: .InitiateCombat( targetChar ) // Character attempts to initiate combat with target character Updated parrying portion of combat code to be in line with Pub15/pre-AoS parrying mechanics. High AR shields now absorb more damage on a successful parry, while low AR shields have a higher chance of parrying. Shields are also now more effective against archery attacks (full absorption potential) than melee attacks (half absorption potential). Updated combat damage calculations to be in line with Pub15/pre-AoS damage calculations Adjusted default value of COMBATNPCDAMAGERATE ini setting (damage divisor when target is a player) from 2 to 1 to account for these changes. Removed dictionary.UNK, and made dictionary.ZRO the default dictionary used for all unsupported languages Added dictionary support for additional languages: Portuguese, Italian, Czech Updated default dictionaries for the following languages: English, French Added default dictionaries for the following languages: German, Spanish, Portuguese, Italian, Czech (note that translations have been provided by automatic services and will contain inaccuracies!) Added new UOX.INI setting to allow specifying a default dictionary language for server, which if set will force that language for all dictionary messages, regardless of client settings: SERVERLANGUAGE=0 // Set default server dictionary language. Supported languages: 0 - None/language used by each client, 1 - English, 2 - German, 3 - Spanish, 5 - French, 6 - Portuguese, 7 - Italian, 8 - Czech Added new function in combat.cpp - AdjustArmorClassDamage() - which adjusts the damage dealt in combat based on whether armour class (AC DFN tag or .ac JS property) of weapon and armour equipped on hit location of target match up. A weapon with armour class 1 would essentially be doubly effective against armour of armour class 1. Allows setting up things like piercing weapons being better against some armor types than mace weapons, etc. Added new UOX.INI setting under [combat] to enable/disable double damage from armour class bonuses: ARMORCLASSDAMAGEBONUS=0/1 //defaults to 0)
2021-07-28 16:02:56 +08:00
case CCP_ISGUARDED: *vp = BOOLEAN_TO_JSVAL( gPriv->IsGuarded() ); break;
case CCP_GUARDING:
{
CBaseObject *tempObj = gPriv->GetGuarding();
if( !ValidateObject( tempObj ))
0.99.4v Added JS command to reload dictionaries 'reloaddictionaries Fixed a server crash related to casting of spells Fixed some issues with Line-of-Sight checks related to items under/above ground, LoS checks between different floors of buildings, etc. Updated handling of skill-training keywords to be based on language-independent keyword IDs rather than trying to match player-input text to specific skill-names Updated animal-trainer/stablemasterscript (js/npc/ai/stablemaster.js) with several changes: Fixed an issue where the same pet would be stabled in all available slots if payment was taken from player's bank account instead of their backpack Fixed an issue where stablemaster would not pause walking for a while when a player interacts with them Converted all system messages and text messages in stablemaster script to dictionary entries Added new NPC AI type to source - AI_STABLEMASTER (9) - and assigned this to animal trainers. This is used to identify this type of NPCs for the purpose of displaying relevant context menus Reworked banker AI script (js/npc/ai/banker.js) to use triggerwords from client instead of hard-defined strings, to work better with multiple languages (and work with all relevant triggerwords) Fixed a bug with banker AI script (js/npc/ai/banker.js) that prevented players from using the "withdraw" command Re-added NPC AI 8 to banker NPCs (dfndata/npc/male_vendors.dfn and female_vendors.dfn) so code can check for presence of this AI when handling context menus Removed remaining hard-coded banking functionality - all handled by script anyway Added new context menu option for NPC bankers - Open Bankbox Updated code handling of context menus to only show context menus when relevant: Open Paperdoll - Shows for all characters with a paperdoll Open Backpack - Shows for player's character, pack animals and hirelings Open Bankbox - Shows for banker NPCs (if within 8 tiles) Buy/Sell - Shows for vendor NPCs (if within 8 tiles, and if they have anything for sale/are buying anything) Added new context menu entries for pets, which can be used if player is within 12 tiles of pet: Command: Kill Command: Stop Command: Follow Command: Stay Command: Guard Add Friend Remove Friend Transfer Release Added new context menu entries for stablemasters/animal trainers: Claim All Pets Stable Pet Added new context menu entries for Escort Quest NPCs Ask Destination (if within 3 tiles) Accept Escort (if within 3 tiles) Abandon Escort Added new context menus for NPCs that can teach skills to players (limited to max 10 per NPC) Train [skillName] Added new AI script for NPC hirelings (3204=js/npc/ai/hireling.js), who can be hired to follow the player around for a limited amount of time, and function the same way as pets. In addition to the regular pet commands, these speech commands are supported: hire // The hireling will respond with the cost to hire them dismiss // Replaces the "release" command for pets; will dismiss the hireling patrol // The hireling will patrol between it's current location and a second targeted location nearby move // The hireling will try to shuffle out of the way fetch // The hireling will try to fetch a targeted item drop // The hireling will drop to the ground all loot they're currently carrying report // The hireling will report on the remaining time they're hired for Added new NPC DFN tag used by code to detect hireling NPCs for the purpose of displaying context menus: HIRELING // No additional value/data needed for tag Added new context menu entries for Hireling NPCs, in addition to the ones for regular pets: Hire // Can be used within 3 steps of the hireling, who will respond with cost to hire them Dismiss // Replaces the "release" command for pets, will dismiss the hireling Added HIRELING tag and SCRIPT=3204 to and updated stats of various NPCs that will be hireable: m_fighter, f_fighter, m_beggar, f_beggar, m_peasant, f_peasant, m_sailor, f_sailor, m_pirate, f_pirate Added new hireling NPC: m_paladin, f_paladin Added new UOX ini setting to enable/disable context menus CONTEXTMENUS=1/0 (defaults to 1) Added new Item JS Method to check if an item's ID is on a specified food list .IsOnFoodList( foodList ) // Returns true/false if item's ID is on specified foodList Added new OMNIVORE food list and assigned it to [basehuman] DFN section Added new Character JS Properties .isGuarded // Gets/Sets whether character is guarded by a pet/hireling .guarding // Gets/Sets the object (if any) being guarded by a pet/hireling Fixed multiple issues with health bars, flagging and character highlighting Added some crash protection for invalid data used with CUSTOMINTTAG and CUSTOMSTRINGTAG DFN tags for Items, NPCs and Multis Fixed an issue which prevented hard-coded checks from running when using items Added new global js object (Timer) to make the use of character timers in JS more robust, with properties matching timer names from enum in source. Properties: .TIMEOUT // Time until next attack can be done in combat .INVIS // Time until invisible character becomes visible .HUNGER // Time until character grows more hungry .THIRST // Time until character grows more thirsty .POISONTIME // Time until next tick of poison damage .POISONTEXT // Time until next message about suffering from poison .POISONWEAROFF // Time until poison wears off .SPELLTIME // Time until spell cast is completed. Can be set to 0 to interrupt .ANTISPAM // Time until next speech message can be sent (for anti spam purposes) .CRIMFLAG // Time until criminal flag runs out .MURDERRATE // Time until next murder count decay .PEACETIMER // Time until character can re-enter combat after being affected by peacemaking .FLYINGTOGGLE // Time until next time flying ability can be toggled for gargoyles .MOVETIME // Time until NPC can move again .SPATIMER // Time until next time NPC can cast a spell .SUMMONTIME // Time until a summoned NPC will vanish .EVADETIME // Time until an NPC will exit evade state .LOGOUT // Time it takes for a player char to vanish after logout Examples of use: var hungerTimer = myChar.GetTimer( Timer.HUNGER ) myChar.SetTimer( Timer.HUNGER, 15000 ) Added new Character JS Methods to add, remove and list friends of a pet/hireling: .AddFriend( playerToAdd ) // Adds player to friend list .RemoveFriend( playerToRemove ) // Removes player from friend list .GetFriendList() // Gets list of friends .ClearFriendList() // Clears list of friends Added new Character JS Method to fetch a player character's list of pets/followers .GetPetList() // Gets list of pets/followers Added new persistent NPC property to keep track of a pet's previous owners, whether those tamed the pet or had it transferred to them. Every time a pet is tamed, or is transferred to a new owner, this list is updated: GenericList< CChar * > petOwnerList Added new Character JS Method to check if a player is on a pet's owner list as a previous owner: .HasBeenOwner( mChar ) Previous owners of a pet can re-tame it with guaranteed chance of success Updated JS Method Refresh() to be usable with both items or characters, to send updated state of object to nearby players Added character tooltip [Guarded] for characters being guarded by a pet/hireling Pets/hirelings that are transferred will now immediately start following their new master instead of wandering freely Pets/hirelings can no longer be transferred between players as long as either party is flagged as a criminal Pets/hirelings can no longer be transferred to dead players Pets/hirelings can no longer be transferred to NPCs Summoned creatures can no longer be transferred to other players Summoned creatures can no longer have friends Friend lists of pets/hirelings are now cleared when the pet/hireling is transferred to another player Added new UOX.INI settings to control how many pets players can have active: MAXCONTROLSLOTS=0 // Maximum number of pet control slots available to player. Disabled if 0 MAXFOLLOWERS=5 // Maximum pets/followers a player can have active at the same time. Used if control slots are disabled MAXPETOWNERS=5 // Maximum number of different owners a pet can have over its lifetime before it becomes impossible to retame Added new NPC property and NPC DFN tag that keeps track of how many pet control slots an NPC would take up if owned by a player: UI08 controlSlots // source property CONTROLSLOTS=# // DFN tag Added new Character JS properties: .ownerCount // Get the total number of owners a pet/hireling has had, based on NPC's petOwnerList .controlSlots // Get/Set number of pet control slots an NPC will occupy .controlSlotsUsed // Get/Set the number of control slots used by a player Updated get (js/commands/targeting/get.js) and set (js/commands/targeting/set.js) commands to support getting/setting the following character properties: deaths ownerCount (read only) controlSlots controlSlotsUsed Updated NPC DFNs with default CONTROLSLOT=# tags Increased the max distance from player that onSpeech JS event will trigger from 7 to 12 Updated how "all attack" and "all follow" commands for pets are handled. Now loops through all pets owned by character and executes command for each eligible pet Fixed an issue where NPCs could follow characters in different worlds/instances than them selves Updated default max amount of items that can be sold to NPC vendors from 5 to 250 Guards can no longer train players in skills Updated equipment itemlists (dfndata/items/itemlists/itemlists.dfn) with blank entries to introduce some more variety in the type of clothes NPCs wear in general Added new NPCs to DFNs (dfndata/npc/undead.dfn) and added them to undead npclist: [skeletalmage] // variation of [bonemage] [skeletalknight] // variation of [boneknight] Updated Titles (dfndata/titles/titles.dfn) with up-to-date titles for skills around Pub 15, and added titles for skills added after that. Also added "Elder" and "Legendary" titles for 110 and 120 skillpoints Updated EQUIPITEM tag in newbie.dfn (dfndata/newbie/newbie.dfn) to support an optional hue parameter (EQUIPITEM=id,hue) Updated starting equipment for new characters (dfndata/newbie/newbie.dfn), with commented out practice weapons. Uncomment to use Added item definitions for practice weapons (dfndata/items/gear/weapons/practice_weapons.dfn): practice_skinning_knife practice_hatchet practice_axe practice_mace practice_longsword practice_spear practice_bow practice_club practice_crook practice_gnarled_staff Updated mount statues DFN (dfndata/items/misc/mount-statues.dfn) and JS (js/npc/pets/*.js) files to include pet control slot related stuff Pets now inherit the karma of their owners, but revert to their original karma upon release Pets and hirelings will no longer follow the ghosts of their dead owners, but stay to guard their corpse Added optional 9th parameter for JS Function CreateDFNItem to specify a color for item created. This comes before the other optional parameters - worldNumber and instanceID (which are only used if character is NULL): CreateDFNItem( mSock, mChar, sectionName, inPack, iAmount, itemType, iColor, worldNumber, instanceID ) Added ID of Giant Beetle to various pack animal checks Pack animals will now drop any newbie/blessed items stored in their packs upon death Added new NPC properties to track pet loyalty, and exposed these as Character JS properties, and NPC DFN tags: JS Properties .maxLoyalty // Defaults to 100 .loyalty // Starts at 25 DFN Tags MAXLOYALTY=# // Defaults to 100 LOYALTY=# // Starts at 25 Updated TriggerEvent JS function to support return values (int, bool, string, object) from called script Updated various JS scripts to make use of new TriggerEvent functionality and reduce reliance on custom tags: js/item/archerybutte.js js/item/trainingdummy.js js/server/data/combatanims.js js/server/data/weapontypes.js Updated archerybutte script to use dictionary for system and text messages Updated archerybutte script to support increased range, distance penalty and dex/str bonuses when calculating score Added new UOX.INI settings under [pets and hirelings] section related to pet control and loyalty: CHECKPETCONTROLDIFFICULTY=1 // Enable/Disable pet control difficulty system PETLOYALTYGAINONSUCCESS=1 // Amount of pet loyalty gained on successful pet command use PETLOYALTYLOSSONFAILURE=3 // Amount of pet loyalty lost on failed pet command use PETLOYALTYRATE=900 // Amount of seconds between each time pet loyalty is automatically reduced by 1. Takes 25 hours to deplete completely from max Added new persistent NPC property that keeps track of the difficulty of taming and controlling a pet, and exposed it as a Character JS property: .orneriness Every time a tamed pet is released or goes wild, its "orneriness" increases, making it more difficult for other players to tame, and more difficult for anyone to control. Updated CBasePetResponse::canControlPet() function to use pet control difficulty system if enabled, which checks player's animal taming/animal lore skill vs a pet's "orneriness" to determine chance of pet accepting a given pet command On successful use of pet command, increases pet loyalty by value defined in PETLOYALTYGAINONSUCCESS ini setting On failed use of pet command, decreases pet loyalty by value defined in PETLOYALTYLOSSONFAILURE ini setting Added new Character JS Method to calculate chance of a player successfully controlling the pet: .CalculateControlChance( mChar ) // Returns value between 0 and 1000 indicating chance of success Feeding a pet will now restore its loyalty to maximum Pets will now lose loyalty on hunger checks when at maximum hunger Pets that are maximum hungry will now only have a chance to go wild if loyalty has dropped to zero Added new DFN tag for creatures.dfn - TYPE - which contains a string describing the type of creature Added secure pet trading. Players who trade pets will now see a pet transfer deed appear in a secure trade window with the name and type of creature, and upon completion of the trade the associated pet will be instantly transferred to the other player Updated resource JS scripts (js/server/resource/*) to use dictionaries for all system messages Updated skill JS scripts (js/skill/*) to use dictionaries for all system messages Updated housing JS scripts (js/server/house/*) to use dictionaries for all system messages Updated item JS scripts (js/item/*) to use dictionaries for all system messages Updated magic JS scripts (js/magic/*) to use dictionaries for all system messages Updated NPC AI JS scripts (js/npc/ai/*) to use dictionaries for all system messages Updated command JS scripts (js/commands/*) to use dictionaries for all system messages, gump tooltips, etc Updated code to use dictionaries for all system messages Fixed incorrect spelling for UOX.INI setting HIDEW(H)ILEMOUNTED and updated hiding skill (js/skill/hiding.js) to actually allow/disallow hiding while mounted based on this setting Added new Character JS Method to make it easier to make one NPC initiate combat with another: .InitiateCombat( targetChar ) // Character attempts to initiate combat with target character Updated parrying portion of combat code to be in line with Pub15/pre-AoS parrying mechanics. High AR shields now absorb more damage on a successful parry, while low AR shields have a higher chance of parrying. Shields are also now more effective against archery attacks (full absorption potential) than melee attacks (half absorption potential). Updated combat damage calculations to be in line with Pub15/pre-AoS damage calculations Adjusted default value of COMBATNPCDAMAGERATE ini setting (damage divisor when target is a player) from 2 to 1 to account for these changes. Removed dictionary.UNK, and made dictionary.ZRO the default dictionary used for all unsupported languages Added dictionary support for additional languages: Portuguese, Italian, Czech Updated default dictionaries for the following languages: English, French Added default dictionaries for the following languages: German, Spanish, Portuguese, Italian, Czech (note that translations have been provided by automatic services and will contain inaccuracies!) Added new UOX.INI setting to allow specifying a default dictionary language for server, which if set will force that language for all dictionary messages, regardless of client settings: SERVERLANGUAGE=0 // Set default server dictionary language. Supported languages: 0 - None/language used by each client, 1 - English, 2 - German, 3 - Spanish, 5 - French, 6 - Portuguese, 7 - Italian, 8 - Czech Added new function in combat.cpp - AdjustArmorClassDamage() - which adjusts the damage dealt in combat based on whether armour class (AC DFN tag or .ac JS property) of weapon and armour equipped on hit location of target match up. A weapon with armour class 1 would essentially be doubly effective against armour of armour class 1. Allows setting up things like piercing weapons being better against some armor types than mace weapons, etc. Added new UOX.INI setting under [combat] to enable/disable double damage from armour class bonuses: ARMORCLASSDAMAGEBONUS=0/1 //defaults to 0)
2021-07-28 16:02:56 +08:00
{ // Return a JS_NULL
*vp = JSVAL_NULL;
}
else
{
// Otherwise Acquire an object
JSObject *myObj = nullptr;
if( tempObj->CanBeObjType( OT_CHAR ))
0.99.4v Added JS command to reload dictionaries 'reloaddictionaries Fixed a server crash related to casting of spells Fixed some issues with Line-of-Sight checks related to items under/above ground, LoS checks between different floors of buildings, etc. Updated handling of skill-training keywords to be based on language-independent keyword IDs rather than trying to match player-input text to specific skill-names Updated animal-trainer/stablemasterscript (js/npc/ai/stablemaster.js) with several changes: Fixed an issue where the same pet would be stabled in all available slots if payment was taken from player's bank account instead of their backpack Fixed an issue where stablemaster would not pause walking for a while when a player interacts with them Converted all system messages and text messages in stablemaster script to dictionary entries Added new NPC AI type to source - AI_STABLEMASTER (9) - and assigned this to animal trainers. This is used to identify this type of NPCs for the purpose of displaying relevant context menus Reworked banker AI script (js/npc/ai/banker.js) to use triggerwords from client instead of hard-defined strings, to work better with multiple languages (and work with all relevant triggerwords) Fixed a bug with banker AI script (js/npc/ai/banker.js) that prevented players from using the "withdraw" command Re-added NPC AI 8 to banker NPCs (dfndata/npc/male_vendors.dfn and female_vendors.dfn) so code can check for presence of this AI when handling context menus Removed remaining hard-coded banking functionality - all handled by script anyway Added new context menu option for NPC bankers - Open Bankbox Updated code handling of context menus to only show context menus when relevant: Open Paperdoll - Shows for all characters with a paperdoll Open Backpack - Shows for player's character, pack animals and hirelings Open Bankbox - Shows for banker NPCs (if within 8 tiles) Buy/Sell - Shows for vendor NPCs (if within 8 tiles, and if they have anything for sale/are buying anything) Added new context menu entries for pets, which can be used if player is within 12 tiles of pet: Command: Kill Command: Stop Command: Follow Command: Stay Command: Guard Add Friend Remove Friend Transfer Release Added new context menu entries for stablemasters/animal trainers: Claim All Pets Stable Pet Added new context menu entries for Escort Quest NPCs Ask Destination (if within 3 tiles) Accept Escort (if within 3 tiles) Abandon Escort Added new context menus for NPCs that can teach skills to players (limited to max 10 per NPC) Train [skillName] Added new AI script for NPC hirelings (3204=js/npc/ai/hireling.js), who can be hired to follow the player around for a limited amount of time, and function the same way as pets. In addition to the regular pet commands, these speech commands are supported: hire // The hireling will respond with the cost to hire them dismiss // Replaces the "release" command for pets; will dismiss the hireling patrol // The hireling will patrol between it's current location and a second targeted location nearby move // The hireling will try to shuffle out of the way fetch // The hireling will try to fetch a targeted item drop // The hireling will drop to the ground all loot they're currently carrying report // The hireling will report on the remaining time they're hired for Added new NPC DFN tag used by code to detect hireling NPCs for the purpose of displaying context menus: HIRELING // No additional value/data needed for tag Added new context menu entries for Hireling NPCs, in addition to the ones for regular pets: Hire // Can be used within 3 steps of the hireling, who will respond with cost to hire them Dismiss // Replaces the "release" command for pets, will dismiss the hireling Added HIRELING tag and SCRIPT=3204 to and updated stats of various NPCs that will be hireable: m_fighter, f_fighter, m_beggar, f_beggar, m_peasant, f_peasant, m_sailor, f_sailor, m_pirate, f_pirate Added new hireling NPC: m_paladin, f_paladin Added new UOX ini setting to enable/disable context menus CONTEXTMENUS=1/0 (defaults to 1) Added new Item JS Method to check if an item's ID is on a specified food list .IsOnFoodList( foodList ) // Returns true/false if item's ID is on specified foodList Added new OMNIVORE food list and assigned it to [basehuman] DFN section Added new Character JS Properties .isGuarded // Gets/Sets whether character is guarded by a pet/hireling .guarding // Gets/Sets the object (if any) being guarded by a pet/hireling Fixed multiple issues with health bars, flagging and character highlighting Added some crash protection for invalid data used with CUSTOMINTTAG and CUSTOMSTRINGTAG DFN tags for Items, NPCs and Multis Fixed an issue which prevented hard-coded checks from running when using items Added new global js object (Timer) to make the use of character timers in JS more robust, with properties matching timer names from enum in source. Properties: .TIMEOUT // Time until next attack can be done in combat .INVIS // Time until invisible character becomes visible .HUNGER // Time until character grows more hungry .THIRST // Time until character grows more thirsty .POISONTIME // Time until next tick of poison damage .POISONTEXT // Time until next message about suffering from poison .POISONWEAROFF // Time until poison wears off .SPELLTIME // Time until spell cast is completed. Can be set to 0 to interrupt .ANTISPAM // Time until next speech message can be sent (for anti spam purposes) .CRIMFLAG // Time until criminal flag runs out .MURDERRATE // Time until next murder count decay .PEACETIMER // Time until character can re-enter combat after being affected by peacemaking .FLYINGTOGGLE // Time until next time flying ability can be toggled for gargoyles .MOVETIME // Time until NPC can move again .SPATIMER // Time until next time NPC can cast a spell .SUMMONTIME // Time until a summoned NPC will vanish .EVADETIME // Time until an NPC will exit evade state .LOGOUT // Time it takes for a player char to vanish after logout Examples of use: var hungerTimer = myChar.GetTimer( Timer.HUNGER ) myChar.SetTimer( Timer.HUNGER, 15000 ) Added new Character JS Methods to add, remove and list friends of a pet/hireling: .AddFriend( playerToAdd ) // Adds player to friend list .RemoveFriend( playerToRemove ) // Removes player from friend list .GetFriendList() // Gets list of friends .ClearFriendList() // Clears list of friends Added new Character JS Method to fetch a player character's list of pets/followers .GetPetList() // Gets list of pets/followers Added new persistent NPC property to keep track of a pet's previous owners, whether those tamed the pet or had it transferred to them. Every time a pet is tamed, or is transferred to a new owner, this list is updated: GenericList< CChar * > petOwnerList Added new Character JS Method to check if a player is on a pet's owner list as a previous owner: .HasBeenOwner( mChar ) Previous owners of a pet can re-tame it with guaranteed chance of success Updated JS Method Refresh() to be usable with both items or characters, to send updated state of object to nearby players Added character tooltip [Guarded] for characters being guarded by a pet/hireling Pets/hirelings that are transferred will now immediately start following their new master instead of wandering freely Pets/hirelings can no longer be transferred between players as long as either party is flagged as a criminal Pets/hirelings can no longer be transferred to dead players Pets/hirelings can no longer be transferred to NPCs Summoned creatures can no longer be transferred to other players Summoned creatures can no longer have friends Friend lists of pets/hirelings are now cleared when the pet/hireling is transferred to another player Added new UOX.INI settings to control how many pets players can have active: MAXCONTROLSLOTS=0 // Maximum number of pet control slots available to player. Disabled if 0 MAXFOLLOWERS=5 // Maximum pets/followers a player can have active at the same time. Used if control slots are disabled MAXPETOWNERS=5 // Maximum number of different owners a pet can have over its lifetime before it becomes impossible to retame Added new NPC property and NPC DFN tag that keeps track of how many pet control slots an NPC would take up if owned by a player: UI08 controlSlots // source property CONTROLSLOTS=# // DFN tag Added new Character JS properties: .ownerCount // Get the total number of owners a pet/hireling has had, based on NPC's petOwnerList .controlSlots // Get/Set number of pet control slots an NPC will occupy .controlSlotsUsed // Get/Set the number of control slots used by a player Updated get (js/commands/targeting/get.js) and set (js/commands/targeting/set.js) commands to support getting/setting the following character properties: deaths ownerCount (read only) controlSlots controlSlotsUsed Updated NPC DFNs with default CONTROLSLOT=# tags Increased the max distance from player that onSpeech JS event will trigger from 7 to 12 Updated how "all attack" and "all follow" commands for pets are handled. Now loops through all pets owned by character and executes command for each eligible pet Fixed an issue where NPCs could follow characters in different worlds/instances than them selves Updated default max amount of items that can be sold to NPC vendors from 5 to 250 Guards can no longer train players in skills Updated equipment itemlists (dfndata/items/itemlists/itemlists.dfn) with blank entries to introduce some more variety in the type of clothes NPCs wear in general Added new NPCs to DFNs (dfndata/npc/undead.dfn) and added them to undead npclist: [skeletalmage] // variation of [bonemage] [skeletalknight] // variation of [boneknight] Updated Titles (dfndata/titles/titles.dfn) with up-to-date titles for skills around Pub 15, and added titles for skills added after that. Also added "Elder" and "Legendary" titles for 110 and 120 skillpoints Updated EQUIPITEM tag in newbie.dfn (dfndata/newbie/newbie.dfn) to support an optional hue parameter (EQUIPITEM=id,hue) Updated starting equipment for new characters (dfndata/newbie/newbie.dfn), with commented out practice weapons. Uncomment to use Added item definitions for practice weapons (dfndata/items/gear/weapons/practice_weapons.dfn): practice_skinning_knife practice_hatchet practice_axe practice_mace practice_longsword practice_spear practice_bow practice_club practice_crook practice_gnarled_staff Updated mount statues DFN (dfndata/items/misc/mount-statues.dfn) and JS (js/npc/pets/*.js) files to include pet control slot related stuff Pets now inherit the karma of their owners, but revert to their original karma upon release Pets and hirelings will no longer follow the ghosts of their dead owners, but stay to guard their corpse Added optional 9th parameter for JS Function CreateDFNItem to specify a color for item created. This comes before the other optional parameters - worldNumber and instanceID (which are only used if character is NULL): CreateDFNItem( mSock, mChar, sectionName, inPack, iAmount, itemType, iColor, worldNumber, instanceID ) Added ID of Giant Beetle to various pack animal checks Pack animals will now drop any newbie/blessed items stored in their packs upon death Added new NPC properties to track pet loyalty, and exposed these as Character JS properties, and NPC DFN tags: JS Properties .maxLoyalty // Defaults to 100 .loyalty // Starts at 25 DFN Tags MAXLOYALTY=# // Defaults to 100 LOYALTY=# // Starts at 25 Updated TriggerEvent JS function to support return values (int, bool, string, object) from called script Updated various JS scripts to make use of new TriggerEvent functionality and reduce reliance on custom tags: js/item/archerybutte.js js/item/trainingdummy.js js/server/data/combatanims.js js/server/data/weapontypes.js Updated archerybutte script to use dictionary for system and text messages Updated archerybutte script to support increased range, distance penalty and dex/str bonuses when calculating score Added new UOX.INI settings under [pets and hirelings] section related to pet control and loyalty: CHECKPETCONTROLDIFFICULTY=1 // Enable/Disable pet control difficulty system PETLOYALTYGAINONSUCCESS=1 // Amount of pet loyalty gained on successful pet command use PETLOYALTYLOSSONFAILURE=3 // Amount of pet loyalty lost on failed pet command use PETLOYALTYRATE=900 // Amount of seconds between each time pet loyalty is automatically reduced by 1. Takes 25 hours to deplete completely from max Added new persistent NPC property that keeps track of the difficulty of taming and controlling a pet, and exposed it as a Character JS property: .orneriness Every time a tamed pet is released or goes wild, its "orneriness" increases, making it more difficult for other players to tame, and more difficult for anyone to control. Updated CBasePetResponse::canControlPet() function to use pet control difficulty system if enabled, which checks player's animal taming/animal lore skill vs a pet's "orneriness" to determine chance of pet accepting a given pet command On successful use of pet command, increases pet loyalty by value defined in PETLOYALTYGAINONSUCCESS ini setting On failed use of pet command, decreases pet loyalty by value defined in PETLOYALTYLOSSONFAILURE ini setting Added new Character JS Method to calculate chance of a player successfully controlling the pet: .CalculateControlChance( mChar ) // Returns value between 0 and 1000 indicating chance of success Feeding a pet will now restore its loyalty to maximum Pets will now lose loyalty on hunger checks when at maximum hunger Pets that are maximum hungry will now only have a chance to go wild if loyalty has dropped to zero Added new DFN tag for creatures.dfn - TYPE - which contains a string describing the type of creature Added secure pet trading. Players who trade pets will now see a pet transfer deed appear in a secure trade window with the name and type of creature, and upon completion of the trade the associated pet will be instantly transferred to the other player Updated resource JS scripts (js/server/resource/*) to use dictionaries for all system messages Updated skill JS scripts (js/skill/*) to use dictionaries for all system messages Updated housing JS scripts (js/server/house/*) to use dictionaries for all system messages Updated item JS scripts (js/item/*) to use dictionaries for all system messages Updated magic JS scripts (js/magic/*) to use dictionaries for all system messages Updated NPC AI JS scripts (js/npc/ai/*) to use dictionaries for all system messages Updated command JS scripts (js/commands/*) to use dictionaries for all system messages, gump tooltips, etc Updated code to use dictionaries for all system messages Fixed incorrect spelling for UOX.INI setting HIDEW(H)ILEMOUNTED and updated hiding skill (js/skill/hiding.js) to actually allow/disallow hiding while mounted based on this setting Added new Character JS Method to make it easier to make one NPC initiate combat with another: .InitiateCombat( targetChar ) // Character attempts to initiate combat with target character Updated parrying portion of combat code to be in line with Pub15/pre-AoS parrying mechanics. High AR shields now absorb more damage on a successful parry, while low AR shields have a higher chance of parrying. Shields are also now more effective against archery attacks (full absorption potential) than melee attacks (half absorption potential). Updated combat damage calculations to be in line with Pub15/pre-AoS damage calculations Adjusted default value of COMBATNPCDAMAGERATE ini setting (damage divisor when target is a player) from 2 to 1 to account for these changes. Removed dictionary.UNK, and made dictionary.ZRO the default dictionary used for all unsupported languages Added dictionary support for additional languages: Portuguese, Italian, Czech Updated default dictionaries for the following languages: English, French Added default dictionaries for the following languages: German, Spanish, Portuguese, Italian, Czech (note that translations have been provided by automatic services and will contain inaccuracies!) Added new UOX.INI setting to allow specifying a default dictionary language for server, which if set will force that language for all dictionary messages, regardless of client settings: SERVERLANGUAGE=0 // Set default server dictionary language. Supported languages: 0 - None/language used by each client, 1 - English, 2 - German, 3 - Spanish, 5 - French, 6 - Portuguese, 7 - Italian, 8 - Czech Added new function in combat.cpp - AdjustArmorClassDamage() - which adjusts the damage dealt in combat based on whether armour class (AC DFN tag or .ac JS property) of weapon and armour equipped on hit location of target match up. A weapon with armour class 1 would essentially be doubly effective against armour of armour class 1. Allows setting up things like piercing weapons being better against some armor types than mace weapons, etc. Added new UOX.INI setting under [combat] to enable/disable double damage from armour class bonuses: ARMORCLASSDAMAGEBONUS=0/1 //defaults to 0)
2021-07-28 16:02:56 +08:00
{
myObj = JSEngine->AcquireObject( IUE_CHAR, tempObj, JSEngine->FindActiveRuntime( JS_GetRuntime( cx )));
0.99.4v Added JS command to reload dictionaries 'reloaddictionaries Fixed a server crash related to casting of spells Fixed some issues with Line-of-Sight checks related to items under/above ground, LoS checks between different floors of buildings, etc. Updated handling of skill-training keywords to be based on language-independent keyword IDs rather than trying to match player-input text to specific skill-names Updated animal-trainer/stablemasterscript (js/npc/ai/stablemaster.js) with several changes: Fixed an issue where the same pet would be stabled in all available slots if payment was taken from player's bank account instead of their backpack Fixed an issue where stablemaster would not pause walking for a while when a player interacts with them Converted all system messages and text messages in stablemaster script to dictionary entries Added new NPC AI type to source - AI_STABLEMASTER (9) - and assigned this to animal trainers. This is used to identify this type of NPCs for the purpose of displaying relevant context menus Reworked banker AI script (js/npc/ai/banker.js) to use triggerwords from client instead of hard-defined strings, to work better with multiple languages (and work with all relevant triggerwords) Fixed a bug with banker AI script (js/npc/ai/banker.js) that prevented players from using the "withdraw" command Re-added NPC AI 8 to banker NPCs (dfndata/npc/male_vendors.dfn and female_vendors.dfn) so code can check for presence of this AI when handling context menus Removed remaining hard-coded banking functionality - all handled by script anyway Added new context menu option for NPC bankers - Open Bankbox Updated code handling of context menus to only show context menus when relevant: Open Paperdoll - Shows for all characters with a paperdoll Open Backpack - Shows for player's character, pack animals and hirelings Open Bankbox - Shows for banker NPCs (if within 8 tiles) Buy/Sell - Shows for vendor NPCs (if within 8 tiles, and if they have anything for sale/are buying anything) Added new context menu entries for pets, which can be used if player is within 12 tiles of pet: Command: Kill Command: Stop Command: Follow Command: Stay Command: Guard Add Friend Remove Friend Transfer Release Added new context menu entries for stablemasters/animal trainers: Claim All Pets Stable Pet Added new context menu entries for Escort Quest NPCs Ask Destination (if within 3 tiles) Accept Escort (if within 3 tiles) Abandon Escort Added new context menus for NPCs that can teach skills to players (limited to max 10 per NPC) Train [skillName] Added new AI script for NPC hirelings (3204=js/npc/ai/hireling.js), who can be hired to follow the player around for a limited amount of time, and function the same way as pets. In addition to the regular pet commands, these speech commands are supported: hire // The hireling will respond with the cost to hire them dismiss // Replaces the "release" command for pets; will dismiss the hireling patrol // The hireling will patrol between it's current location and a second targeted location nearby move // The hireling will try to shuffle out of the way fetch // The hireling will try to fetch a targeted item drop // The hireling will drop to the ground all loot they're currently carrying report // The hireling will report on the remaining time they're hired for Added new NPC DFN tag used by code to detect hireling NPCs for the purpose of displaying context menus: HIRELING // No additional value/data needed for tag Added new context menu entries for Hireling NPCs, in addition to the ones for regular pets: Hire // Can be used within 3 steps of the hireling, who will respond with cost to hire them Dismiss // Replaces the "release" command for pets, will dismiss the hireling Added HIRELING tag and SCRIPT=3204 to and updated stats of various NPCs that will be hireable: m_fighter, f_fighter, m_beggar, f_beggar, m_peasant, f_peasant, m_sailor, f_sailor, m_pirate, f_pirate Added new hireling NPC: m_paladin, f_paladin Added new UOX ini setting to enable/disable context menus CONTEXTMENUS=1/0 (defaults to 1) Added new Item JS Method to check if an item's ID is on a specified food list .IsOnFoodList( foodList ) // Returns true/false if item's ID is on specified foodList Added new OMNIVORE food list and assigned it to [basehuman] DFN section Added new Character JS Properties .isGuarded // Gets/Sets whether character is guarded by a pet/hireling .guarding // Gets/Sets the object (if any) being guarded by a pet/hireling Fixed multiple issues with health bars, flagging and character highlighting Added some crash protection for invalid data used with CUSTOMINTTAG and CUSTOMSTRINGTAG DFN tags for Items, NPCs and Multis Fixed an issue which prevented hard-coded checks from running when using items Added new global js object (Timer) to make the use of character timers in JS more robust, with properties matching timer names from enum in source. Properties: .TIMEOUT // Time until next attack can be done in combat .INVIS // Time until invisible character becomes visible .HUNGER // Time until character grows more hungry .THIRST // Time until character grows more thirsty .POISONTIME // Time until next tick of poison damage .POISONTEXT // Time until next message about suffering from poison .POISONWEAROFF // Time until poison wears off .SPELLTIME // Time until spell cast is completed. Can be set to 0 to interrupt .ANTISPAM // Time until next speech message can be sent (for anti spam purposes) .CRIMFLAG // Time until criminal flag runs out .MURDERRATE // Time until next murder count decay .PEACETIMER // Time until character can re-enter combat after being affected by peacemaking .FLYINGTOGGLE // Time until next time flying ability can be toggled for gargoyles .MOVETIME // Time until NPC can move again .SPATIMER // Time until next time NPC can cast a spell .SUMMONTIME // Time until a summoned NPC will vanish .EVADETIME // Time until an NPC will exit evade state .LOGOUT // Time it takes for a player char to vanish after logout Examples of use: var hungerTimer = myChar.GetTimer( Timer.HUNGER ) myChar.SetTimer( Timer.HUNGER, 15000 ) Added new Character JS Methods to add, remove and list friends of a pet/hireling: .AddFriend( playerToAdd ) // Adds player to friend list .RemoveFriend( playerToRemove ) // Removes player from friend list .GetFriendList() // Gets list of friends .ClearFriendList() // Clears list of friends Added new Character JS Method to fetch a player character's list of pets/followers .GetPetList() // Gets list of pets/followers Added new persistent NPC property to keep track of a pet's previous owners, whether those tamed the pet or had it transferred to them. Every time a pet is tamed, or is transferred to a new owner, this list is updated: GenericList< CChar * > petOwnerList Added new Character JS Method to check if a player is on a pet's owner list as a previous owner: .HasBeenOwner( mChar ) Previous owners of a pet can re-tame it with guaranteed chance of success Updated JS Method Refresh() to be usable with both items or characters, to send updated state of object to nearby players Added character tooltip [Guarded] for characters being guarded by a pet/hireling Pets/hirelings that are transferred will now immediately start following their new master instead of wandering freely Pets/hirelings can no longer be transferred between players as long as either party is flagged as a criminal Pets/hirelings can no longer be transferred to dead players Pets/hirelings can no longer be transferred to NPCs Summoned creatures can no longer be transferred to other players Summoned creatures can no longer have friends Friend lists of pets/hirelings are now cleared when the pet/hireling is transferred to another player Added new UOX.INI settings to control how many pets players can have active: MAXCONTROLSLOTS=0 // Maximum number of pet control slots available to player. Disabled if 0 MAXFOLLOWERS=5 // Maximum pets/followers a player can have active at the same time. Used if control slots are disabled MAXPETOWNERS=5 // Maximum number of different owners a pet can have over its lifetime before it becomes impossible to retame Added new NPC property and NPC DFN tag that keeps track of how many pet control slots an NPC would take up if owned by a player: UI08 controlSlots // source property CONTROLSLOTS=# // DFN tag Added new Character JS properties: .ownerCount // Get the total number of owners a pet/hireling has had, based on NPC's petOwnerList .controlSlots // Get/Set number of pet control slots an NPC will occupy .controlSlotsUsed // Get/Set the number of control slots used by a player Updated get (js/commands/targeting/get.js) and set (js/commands/targeting/set.js) commands to support getting/setting the following character properties: deaths ownerCount (read only) controlSlots controlSlotsUsed Updated NPC DFNs with default CONTROLSLOT=# tags Increased the max distance from player that onSpeech JS event will trigger from 7 to 12 Updated how "all attack" and "all follow" commands for pets are handled. Now loops through all pets owned by character and executes command for each eligible pet Fixed an issue where NPCs could follow characters in different worlds/instances than them selves Updated default max amount of items that can be sold to NPC vendors from 5 to 250 Guards can no longer train players in skills Updated equipment itemlists (dfndata/items/itemlists/itemlists.dfn) with blank entries to introduce some more variety in the type of clothes NPCs wear in general Added new NPCs to DFNs (dfndata/npc/undead.dfn) and added them to undead npclist: [skeletalmage] // variation of [bonemage] [skeletalknight] // variation of [boneknight] Updated Titles (dfndata/titles/titles.dfn) with up-to-date titles for skills around Pub 15, and added titles for skills added after that. Also added "Elder" and "Legendary" titles for 110 and 120 skillpoints Updated EQUIPITEM tag in newbie.dfn (dfndata/newbie/newbie.dfn) to support an optional hue parameter (EQUIPITEM=id,hue) Updated starting equipment for new characters (dfndata/newbie/newbie.dfn), with commented out practice weapons. Uncomment to use Added item definitions for practice weapons (dfndata/items/gear/weapons/practice_weapons.dfn): practice_skinning_knife practice_hatchet practice_axe practice_mace practice_longsword practice_spear practice_bow practice_club practice_crook practice_gnarled_staff Updated mount statues DFN (dfndata/items/misc/mount-statues.dfn) and JS (js/npc/pets/*.js) files to include pet control slot related stuff Pets now inherit the karma of their owners, but revert to their original karma upon release Pets and hirelings will no longer follow the ghosts of their dead owners, but stay to guard their corpse Added optional 9th parameter for JS Function CreateDFNItem to specify a color for item created. This comes before the other optional parameters - worldNumber and instanceID (which are only used if character is NULL): CreateDFNItem( mSock, mChar, sectionName, inPack, iAmount, itemType, iColor, worldNumber, instanceID ) Added ID of Giant Beetle to various pack animal checks Pack animals will now drop any newbie/blessed items stored in their packs upon death Added new NPC properties to track pet loyalty, and exposed these as Character JS properties, and NPC DFN tags: JS Properties .maxLoyalty // Defaults to 100 .loyalty // Starts at 25 DFN Tags MAXLOYALTY=# // Defaults to 100 LOYALTY=# // Starts at 25 Updated TriggerEvent JS function to support return values (int, bool, string, object) from called script Updated various JS scripts to make use of new TriggerEvent functionality and reduce reliance on custom tags: js/item/archerybutte.js js/item/trainingdummy.js js/server/data/combatanims.js js/server/data/weapontypes.js Updated archerybutte script to use dictionary for system and text messages Updated archerybutte script to support increased range, distance penalty and dex/str bonuses when calculating score Added new UOX.INI settings under [pets and hirelings] section related to pet control and loyalty: CHECKPETCONTROLDIFFICULTY=1 // Enable/Disable pet control difficulty system PETLOYALTYGAINONSUCCESS=1 // Amount of pet loyalty gained on successful pet command use PETLOYALTYLOSSONFAILURE=3 // Amount of pet loyalty lost on failed pet command use PETLOYALTYRATE=900 // Amount of seconds between each time pet loyalty is automatically reduced by 1. Takes 25 hours to deplete completely from max Added new persistent NPC property that keeps track of the difficulty of taming and controlling a pet, and exposed it as a Character JS property: .orneriness Every time a tamed pet is released or goes wild, its "orneriness" increases, making it more difficult for other players to tame, and more difficult for anyone to control. Updated CBasePetResponse::canControlPet() function to use pet control difficulty system if enabled, which checks player's animal taming/animal lore skill vs a pet's "orneriness" to determine chance of pet accepting a given pet command On successful use of pet command, increases pet loyalty by value defined in PETLOYALTYGAINONSUCCESS ini setting On failed use of pet command, decreases pet loyalty by value defined in PETLOYALTYLOSSONFAILURE ini setting Added new Character JS Method to calculate chance of a player successfully controlling the pet: .CalculateControlChance( mChar ) // Returns value between 0 and 1000 indicating chance of success Feeding a pet will now restore its loyalty to maximum Pets will now lose loyalty on hunger checks when at maximum hunger Pets that are maximum hungry will now only have a chance to go wild if loyalty has dropped to zero Added new DFN tag for creatures.dfn - TYPE - which contains a string describing the type of creature Added secure pet trading. Players who trade pets will now see a pet transfer deed appear in a secure trade window with the name and type of creature, and upon completion of the trade the associated pet will be instantly transferred to the other player Updated resource JS scripts (js/server/resource/*) to use dictionaries for all system messages Updated skill JS scripts (js/skill/*) to use dictionaries for all system messages Updated housing JS scripts (js/server/house/*) to use dictionaries for all system messages Updated item JS scripts (js/item/*) to use dictionaries for all system messages Updated magic JS scripts (js/magic/*) to use dictionaries for all system messages Updated NPC AI JS scripts (js/npc/ai/*) to use dictionaries for all system messages Updated command JS scripts (js/commands/*) to use dictionaries for all system messages, gump tooltips, etc Updated code to use dictionaries for all system messages Fixed incorrect spelling for UOX.INI setting HIDEW(H)ILEMOUNTED and updated hiding skill (js/skill/hiding.js) to actually allow/disallow hiding while mounted based on this setting Added new Character JS Method to make it easier to make one NPC initiate combat with another: .InitiateCombat( targetChar ) // Character attempts to initiate combat with target character Updated parrying portion of combat code to be in line with Pub15/pre-AoS parrying mechanics. High AR shields now absorb more damage on a successful parry, while low AR shields have a higher chance of parrying. Shields are also now more effective against archery attacks (full absorption potential) than melee attacks (half absorption potential). Updated combat damage calculations to be in line with Pub15/pre-AoS damage calculations Adjusted default value of COMBATNPCDAMAGERATE ini setting (damage divisor when target is a player) from 2 to 1 to account for these changes. Removed dictionary.UNK, and made dictionary.ZRO the default dictionary used for all unsupported languages Added dictionary support for additional languages: Portuguese, Italian, Czech Updated default dictionaries for the following languages: English, French Added default dictionaries for the following languages: German, Spanish, Portuguese, Italian, Czech (note that translations have been provided by automatic services and will contain inaccuracies!) Added new UOX.INI setting to allow specifying a default dictionary language for server, which if set will force that language for all dictionary messages, regardless of client settings: SERVERLANGUAGE=0 // Set default server dictionary language. Supported languages: 0 - None/language used by each client, 1 - English, 2 - German, 3 - Spanish, 5 - French, 6 - Portuguese, 7 - Italian, 8 - Czech Added new function in combat.cpp - AdjustArmorClassDamage() - which adjusts the damage dealt in combat based on whether armour class (AC DFN tag or .ac JS property) of weapon and armour equipped on hit location of target match up. A weapon with armour class 1 would essentially be doubly effective against armour of armour class 1. Allows setting up things like piercing weapons being better against some armor types than mace weapons, etc. Added new UOX.INI setting under [combat] to enable/disable double damage from armour class bonuses: ARMORCLASSDAMAGEBONUS=0/1 //defaults to 0)
2021-07-28 16:02:56 +08:00
}
else if( tempObj->CanBeObjType( OT_ITEM ))
{
myObj = JSEngine->AcquireObject( IUE_ITEM, tempObj, JSEngine->FindActiveRuntime( JS_GetRuntime( cx )));
0.99.4v Added JS command to reload dictionaries 'reloaddictionaries Fixed a server crash related to casting of spells Fixed some issues with Line-of-Sight checks related to items under/above ground, LoS checks between different floors of buildings, etc. Updated handling of skill-training keywords to be based on language-independent keyword IDs rather than trying to match player-input text to specific skill-names Updated animal-trainer/stablemasterscript (js/npc/ai/stablemaster.js) with several changes: Fixed an issue where the same pet would be stabled in all available slots if payment was taken from player's bank account instead of their backpack Fixed an issue where stablemaster would not pause walking for a while when a player interacts with them Converted all system messages and text messages in stablemaster script to dictionary entries Added new NPC AI type to source - AI_STABLEMASTER (9) - and assigned this to animal trainers. This is used to identify this type of NPCs for the purpose of displaying relevant context menus Reworked banker AI script (js/npc/ai/banker.js) to use triggerwords from client instead of hard-defined strings, to work better with multiple languages (and work with all relevant triggerwords) Fixed a bug with banker AI script (js/npc/ai/banker.js) that prevented players from using the "withdraw" command Re-added NPC AI 8 to banker NPCs (dfndata/npc/male_vendors.dfn and female_vendors.dfn) so code can check for presence of this AI when handling context menus Removed remaining hard-coded banking functionality - all handled by script anyway Added new context menu option for NPC bankers - Open Bankbox Updated code handling of context menus to only show context menus when relevant: Open Paperdoll - Shows for all characters with a paperdoll Open Backpack - Shows for player's character, pack animals and hirelings Open Bankbox - Shows for banker NPCs (if within 8 tiles) Buy/Sell - Shows for vendor NPCs (if within 8 tiles, and if they have anything for sale/are buying anything) Added new context menu entries for pets, which can be used if player is within 12 tiles of pet: Command: Kill Command: Stop Command: Follow Command: Stay Command: Guard Add Friend Remove Friend Transfer Release Added new context menu entries for stablemasters/animal trainers: Claim All Pets Stable Pet Added new context menu entries for Escort Quest NPCs Ask Destination (if within 3 tiles) Accept Escort (if within 3 tiles) Abandon Escort Added new context menus for NPCs that can teach skills to players (limited to max 10 per NPC) Train [skillName] Added new AI script for NPC hirelings (3204=js/npc/ai/hireling.js), who can be hired to follow the player around for a limited amount of time, and function the same way as pets. In addition to the regular pet commands, these speech commands are supported: hire // The hireling will respond with the cost to hire them dismiss // Replaces the "release" command for pets; will dismiss the hireling patrol // The hireling will patrol between it's current location and a second targeted location nearby move // The hireling will try to shuffle out of the way fetch // The hireling will try to fetch a targeted item drop // The hireling will drop to the ground all loot they're currently carrying report // The hireling will report on the remaining time they're hired for Added new NPC DFN tag used by code to detect hireling NPCs for the purpose of displaying context menus: HIRELING // No additional value/data needed for tag Added new context menu entries for Hireling NPCs, in addition to the ones for regular pets: Hire // Can be used within 3 steps of the hireling, who will respond with cost to hire them Dismiss // Replaces the "release" command for pets, will dismiss the hireling Added HIRELING tag and SCRIPT=3204 to and updated stats of various NPCs that will be hireable: m_fighter, f_fighter, m_beggar, f_beggar, m_peasant, f_peasant, m_sailor, f_sailor, m_pirate, f_pirate Added new hireling NPC: m_paladin, f_paladin Added new UOX ini setting to enable/disable context menus CONTEXTMENUS=1/0 (defaults to 1) Added new Item JS Method to check if an item's ID is on a specified food list .IsOnFoodList( foodList ) // Returns true/false if item's ID is on specified foodList Added new OMNIVORE food list and assigned it to [basehuman] DFN section Added new Character JS Properties .isGuarded // Gets/Sets whether character is guarded by a pet/hireling .guarding // Gets/Sets the object (if any) being guarded by a pet/hireling Fixed multiple issues with health bars, flagging and character highlighting Added some crash protection for invalid data used with CUSTOMINTTAG and CUSTOMSTRINGTAG DFN tags for Items, NPCs and Multis Fixed an issue which prevented hard-coded checks from running when using items Added new global js object (Timer) to make the use of character timers in JS more robust, with properties matching timer names from enum in source. Properties: .TIMEOUT // Time until next attack can be done in combat .INVIS // Time until invisible character becomes visible .HUNGER // Time until character grows more hungry .THIRST // Time until character grows more thirsty .POISONTIME // Time until next tick of poison damage .POISONTEXT // Time until next message about suffering from poison .POISONWEAROFF // Time until poison wears off .SPELLTIME // Time until spell cast is completed. Can be set to 0 to interrupt .ANTISPAM // Time until next speech message can be sent (for anti spam purposes) .CRIMFLAG // Time until criminal flag runs out .MURDERRATE // Time until next murder count decay .PEACETIMER // Time until character can re-enter combat after being affected by peacemaking .FLYINGTOGGLE // Time until next time flying ability can be toggled for gargoyles .MOVETIME // Time until NPC can move again .SPATIMER // Time until next time NPC can cast a spell .SUMMONTIME // Time until a summoned NPC will vanish .EVADETIME // Time until an NPC will exit evade state .LOGOUT // Time it takes for a player char to vanish after logout Examples of use: var hungerTimer = myChar.GetTimer( Timer.HUNGER ) myChar.SetTimer( Timer.HUNGER, 15000 ) Added new Character JS Methods to add, remove and list friends of a pet/hireling: .AddFriend( playerToAdd ) // Adds player to friend list .RemoveFriend( playerToRemove ) // Removes player from friend list .GetFriendList() // Gets list of friends .ClearFriendList() // Clears list of friends Added new Character JS Method to fetch a player character's list of pets/followers .GetPetList() // Gets list of pets/followers Added new persistent NPC property to keep track of a pet's previous owners, whether those tamed the pet or had it transferred to them. Every time a pet is tamed, or is transferred to a new owner, this list is updated: GenericList< CChar * > petOwnerList Added new Character JS Method to check if a player is on a pet's owner list as a previous owner: .HasBeenOwner( mChar ) Previous owners of a pet can re-tame it with guaranteed chance of success Updated JS Method Refresh() to be usable with both items or characters, to send updated state of object to nearby players Added character tooltip [Guarded] for characters being guarded by a pet/hireling Pets/hirelings that are transferred will now immediately start following their new master instead of wandering freely Pets/hirelings can no longer be transferred between players as long as either party is flagged as a criminal Pets/hirelings can no longer be transferred to dead players Pets/hirelings can no longer be transferred to NPCs Summoned creatures can no longer be transferred to other players Summoned creatures can no longer have friends Friend lists of pets/hirelings are now cleared when the pet/hireling is transferred to another player Added new UOX.INI settings to control how many pets players can have active: MAXCONTROLSLOTS=0 // Maximum number of pet control slots available to player. Disabled if 0 MAXFOLLOWERS=5 // Maximum pets/followers a player can have active at the same time. Used if control slots are disabled MAXPETOWNERS=5 // Maximum number of different owners a pet can have over its lifetime before it becomes impossible to retame Added new NPC property and NPC DFN tag that keeps track of how many pet control slots an NPC would take up if owned by a player: UI08 controlSlots // source property CONTROLSLOTS=# // DFN tag Added new Character JS properties: .ownerCount // Get the total number of owners a pet/hireling has had, based on NPC's petOwnerList .controlSlots // Get/Set number of pet control slots an NPC will occupy .controlSlotsUsed // Get/Set the number of control slots used by a player Updated get (js/commands/targeting/get.js) and set (js/commands/targeting/set.js) commands to support getting/setting the following character properties: deaths ownerCount (read only) controlSlots controlSlotsUsed Updated NPC DFNs with default CONTROLSLOT=# tags Increased the max distance from player that onSpeech JS event will trigger from 7 to 12 Updated how "all attack" and "all follow" commands for pets are handled. Now loops through all pets owned by character and executes command for each eligible pet Fixed an issue where NPCs could follow characters in different worlds/instances than them selves Updated default max amount of items that can be sold to NPC vendors from 5 to 250 Guards can no longer train players in skills Updated equipment itemlists (dfndata/items/itemlists/itemlists.dfn) with blank entries to introduce some more variety in the type of clothes NPCs wear in general Added new NPCs to DFNs (dfndata/npc/undead.dfn) and added them to undead npclist: [skeletalmage] // variation of [bonemage] [skeletalknight] // variation of [boneknight] Updated Titles (dfndata/titles/titles.dfn) with up-to-date titles for skills around Pub 15, and added titles for skills added after that. Also added "Elder" and "Legendary" titles for 110 and 120 skillpoints Updated EQUIPITEM tag in newbie.dfn (dfndata/newbie/newbie.dfn) to support an optional hue parameter (EQUIPITEM=id,hue) Updated starting equipment for new characters (dfndata/newbie/newbie.dfn), with commented out practice weapons. Uncomment to use Added item definitions for practice weapons (dfndata/items/gear/weapons/practice_weapons.dfn): practice_skinning_knife practice_hatchet practice_axe practice_mace practice_longsword practice_spear practice_bow practice_club practice_crook practice_gnarled_staff Updated mount statues DFN (dfndata/items/misc/mount-statues.dfn) and JS (js/npc/pets/*.js) files to include pet control slot related stuff Pets now inherit the karma of their owners, but revert to their original karma upon release Pets and hirelings will no longer follow the ghosts of their dead owners, but stay to guard their corpse Added optional 9th parameter for JS Function CreateDFNItem to specify a color for item created. This comes before the other optional parameters - worldNumber and instanceID (which are only used if character is NULL): CreateDFNItem( mSock, mChar, sectionName, inPack, iAmount, itemType, iColor, worldNumber, instanceID ) Added ID of Giant Beetle to various pack animal checks Pack animals will now drop any newbie/blessed items stored in their packs upon death Added new NPC properties to track pet loyalty, and exposed these as Character JS properties, and NPC DFN tags: JS Properties .maxLoyalty // Defaults to 100 .loyalty // Starts at 25 DFN Tags MAXLOYALTY=# // Defaults to 100 LOYALTY=# // Starts at 25 Updated TriggerEvent JS function to support return values (int, bool, string, object) from called script Updated various JS scripts to make use of new TriggerEvent functionality and reduce reliance on custom tags: js/item/archerybutte.js js/item/trainingdummy.js js/server/data/combatanims.js js/server/data/weapontypes.js Updated archerybutte script to use dictionary for system and text messages Updated archerybutte script to support increased range, distance penalty and dex/str bonuses when calculating score Added new UOX.INI settings under [pets and hirelings] section related to pet control and loyalty: CHECKPETCONTROLDIFFICULTY=1 // Enable/Disable pet control difficulty system PETLOYALTYGAINONSUCCESS=1 // Amount of pet loyalty gained on successful pet command use PETLOYALTYLOSSONFAILURE=3 // Amount of pet loyalty lost on failed pet command use PETLOYALTYRATE=900 // Amount of seconds between each time pet loyalty is automatically reduced by 1. Takes 25 hours to deplete completely from max Added new persistent NPC property that keeps track of the difficulty of taming and controlling a pet, and exposed it as a Character JS property: .orneriness Every time a tamed pet is released or goes wild, its "orneriness" increases, making it more difficult for other players to tame, and more difficult for anyone to control. Updated CBasePetResponse::canControlPet() function to use pet control difficulty system if enabled, which checks player's animal taming/animal lore skill vs a pet's "orneriness" to determine chance of pet accepting a given pet command On successful use of pet command, increases pet loyalty by value defined in PETLOYALTYGAINONSUCCESS ini setting On failed use of pet command, decreases pet loyalty by value defined in PETLOYALTYLOSSONFAILURE ini setting Added new Character JS Method to calculate chance of a player successfully controlling the pet: .CalculateControlChance( mChar ) // Returns value between 0 and 1000 indicating chance of success Feeding a pet will now restore its loyalty to maximum Pets will now lose loyalty on hunger checks when at maximum hunger Pets that are maximum hungry will now only have a chance to go wild if loyalty has dropped to zero Added new DFN tag for creatures.dfn - TYPE - which contains a string describing the type of creature Added secure pet trading. Players who trade pets will now see a pet transfer deed appear in a secure trade window with the name and type of creature, and upon completion of the trade the associated pet will be instantly transferred to the other player Updated resource JS scripts (js/server/resource/*) to use dictionaries for all system messages Updated skill JS scripts (js/skill/*) to use dictionaries for all system messages Updated housing JS scripts (js/server/house/*) to use dictionaries for all system messages Updated item JS scripts (js/item/*) to use dictionaries for all system messages Updated magic JS scripts (js/magic/*) to use dictionaries for all system messages Updated NPC AI JS scripts (js/npc/ai/*) to use dictionaries for all system messages Updated command JS scripts (js/commands/*) to use dictionaries for all system messages, gump tooltips, etc Updated code to use dictionaries for all system messages Fixed incorrect spelling for UOX.INI setting HIDEW(H)ILEMOUNTED and updated hiding skill (js/skill/hiding.js) to actually allow/disallow hiding while mounted based on this setting Added new Character JS Method to make it easier to make one NPC initiate combat with another: .InitiateCombat( targetChar ) // Character attempts to initiate combat with target character Updated parrying portion of combat code to be in line with Pub15/pre-AoS parrying mechanics. High AR shields now absorb more damage on a successful parry, while low AR shields have a higher chance of parrying. Shields are also now more effective against archery attacks (full absorption potential) than melee attacks (half absorption potential). Updated combat damage calculations to be in line with Pub15/pre-AoS damage calculations Adjusted default value of COMBATNPCDAMAGERATE ini setting (damage divisor when target is a player) from 2 to 1 to account for these changes. Removed dictionary.UNK, and made dictionary.ZRO the default dictionary used for all unsupported languages Added dictionary support for additional languages: Portuguese, Italian, Czech Updated default dictionaries for the following languages: English, French Added default dictionaries for the following languages: German, Spanish, Portuguese, Italian, Czech (note that translations have been provided by automatic services and will contain inaccuracies!) Added new UOX.INI setting to allow specifying a default dictionary language for server, which if set will force that language for all dictionary messages, regardless of client settings: SERVERLANGUAGE=0 // Set default server dictionary language. Supported languages: 0 - None/language used by each client, 1 - English, 2 - German, 3 - Spanish, 5 - French, 6 - Portuguese, 7 - Italian, 8 - Czech Added new function in combat.cpp - AdjustArmorClassDamage() - which adjusts the damage dealt in combat based on whether armour class (AC DFN tag or .ac JS property) of weapon and armour equipped on hit location of target match up. A weapon with armour class 1 would essentially be doubly effective against armour of armour class 1. Allows setting up things like piercing weapons being better against some armor types than mace weapons, etc. Added new UOX.INI setting under [combat] to enable/disable double damage from armour class bonuses: ARMORCLASSDAMAGEBONUS=0/1 //defaults to 0)
2021-07-28 16:02:56 +08:00
}
*vp = OBJECT_TO_JSVAL( myObj );
}
break;
}
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
case CCP_TDEXTERITY: *vp = INT_TO_JSVAL( gPriv->GetDexterity2() ); break;
case CCP_TINTELLIGENCE: *vp = INT_TO_JSVAL( gPriv->GetIntelligence2() ); break;
case CCP_TSTRENGTH: *vp = INT_TO_JSVAL( gPriv->GetStrength2() ); break;
case CCP_POISON: *vp = INT_TO_JSVAL( gPriv->GetPoisoned() ); break;
case CCP_POISONEDBY: *vp = INT_TO_JSVAL( gPriv->GetPoisonedBy() ); break;
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
case CCP_LIGHTLEVEL: *vp = INT_TO_JSVAL( gPriv->GetFixedLight() ); break;
case CCP_VULNERABLE: *vp = BOOLEAN_TO_JSVAL( !gPriv->IsInvulnerable() ); break;
case CCP_HUNGERSTATUS: *vp = BOOLEAN_TO_JSVAL( gPriv->WillHunger() ); break;
case CCP_THIRSTSTATUS: *vp = BOOLEAN_TO_JSVAL( gPriv->WillThirst() ); break;
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
case CCP_LODAMAGE: *vp = INT_TO_JSVAL( gPriv->GetLoDamage() ); break;
case CCP_HIDAMAGE: *vp = INT_TO_JSVAL( gPriv->GetHiDamage() ); break;
case CCP_FLAG: *vp = INT_TO_JSVAL( gPriv->GetFlag() ); break;
case CCP_ATWAR: *vp = BOOLEAN_TO_JSVAL( gPriv->IsAtWar() ); break;
case CCP_SPELLCAST: *vp = INT_TO_JSVAL( gPriv->GetSpellCast() ); break;
case CCP_ISCASTING: *vp = BOOLEAN_TO_JSVAL( gPriv->IsCasting() || gPriv->IsJSCasting() ); break;
Small update Fixed an issue with an internal movement check that prevented characters from moving in valid map areas in Felucca/Trammel from X 6144 to X 7168 Fixed an issue where .instanceID property was misspelled in 'xgo GM command script, causing characters to be teleported to an out of bounds area where they would no longer be saved (js/commands/targeting/x.js) Added some additional error-checking to .Teleport()/.SetLocation() JS Method to prevent script-accidents from sending characters out of bounds. Updated Poisoning skill to add poison-charges to weapons being poisoned. Charges are consumed when applying poison in combat (js/skill/poisoning.js) Updated combat code to consume poison-charges if a poisoned weapon is used to poison an opponent Updated shoplists for Blacksmiths and Weaponsmiths - they now buy/sell longswords (dfndata/items/shoplist.dfn) Updated MageShopping shoplist for mage vendors - they now buy/sell mass curse scrolls (dfndata/items/shoplist.dfn) Added new Spawn Region DFN tag that can specify which era or eras of UO (Multiple comma-separated entries supported) a given spawn region is valid for. Spawn region not valid for core shard era will be ignored. Syntax: ERAS=UO,T2A,UOR,LBR,AOS,SE,ML,SA,HS,TOL Added new Spawn Region DFN tag that allows using another spawn region as a "parent". All properties of this parent will be inherited except for these, which are ignored: ERAS, NPCLIST, ITEMLIST, NPC and ITEM. Syntax for new tag: GET=# // Inherit a specified spawn region Added spawn region for animal trainer vendor in Vesper stable Added spawn region for fur trader/tanner vendors in The Best Hides of Britain Added spawn region for spinner vendor in The Lord's Clothier's and The Right Fit shops in Britain Added spawn region for tanner NPC to Nujel'm Tannery (and fixed leatherworker spawn region for same area) Added spawn regions for banker NPCs in East Bank of Britain, First Bank of Moonglow, Jhelom Bank and Jeweler, Bank of Skara Brae Added spawn regions for stables, tailor and blacksmith inside Castle British Added spawn regions for mage shops, mage guilds and farm houses in Moonglow Added spawn regions for misc vendors and townfolk in multiple cities Added spawn regions for Fire Island Updated spawn regions for Dagger Isle/Ice Island Added spawn regions for forests and jungles in southern Britannia and on various islands including Bucc's Den, Moonglow, Serpent's Hold, and misc unpopulated islands Added spawn regions for area east of Skara Brae, around Hedge Maze and south of Britain Added spawn regions for wandering healers outside every dungeon entrance in Britannia and Lost Lands Re-integrated ocean spawn regions for ocean creatures (dolphin, walrus, water elemental, sea serpent) from the original community-based spawn file Added reagent spawns in overworld spawn regions in Britannia/Lost Lands Added special reagent spawns in swamp areas Added additional overworld spawn regions in Britannia/Lost Lands Added spawn regions for Khaldun dungeon that spawn some new and some old NPCs: Old: Zombies, skeletons, skeletal mages, skeletal knights, ancient liches New: Cursed (and named) NPCs, shadowfiends, zealots of khaldun (knights/summoners), tentacles of the harrower Updated size and positions of some existing overworld spawn regions Fixed incorrect spawn region size for small island south of Trinsic Added switch/door puzzle functionality in Khaldun dungeon using new switch/door combo script (js/item/dungeons/switch_door_combo.js) Added "smart objects" in Khaldun dungeon that activate when you come close enough (js/item/dungeons/smart_activate_item.js) Added teleport locations within Khaldun dungeon (js/teleport.scp) Added custom AIs to existing NPC spawning in Khaldun dungeon: Ancient Lich (summons other undead, and can turn into one of them for disguise) Added DFN entries for new NPCs spawning in Khaldun dungeon, some with custom AIs: [tentacles_of_the_harrower] -> Tentacles of the Harrower (life steal) [shadowfiend] -> Shadowfiends (seek out and reveal hidden players) [zealot_knight]/[zealot_summoner] -> Zealots of Khaldun (turn into undead on death, male/female variants) [cursed] -> Cursed (male/female variants) [spectralarmor] -> Spectral Armor Added DFN entries for new (named) NPCs spawning in Khaldun dungeon: [lysander_gathenwale] -> Lysander Gathenwale [grimmoch_drummel] -> Grimmoch Drummel [morg_bergen] -> Morg Bergen [tavara_sewel] -> Tavara Sewel Added new NPC DFN entries: [leatherworker] -> alias for male/female leatherworker vendors [mapmaker] -> alias for male/female mapmaker vendors Added new Race DFN entries: [RACE 29] -> Cursed (enemies of RACE 30) [RACE 30] -> Zealots (enemies of RACE 29) Added new book DFN entries for Khaldun journals of Lysander, Tavara and Grimmoch - available as loot from the respective NPCs (dfndata/misc/books.dfn and dfndata/items/misc/books.dfn) Added 25% chance for hit-animations and hit-SFX to play for targets in combat, instead of playing every time - can get very spammy Monsters with actual weapons equipped (like Ophidian Enforcer with Halberd/Bardiche) will now get appropriate combat SFX for hitting with that weapon Updated Healing skill to base cure/resurrection skill requirements on the calculated skill, rather than base skill (js/skill/healing.js) Fixed an issue where healing with bandages and dying in the process would not properly reset the healing-related tags and skills used Updated healing script to show a resurrection confirmation menu for players targeted with bandages for resurrect (js/skill/healing.js) All skill usage states now reset on death, to prevent cases of players being "busy" while trying to use skills that got stuck due to script bugs. The 'regspawn GM command now supports a new parameter called "max". Updated command syntax: 'regspawn # // perform a single respawn cycle in a specific spawn region 'regspawn all // perform a single respawn cycle across all spawn regions 'regspawn max // respawn ALL spawn regions to MAX capacity in one go Added new UOX.INI setting that determines the maximum range at which NPCs can initiate attacks on players/NPCs (the old MAXRANGE=10 setting now instead defines max range at which players can initiate attacks on players/NPCs): MAXNPCAGGRORANGE=10 Optimized performance by significantly reducing the number of line-of-sight checks performed by characters, especially in combat scenarios, or when evaluating potential targets for NPC AIs. The amount of checks done is also affected by the new ini setting for max aggro range. Fixed an issue where both NPC and player characters would instantly drop one hunger level (from 6 to 5) upon creation since hungerrate was not initialized until after first hunger-event Updated character priv property from UI16 to UI32, and added a new flag that determines if fame/karma title is hidden for character: HIDEFAMEKARMATITLE (0x10000) NPCs will no longer aggro other NPCs if the Z difference between them is greater or equal to 20 (i.e. they're on different floors), unless both are using ranged weapons and both are in range Fixed an issue where players could get discounts from shopkeepers even though neither player nor shopkeeper were members of a NPC guild (js/npc/ai/shopkeeper.js) Fixed an issue where the "premium" a player would get when selling items to a shopkeeper in the same NPC guild as them would be 110% extra on top of the item's value, instead of the intended 10% (js/npc/ai/shopkeeper.js) (Thanks, cobrag0318!) Added missing tall straw hat to tailoring crafting scripts (Thanks, Dragon Slayer!) Improved error reporting during compilation of individual scripts being reloaded - will now show more context and line number onCombatEnd JS Event now also triggers when NPCs ignore their target and/or evade during combat Updated 'decorate command to support saving/loading custom tags on items for world templates. These are stored after a @ symbol in the world template, each custom tag separated by a | symbol, and with each custom tag saved using this syntax: key$type$value Updated resource-harvesting scripts to use script-specific global (const) variables, to avoid interference between different scripts (js/server/resource/*) Added new resource-harvesting scripts and added spawn regions for these in fields on farms all over Britannia/Lost Lands cabbages (js/server/resource/cabbages.js) canteloupes (js/server/resource/canteloupes.js) carrots (js/server/resource/carrots.js) garlic (js/server/resource/garlic.js) gourds (js/server/resource/gourds.js) honeydew melons (js/server/resource/honeydewmelon.js) onions (js/server/resource/onions.js) pumpkins (js/server/resource/pumpkins.js) squashes (js/server/resource/squashes.js) turnips (js/server/resource/turnips.js) watermelons (js/server/resource/watermelon.js) Updated CSpawnRegion::FindItemSpotToSpawn() function in cSpawnRegion.cpp to prevent duplicate spawning of exact same item in exact same location Updated sectionid of all potion and scroll aliases to match main item, so they'll get correctly picked up by NPC shopkeepers (dfndata/items/magic/potions.dfn and scrolls.dfn) Specified sectionid for backpacks, so it also gets applied to packs added using the alias [backpack] (dfndata/items/misc/provisions.dfn) Fixed a code issue that prevented players from selling empty containers to NPC shopkeepers willing to buy such containers Fixed an issue where field-spells (wall of stone, poison field, etc) would ignore dynamic/static items that should block these Fixed an issue where field-spells could be cast into houses from the outside by standing next to a wall and targeting self Fixed a War/Peace-mode desync between client and server by having server always notify client (using war-toggle packet) when the "at war" flag is toggled for player character Fixed an issue with hiding skill that wouldn't allow player to hide after having acquired self as target in combat (through spellcasting, for instance) (Thanks, Dragon Slayer!) Fixed an issue where mana/reagents were consumed and skillcheck performed before all spellcast-validations had succeeded, resulting in the occasional loss of reagents/mana when spellcasting was disallowed (code and js/magic/clumsy.js and level1targ.js) Fixed an issue with lack of criminal-flagging for casting of hostile spells scripted in JS (clumsy, magic arrow, feeblemind) vs blue targets (js/magic/clumsy.js and level1targ.js) Fixed some issues with Line-of-Sight checking code that returned incorrect results, which amongst other things affected spellcasting in areas with uneven terrain Fixed some issues with movement code and climbing of ladders, in particular the rope ladder in the 2-story log cabin. Code now sets a "is climbing" flag when character steps onto a rope ladder, and uses that to help resolve some edge cases, and then unsets it when they step off. Renamed section headers of some map-items in DFNs from "locationname" to "locationnamemap" for clarity (example: "britain" to "britainmap") Fixed broken "map wrapping" when sailing to edges of map in Felucca or Trammel Fixed a server crash related to attempts at reading data from invalid map tiles
2025-06-27 08:40:02 +08:00
case CCP_PRIV: JS_NewNumberValue( cx, gPriv->GetPriv(), vp ); break;
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
case CCP_TOWNPRIV: *vp = INT_TO_JSVAL( gPriv->GetTownPriv() ); break;
case CCP_GUILDTITLE:
0.99.4d Added new option in UOX.INI under [settings] section: MAPDIFFSENABLED=0/1 // If enabled, server will attempt to load diff files, and send "Enable Map-diff files" packet to client to also load these. Disabled by default. Server no longer loads map/statics diff files by default, nor does it send packet to client to request loading these files, as only client versions below 7.0.8.2 will actively load these files. Can be re-enabled with new UOX.INI setting mentioned above! Fixed incorrect ID for gargish dagger in CHandleCombat::getWeaponType() Added missing weapon entries in CHandleCombat::getWeaponType(): bladed whip, barbed whip, spiked whip, gargish talwar Fixed an issue that would show the end part of some tiledata names as garbled text instead of cutting off the text(!) at 20 characters Fixed an issue with advanced character creation template when using ClassicUO client, which sends a profession value of 255 instead of 0 when no profession template has been selected. Fixed an issue where clones of NPCs that can split in combat didn't get the NPC flag correctly set Guild titles are now removed for players who leave their guilds Enabled closing some hard-coded gump menus using right-click (howto, guild, towns, wholist, addmenu, craftmenu, info) Fixed an issue where adding base items using 'add [itemID] would sometimes get false positive hits from harditems.dfn, depending on the length of the itemID Fixed an issue where items added using 'add [itemID] would not get names applied properly from harditems.dfn Item/NPC DFN tag GET can now inherit a random parent by adding additional values separated by spaces. Syntax: GET=parent1 parent2 parent3 (etc) Fixed an issue where NPC backpacks would not have the max item capacity set properly Added new properties for CItem objects (also exposed as JS Item Properties): maxRange // max distance a ranged weapon can fire at (replaces ARCHERRANGE ini setting) baseRange // base distance throwing weapons (when implemented) can be used at Added support for new Item DFN tag that replaces global UOX.INI setting ARCHERRANGE: MAXRANGE=# // Specifies max range of ranged weapon Added support for new Item/NPC DFN tags to support randomizing elemental resistances: RESISTFIRE=#/# # // Set NPC's poison resistance; fixed or random value RESISTCOLD=#/# # // Set NPC's poison resistance; fixed or random value RESISTLIGHTNING=#/# # // Set NPC's poison resistance; fixed or random value RESISTPOISON=#/# # // Set NPC's poison resistance; fixed or random value Added support for two new DFN tags in dfndata/race/races.dfn that can be used to allow/ban lists of equipment for specific races ALLOWEQUIPLIST=# BANEQUIPLIST=# Added support for new section in dfndata/race/races.dfn - [EQUIPLIST #], which can be used to define lists of equipment that is whitelisted or banned for specific races. Fixed a bug that would report incorrect weight in tooltips for Item/NPC spawner objects ScriptSections are now reapplied for items bought by players from NPC vendors Fixed an issue where players could drop an item on the ground and other players would still see the item after it was picked up, because of a failed distance check vs old location coordinates (in pack) instead of vs current location on ground Fixed a bug with players being able to use last-target macro to target objects picked up and held by other players on their cursor Updated all references to "devinelock" to be "divinelock" instead - this includes the name of the JS Item property Fixed house commands triggering (useless) targeting cursors for players onboard boats Changed default statcap in UOX.INI from 325 to 225 Fixed a out-of-range error for players attempting to combine ore inside their own backpack Fixed various issues with distance checks and container checks when using/target objects Added optional 4th "hue" parameter to AddGump JS method Added JS Function to get total amount of accounts on server - GetAccountCount() Added JS Function to get total amount of players online - GetPlayerCount() onSwing JS Event can now trigger in scripts attached to items, not just items attached to characters Added some JS Functions to expose some hard-coded constants to JS scripts: BASEITEMSERIAL() // Base item serial INVALIDSERIAL() // Invalid serial INVALIDID() // Invalid ID INVALIDCOLOUR() // Invalid colour Fixed an issue where JS character property .colour would modify origSkin property instead of colour Fixed an issue where JS character property .guildTitle returned the name of the character instead of the guild title Character JS property .poison can now also be used to set a character's poisoned level, not just read it Exposed Item property to JS engine: .ac // armour class for item (0-128). Primarily used for setting race-restrictions for equippable items, i.e. race X cannot equip items of armour class Y. .def // defensive value of item (Physical resistance post-AoS, AR in older UO) // NOTE: The following properties don't actually do anything yet, but can still be used in custom JS scripts if desired .resistCold // Cold resistance of item 0-1000, where 1000 equals 100.0% .resistHeat // Heat/Fire resistance of item 0-1000, where 1000 equals 100.0% .resistLight // Light resistance of item 0-1000, where 1000 equals 100.0% .resistLightning // Energy/Lightning resistance of item 0-1000, where 1000 equals 100.0% .resistPoison // Poison resistance of item 0-1000, where 1000 equals 100.0% .resistRain // Rain resistance of item 0-1000, where 1000 equals 100.0% .resistSnow // Snow resistance of item 0-1000, where 1000 equals 100.0% .damageHeat // Weapon deals Heat/Fire elemental damage (true/false) .damageCold // Weapon deals Cold elemental damage (true/false) .damageLight // Weapon deals Light elemental damage (true/false) .damageLightning // Weapon deals Lightning elemental damage (true/false) .damagePoison // Weapon deals Poison elemental damage (true/false) .damageRain // Weapon deals Rain/Water elemental damage (true/false) .damageSnow // Weapon deals Snow/Ice elemental damage (true/false) Added new UOX.INI setting under [server] to enable/disable shard response to ConnectUO server polling (disabled by default) Sub-commands are no longer included when registering packets to be overloaded via RegisterPacket function, as that part was never fully implemented. Packet-hook scripts can be setup for specific packet IDs, but any sub-command checking will need to be done in the script itself JS Packet Method GetDWord() now uses JS_NewNumberValue instead of INT_TO_JSVAL to read from the socket buffer, to better handle large numbers, which could previously be returned with wrong values. JS Function CalcItemFromSer() now uses a JS_GetStringBytes() and str_value() combo instead of JSVAL_TO_INT() to read the data provided in the function argument. This allows JS scripts to provide item serials to the function directly without needing to split it into four parts first (though that still works) Fixed issue where JS properties for multis didn't always return correct values The 'set command can now be used to set the armour class of items ('set ac #) Reimplemented 'tweak command in JS engine (js/commands/targeting/tweak.js) - can be used to view and modify properties of characters, character skills, items, multis and regions (target ground) Added placeholder packet-hook script (js/server/network/0xf1_connectUoServerPoll.js) to handle responses to ConnectUO server polling. By default this script does nothing, but serves as a placeholder for drop-in replacement scripts generated specifically for each shard by the ConnectUO service. Updated some commands to support an alternate STATIC keyword (can also be ommitted) to add base items: 'add static itemID 'tile static itemID Updated some commands with support for randomization. Provided itemID will be randomized based on provided rndValue: /js/commands/targeting/add.js: 'add itemID rndValue cmdtable.cpp and targeting.cpp: 'tile itemID rndValue 'tile itemID x1 x2 y1 y2 z rndValue Updated js/commands/custom/repeatingcmds.js to support 'm delete as an alias for 'rremove Added 'props as an alias for the 'tweak command Added 'teleport as an alias for the 'tele command (js/commands/targeting/tele.js) Added 'shavehair and 'shavebeard as aliases for 'kill hair and 'kill beard (js/commands/targeting/kill.js) Added 'noinvul and 'mortal aliases for the 'invul false command (js/commands/custom/misc-cmds.js) Added 'immortal and 'invul (without parameter) as aliases for the 'invul true command Added 'bringtopack as an alias of 'movetobag command (js/commands/targeting/movetobag.js) Updated check for cancelling of target cursor in various JS scripts Minor updates to various JS scripts Fixed issue where some item definitions in dfndata/harditems/harditems.dfn and dfndata/items/building/lighting.dfn used comma instead of space as delimiter for the VALUE tag, which thus never got applied Updated all NPC definitions to let NPCs spawn facing in random directions
2021-03-22 05:59:20 +08:00
tString = JS_NewStringCopyZ( cx, gPriv->GetGuildTitle().c_str() );
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
*vp = STRING_TO_JSVAL( tString );
break;
UOX3 0.99.6-RC3 Updated Item DFNs with ORIGIN and SECTIONID tags for relevant items Added JS Function to make comparing eras (based on object origin or server settings) easier: EraStringToNum( eraString ) // Takes an era string (uo, t2a, uor, td, lbr, aos, etc) and returns an int Updated some JS scripts to use EraStringToNum() for era comparisons (potionkeg.js) Default CORESHARDERA setting is now LBR Removed PUB15 as a separate "era" - it's identical to late stage LBR anyway: Removed support for GETPUB15 tag Added support for GETUO tag for items/NPCs: GETUO=<sectionID> // Inherit DFN section if core shard era is Ultima Online (original release, before T2A) Rewrote portions of MsgBoardQuestEscortCreate() function in msgboard.cpp to ensure only escort regions within same world as NPC can be selected as destinations Increased maximum number of possible escort regions that can exist from 255 to 65535 Added region definitions for all shrines in Britannia (Fel & Trammel), and marked them as valid destinations for NPC escorts (uox3/regions/regions.dfn) Moved bankers from vendor to human DFN files, and made them inherit basehuman instead of basevendor - since they are not vendors To address an issue with escorted NPCs not timing out and vanishing if they are left in a "dormant" area of the world with no player activity, the NPCs are marked as "always awake" the moment they arrive at their destination. Note that the uox.ini setting ALLOWAWAKENPCS needs to be enabled for this to work. Fixed an issue where spawnsection of spawners did not show up correctly in tweak menu Fixed an issue where the generic Orc AI script didn't have a return true at end of onDamage() event, which prevented all orcs from taking damage in combat (js/npc/ai/monster/orc.js) Moved Anatomy skill-check in healing script (js/skill/healing.js) from onCallback1() function to onTimer() to prevent the skill-check from being spammable Added mount ID for Frost Mite in creatures.dfn, allowing it to be used as mount Exposed the following character properties to JS engine, which can be used to view/adjust the permanent hair/beard options for a character: .hairStyle .hairColour .beardStyle .beardColour Updated 'kill hair, 'shavehair, 'shavebeard and 'remove commands to clear permanent hair/beard colour and style properties in addition to removing the item itself Added a GM override to let GMs place as many houses as they want (js/server/house/houseDeed.js) Fixed an issue where attempting to sell items to NPC shopkeepers could result in client crashing Added a new JS Event: onMultiLogout( iMulti, cPlayer ) // Handles players logging out while inside multis Updated house script (js/server/house/house.js) with onMultiLogout event, which allows owners (always) and co-owners/friends/guests (if option enabled in uox.ini) to safely log out inside the house (without getting booted). Added a "keyless" option for interacting with locked doors (js/item/doors.js) of player-owned houses, which lets owners/co-owners/friends/guests of a house use locked doors in the house without requiring a key in their backpack, if the options for that are enabled in UOX.INI. Enabled for owners/co-owners and friends by default (but not for guests) Note that if option to safely log out is enabled, but keyless option is NOT enabled, then the server will check if the player has a key to the house in their backpack, and eject them from the house upon logging out if not. This is to make sure players don't get stuck inside a house they can't get out of because they lack the rights to open doors etc. Added new UOX.INI options, under the [houses] section: SAFECOOWNERLOGOUT=1 // Allow co-owners to safely and instantly log out inside house SAFEFRIENDLOGOUT=1 // Allow friends to safely and instantly log out inside house SAFEGUESTLOGOUT=1 // Allow guests to safely and instantly log out inside house KEYLESSOWNERACCESS=1 // Allow owner of house to use locked doors in house without key in pack KEYLESSCOOWNERACCESS=1 // Allow co-owners of house to use locked doors in house without key in pack KEYLESSFRIENDACCESS=1 // Allow friends of house to use locked doors in house without key in pack KEYLESSGUESTACCESS=0 // Allow guests of house to use locked doors in house without key in pack Fixed NOHAIR tag from races.dfn not being loaded correctly
2023-03-04 22:50:55 +08:00
case CCP_HAIRSTYLE: *vp = INT_TO_JSVAL( gPriv->GetHairStyle() ); break;
case CCP_HAIRCOLOUR: *vp = INT_TO_JSVAL( gPriv->GetHairColour() ); break;
case CCP_BEARDSTYLE: *vp = INT_TO_JSVAL( gPriv->GetBeardStyle() ); break;
case CCP_BEARDCOLOUR: *vp = INT_TO_JSVAL( gPriv->GetBeardColour() ); break;
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
case CCP_FONTTYPE: *vp = INT_TO_JSVAL( gPriv->GetFontType() ); break;
case CCP_SAYCOLOUR: *vp = INT_TO_JSVAL( gPriv->GetSayColour() ); break;
case CCP_EMOTECOLOUR: *vp = INT_TO_JSVAL( gPriv->GetEmoteColour() ); break;
case CCP_ATTACKER:
{
// Hm Quite funny, same thing as .owner
CChar *tempChar = gPriv->GetAttacker();
if( !ValidateObject( tempChar ))
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
{ // Return a JS_NULL
*vp = JSVAL_NULL;
}
else
{
// Otherwise Acquire an object
JSObject *myChar = JSEngine->AcquireObject( IUE_CHAR, tempChar, JSEngine->FindActiveRuntime( JS_GetRuntime( cx )));
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
*vp = OBJECT_TO_JSVAL( myChar );
}
break;
Housing Revamp and more Updated JS SysMessage function to accept up to 10 extra, optional arguments, which can be used with dictionary messages that require additional parameters like %s or %i Added new type of house privilege in cMultiObj.cpp to keep track of friends of the multi - HOUSEPRIV_FRIEND - which is stored during worldsaves as one or more Friend=<player serial> tags in house.wsc Added new type of house privilege in cMultiObj.cpp to keep track of guests of the multi - HOUSEPRIV_GUEST - which is stored during worldsaves as one or more Guest=<player serial> tags in house.wsc When items are created for houses upon house placement, a reference to the multi's serial is now stored in the house sign's MORE property to allow easier tracking of which house a particular sign belongs to Added tracking of new, persistent properties for houses via cMultiObj.cpp/h: lockdowns, secure containers, vendors, guests, friends, owners, ban location, public status, number of visits, timestamps Added a multitude of new methods in cMultiObj.cpp/h to assist in improving the functionality of houses Added new tags for houses in house.dfn (default values applied if tag not specified): MAXSECURECONTAINERS=4 - Max amount of secure containers allowed in a multi MAXLOCKDOWNS=256 - Max amount of lockdowns allowed in a multi MAXVENDORS=10 - Max amount of vendors allowed in a multi MAXBANS=50 - Max amount of bans in a multi's ban list MAXFRIENDS=50 - Max amount of friends in a multi's friend list MAXGUESTS=50 - Max amount of guests in a multi's guest list MAXOWNERS=8 - Max amount of owners and co-owners in a multi's owner list MAXTRASHCONTAINERS=1 - Max amount of trash containers allowed in multi SCRIPT=<scriptID> - Assign a JS script-ID directly to a multi FRONTDOOR - indicates that a door is the front door of a house. Cannot be locked in public houses! INTERIORDOOR - indicates that a door is an interior door of a house. Can be locked in public houses. BANX - Location X offset for multi's ban location, if not used, will try to use SE corner of multi instead BANY - Location Y offset for multi's ban location, if not used, will try to use SE corner of multi instead Added JS Event: onHouseCommand( tSock, multiObj, cmdID ) - For handling spoken house commands via JS scripts attached to multi. Updated JS Events: onEntrance() - can now trigger both for multi being entered and/or object entering onLeaving() - can now trigger both for multi being left and/or object entering onSpeech() - can now also trigger for items (in addition to chars) with event & script attached, if UOX.INI setting ITEMSDETECTSPEECH is enabled Added JS Multi methods: .IsBoat() - Returns whether the item (or multi) is a boat .IsOwner( playerToCheck ) - Returns whether a player is the owner of a multi .IsOnOwnerList( playerToCheck ) - Returns whether a player is on the (co-)owner list of a multi .IsOnFriendList( playerToCheck ) - Returns whether a player is on the friend list of a multi .IsOnGuestList( playerToCheck ) - Returns whether a player is on the guest list of a multi .IsOnBanList( playerToCheck ) - Returns whether a player is on the ban list of a multi .AddToFriendList( playertoAdd ) - Adds player to the friend list of a multi .RemoveFromFriendList( playertoRemove ) - Removes player from the friend list of a multi .AddToGuestList( playertoAdd ) - Adds player to the guest list of a multi .RemoveFromGuestList( playertoRemove ) - Removes player from the guest list of a multi .ClearOwnerList() - Clears all entries from a multi's (co-)owner list .ClearFriendList() - Clears all entries from a multi's friend list .ClearGuestList() - Clears all entries from a multi's guest list .ClearBanList() - Clears all entries from a multi's ban list .SecureContainer( itemToSecure ) - Secures a container in a multi .UnsecureContainer( itemToUnsecure ) - Unsecures a container in a multi .IsSecureContainer( itemToCheck ) - Checks if specified item is a secure container in a multi .LockDownItem( itemToLockDown) - Locks down an item in a multi .ReleaseItem( itemToRelease ) - Releases a locked down item in a multi .KillKeys() - Deletes ALL keys associated with a multi .AddTrashCont( itemToAdd ) - Add trash container to multi's list of trash containers .RemoveTrashCont( itemToRemove ) - Remove trash container from multi's list of trash containers Added JS Item (Multi only) properties: .lockdowns - Get the number of lockdowns in a multi .maxLockdowns - Get/Set the max number of lockdowns allowed in a multi .secureContainers - Get the number of secure containers in a multi .maxSecureContainers - Get/Set the max number of secure containers allowed in a multi .trashContainers - Get the number of trash containers in a multi .maxTrashContainers - Get/Set the max number of trash containers allowed in a multi .friends - Get the number of friends in a multi's friend list .maxFriends - Get/Set the max number of friends allowed in a multi's friend list .guests - Get the number of guests in a multi's guest list .maxGuests - Get/Set the max number of guests allowed in a multi's guest list .owners - Get the number of owners in a multi's owner list .maxOwners - Get/Set the max number of owners allowed in a multi's owner list .bans - Get the number of banned players in a multi's ban list .maxBans - Get/Set the max number of banned players allowed in a multi's ban list .vendors - Get the number of player vendors in a multi .maxVendors - Get the max number of player vendors allowed in a multi .deed - Get the item sectionID for deed used to place multi .isPublic - Get/Set the private/public state of a multi .buildTimestamp - Get the timestamp for when the house was originally placed .tradeTimestamp - Get the timestamp for when the house was last traded to another player .banX - Get/Set the ban location X offset for the multi .banY - Get/Set the ban location Y offset for the multi Added JS Character properties: .multi = Get/Set the multi object the character is in .accountNum = Get the account number the character belongs to .housesOwned = Get a count of houses owned by the character .housesCoOwned = Get a count of houses co-owned by the character Updated JS cBaseObject Methods .FirstItem(), .NextItem() and .FinishedItems() to also support iterating through items in multis Updated JS multi Methods .FirstChar(), .NextChar() and .FinishedChars() to support an additional parameter to specify what kind of characters to loop through: "default" or no parameter - all characters inside the multi "owner" - players on multi's owner list "friend" - players on multi's friend list "guest" - players on multi's guest list "banned" - players on multi's ban list Added new INI tags to a new section of uox.ini called [houses] DECAYTIMERINHOUSE=3600 // Decay timer in seconds for non-locked down items inside houses PROTECTPRIVATEHOUSES=1 // Toggles whether private houses will automatically boot unauthorized visitors (1) or not (0) TRACKHOUSESPERACCOUNT=1 // Toggles whether to track (and restrict) house ownership per account (1) or per character (0) MAXHOUSESOWNABLE=1 // Specifies the max amount of houses a player can own per account/char, depending on how house ownership is tracked MAXHOUSESCOOWNABLE=10 // Specifies the max amount of houses a player can co-own per character CANOWNANDCOOWNHOUSES=1 // Toggles whether players can own and co-own houses at the same time COOWNHOUSESONSAMEACCOUNT=1 // Toggles whether characters on same account as house owner will be treated as co-owners Added new INI tags in [settings] section of uox.ini: ITEMSDETECTSPEECH=0 // If enabled, server will search for nearby items with onSpeech JS event running whenever a character speaks. Disabled by default. MAXPLAYERPACKITEMS=125 // Defines max item capacity for player (and NPC) backpacks. Defaults to 125. Moved most of the existing house functionality to JS and expanded upon it to reach feature parity with houses in regular UO around Publish 15/16, with various extras thrown in for good measure and all functionality being customizable: js/server/house/house.js (15000) - handles detection of house commands and characters entering/leaving houses js/server/house/houseSign.js (15001) - contains and handles all house-related gumps/menus and what is shown when players interact with house sign js/server/house/houseCommands.js (15002) - handles functionality of house commands and other functionality such as transfer of ownership, demolishing house, etc. js/server/house/houseDeed.js (15003) - handles initial rules that allow/disallow placement of additional houses for players All house-related menus now fully handled through JS All house commands and other functionality now fully handled through JS Removed redundant hard-coded house functionality Implemented Co-owners, friends, guests for houses, with access rules in place for entry, lockdowns, house commands, etc. Implemented Private and Public houses Implemented Secure Containers and Trash Barrels Definable max lockdowns, secure containers, player vendors, bans, friends, guests, owners, trash containers and more - per house type JS scripts can now be attached directly to houses Doors in houses can be marked as front doors or interior doors, and will be treated differently with regards to private and public houses Added new item to dfndata/items/containers/misc.dfn - [trashbarrel] Added new JS script (js/items/trashbarrel.js) with trash barrel functionality for houses. Trash barrels that are marked as secure containers are only accessible by owners, co-owners and friends of the house. Various options available at top of script. Updated js/items/axe.js to support chopping up trash barrels and house add-ons in houses owned by the player Fixed an issue with house doors being left behind after demolishing houses while their doors were open Fixed an issue where GMs could be banned from player houses Added Line of Sight checks to speech, to give players some privacy in their own homes Updated house placement code to more accurately check for other multis, dynamic and static objects when placing houses; now requires free space around each house that cannot be blocked by other houses or items that can block player movement, and disallows placement of houses on roads Updated house placement code to move characters blocking house placement to SE corner of the house Updated house placement code to disallow placing houses in guarded regions, or in dungeons Added new DFN tag for regions to enable/disable player houses in specific regions: HOUSING=0/1 Added new region (247) that covers path to Valley of Eodon in Felucca Added new region (248) that covers Valley of Eodon in Ter-Mur, with player housing disabled Added new region (249) that covers entire T2A lands, with player housing disabled Updated SPACEX and SPACEY values for all houses in dfndata/house/house.dfn to match updated house placement code Added new JS property to Regions that can be used to determine or change state of player housing in a region: .canPlaceHouse() Updated rules for usage of dye tubs to dye locked down items; now only house owners or co-owners may dye locked down items Updated rules for usage of the following locked down items in a house, which are now only usable by house owners and co-owners Dyes, Guildstone Deeds, Recall Runes (renaming), Rename Deeds, Townstone Deeds, House Deeds, Boat Models, Player Vendor Deeds, Ore, Hair Dye Updated rules for usage of the following locked down items in a house, which are now only usable by house owners, co-owners and friends: Keys, Dye Tubs, Magic Scrolls, Fireworks Wands, Magic Wands, Smithing Tools, Mining Tools, Fishing Poles Updated item lockdown rules to allow locking down (and releasing) items in a container as long as the container is locked down, and to only allow releasing a locked down container if it's empty of locked down items Updated item lockdown rules to only allow locking down movement-blocking items further than 2 tiles away from doors Updated rules for releasing items in houses - now the house owner can release any locked down items, co-owners can release items locked down by themselves or by friends, while friends can release only items locked down by themselves Added some feedback to player about why their attempted house placement failed Items added by GMs directly into multis will now decay based on the house-specific decay timer instead of the regular one Fixed an issue that could cause items to almost instantly decay after being released from lockdown in a house Placing house add-ons now properly takes into account SPACEX and SPACEY values when checking if they can fit in selected area of houses Re-added SPACEX and SPACEY values for Pentagram and Loom house add-ons House add-ons can now be converted back into house add-on deeds by chopping them with an axe Added new item type - IT_HOUSEADDON (201) - used by house add-ons placed in player houses Fixed a bug where keys would stop working after being added to a keyring, and would turn into blank keys upon release from the keyring Added visitor count for public player houses, which keeps track of how many visits a public house has received, with each player counted max 1 time every 24 hours Fixed an issue with FindPlayersInOldVisrange() where it didn't take into account that players could see buildings further away than the standard update range. This could cause players to see ghost images of buildings if they were at the "right" distance when the building was being demolished Added NODECAY tag to all signs and doors in dfndata/house/house.dfn Added FRONTDOOR or INTERIORDOOR (as appropriate) to all doors in dfndata/house/house.dfn Added BANX and BANY to specify ban location for some houses in dfndata/house/house.dfn instead of relying on finding SE corner automatically Implemented strongboxes (js/server/house/strongbox.js) for co-owners of a house, which can be placed with the house command "i wish to place a strongbox". Max capacity is 25 items Updated 'REMOVE command to take an optional parameter - itemID. If supplied, the command will remove all items with this itemID from a targeted container Fixed a bug when checking if dynamic items were blocking valid spawn locations for NPCs, some function arguments were in the wrong order! Improved code that finds valid spawn locations for items and NPCs spawned via spawn regions. As server gradually builds up lists of valid spawn locations per region over time, it will start using these lists more often, rather than always look for brand new spawn locations. Fixed a bug with CMulHandler::CheckStaticFlag() that prevented NPCs from spawning inside buildings with no static floors! Fixed an issue with repeating commands that prevented GMs from being able to cancel them when using the ClassicUO client Exposed character property .accountNum to JS engine Extended CDataList class to include a Clear() method for clearing lists Updated JS File method .Open() to support an optional, third argument - subFolderName - that defines in which sub-folder of UOX3/shared/ to store/look for a file. If no third argument is supplied, UOX3 will default to using the shared folder itself. Updated JS File method .Length() to return a value of -1 for files that don't exist Added new code function, exposed to JS engine with same parameters, which simply checks if a given tile ID has a specific flag bool CheckTileFlag( UI16 itemID, TILEFLAG flagToCheck ) Added JS function used to find the root container of an item (if any) FindRootContainer( itemSerial ) FindRootContainer( item ) Added new JS function that allows deleting files from UOX3/shared/ folder or subfolders of shared folder. If no subFolderName is provided, looks for file directly in shared folder itself. Restrictions on file- and folder-names apply. bool DeleteFile( fileName, subFolderName ) Added new JS functions for checking if a specific client or server feature is enabled. See documentation for full list of client/server features. GetClientFeature( bitNum ) // Returns true if specified client feature is enabled on server GetServerFeature( bitNum ) // Returns true if specified server feature is enabled on server Added new JS function for returning the value of almost any server setting from UOX.INI GetServerSetting( settingNameInDoubleQuotes ) Updated JS function DoesDynamicBlock() with two new parameters - checkOnlyMultis and checkOnlyNonMultis Updated JS function DoesMapBlock() with two new parameters - checkMultiPlacement and checkForRoad Fixed an issue where a LoS check would prevent players from accessing containers in their own backpack Added new functions in findfuncs.cpp to make it easier to find items near another object or location: findNearbyItems( object, distance ) findNearbyItems( x, y, worldNumber, instanceID, distance ) Added new Item property - maxItems - used by containers to determine their max item capacity Added new Item property - totalItemCount - used to get total item count in a container (including sub-containers) Added check for max item capacity when creating new items that are added to a character's backpack - items will be created below character's feet if backpack is full! Added new DFN tag for items, used by containers to determine item capacity for a given container: MAXITEMS=# // 125 is the default for all containers if not set Added new JS Item properties: .maxItems // gets/sets item capacity for a given container .totalItemCount // gets total item count in a container, including sub-containers Updated item tooltips for containers to show accurate total item count, as well as to display max item capacity Fixed a bug where picking up items from a non-locked down pile of items on the floor inside a multi could cause the remaining pile to be seen as no longer inside the multi, disallowing locking it back down and causing it to decay based on regular decay timer instead of house-specific one Updated JS command set to allow setting poison-level on items ('set poison #) and hunger-level on characters ('set hunger #) Fixed an issue with js/item/food.js that prevented poisoned food from poisoning characters when eaten Fixed an issue with js/skill/poisoning.js that prevented players from poisoning food! Updated various JS scripts and hardcoded targeting functions to disallow the targeting of locked down resources using skills and tools Updated JS Method TextMessage() to support three extra, optional parameters. Note that if one optional parameter is included, all preceding optional parameters are also required! speechTarget - What kind of target is this message intended for? 0 - Only visible for sender and receiver of message 1 - Visible to all players in range 2 - Visible to all NPCs and players in range 3 - Visible to all PCs everywhere + NPCs in range 4 - Visible to all PCs everywhere (broadcast) 5 - Only visible for the receiver of the message speechTargetSerial - The serial of the receiver of the message, used if speechTarget is 0 or 5 speechFontType - The type of font to display the text in. Defaults to normal. 0 - Bold 1 - Normal with shadow 2 - Bold with shadow 3 - Normal 4 - Gothic 5 - Italic 6 - Small, dark 7 - Colourful 8 - Runic (only works with CAPS) 9 - Small, light Added timestamp to worldsaves in console, to make it easier to see when a particular world-save was done Added info about compiler/environment displayed at the top of the UOX3 console during startup Updated dictionary files with new messages primarily related to housing
2020-11-04 02:00:37 +08:00
}
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
case CCP_RACEGATE: *vp = INT_TO_JSVAL( gPriv->GetRaceGate() ); break;
case CCP_SKILLLOCK:
TempObject = JS_NewObject( cx, &UOXSkillsLock_class, nullptr, obj );
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
JS_DefineProperties( cx, TempObject, CSkillsProps );
JS_SetPrivate( cx, TempObject, gPriv );
*vp = OBJECT_TO_JSVAL( TempObject );
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
break;
2025-02-10 11:17:51 -06:00
case CCP_SKILLCAP:
TempObject = JS_NewObject( cx, &UOXSkillsCap_class, nullptr, obj );
JS_DefineProperties( cx, TempObject, CSkillsProps );
JS_SetPrivate( cx, TempObject, gPriv );
*vp = OBJECT_TO_JSVAL( TempObject );
break;
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
case CCP_DEATHS: *vp = INT_TO_JSVAL( gPriv->GetDeaths() ); break;
case CCP_OWNERCOUNT: *vp = INT_TO_JSVAL( static_cast<UI08>( gPriv->GetOwnerCount() )); break;
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
case CCP_NEXTACT: *vp = INT_TO_JSVAL( gPriv->GetNextAct() ); break;
case CCP_PETCOUNT: *vp = INT_TO_JSVAL( static_cast<UI08>( gPriv->GetPetList()->Num() )); break;
Pets and followers mini-revamp Added new protected property for CChar class to track a player's currently controlled pets/followers/summons, and renamed the on tracking all pets owned: GenericList<CChar *> activeFollowers GenericList<CChar *> petsControlled -> petsOwned Added new JS Character Methods to view/manipulate follower list: GetFollowerList() AddFollower( npcObject ) RemoveFollower( npcObject ) Added new JS Character Property to fetch current count of followers character has: .followerCount Added new GM commands for spitting out information on all pets/followers a player has, in the following format: Name: %s | ID: %i | Serial: %i | x: %i | y: %i | z: %i | world: %i | instanceID: %i 'listpets 'listfollowers Replaced most instances of GetPetList in code and scripts with GetFollowerList, as that's what we actually care about for the most part Updated code and relevant scripts to make use of AddFollower and RemoveFollower functions where appropriate Modified code for restoring pet loyalty upon feeding pet; by default it now restores 10/100 loyalty per time pet is fed, while if CoreShardEra setting in UOX.INI is set to AoS expansion or higher, loyalty is instantly restored to max when pet is fed (regardless of amount) Updated AreaCharacterFunction and AreaItemFunction JS Functions to still work if third parameter (socket) is provided as null Modified code and relevant scripts that teleport pets/followers along with player to only do so for pets/followers using the "follow" wandermode with player as follow target Updated some instances of code and script that checked for both controlSlot AND maxFollowers requirements - now only checks maxFollowers if controlSlots is set to 0 in ini Added function _restorecontext_() {} to a couple more scripts: js/commands/targeting/tele.js Updated error message shown when attempts are made to add deleted objects to refreshQueue, to include name, ID and serial of the object in question
2023-06-02 01:44:40 +08:00
case CCP_FOLLOWERCOUNT: *vp = INT_TO_JSVAL( static_cast<UI08>( gPriv->GetFollowerList()->Num() )); break;
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
case CCP_OWNEDITEMSCOUNT: *vp = INT_TO_JSVAL( gPriv->GetOwnedItems()->size() ); break;
case CCP_CELL: *vp = INT_TO_JSVAL( gPriv->GetCell() ); break;
case CCP_ALLMOVE: *vp = BOOLEAN_TO_JSVAL( gPriv->AllMove() ); break;
case CCP_HOUSEICONS: *vp = BOOLEAN_TO_JSVAL( gPriv->ViewHouseAsIcon() ); break;
case CCP_SPATTACK: *vp = INT_TO_JSVAL( gPriv->GetSpAttack() ); break;
case CCP_SPDELAY: *vp = INT_TO_JSVAL( gPriv->GetSpDelay() ); break;
2025-01-14 22:16:11 -06:00
case CCP_SWINGSPEEDINCREASE: *vp = INT_TO_JSVAL( gPriv->GetSwingSpeedIncrease() ); break;
2025-03-08 20:29:52 -06:00
case CCP_LUCK: *vp = INT_TO_JSVAL( gPriv->GetLuck() ); break;
2025-03-04 14:58:49 -06:00
case CCP_DAMAGEINCREASE:*vp = INT_TO_JSVAL( gPriv->GetDamageIncrease() ); break;
case CCP_HITCHANCE: *vp = INT_TO_JSVAL( gPriv->GetHitChance() ); break;
case CCP_DEFENSECHANCE: *vp = INT_TO_JSVAL( gPriv->GetDefenseChance() ); break;
case CCP_AITYPE: *vp = INT_TO_JSVAL( gPriv->GetNpcAiType() ); break;
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
case CCP_SPLIT: *vp = INT_TO_JSVAL( gPriv->GetSplit() ); break;
case CCP_SPLITCHANCE: *vp = INT_TO_JSVAL( gPriv->GetSplitChance() ); break;
2026-03-12 11:01:58 -05:00
case CCP_VENDORGOLDHELD:*vp = INT_TO_JSVAL( gPriv->GetHoldG() ); break;
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
case CCP_TRAINER: *vp = BOOLEAN_TO_JSVAL( gPriv->CanTrain() ); break;
0.99.4v Added JS command to reload dictionaries 'reloaddictionaries Fixed a server crash related to casting of spells Fixed some issues with Line-of-Sight checks related to items under/above ground, LoS checks between different floors of buildings, etc. Updated handling of skill-training keywords to be based on language-independent keyword IDs rather than trying to match player-input text to specific skill-names Updated animal-trainer/stablemasterscript (js/npc/ai/stablemaster.js) with several changes: Fixed an issue where the same pet would be stabled in all available slots if payment was taken from player's bank account instead of their backpack Fixed an issue where stablemaster would not pause walking for a while when a player interacts with them Converted all system messages and text messages in stablemaster script to dictionary entries Added new NPC AI type to source - AI_STABLEMASTER (9) - and assigned this to animal trainers. This is used to identify this type of NPCs for the purpose of displaying relevant context menus Reworked banker AI script (js/npc/ai/banker.js) to use triggerwords from client instead of hard-defined strings, to work better with multiple languages (and work with all relevant triggerwords) Fixed a bug with banker AI script (js/npc/ai/banker.js) that prevented players from using the "withdraw" command Re-added NPC AI 8 to banker NPCs (dfndata/npc/male_vendors.dfn and female_vendors.dfn) so code can check for presence of this AI when handling context menus Removed remaining hard-coded banking functionality - all handled by script anyway Added new context menu option for NPC bankers - Open Bankbox Updated code handling of context menus to only show context menus when relevant: Open Paperdoll - Shows for all characters with a paperdoll Open Backpack - Shows for player's character, pack animals and hirelings Open Bankbox - Shows for banker NPCs (if within 8 tiles) Buy/Sell - Shows for vendor NPCs (if within 8 tiles, and if they have anything for sale/are buying anything) Added new context menu entries for pets, which can be used if player is within 12 tiles of pet: Command: Kill Command: Stop Command: Follow Command: Stay Command: Guard Add Friend Remove Friend Transfer Release Added new context menu entries for stablemasters/animal trainers: Claim All Pets Stable Pet Added new context menu entries for Escort Quest NPCs Ask Destination (if within 3 tiles) Accept Escort (if within 3 tiles) Abandon Escort Added new context menus for NPCs that can teach skills to players (limited to max 10 per NPC) Train [skillName] Added new AI script for NPC hirelings (3204=js/npc/ai/hireling.js), who can be hired to follow the player around for a limited amount of time, and function the same way as pets. In addition to the regular pet commands, these speech commands are supported: hire // The hireling will respond with the cost to hire them dismiss // Replaces the "release" command for pets; will dismiss the hireling patrol // The hireling will patrol between it's current location and a second targeted location nearby move // The hireling will try to shuffle out of the way fetch // The hireling will try to fetch a targeted item drop // The hireling will drop to the ground all loot they're currently carrying report // The hireling will report on the remaining time they're hired for Added new NPC DFN tag used by code to detect hireling NPCs for the purpose of displaying context menus: HIRELING // No additional value/data needed for tag Added new context menu entries for Hireling NPCs, in addition to the ones for regular pets: Hire // Can be used within 3 steps of the hireling, who will respond with cost to hire them Dismiss // Replaces the "release" command for pets, will dismiss the hireling Added HIRELING tag and SCRIPT=3204 to and updated stats of various NPCs that will be hireable: m_fighter, f_fighter, m_beggar, f_beggar, m_peasant, f_peasant, m_sailor, f_sailor, m_pirate, f_pirate Added new hireling NPC: m_paladin, f_paladin Added new UOX ini setting to enable/disable context menus CONTEXTMENUS=1/0 (defaults to 1) Added new Item JS Method to check if an item's ID is on a specified food list .IsOnFoodList( foodList ) // Returns true/false if item's ID is on specified foodList Added new OMNIVORE food list and assigned it to [basehuman] DFN section Added new Character JS Properties .isGuarded // Gets/Sets whether character is guarded by a pet/hireling .guarding // Gets/Sets the object (if any) being guarded by a pet/hireling Fixed multiple issues with health bars, flagging and character highlighting Added some crash protection for invalid data used with CUSTOMINTTAG and CUSTOMSTRINGTAG DFN tags for Items, NPCs and Multis Fixed an issue which prevented hard-coded checks from running when using items Added new global js object (Timer) to make the use of character timers in JS more robust, with properties matching timer names from enum in source. Properties: .TIMEOUT // Time until next attack can be done in combat .INVIS // Time until invisible character becomes visible .HUNGER // Time until character grows more hungry .THIRST // Time until character grows more thirsty .POISONTIME // Time until next tick of poison damage .POISONTEXT // Time until next message about suffering from poison .POISONWEAROFF // Time until poison wears off .SPELLTIME // Time until spell cast is completed. Can be set to 0 to interrupt .ANTISPAM // Time until next speech message can be sent (for anti spam purposes) .CRIMFLAG // Time until criminal flag runs out .MURDERRATE // Time until next murder count decay .PEACETIMER // Time until character can re-enter combat after being affected by peacemaking .FLYINGTOGGLE // Time until next time flying ability can be toggled for gargoyles .MOVETIME // Time until NPC can move again .SPATIMER // Time until next time NPC can cast a spell .SUMMONTIME // Time until a summoned NPC will vanish .EVADETIME // Time until an NPC will exit evade state .LOGOUT // Time it takes for a player char to vanish after logout Examples of use: var hungerTimer = myChar.GetTimer( Timer.HUNGER ) myChar.SetTimer( Timer.HUNGER, 15000 ) Added new Character JS Methods to add, remove and list friends of a pet/hireling: .AddFriend( playerToAdd ) // Adds player to friend list .RemoveFriend( playerToRemove ) // Removes player from friend list .GetFriendList() // Gets list of friends .ClearFriendList() // Clears list of friends Added new Character JS Method to fetch a player character's list of pets/followers .GetPetList() // Gets list of pets/followers Added new persistent NPC property to keep track of a pet's previous owners, whether those tamed the pet or had it transferred to them. Every time a pet is tamed, or is transferred to a new owner, this list is updated: GenericList< CChar * > petOwnerList Added new Character JS Method to check if a player is on a pet's owner list as a previous owner: .HasBeenOwner( mChar ) Previous owners of a pet can re-tame it with guaranteed chance of success Updated JS Method Refresh() to be usable with both items or characters, to send updated state of object to nearby players Added character tooltip [Guarded] for characters being guarded by a pet/hireling Pets/hirelings that are transferred will now immediately start following their new master instead of wandering freely Pets/hirelings can no longer be transferred between players as long as either party is flagged as a criminal Pets/hirelings can no longer be transferred to dead players Pets/hirelings can no longer be transferred to NPCs Summoned creatures can no longer be transferred to other players Summoned creatures can no longer have friends Friend lists of pets/hirelings are now cleared when the pet/hireling is transferred to another player Added new UOX.INI settings to control how many pets players can have active: MAXCONTROLSLOTS=0 // Maximum number of pet control slots available to player. Disabled if 0 MAXFOLLOWERS=5 // Maximum pets/followers a player can have active at the same time. Used if control slots are disabled MAXPETOWNERS=5 // Maximum number of different owners a pet can have over its lifetime before it becomes impossible to retame Added new NPC property and NPC DFN tag that keeps track of how many pet control slots an NPC would take up if owned by a player: UI08 controlSlots // source property CONTROLSLOTS=# // DFN tag Added new Character JS properties: .ownerCount // Get the total number of owners a pet/hireling has had, based on NPC's petOwnerList .controlSlots // Get/Set number of pet control slots an NPC will occupy .controlSlotsUsed // Get/Set the number of control slots used by a player Updated get (js/commands/targeting/get.js) and set (js/commands/targeting/set.js) commands to support getting/setting the following character properties: deaths ownerCount (read only) controlSlots controlSlotsUsed Updated NPC DFNs with default CONTROLSLOT=# tags Increased the max distance from player that onSpeech JS event will trigger from 7 to 12 Updated how "all attack" and "all follow" commands for pets are handled. Now loops through all pets owned by character and executes command for each eligible pet Fixed an issue where NPCs could follow characters in different worlds/instances than them selves Updated default max amount of items that can be sold to NPC vendors from 5 to 250 Guards can no longer train players in skills Updated equipment itemlists (dfndata/items/itemlists/itemlists.dfn) with blank entries to introduce some more variety in the type of clothes NPCs wear in general Added new NPCs to DFNs (dfndata/npc/undead.dfn) and added them to undead npclist: [skeletalmage] // variation of [bonemage] [skeletalknight] // variation of [boneknight] Updated Titles (dfndata/titles/titles.dfn) with up-to-date titles for skills around Pub 15, and added titles for skills added after that. Also added "Elder" and "Legendary" titles for 110 and 120 skillpoints Updated EQUIPITEM tag in newbie.dfn (dfndata/newbie/newbie.dfn) to support an optional hue parameter (EQUIPITEM=id,hue) Updated starting equipment for new characters (dfndata/newbie/newbie.dfn), with commented out practice weapons. Uncomment to use Added item definitions for practice weapons (dfndata/items/gear/weapons/practice_weapons.dfn): practice_skinning_knife practice_hatchet practice_axe practice_mace practice_longsword practice_spear practice_bow practice_club practice_crook practice_gnarled_staff Updated mount statues DFN (dfndata/items/misc/mount-statues.dfn) and JS (js/npc/pets/*.js) files to include pet control slot related stuff Pets now inherit the karma of their owners, but revert to their original karma upon release Pets and hirelings will no longer follow the ghosts of their dead owners, but stay to guard their corpse Added optional 9th parameter for JS Function CreateDFNItem to specify a color for item created. This comes before the other optional parameters - worldNumber and instanceID (which are only used if character is NULL): CreateDFNItem( mSock, mChar, sectionName, inPack, iAmount, itemType, iColor, worldNumber, instanceID ) Added ID of Giant Beetle to various pack animal checks Pack animals will now drop any newbie/blessed items stored in their packs upon death Added new NPC properties to track pet loyalty, and exposed these as Character JS properties, and NPC DFN tags: JS Properties .maxLoyalty // Defaults to 100 .loyalty // Starts at 25 DFN Tags MAXLOYALTY=# // Defaults to 100 LOYALTY=# // Starts at 25 Updated TriggerEvent JS function to support return values (int, bool, string, object) from called script Updated various JS scripts to make use of new TriggerEvent functionality and reduce reliance on custom tags: js/item/archerybutte.js js/item/trainingdummy.js js/server/data/combatanims.js js/server/data/weapontypes.js Updated archerybutte script to use dictionary for system and text messages Updated archerybutte script to support increased range, distance penalty and dex/str bonuses when calculating score Added new UOX.INI settings under [pets and hirelings] section related to pet control and loyalty: CHECKPETCONTROLDIFFICULTY=1 // Enable/Disable pet control difficulty system PETLOYALTYGAINONSUCCESS=1 // Amount of pet loyalty gained on successful pet command use PETLOYALTYLOSSONFAILURE=3 // Amount of pet loyalty lost on failed pet command use PETLOYALTYRATE=900 // Amount of seconds between each time pet loyalty is automatically reduced by 1. Takes 25 hours to deplete completely from max Added new persistent NPC property that keeps track of the difficulty of taming and controlling a pet, and exposed it as a Character JS property: .orneriness Every time a tamed pet is released or goes wild, its "orneriness" increases, making it more difficult for other players to tame, and more difficult for anyone to control. Updated CBasePetResponse::canControlPet() function to use pet control difficulty system if enabled, which checks player's animal taming/animal lore skill vs a pet's "orneriness" to determine chance of pet accepting a given pet command On successful use of pet command, increases pet loyalty by value defined in PETLOYALTYGAINONSUCCESS ini setting On failed use of pet command, decreases pet loyalty by value defined in PETLOYALTYLOSSONFAILURE ini setting Added new Character JS Method to calculate chance of a player successfully controlling the pet: .CalculateControlChance( mChar ) // Returns value between 0 and 1000 indicating chance of success Feeding a pet will now restore its loyalty to maximum Pets will now lose loyalty on hunger checks when at maximum hunger Pets that are maximum hungry will now only have a chance to go wild if loyalty has dropped to zero Added new DFN tag for creatures.dfn - TYPE - which contains a string describing the type of creature Added secure pet trading. Players who trade pets will now see a pet transfer deed appear in a secure trade window with the name and type of creature, and upon completion of the trade the associated pet will be instantly transferred to the other player Updated resource JS scripts (js/server/resource/*) to use dictionaries for all system messages Updated skill JS scripts (js/skill/*) to use dictionaries for all system messages Updated housing JS scripts (js/server/house/*) to use dictionaries for all system messages Updated item JS scripts (js/item/*) to use dictionaries for all system messages Updated magic JS scripts (js/magic/*) to use dictionaries for all system messages Updated NPC AI JS scripts (js/npc/ai/*) to use dictionaries for all system messages Updated command JS scripts (js/commands/*) to use dictionaries for all system messages, gump tooltips, etc Updated code to use dictionaries for all system messages Fixed incorrect spelling for UOX.INI setting HIDEW(H)ILEMOUNTED and updated hiding skill (js/skill/hiding.js) to actually allow/disallow hiding while mounted based on this setting Added new Character JS Method to make it easier to make one NPC initiate combat with another: .InitiateCombat( targetChar ) // Character attempts to initiate combat with target character Updated parrying portion of combat code to be in line with Pub15/pre-AoS parrying mechanics. High AR shields now absorb more damage on a successful parry, while low AR shields have a higher chance of parrying. Shields are also now more effective against archery attacks (full absorption potential) than melee attacks (half absorption potential). Updated combat damage calculations to be in line with Pub15/pre-AoS damage calculations Adjusted default value of COMBATNPCDAMAGERATE ini setting (damage divisor when target is a player) from 2 to 1 to account for these changes. Removed dictionary.UNK, and made dictionary.ZRO the default dictionary used for all unsupported languages Added dictionary support for additional languages: Portuguese, Italian, Czech Updated default dictionaries for the following languages: English, French Added default dictionaries for the following languages: German, Spanish, Portuguese, Italian, Czech (note that translations have been provided by automatic services and will contain inaccuracies!) Added new UOX.INI setting to allow specifying a default dictionary language for server, which if set will force that language for all dictionary messages, regardless of client settings: SERVERLANGUAGE=0 // Set default server dictionary language. Supported languages: 0 - None/language used by each client, 1 - English, 2 - German, 3 - Spanish, 5 - French, 6 - Portuguese, 7 - Italian, 8 - Czech Added new function in combat.cpp - AdjustArmorClassDamage() - which adjusts the damage dealt in combat based on whether armour class (AC DFN tag or .ac JS property) of weapon and armour equipped on hit location of target match up. A weapon with armour class 1 would essentially be doubly effective against armour of armour class 1. Allows setting up things like piercing weapons being better against some armor types than mace weapons, etc. Added new UOX.INI setting under [combat] to enable/disable double damage from armour class bonuses: ARMORCLASSDAMAGEBONUS=0/1 //defaults to 0)
2021-07-28 16:02:56 +08:00
case CCP_HIRELING: *vp = BOOLEAN_TO_JSVAL( gPriv->CanBeHired() ); break;
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
case CCP_WEIGHT: *vp = INT_TO_JSVAL( gPriv->GetWeight() ); break;
case CCP_SQUELCH: *vp = INT_TO_JSVAL( gPriv->GetSquelched() ); break;
case CCP_ISJAILED: *vp = BOOLEAN_TO_JSVAL( gPriv->IsJailed() ); break;
0.99.4x Fixed an issue where the color of NPC corpse names would not always match up with the NPC's flag color Fixed a bug where the baseRange and maxRange properties of ranged weapons would not get saved to world files. These values are now saved in the format of RANGE=baseRange,maxRange Changed the way items are added to containers, to ensure that the order in which the items are displayed to the player always reflects the order in which they were added; now the most recent item added/moved in a container will always be rendered on top of older items. Made adjustments to how items are randomly added to containers; should use more of a given container gump's available area now Exposed Item property to JS engine, which contains serial of the creator of an item: .creator // contains serial of the creator of an item. If set, maker's marks will show up in the item's tooltip Fixed an issue where JS engine would lose track of script context if one script used CreateDFNItem() or SpawnNPC() functions and the new objects had events that triggered upon creation. UOX3 now restores the original script context at the tail end of these functions. Added new JS Event to allow inserting custom tooltip text for objects, which will be displayed in tooltips right after the object name. Any text returned from the event will be displayed, and the text can make use of the same HTML tags as gumps to make changes to color, font, etc. onTooltip( myObj ) // Triggers for objects right before the object's tooltip properties are sent to client Updated 'tweak and 'set commands to refresh item being modified if movable state of item changes, so the change is reflected in nearby clients Fixed an issue with NPC vendors and items bought from players not being properly removed from the vendor's "bought container" when players buy them again Ported Item Identification skill from code to JS (js/skill/itemid.js) and removed hard-coded version Implemented magic item generator in JS (js/item/magic_item.js). When this script is attached to an NPC, it has a chance to generate magic weapons, armors, wands/staffs and rings as loot on the NPC's corpse when slain. The chance of getting quality magical items increases with the fame level of the NPC in question. The types of magical items generated follows the pattern of such items as implemented in UO prior to the AoS expansion. Examples: exceedingly accurate war hammer of vanquishing substantial, accurate axe of power and Daemon's Breath silver long sword massive platemail arms of Protection metal shield of defense durable ringmail tunic of guarding All magic items have a chance to have spell effects attached (with rings/wands being guaranteed to have these), with a limited amount of charges available. For weapons, these effects activate on successful hits in combat, while for armors they activate on equip, and then periodically as long as the item is worn. Rings and wands/staffs have to be manually activated and targeted - with the exception of rings of invisibility, which activate the moment you equip them! Related scripts: js/item/magic_armor_equipeffects.js js/item/magic_weapon_accbonus.js js/item/magic_weapon_equip.js js/item/magic_weapon_spell_attack.js The magic item loot generation script has been attached to a number of different NPCs, all of which now have a chance to drop magic items as loot when defeated. A bonus magical item - the glacial staff - has also been implemented (js/item/magic_glacial_staff.js), and has a chance to drop as loot from Giant Ice Serpents! Fixed an issue with CustomTarget where the target message would not be displayed if the cursorType parameter was provided Fixed bug with 'rename command, which referenced a non-existing variable that caused a script crash Added additional object properties to 'get and 'set commands: .shouldSave // Determines if an item should be saved in worldfiles or not .baseRange // Determines the base range of a ranged weapon, less than which it becomes less effective .maxRange // Determines the max range of a ranged weapon, beyond which it cannot reach its target The feature that allows stats like Strength, Dexterity and Intelligence to provide bonuses to skill checks has been turned into a UOX.INI setting, which is disabled by default. The bonuses have also been nerfed; they will no longer contribute more to the success of a skill check than the actual skill being checked! STATSAFFECTSKILLCHECKS=0/1 // If enabled, stats can provide bonuses to skill checks based on the weighting for those stats as setup in dfndata/skills/skills.dfn Updated damage tracking code to include the type of damage that was dealt (PHYSICAl vs HEAT vs COLD, etc) Updated Character JS Method Damage() to include a new parameter that can specify the type of damage that was dealt to the character. The new parameter must always be included if other optional parameters are used. Note that updates might be required for scripts making use of this method.Updated syntax: .Damage( amount ) .Damage( amount, damageType ) .Damage( amount, damageType, attacker ) .Damage( amount, damageType, attacker, doRepsys ) Supported damageTypes: PHYSICAL = 1 LIGHT = 2 RAIN = 3 COLD = 4 HEAT = 5 LIGHTNING = 6 // magic damage POISON = 7 SNOW = 8 Updated JS Event OnDamage to include an additional parameter that describes the type of damage that was dealt. New syntax: onDamage( damaged, attacker, damageValue, damageType ) Updated JS Event OnSpellTarget to allow rejecting a spell being cast on a target by returning a value of 2 from the script Split the character priv flag for magic reflection into a temporary one (one-time magic reflection spell) and a permanent one (innate permanent reflection ability). The temporary effect is put in place by Magic Reflection spell, and is removed after a successful spell reflect. The permanent one is an innate ability of a character and is not removed even after a spell is reflected. Added new Character JS property to get/set state of a character's permanent magic reflect ability: .permanentMagicReflect // 0 = disable, 1 = enable Added special abilities/effects for the following NPCs: Acid Elementals now have a chance to damage the melee weapons of their attackers Dull Copper Elementals now explode on death Shadow Iron Elemental is immune to targeted spell damage Copper Elementals have permanent magic reflect, and reflect some physical damage back at their attacker Bronze Elementals deal passive area damage to nearby players every 5 to 10 seconds Valorite Elementals have permanent magic reflect, reflect some physical damage back at their attacker Snow/Ice Elementals deal passive area damage to nearby players every 5 to 10 seconds Lava Serpents deal passive area damage to nearby players every 5 to 10 seconds Phoenixes deal passive area damage to nearby players every 5 to 10 seconds Pixies have a chance to cast a random spell upon receiving a death blow: Bless (target) Curse (target) Explosion (target) Greater Poison (target) Greater Heal (self, prevents death) Ethereal Warriors will now resurrect dead players with positive karma Ethereal Warriors now have a chance to drain target's health, stamina or mana on hit Fire Breath special ability added to the following NPCs, with the random ability damage scaling with the NPCs current health: Hell Cat, 5 to 8 dmg at max health Fire Steed, 6 to 9 dmg at max health Hell Hounds, 8 to 11 dmg at max health Lava Lizard, 8 to 11 dmg at max health Predator Hell Cat, 9 to 14 dmg at max health Sea Serpent, 11 to 17 dmg at max health Swamp Dragon, 15 to 22 dmg at max health Armored Swamp Dragon, 15 to 22 dmg at max health Fire Gargoyle, 20 to 30 dmg at max health Deep Sea Serpent, 21 to 32 dmg at max health Serpentine Dragon, 22 to 32 dmg at max health Drake (Gray), 22 to 32 dmg at max health Drake (Red), 22 to 32 dmg at max health Nightmare, 26 to 39 dmg at max health Dark Steed, 26 to 39 dmg at max health Silver Steed, 26 to 39 dmg at max health Kraken, 39 to 59 dmg at max health Dragon (Red), 41 to 62 dmg at max health Dragon (Gray), 41 to 62 dmg at max health Shadow Wyrm, 50 to 75 dmg at max health Reptalon, 51 to 77 dmg at max health Skeletal Dragon, 52 to 77 dmg at max health Ancient Wyrm, 60 to 90 dmg at max health Update stats, skills and loot for all currently implemented NPCs Removed an ancient piece of code that prevented corpses from being generated for various elementals and blade spirits on death. This was originally put in place because these creatures had no corpses, and would replace it with a backpack instead, but these creatures now all have corpses in all client versions supported by UOX3 Updated potions script (js/item/potion.js) with updated formula for amount of hitpoints healed by healing potions, and added restrictions for using them when at full health and/or if poisoned (Dragon Slayer) Fixed a bug where creatures (and humans, if FORCENEWANIMATIONPACKET was disabled in uox.ini) would play animations with wrong frame count, causing the animations to either freeze for a few frames at the end, or get cut off a couple of frames early Implemented bonus hit chance for Archery skill, based on mention of such a bonus in Publish 5 patch notes and related UO House of Commons chat. This has been exposed as a UOX.INI setting where this bonus can be tweaked: ARCHERYHITBONUS=10 // Bonus hit chance for Archery skill added to regular hit chance in combat. Defaults to 10% Implemented optional extra delay between moving and being able to shoot with ranged weapons in combat (in addition to whatever delay is there due to speed of the ranged weapon). This is exposed as a UOX.INI setting: ARCHERYSHOOTDELAY=0.5 // Minimum delay in seconds from a player stops moving until they can start to fire their ranged weapon. Defaults to 0.5s Fixed a bug where players who never entered combat mode could fire ranged weapons while moving Updated Add-menu with some improvements for usability: Menu now directly on the Objects (previously "Shard") tab for quicker access, with a small welcome text and quick-link button for UOX3 docs Settings tab contains some (persistent, will be saved with character) options for how the Add-menu behaves, along with a few quick-access buttons to some useful commands. Available options: Option to add chosen item at specific location instead of in GM's backpack Option to add chosen item repeatedly until cancelled Option to automatically reopen Add-menu on last menu that was open when a selection is made Option to force decayable state of all added items to either off (doesn't decay), on (decays) or nothing (use item default) Option to force movable state of all added items to either off (not movable), on (movable) or nothing (use item default) Added a Home button at the bottom of the menu, that takes the user back to the front page of the Add-menu regardless of which menu page they're on Updated Character/Socket JS Method SysMessage() with an optional parameter to specify the color used to display the system message. Updated syntax: .SysMessage( "Text" ) // Display "Text" to user as a system message with default system message color from ini .SysMessage( "Text %s %s", txtArg1, txtArg2 ) // Display "Text" to player with string arguments injected into text .SysMessage( txtColor, "Text" ) // Display "Text" to user with a specified color .SysMessage( txtColor, "Text %s %s", txtArg1, txtArg2 ) // Combination of text color, text and string arguments Fixed a bug where hair/beard items could show up inside corpses Fixed a bug where items could sometimes vanish (visually) from containers when bouncing back because player was not able to pick them up Fixed a bug where players would be unable to pick up a freely movable item from a locked down container Updated handling of item bouncing on pickup to use UOX3 dictionary messages instead of hard-coded client messages Added support for new Dictionary language: dictionary.POL - Polish (SERVERLANGUAGE=8 in uox.ini, or client language 83 if SERVERLANGUAGE is set to 0) Added taming restrictions for Unicorn, Ki-Rin and Cu Sidhe (js/skill/taming.js) Added modification of some creatures stats after they've been tamed (js/skill/taming.js) Added restrictions for who can ride certain creatures (Unicorn, Ki-Rin, Cu Sidhe) Updated words of power for Meteor Swarm spell to follow the same logic as other spells using Kal (Summon): Kal Des Flam Ylem Added new Item/Character JS Methods to get/set temporary custom tags which don't persist across worldsaves (or across reconnects, for players): .GetTempTag( "tagName" ) .SetTempTag( "tagName", tagValue ) When applying HPMAX, STAMINAMAX AND MANAMAX DFN tags to new NPCs, their current HP, STAMINA and MANA properties will now be automatically updated to match Fixed a server crash caused by empty speech messages sent from certain clients Fixed a bug that prevented teleport locations in Felucca/Trammel from working properly Updated calculations in code for duration and damage of existing poison strengths (1 - Lesser, 2 - Normal, 3 - Greater, 4 - Deadly) to match with ~Publish 15 (LBR/pre-AoS), and added another poison strength for monster usage (5 - Lethal) The strength of the Poison and Poison Field spells is now based on the average of the caster's Magery and Poisoning skills, the distance from the target (Poison spell only) and the target's Resisting Spells skill. If caster is further away than 2 tiles from target, the poison strength always equals Lesser Poison, otherwise the following rules apply: If caster's combined skill is higher than 100.0, poison strength equals Greater Poison, with 5% chance of Deadly Poison (if Poison spell) or Deadly Poison (if Poison Field spell) If caster's combined skill is higher than 70.2, poison strength equals Greater Poison If caster's combined skill is higher than 30.2, poison strength equals Normal Poison If caster's combined skill is 30.2 or lower, poison strength equals Lesser Poison If target resists spell, poison strength is reduced by 1 level, unless it's already at the lowest level Fixed an issue that would would let players move faster than they should have been allowed to Fixed misc issues with Party System: Mana and Stamina should now update for Party Members when added to the party, when going in/out of range and when their stats update while in range Players who get disconnected or relog should now find themselves back in the same party they were in previously Added system messages to inform party members about updates to their party, and to let invited players know they've successfully joined a party (or rejoined, if relogging) World saves now operate on the principle of only saving changes done since the last world save. Combined with the fact that NPCs in UOX3 are only active if there are players in the same/neighbouring map regions, shard owners may expect to see a decrease in world save times ranging from ~11% to ~99%, depending on how active and how spread out their player base is. If no changes have taken place since last save, saves are virtually instantaneous!
2021-09-20 21:35:17 +08:00
case CCP_MAGICREFLECT: *vp = BOOLEAN_TO_JSVAL( gPriv->IsTempReflected() ); break;
case CCP_PERMMAGICREFLECT: *vp = BOOLEAN_TO_JSVAL( gPriv->IsPermReflected() ); break;
Small update Fixed an issue with an internal movement check that prevented characters from moving in valid map areas in Felucca/Trammel from X 6144 to X 7168 Fixed an issue where .instanceID property was misspelled in 'xgo GM command script, causing characters to be teleported to an out of bounds area where they would no longer be saved (js/commands/targeting/x.js) Added some additional error-checking to .Teleport()/.SetLocation() JS Method to prevent script-accidents from sending characters out of bounds. Updated Poisoning skill to add poison-charges to weapons being poisoned. Charges are consumed when applying poison in combat (js/skill/poisoning.js) Updated combat code to consume poison-charges if a poisoned weapon is used to poison an opponent Updated shoplists for Blacksmiths and Weaponsmiths - they now buy/sell longswords (dfndata/items/shoplist.dfn) Updated MageShopping shoplist for mage vendors - they now buy/sell mass curse scrolls (dfndata/items/shoplist.dfn) Added new Spawn Region DFN tag that can specify which era or eras of UO (Multiple comma-separated entries supported) a given spawn region is valid for. Spawn region not valid for core shard era will be ignored. Syntax: ERAS=UO,T2A,UOR,LBR,AOS,SE,ML,SA,HS,TOL Added new Spawn Region DFN tag that allows using another spawn region as a "parent". All properties of this parent will be inherited except for these, which are ignored: ERAS, NPCLIST, ITEMLIST, NPC and ITEM. Syntax for new tag: GET=# // Inherit a specified spawn region Added spawn region for animal trainer vendor in Vesper stable Added spawn region for fur trader/tanner vendors in The Best Hides of Britain Added spawn region for spinner vendor in The Lord's Clothier's and The Right Fit shops in Britain Added spawn region for tanner NPC to Nujel'm Tannery (and fixed leatherworker spawn region for same area) Added spawn regions for banker NPCs in East Bank of Britain, First Bank of Moonglow, Jhelom Bank and Jeweler, Bank of Skara Brae Added spawn regions for stables, tailor and blacksmith inside Castle British Added spawn regions for mage shops, mage guilds and farm houses in Moonglow Added spawn regions for misc vendors and townfolk in multiple cities Added spawn regions for Fire Island Updated spawn regions for Dagger Isle/Ice Island Added spawn regions for forests and jungles in southern Britannia and on various islands including Bucc's Den, Moonglow, Serpent's Hold, and misc unpopulated islands Added spawn regions for area east of Skara Brae, around Hedge Maze and south of Britain Added spawn regions for wandering healers outside every dungeon entrance in Britannia and Lost Lands Re-integrated ocean spawn regions for ocean creatures (dolphin, walrus, water elemental, sea serpent) from the original community-based spawn file Added reagent spawns in overworld spawn regions in Britannia/Lost Lands Added special reagent spawns in swamp areas Added additional overworld spawn regions in Britannia/Lost Lands Added spawn regions for Khaldun dungeon that spawn some new and some old NPCs: Old: Zombies, skeletons, skeletal mages, skeletal knights, ancient liches New: Cursed (and named) NPCs, shadowfiends, zealots of khaldun (knights/summoners), tentacles of the harrower Updated size and positions of some existing overworld spawn regions Fixed incorrect spawn region size for small island south of Trinsic Added switch/door puzzle functionality in Khaldun dungeon using new switch/door combo script (js/item/dungeons/switch_door_combo.js) Added "smart objects" in Khaldun dungeon that activate when you come close enough (js/item/dungeons/smart_activate_item.js) Added teleport locations within Khaldun dungeon (js/teleport.scp) Added custom AIs to existing NPC spawning in Khaldun dungeon: Ancient Lich (summons other undead, and can turn into one of them for disguise) Added DFN entries for new NPCs spawning in Khaldun dungeon, some with custom AIs: [tentacles_of_the_harrower] -> Tentacles of the Harrower (life steal) [shadowfiend] -> Shadowfiends (seek out and reveal hidden players) [zealot_knight]/[zealot_summoner] -> Zealots of Khaldun (turn into undead on death, male/female variants) [cursed] -> Cursed (male/female variants) [spectralarmor] -> Spectral Armor Added DFN entries for new (named) NPCs spawning in Khaldun dungeon: [lysander_gathenwale] -> Lysander Gathenwale [grimmoch_drummel] -> Grimmoch Drummel [morg_bergen] -> Morg Bergen [tavara_sewel] -> Tavara Sewel Added new NPC DFN entries: [leatherworker] -> alias for male/female leatherworker vendors [mapmaker] -> alias for male/female mapmaker vendors Added new Race DFN entries: [RACE 29] -> Cursed (enemies of RACE 30) [RACE 30] -> Zealots (enemies of RACE 29) Added new book DFN entries for Khaldun journals of Lysander, Tavara and Grimmoch - available as loot from the respective NPCs (dfndata/misc/books.dfn and dfndata/items/misc/books.dfn) Added 25% chance for hit-animations and hit-SFX to play for targets in combat, instead of playing every time - can get very spammy Monsters with actual weapons equipped (like Ophidian Enforcer with Halberd/Bardiche) will now get appropriate combat SFX for hitting with that weapon Updated Healing skill to base cure/resurrection skill requirements on the calculated skill, rather than base skill (js/skill/healing.js) Fixed an issue where healing with bandages and dying in the process would not properly reset the healing-related tags and skills used Updated healing script to show a resurrection confirmation menu for players targeted with bandages for resurrect (js/skill/healing.js) All skill usage states now reset on death, to prevent cases of players being "busy" while trying to use skills that got stuck due to script bugs. The 'regspawn GM command now supports a new parameter called "max". Updated command syntax: 'regspawn # // perform a single respawn cycle in a specific spawn region 'regspawn all // perform a single respawn cycle across all spawn regions 'regspawn max // respawn ALL spawn regions to MAX capacity in one go Added new UOX.INI setting that determines the maximum range at which NPCs can initiate attacks on players/NPCs (the old MAXRANGE=10 setting now instead defines max range at which players can initiate attacks on players/NPCs): MAXNPCAGGRORANGE=10 Optimized performance by significantly reducing the number of line-of-sight checks performed by characters, especially in combat scenarios, or when evaluating potential targets for NPC AIs. The amount of checks done is also affected by the new ini setting for max aggro range. Fixed an issue where both NPC and player characters would instantly drop one hunger level (from 6 to 5) upon creation since hungerrate was not initialized until after first hunger-event Updated character priv property from UI16 to UI32, and added a new flag that determines if fame/karma title is hidden for character: HIDEFAMEKARMATITLE (0x10000) NPCs will no longer aggro other NPCs if the Z difference between them is greater or equal to 20 (i.e. they're on different floors), unless both are using ranged weapons and both are in range Fixed an issue where players could get discounts from shopkeepers even though neither player nor shopkeeper were members of a NPC guild (js/npc/ai/shopkeeper.js) Fixed an issue where the "premium" a player would get when selling items to a shopkeeper in the same NPC guild as them would be 110% extra on top of the item's value, instead of the intended 10% (js/npc/ai/shopkeeper.js) (Thanks, cobrag0318!) Added missing tall straw hat to tailoring crafting scripts (Thanks, Dragon Slayer!) Improved error reporting during compilation of individual scripts being reloaded - will now show more context and line number onCombatEnd JS Event now also triggers when NPCs ignore their target and/or evade during combat Updated 'decorate command to support saving/loading custom tags on items for world templates. These are stored after a @ symbol in the world template, each custom tag separated by a | symbol, and with each custom tag saved using this syntax: key$type$value Updated resource-harvesting scripts to use script-specific global (const) variables, to avoid interference between different scripts (js/server/resource/*) Added new resource-harvesting scripts and added spawn regions for these in fields on farms all over Britannia/Lost Lands cabbages (js/server/resource/cabbages.js) canteloupes (js/server/resource/canteloupes.js) carrots (js/server/resource/carrots.js) garlic (js/server/resource/garlic.js) gourds (js/server/resource/gourds.js) honeydew melons (js/server/resource/honeydewmelon.js) onions (js/server/resource/onions.js) pumpkins (js/server/resource/pumpkins.js) squashes (js/server/resource/squashes.js) turnips (js/server/resource/turnips.js) watermelons (js/server/resource/watermelon.js) Updated CSpawnRegion::FindItemSpotToSpawn() function in cSpawnRegion.cpp to prevent duplicate spawning of exact same item in exact same location Updated sectionid of all potion and scroll aliases to match main item, so they'll get correctly picked up by NPC shopkeepers (dfndata/items/magic/potions.dfn and scrolls.dfn) Specified sectionid for backpacks, so it also gets applied to packs added using the alias [backpack] (dfndata/items/misc/provisions.dfn) Fixed a code issue that prevented players from selling empty containers to NPC shopkeepers willing to buy such containers Fixed an issue where field-spells (wall of stone, poison field, etc) would ignore dynamic/static items that should block these Fixed an issue where field-spells could be cast into houses from the outside by standing next to a wall and targeting self Fixed a War/Peace-mode desync between client and server by having server always notify client (using war-toggle packet) when the "at war" flag is toggled for player character Fixed an issue with hiding skill that wouldn't allow player to hide after having acquired self as target in combat (through spellcasting, for instance) (Thanks, Dragon Slayer!) Fixed an issue where mana/reagents were consumed and skillcheck performed before all spellcast-validations had succeeded, resulting in the occasional loss of reagents/mana when spellcasting was disallowed (code and js/magic/clumsy.js and level1targ.js) Fixed an issue with lack of criminal-flagging for casting of hostile spells scripted in JS (clumsy, magic arrow, feeblemind) vs blue targets (js/magic/clumsy.js and level1targ.js) Fixed some issues with Line-of-Sight checking code that returned incorrect results, which amongst other things affected spellcasting in areas with uneven terrain Fixed some issues with movement code and climbing of ladders, in particular the rope ladder in the 2-story log cabin. Code now sets a "is climbing" flag when character steps onto a rope ladder, and uses that to help resolve some edge cases, and then unsets it when they step off. Renamed section headers of some map-items in DFNs from "locationname" to "locationnamemap" for clarity (example: "britain" to "britainmap") Fixed broken "map wrapping" when sailing to edges of map in Felucca or Trammel Fixed a server crash related to attempts at reading data from invalid map tiles
2025-06-27 08:40:02 +08:00
case CCP_HIDEFAMEKARMATITLE: *vp = BOOLEAN_TO_JSVAL( gPriv->HideFameKarmaTitle() ); break;
2026-03-08 18:17:11 -05:00
case CCP_NOCHARCOLLIDE: *vp = BOOLEAN_TO_JSVAL( gPriv->NoCharCollide() ); break;
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
case CCP_TAMED: *vp = BOOLEAN_TO_JSVAL( gPriv->IsTamed() ); break;
case CCP_TAMEDHUNGERRATE: *vp = INT_TO_JSVAL( gPriv->GetTamedHungerRate() ); break;
case CCP_TAMEDTHIRSTRATE: *vp = INT_TO_JSVAL( gPriv->GetTamedThirstRate() ); break;
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
case CCP_HUNGERWILDCHANCE: *vp = INT_TO_JSVAL( gPriv->GetTamedHungerWildChance() ); break;
case CCP_THIRSTWILDCHANCE: *vp = INT_TO_JSVAL( gPriv->GetTamedThirstWildChance() ); break;
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
case CCP_FOODLIST:
tString = JS_NewStringCopyZ( cx, gPriv->GetFood().c_str() );
*vp = STRING_TO_JSVAL( tString );
break;
case CCP_MOUNTED: *vp = BOOLEAN_TO_JSVAL( gPriv->GetMounted() ); break;
case CCP_STABLED: *vp = BOOLEAN_TO_JSVAL( gPriv->GetStabled() ); break;
case CCP_USINGPOTION: *vp = BOOLEAN_TO_JSVAL( gPriv->IsUsingPotion() ); break;
case CCP_STEALTH: *vp = INT_TO_JSVAL( gPriv->GetStealth() ); break;
case CCP_SKILLTOTAME: *vp = INT_TO_JSVAL( gPriv->GetTaming() ); break;
case CCP_SKILLTOPROV: *vp = INT_TO_JSVAL( gPriv->GetProvoing() ); break;
case CCP_SKILLTOPEACE: *vp = INT_TO_JSVAL( gPriv->GetPeaceing() ); break;
case CCP_POISONSTRENGTH: *vp = INT_TO_JSVAL( gPriv->GetPoisonStrength() ); break;
case CCP_ISPOLYMORPHED: *vp = BOOLEAN_TO_JSVAL( gPriv->IsPolymorphed() ); break;
case CCP_ISINCOGNITO: *vp = BOOLEAN_TO_JSVAL( gPriv->IsIncognito() ); break;
Thief Revamp - 0.99.6-RC5 Added script for NPC guildmasters (js/npc/ai/guildmaster.js). Only one NPC guild has been setup in the script so far (more can be easily added) - the Thieves Guild - which if joined grants players the ability to steal from other players and to buy disguise kits Added two new NPCs, which there will now spawn one of in a random location in each city in Britannia (felucca facet): m_thief_guildmaster (dfndata/npc/male_human.dfn) f_thief_guildmaster (dfndata/npc/female_Human.dfn) Added two new character properties to keep track of which NPC guild a player (or NPC) belongs to. These properties have been exposed as the following Character JS properties: .npcGuild // ID of NPC guild, as defined in script .npcGuildJoined // Timestamp for when player joined NPC guild Added script for Disguise Kits (js/item/disguisekit.js). These allow members of the Thieves Guild to disguise themselves from the prying eyes of other players. Added two new character properties: .isDisguised // true/false flag for character being disguised .origName // used to store character's original name before disguise went into effect Moved implementation of Stealing skill from code to script (js/skill/stealing.js) and revamped it completely in the process. Changes include: New features: Town rare stealing - any item marked as "special stealable" with new item property .stealable can be stolen, even if it's locked down by a GM on the ground, or inside a container When stealing from item piles, thief can potentially steal the amount of items that makes up the max weight limit for what they can steal, from those piles Chance to successfully steal is now affected by whether there are any characters (NPCs or Players) that witness the attempt. Depends on distance to character, and direction character is facing Players now become "permagrey" when successfully stealing from another player, regardless of whether it's witnessed Players now receive a "stealing" flag when stealing from another player, regardless of whether it's witnessed Stolen items cannot be removed from thief's backpack for 30 seconds following the theft of the item (AoS core shard era and above) Optional AoS feature to steal special consumable items from monsters Updated default stealing rules: Updated calculations to determine chance of success when stealing Players cannot steal while engaged in combat Players are revealed if hidden as soon as they use the stealing skill Players can no longer steal items in the secure trade window Players can no longer steal items from NPC shopkeepers Both hands must be free to steal Stealing now checks line of sight to target player/object Only members of Thieves Guild (NPC guild) can now steal from other players, unless they are guild enemies Players can no longer steal from NPC guards by default Players can no longer steal from the same NPC monster more than once Only gold and gems can be stolen from innocent players in dungeon/ll areas of Felucca, if core shard era is set to AoS or higher Players can no longer steal items held on cursor by other players Orcish masks now eplode if player steals from orcs while wearing it If core shard era is set to LBR or lower, player is marked as an aggressor if they steal from another player Guards can only be called on players that are flagged as criminals within the first 10 seconds of them being flagged Stealing script options: Allow stealing entire containers (off by default pre-AoS) Return stolen items on thief death (off by default) Temporarily make stolen items immovable in thief's backpack (on by default post-AoS) Temporarily protect traded items (on by default) Let dexterity affect chance for successful theft (off by default) Let light level affect chance for successful theft (off by default) Allow stealing from NPC Guards (off by default) Allow stealing special loot from monsters (on by default post-ml) Moved implementation of Snooping skill from code to script (js/skill/snooping.js), with some changes: Players cannot snoop pack animals from inside a house, if the animal is outside The deeper inside main backpack a container sits, the harder it becomes to snoop inside it Included an optional feature that lets targets of snooping gradually become more aware, increasing the difficulty of succeeding. This awareness fades over time. Players have a chance to stay hidden while snooping, based on their Hiding skill Karma is now lowered by snooping regardless of success or failure Added tracking system for "aggressors" in combat. A player attacking someone (regardless of flag status) will be marked as aggressor to that someone for 2 minutes Added tracking system for "permagrey" flags - these are stored on a per-target basis, so a player can be flagged visibly as permagrey to multiple other players. Persists until player dies. Player combat targets and war mode are now cleared on logout Players will now be unable to hide if within visual distance and in line of sight of their attacker or current target in combat Server leave-announcement now only happens after the logout timer has expired, instead of the exact moment the player presses the logout button Fixed an issue that could cause swimming NPCs to swim on land NPCs now have the ability to temporarily ignore unreachable targets in combat. If attacked by someone they are ignoring, they will enter evade state and try to move away from that someone. SpawnRegions now support NPCLISTS with weighted entries. Example of an NPCLIST with 75% chance of spawning some kind of orc, and 25% chance of spawning a ratman archer: [NPCLIST example] { 75|NPCLIST=allorc 25|ratman } Added 3 additional "all purpose" item properties (.more0, .more1 and .more2) and exposed those to JS engine. These work the same as more/morex/morey/morez Mark spell now stores a 4th property on recall runes - instanceID. This is stored in the rune's .more0 property. Recall and Gate spells now check the recall rune (or runebook)'s 4th location property - instanceID - to determine where the player ends up Fixed a server crash related to equipment being automatically unequipped if character is no longer strong enough to have it equipped Added new JS Function to check if any characters at specified location potentially block movement: DoesCharacterBlock( x, y, z, worldNum, instanceID ) // returns true if a character exists at given coordinate (within z +/- 4)
2023-06-20 02:21:16 +08:00
case CCP_ISDISGUISED: *vp = BOOLEAN_TO_JSVAL( gPriv->IsDisguised() ); break;
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
case CCP_CANRUN: *vp = BOOLEAN_TO_JSVAL( gPriv->CanRun() ); break;
case CCP_ISMEDITATING: *vp = BOOLEAN_TO_JSVAL( gPriv->IsMeditating() ); break;
case CCP_ISGM: *vp = BOOLEAN_TO_JSVAL( gPriv->IsGM() ); break;
2025-03-08 16:34:37 -06:00
case CCP_TITHING: *vp = INT_TO_JSVAL( gPriv->GetTithing() ); break;
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
case CCP_CANBROADCAST: *vp = BOOLEAN_TO_JSVAL( gPriv->CanBroadcast() ); break;
case CCP_SINGCLICKSER: *vp = BOOLEAN_TO_JSVAL( gPriv->GetSingClickSer() ); break;
case CCP_NOSKILLTITLES: *vp = BOOLEAN_TO_JSVAL( gPriv->NoSkillTitles() ); break;
case CCP_ISGMPAGEABLE: *vp = BOOLEAN_TO_JSVAL( gPriv->IsGMPageable() ); break;
case CCP_CANSNOOP: *vp = BOOLEAN_TO_JSVAL( gPriv->CanSnoop() ); break;
case CCP_ISCOUNSELOR: *vp = BOOLEAN_TO_JSVAL( gPriv->IsCounselor() ); break;
case CCP_NONEEDMANA: *vp = BOOLEAN_TO_JSVAL( gPriv->NoNeedMana() ); break;
case CCP_ISDISPELLABLE: *vp = BOOLEAN_TO_JSVAL( gPriv->IsDispellable() ); break;
case CCP_NONEEDREAGS: *vp = BOOLEAN_TO_JSVAL( gPriv->NoNeedReags() ); break;
case CCP_ISANIMAL: *vp = BOOLEAN_TO_JSVAL( cwmWorldState->creatures[gPriv->GetId()].IsAnimal() ); break;
case CCP_ISPACKANIMAL: *vp = BOOLEAN_TO_JSVAL( cwmWorldState->creatures[gPriv->GetId()].IsPackAnimal() ); break;
case CCP_ISHUMAN: *vp = BOOLEAN_TO_JSVAL( cwmWorldState->creatures[gPriv->GetId()].IsHuman() ); break;
case CCP_ORGID: *vp = INT_TO_JSVAL( gPriv->GetOrgId() ); break;
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
case CCP_ORGSKIN: *vp = INT_TO_JSVAL( gPriv->GetOrgSkin() ); break;
case CCP_NPCFLAG: *vp = INT_TO_JSVAL( static_cast<SI32>(gPriv->GetNPCFlag() ));break;
Thief Revamp - 0.99.6-RC5 Added script for NPC guildmasters (js/npc/ai/guildmaster.js). Only one NPC guild has been setup in the script so far (more can be easily added) - the Thieves Guild - which if joined grants players the ability to steal from other players and to buy disguise kits Added two new NPCs, which there will now spawn one of in a random location in each city in Britannia (felucca facet): m_thief_guildmaster (dfndata/npc/male_human.dfn) f_thief_guildmaster (dfndata/npc/female_Human.dfn) Added two new character properties to keep track of which NPC guild a player (or NPC) belongs to. These properties have been exposed as the following Character JS properties: .npcGuild // ID of NPC guild, as defined in script .npcGuildJoined // Timestamp for when player joined NPC guild Added script for Disguise Kits (js/item/disguisekit.js). These allow members of the Thieves Guild to disguise themselves from the prying eyes of other players. Added two new character properties: .isDisguised // true/false flag for character being disguised .origName // used to store character's original name before disguise went into effect Moved implementation of Stealing skill from code to script (js/skill/stealing.js) and revamped it completely in the process. Changes include: New features: Town rare stealing - any item marked as "special stealable" with new item property .stealable can be stolen, even if it's locked down by a GM on the ground, or inside a container When stealing from item piles, thief can potentially steal the amount of items that makes up the max weight limit for what they can steal, from those piles Chance to successfully steal is now affected by whether there are any characters (NPCs or Players) that witness the attempt. Depends on distance to character, and direction character is facing Players now become "permagrey" when successfully stealing from another player, regardless of whether it's witnessed Players now receive a "stealing" flag when stealing from another player, regardless of whether it's witnessed Stolen items cannot be removed from thief's backpack for 30 seconds following the theft of the item (AoS core shard era and above) Optional AoS feature to steal special consumable items from monsters Updated default stealing rules: Updated calculations to determine chance of success when stealing Players cannot steal while engaged in combat Players are revealed if hidden as soon as they use the stealing skill Players can no longer steal items in the secure trade window Players can no longer steal items from NPC shopkeepers Both hands must be free to steal Stealing now checks line of sight to target player/object Only members of Thieves Guild (NPC guild) can now steal from other players, unless they are guild enemies Players can no longer steal from NPC guards by default Players can no longer steal from the same NPC monster more than once Only gold and gems can be stolen from innocent players in dungeon/ll areas of Felucca, if core shard era is set to AoS or higher Players can no longer steal items held on cursor by other players Orcish masks now eplode if player steals from orcs while wearing it If core shard era is set to LBR or lower, player is marked as an aggressor if they steal from another player Guards can only be called on players that are flagged as criminals within the first 10 seconds of them being flagged Stealing script options: Allow stealing entire containers (off by default pre-AoS) Return stolen items on thief death (off by default) Temporarily make stolen items immovable in thief's backpack (on by default post-AoS) Temporarily protect traded items (on by default) Let dexterity affect chance for successful theft (off by default) Let light level affect chance for successful theft (off by default) Allow stealing from NPC Guards (off by default) Allow stealing special loot from monsters (on by default post-ml) Moved implementation of Snooping skill from code to script (js/skill/snooping.js), with some changes: Players cannot snoop pack animals from inside a house, if the animal is outside The deeper inside main backpack a container sits, the harder it becomes to snoop inside it Included an optional feature that lets targets of snooping gradually become more aware, increasing the difficulty of succeeding. This awareness fades over time. Players have a chance to stay hidden while snooping, based on their Hiding skill Karma is now lowered by snooping regardless of success or failure Added tracking system for "aggressors" in combat. A player attacking someone (regardless of flag status) will be marked as aggressor to that someone for 2 minutes Added tracking system for "permagrey" flags - these are stored on a per-target basis, so a player can be flagged visibly as permagrey to multiple other players. Persists until player dies. Player combat targets and war mode are now cleared on logout Players will now be unable to hide if within visual distance and in line of sight of their attacker or current target in combat Server leave-announcement now only happens after the logout timer has expired, instead of the exact moment the player presses the logout button Fixed an issue that could cause swimming NPCs to swim on land NPCs now have the ability to temporarily ignore unreachable targets in combat. If attacked by someone they are ignoring, they will enter evade state and try to move away from that someone. SpawnRegions now support NPCLISTS with weighted entries. Example of an NPCLIST with 75% chance of spawning some kind of orc, and 25% chance of spawning a ratman archer: [NPCLIST example] { 75|NPCLIST=allorc 25|ratman } Added 3 additional "all purpose" item properties (.more0, .more1 and .more2) and exposed those to JS engine. These work the same as more/morex/morey/morez Mark spell now stores a 4th property on recall runes - instanceID. This is stored in the rune's .more0 property. Recall and Gate spells now check the recall rune (or runebook)'s 4th location property - instanceID - to determine where the player ends up Fixed a server crash related to equipment being automatically unequipped if character is no longer strong enough to have it equipped Added new JS Function to check if any characters at specified location potentially block movement: DoesCharacterBlock( x, y, z, worldNum, instanceID ) // returns true if a character exists at given coordinate (within z +/- 4)
2023-06-20 02:21:16 +08:00
case CCP_NPCGUILD: *vp = INT_TO_JSVAL( gPriv->GetNPCGuild() ); break;
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
case CCP_ISSHOP: *vp = BOOLEAN_TO_JSVAL( gPriv->IsShop() ); break;
0.99.4v Added JS command to reload dictionaries 'reloaddictionaries Fixed a server crash related to casting of spells Fixed some issues with Line-of-Sight checks related to items under/above ground, LoS checks between different floors of buildings, etc. Updated handling of skill-training keywords to be based on language-independent keyword IDs rather than trying to match player-input text to specific skill-names Updated animal-trainer/stablemasterscript (js/npc/ai/stablemaster.js) with several changes: Fixed an issue where the same pet would be stabled in all available slots if payment was taken from player's bank account instead of their backpack Fixed an issue where stablemaster would not pause walking for a while when a player interacts with them Converted all system messages and text messages in stablemaster script to dictionary entries Added new NPC AI type to source - AI_STABLEMASTER (9) - and assigned this to animal trainers. This is used to identify this type of NPCs for the purpose of displaying relevant context menus Reworked banker AI script (js/npc/ai/banker.js) to use triggerwords from client instead of hard-defined strings, to work better with multiple languages (and work with all relevant triggerwords) Fixed a bug with banker AI script (js/npc/ai/banker.js) that prevented players from using the "withdraw" command Re-added NPC AI 8 to banker NPCs (dfndata/npc/male_vendors.dfn and female_vendors.dfn) so code can check for presence of this AI when handling context menus Removed remaining hard-coded banking functionality - all handled by script anyway Added new context menu option for NPC bankers - Open Bankbox Updated code handling of context menus to only show context menus when relevant: Open Paperdoll - Shows for all characters with a paperdoll Open Backpack - Shows for player's character, pack animals and hirelings Open Bankbox - Shows for banker NPCs (if within 8 tiles) Buy/Sell - Shows for vendor NPCs (if within 8 tiles, and if they have anything for sale/are buying anything) Added new context menu entries for pets, which can be used if player is within 12 tiles of pet: Command: Kill Command: Stop Command: Follow Command: Stay Command: Guard Add Friend Remove Friend Transfer Release Added new context menu entries for stablemasters/animal trainers: Claim All Pets Stable Pet Added new context menu entries for Escort Quest NPCs Ask Destination (if within 3 tiles) Accept Escort (if within 3 tiles) Abandon Escort Added new context menus for NPCs that can teach skills to players (limited to max 10 per NPC) Train [skillName] Added new AI script for NPC hirelings (3204=js/npc/ai/hireling.js), who can be hired to follow the player around for a limited amount of time, and function the same way as pets. In addition to the regular pet commands, these speech commands are supported: hire // The hireling will respond with the cost to hire them dismiss // Replaces the "release" command for pets; will dismiss the hireling patrol // The hireling will patrol between it's current location and a second targeted location nearby move // The hireling will try to shuffle out of the way fetch // The hireling will try to fetch a targeted item drop // The hireling will drop to the ground all loot they're currently carrying report // The hireling will report on the remaining time they're hired for Added new NPC DFN tag used by code to detect hireling NPCs for the purpose of displaying context menus: HIRELING // No additional value/data needed for tag Added new context menu entries for Hireling NPCs, in addition to the ones for regular pets: Hire // Can be used within 3 steps of the hireling, who will respond with cost to hire them Dismiss // Replaces the "release" command for pets, will dismiss the hireling Added HIRELING tag and SCRIPT=3204 to and updated stats of various NPCs that will be hireable: m_fighter, f_fighter, m_beggar, f_beggar, m_peasant, f_peasant, m_sailor, f_sailor, m_pirate, f_pirate Added new hireling NPC: m_paladin, f_paladin Added new UOX ini setting to enable/disable context menus CONTEXTMENUS=1/0 (defaults to 1) Added new Item JS Method to check if an item's ID is on a specified food list .IsOnFoodList( foodList ) // Returns true/false if item's ID is on specified foodList Added new OMNIVORE food list and assigned it to [basehuman] DFN section Added new Character JS Properties .isGuarded // Gets/Sets whether character is guarded by a pet/hireling .guarding // Gets/Sets the object (if any) being guarded by a pet/hireling Fixed multiple issues with health bars, flagging and character highlighting Added some crash protection for invalid data used with CUSTOMINTTAG and CUSTOMSTRINGTAG DFN tags for Items, NPCs and Multis Fixed an issue which prevented hard-coded checks from running when using items Added new global js object (Timer) to make the use of character timers in JS more robust, with properties matching timer names from enum in source. Properties: .TIMEOUT // Time until next attack can be done in combat .INVIS // Time until invisible character becomes visible .HUNGER // Time until character grows more hungry .THIRST // Time until character grows more thirsty .POISONTIME // Time until next tick of poison damage .POISONTEXT // Time until next message about suffering from poison .POISONWEAROFF // Time until poison wears off .SPELLTIME // Time until spell cast is completed. Can be set to 0 to interrupt .ANTISPAM // Time until next speech message can be sent (for anti spam purposes) .CRIMFLAG // Time until criminal flag runs out .MURDERRATE // Time until next murder count decay .PEACETIMER // Time until character can re-enter combat after being affected by peacemaking .FLYINGTOGGLE // Time until next time flying ability can be toggled for gargoyles .MOVETIME // Time until NPC can move again .SPATIMER // Time until next time NPC can cast a spell .SUMMONTIME // Time until a summoned NPC will vanish .EVADETIME // Time until an NPC will exit evade state .LOGOUT // Time it takes for a player char to vanish after logout Examples of use: var hungerTimer = myChar.GetTimer( Timer.HUNGER ) myChar.SetTimer( Timer.HUNGER, 15000 ) Added new Character JS Methods to add, remove and list friends of a pet/hireling: .AddFriend( playerToAdd ) // Adds player to friend list .RemoveFriend( playerToRemove ) // Removes player from friend list .GetFriendList() // Gets list of friends .ClearFriendList() // Clears list of friends Added new Character JS Method to fetch a player character's list of pets/followers .GetPetList() // Gets list of pets/followers Added new persistent NPC property to keep track of a pet's previous owners, whether those tamed the pet or had it transferred to them. Every time a pet is tamed, or is transferred to a new owner, this list is updated: GenericList< CChar * > petOwnerList Added new Character JS Method to check if a player is on a pet's owner list as a previous owner: .HasBeenOwner( mChar ) Previous owners of a pet can re-tame it with guaranteed chance of success Updated JS Method Refresh() to be usable with both items or characters, to send updated state of object to nearby players Added character tooltip [Guarded] for characters being guarded by a pet/hireling Pets/hirelings that are transferred will now immediately start following their new master instead of wandering freely Pets/hirelings can no longer be transferred between players as long as either party is flagged as a criminal Pets/hirelings can no longer be transferred to dead players Pets/hirelings can no longer be transferred to NPCs Summoned creatures can no longer be transferred to other players Summoned creatures can no longer have friends Friend lists of pets/hirelings are now cleared when the pet/hireling is transferred to another player Added new UOX.INI settings to control how many pets players can have active: MAXCONTROLSLOTS=0 // Maximum number of pet control slots available to player. Disabled if 0 MAXFOLLOWERS=5 // Maximum pets/followers a player can have active at the same time. Used if control slots are disabled MAXPETOWNERS=5 // Maximum number of different owners a pet can have over its lifetime before it becomes impossible to retame Added new NPC property and NPC DFN tag that keeps track of how many pet control slots an NPC would take up if owned by a player: UI08 controlSlots // source property CONTROLSLOTS=# // DFN tag Added new Character JS properties: .ownerCount // Get the total number of owners a pet/hireling has had, based on NPC's petOwnerList .controlSlots // Get/Set number of pet control slots an NPC will occupy .controlSlotsUsed // Get/Set the number of control slots used by a player Updated get (js/commands/targeting/get.js) and set (js/commands/targeting/set.js) commands to support getting/setting the following character properties: deaths ownerCount (read only) controlSlots controlSlotsUsed Updated NPC DFNs with default CONTROLSLOT=# tags Increased the max distance from player that onSpeech JS event will trigger from 7 to 12 Updated how "all attack" and "all follow" commands for pets are handled. Now loops through all pets owned by character and executes command for each eligible pet Fixed an issue where NPCs could follow characters in different worlds/instances than them selves Updated default max amount of items that can be sold to NPC vendors from 5 to 250 Guards can no longer train players in skills Updated equipment itemlists (dfndata/items/itemlists/itemlists.dfn) with blank entries to introduce some more variety in the type of clothes NPCs wear in general Added new NPCs to DFNs (dfndata/npc/undead.dfn) and added them to undead npclist: [skeletalmage] // variation of [bonemage] [skeletalknight] // variation of [boneknight] Updated Titles (dfndata/titles/titles.dfn) with up-to-date titles for skills around Pub 15, and added titles for skills added after that. Also added "Elder" and "Legendary" titles for 110 and 120 skillpoints Updated EQUIPITEM tag in newbie.dfn (dfndata/newbie/newbie.dfn) to support an optional hue parameter (EQUIPITEM=id,hue) Updated starting equipment for new characters (dfndata/newbie/newbie.dfn), with commented out practice weapons. Uncomment to use Added item definitions for practice weapons (dfndata/items/gear/weapons/practice_weapons.dfn): practice_skinning_knife practice_hatchet practice_axe practice_mace practice_longsword practice_spear practice_bow practice_club practice_crook practice_gnarled_staff Updated mount statues DFN (dfndata/items/misc/mount-statues.dfn) and JS (js/npc/pets/*.js) files to include pet control slot related stuff Pets now inherit the karma of their owners, but revert to their original karma upon release Pets and hirelings will no longer follow the ghosts of their dead owners, but stay to guard their corpse Added optional 9th parameter for JS Function CreateDFNItem to specify a color for item created. This comes before the other optional parameters - worldNumber and instanceID (which are only used if character is NULL): CreateDFNItem( mSock, mChar, sectionName, inPack, iAmount, itemType, iColor, worldNumber, instanceID ) Added ID of Giant Beetle to various pack animal checks Pack animals will now drop any newbie/blessed items stored in their packs upon death Added new NPC properties to track pet loyalty, and exposed these as Character JS properties, and NPC DFN tags: JS Properties .maxLoyalty // Defaults to 100 .loyalty // Starts at 25 DFN Tags MAXLOYALTY=# // Defaults to 100 LOYALTY=# // Starts at 25 Updated TriggerEvent JS function to support return values (int, bool, string, object) from called script Updated various JS scripts to make use of new TriggerEvent functionality and reduce reliance on custom tags: js/item/archerybutte.js js/item/trainingdummy.js js/server/data/combatanims.js js/server/data/weapontypes.js Updated archerybutte script to use dictionary for system and text messages Updated archerybutte script to support increased range, distance penalty and dex/str bonuses when calculating score Added new UOX.INI settings under [pets and hirelings] section related to pet control and loyalty: CHECKPETCONTROLDIFFICULTY=1 // Enable/Disable pet control difficulty system PETLOYALTYGAINONSUCCESS=1 // Amount of pet loyalty gained on successful pet command use PETLOYALTYLOSSONFAILURE=3 // Amount of pet loyalty lost on failed pet command use PETLOYALTYRATE=900 // Amount of seconds between each time pet loyalty is automatically reduced by 1. Takes 25 hours to deplete completely from max Added new persistent NPC property that keeps track of the difficulty of taming and controlling a pet, and exposed it as a Character JS property: .orneriness Every time a tamed pet is released or goes wild, its "orneriness" increases, making it more difficult for other players to tame, and more difficult for anyone to control. Updated CBasePetResponse::canControlPet() function to use pet control difficulty system if enabled, which checks player's animal taming/animal lore skill vs a pet's "orneriness" to determine chance of pet accepting a given pet command On successful use of pet command, increases pet loyalty by value defined in PETLOYALTYGAINONSUCCESS ini setting On failed use of pet command, decreases pet loyalty by value defined in PETLOYALTYLOSSONFAILURE ini setting Added new Character JS Method to calculate chance of a player successfully controlling the pet: .CalculateControlChance( mChar ) // Returns value between 0 and 1000 indicating chance of success Feeding a pet will now restore its loyalty to maximum Pets will now lose loyalty on hunger checks when at maximum hunger Pets that are maximum hungry will now only have a chance to go wild if loyalty has dropped to zero Added new DFN tag for creatures.dfn - TYPE - which contains a string describing the type of creature Added secure pet trading. Players who trade pets will now see a pet transfer deed appear in a secure trade window with the name and type of creature, and upon completion of the trade the associated pet will be instantly transferred to the other player Updated resource JS scripts (js/server/resource/*) to use dictionaries for all system messages Updated skill JS scripts (js/skill/*) to use dictionaries for all system messages Updated housing JS scripts (js/server/house/*) to use dictionaries for all system messages Updated item JS scripts (js/item/*) to use dictionaries for all system messages Updated magic JS scripts (js/magic/*) to use dictionaries for all system messages Updated NPC AI JS scripts (js/npc/ai/*) to use dictionaries for all system messages Updated command JS scripts (js/commands/*) to use dictionaries for all system messages, gump tooltips, etc Updated code to use dictionaries for all system messages Fixed incorrect spelling for UOX.INI setting HIDEW(H)ILEMOUNTED and updated hiding skill (js/skill/hiding.js) to actually allow/disallow hiding while mounted based on this setting Added new Character JS Method to make it easier to make one NPC initiate combat with another: .InitiateCombat( targetChar ) // Character attempts to initiate combat with target character Updated parrying portion of combat code to be in line with Pub15/pre-AoS parrying mechanics. High AR shields now absorb more damage on a successful parry, while low AR shields have a higher chance of parrying. Shields are also now more effective against archery attacks (full absorption potential) than melee attacks (half absorption potential). Updated combat damage calculations to be in line with Pub15/pre-AoS damage calculations Adjusted default value of COMBATNPCDAMAGERATE ini setting (damage divisor when target is a player) from 2 to 1 to account for these changes. Removed dictionary.UNK, and made dictionary.ZRO the default dictionary used for all unsupported languages Added dictionary support for additional languages: Portuguese, Italian, Czech Updated default dictionaries for the following languages: English, French Added default dictionaries for the following languages: German, Spanish, Portuguese, Italian, Czech (note that translations have been provided by automatic services and will contain inaccuracies!) Added new UOX.INI setting to allow specifying a default dictionary language for server, which if set will force that language for all dictionary messages, regardless of client settings: SERVERLANGUAGE=0 // Set default server dictionary language. Supported languages: 0 - None/language used by each client, 1 - English, 2 - German, 3 - Spanish, 5 - French, 6 - Portuguese, 7 - Italian, 8 - Czech Added new function in combat.cpp - AdjustArmorClassDamage() - which adjusts the damage dealt in combat based on whether armour class (AC DFN tag or .ac JS property) of weapon and armour equipped on hit location of target match up. A weapon with armour class 1 would essentially be doubly effective against armour of armour class 1. Allows setting up things like piercing weapons being better against some armor types than mace weapons, etc. Added new UOX.INI setting under [combat] to enable/disable double damage from armour class bonuses: ARMORCLASSDAMAGEBONUS=0/1 //defaults to 0)
2021-07-28 16:02:56 +08:00
case CCP_MAXLOYALTY: *vp = INT_TO_JSVAL( gPriv->GetMaxLoyalty() ); break;
case CCP_LOYALTY: *vp = INT_TO_JSVAL( gPriv->GetLoyalty() ); break;
case CCP_LOYALTYRATE:
{
// Use global loyalty rate from UOX.INI
UI16 loyaltyRate = 0;
if( loyaltyRate == 0 )
{
0.99.4v Added JS command to reload dictionaries 'reloaddictionaries Fixed a server crash related to casting of spells Fixed some issues with Line-of-Sight checks related to items under/above ground, LoS checks between different floors of buildings, etc. Updated handling of skill-training keywords to be based on language-independent keyword IDs rather than trying to match player-input text to specific skill-names Updated animal-trainer/stablemasterscript (js/npc/ai/stablemaster.js) with several changes: Fixed an issue where the same pet would be stabled in all available slots if payment was taken from player's bank account instead of their backpack Fixed an issue where stablemaster would not pause walking for a while when a player interacts with them Converted all system messages and text messages in stablemaster script to dictionary entries Added new NPC AI type to source - AI_STABLEMASTER (9) - and assigned this to animal trainers. This is used to identify this type of NPCs for the purpose of displaying relevant context menus Reworked banker AI script (js/npc/ai/banker.js) to use triggerwords from client instead of hard-defined strings, to work better with multiple languages (and work with all relevant triggerwords) Fixed a bug with banker AI script (js/npc/ai/banker.js) that prevented players from using the "withdraw" command Re-added NPC AI 8 to banker NPCs (dfndata/npc/male_vendors.dfn and female_vendors.dfn) so code can check for presence of this AI when handling context menus Removed remaining hard-coded banking functionality - all handled by script anyway Added new context menu option for NPC bankers - Open Bankbox Updated code handling of context menus to only show context menus when relevant: Open Paperdoll - Shows for all characters with a paperdoll Open Backpack - Shows for player's character, pack animals and hirelings Open Bankbox - Shows for banker NPCs (if within 8 tiles) Buy/Sell - Shows for vendor NPCs (if within 8 tiles, and if they have anything for sale/are buying anything) Added new context menu entries for pets, which can be used if player is within 12 tiles of pet: Command: Kill Command: Stop Command: Follow Command: Stay Command: Guard Add Friend Remove Friend Transfer Release Added new context menu entries for stablemasters/animal trainers: Claim All Pets Stable Pet Added new context menu entries for Escort Quest NPCs Ask Destination (if within 3 tiles) Accept Escort (if within 3 tiles) Abandon Escort Added new context menus for NPCs that can teach skills to players (limited to max 10 per NPC) Train [skillName] Added new AI script for NPC hirelings (3204=js/npc/ai/hireling.js), who can be hired to follow the player around for a limited amount of time, and function the same way as pets. In addition to the regular pet commands, these speech commands are supported: hire // The hireling will respond with the cost to hire them dismiss // Replaces the "release" command for pets; will dismiss the hireling patrol // The hireling will patrol between it's current location and a second targeted location nearby move // The hireling will try to shuffle out of the way fetch // The hireling will try to fetch a targeted item drop // The hireling will drop to the ground all loot they're currently carrying report // The hireling will report on the remaining time they're hired for Added new NPC DFN tag used by code to detect hireling NPCs for the purpose of displaying context menus: HIRELING // No additional value/data needed for tag Added new context menu entries for Hireling NPCs, in addition to the ones for regular pets: Hire // Can be used within 3 steps of the hireling, who will respond with cost to hire them Dismiss // Replaces the "release" command for pets, will dismiss the hireling Added HIRELING tag and SCRIPT=3204 to and updated stats of various NPCs that will be hireable: m_fighter, f_fighter, m_beggar, f_beggar, m_peasant, f_peasant, m_sailor, f_sailor, m_pirate, f_pirate Added new hireling NPC: m_paladin, f_paladin Added new UOX ini setting to enable/disable context menus CONTEXTMENUS=1/0 (defaults to 1) Added new Item JS Method to check if an item's ID is on a specified food list .IsOnFoodList( foodList ) // Returns true/false if item's ID is on specified foodList Added new OMNIVORE food list and assigned it to [basehuman] DFN section Added new Character JS Properties .isGuarded // Gets/Sets whether character is guarded by a pet/hireling .guarding // Gets/Sets the object (if any) being guarded by a pet/hireling Fixed multiple issues with health bars, flagging and character highlighting Added some crash protection for invalid data used with CUSTOMINTTAG and CUSTOMSTRINGTAG DFN tags for Items, NPCs and Multis Fixed an issue which prevented hard-coded checks from running when using items Added new global js object (Timer) to make the use of character timers in JS more robust, with properties matching timer names from enum in source. Properties: .TIMEOUT // Time until next attack can be done in combat .INVIS // Time until invisible character becomes visible .HUNGER // Time until character grows more hungry .THIRST // Time until character grows more thirsty .POISONTIME // Time until next tick of poison damage .POISONTEXT // Time until next message about suffering from poison .POISONWEAROFF // Time until poison wears off .SPELLTIME // Time until spell cast is completed. Can be set to 0 to interrupt .ANTISPAM // Time until next speech message can be sent (for anti spam purposes) .CRIMFLAG // Time until criminal flag runs out .MURDERRATE // Time until next murder count decay .PEACETIMER // Time until character can re-enter combat after being affected by peacemaking .FLYINGTOGGLE // Time until next time flying ability can be toggled for gargoyles .MOVETIME // Time until NPC can move again .SPATIMER // Time until next time NPC can cast a spell .SUMMONTIME // Time until a summoned NPC will vanish .EVADETIME // Time until an NPC will exit evade state .LOGOUT // Time it takes for a player char to vanish after logout Examples of use: var hungerTimer = myChar.GetTimer( Timer.HUNGER ) myChar.SetTimer( Timer.HUNGER, 15000 ) Added new Character JS Methods to add, remove and list friends of a pet/hireling: .AddFriend( playerToAdd ) // Adds player to friend list .RemoveFriend( playerToRemove ) // Removes player from friend list .GetFriendList() // Gets list of friends .ClearFriendList() // Clears list of friends Added new Character JS Method to fetch a player character's list of pets/followers .GetPetList() // Gets list of pets/followers Added new persistent NPC property to keep track of a pet's previous owners, whether those tamed the pet or had it transferred to them. Every time a pet is tamed, or is transferred to a new owner, this list is updated: GenericList< CChar * > petOwnerList Added new Character JS Method to check if a player is on a pet's owner list as a previous owner: .HasBeenOwner( mChar ) Previous owners of a pet can re-tame it with guaranteed chance of success Updated JS Method Refresh() to be usable with both items or characters, to send updated state of object to nearby players Added character tooltip [Guarded] for characters being guarded by a pet/hireling Pets/hirelings that are transferred will now immediately start following their new master instead of wandering freely Pets/hirelings can no longer be transferred between players as long as either party is flagged as a criminal Pets/hirelings can no longer be transferred to dead players Pets/hirelings can no longer be transferred to NPCs Summoned creatures can no longer be transferred to other players Summoned creatures can no longer have friends Friend lists of pets/hirelings are now cleared when the pet/hireling is transferred to another player Added new UOX.INI settings to control how many pets players can have active: MAXCONTROLSLOTS=0 // Maximum number of pet control slots available to player. Disabled if 0 MAXFOLLOWERS=5 // Maximum pets/followers a player can have active at the same time. Used if control slots are disabled MAXPETOWNERS=5 // Maximum number of different owners a pet can have over its lifetime before it becomes impossible to retame Added new NPC property and NPC DFN tag that keeps track of how many pet control slots an NPC would take up if owned by a player: UI08 controlSlots // source property CONTROLSLOTS=# // DFN tag Added new Character JS properties: .ownerCount // Get the total number of owners a pet/hireling has had, based on NPC's petOwnerList .controlSlots // Get/Set number of pet control slots an NPC will occupy .controlSlotsUsed // Get/Set the number of control slots used by a player Updated get (js/commands/targeting/get.js) and set (js/commands/targeting/set.js) commands to support getting/setting the following character properties: deaths ownerCount (read only) controlSlots controlSlotsUsed Updated NPC DFNs with default CONTROLSLOT=# tags Increased the max distance from player that onSpeech JS event will trigger from 7 to 12 Updated how "all attack" and "all follow" commands for pets are handled. Now loops through all pets owned by character and executes command for each eligible pet Fixed an issue where NPCs could follow characters in different worlds/instances than them selves Updated default max amount of items that can be sold to NPC vendors from 5 to 250 Guards can no longer train players in skills Updated equipment itemlists (dfndata/items/itemlists/itemlists.dfn) with blank entries to introduce some more variety in the type of clothes NPCs wear in general Added new NPCs to DFNs (dfndata/npc/undead.dfn) and added them to undead npclist: [skeletalmage] // variation of [bonemage] [skeletalknight] // variation of [boneknight] Updated Titles (dfndata/titles/titles.dfn) with up-to-date titles for skills around Pub 15, and added titles for skills added after that. Also added "Elder" and "Legendary" titles for 110 and 120 skillpoints Updated EQUIPITEM tag in newbie.dfn (dfndata/newbie/newbie.dfn) to support an optional hue parameter (EQUIPITEM=id,hue) Updated starting equipment for new characters (dfndata/newbie/newbie.dfn), with commented out practice weapons. Uncomment to use Added item definitions for practice weapons (dfndata/items/gear/weapons/practice_weapons.dfn): practice_skinning_knife practice_hatchet practice_axe practice_mace practice_longsword practice_spear practice_bow practice_club practice_crook practice_gnarled_staff Updated mount statues DFN (dfndata/items/misc/mount-statues.dfn) and JS (js/npc/pets/*.js) files to include pet control slot related stuff Pets now inherit the karma of their owners, but revert to their original karma upon release Pets and hirelings will no longer follow the ghosts of their dead owners, but stay to guard their corpse Added optional 9th parameter for JS Function CreateDFNItem to specify a color for item created. This comes before the other optional parameters - worldNumber and instanceID (which are only used if character is NULL): CreateDFNItem( mSock, mChar, sectionName, inPack, iAmount, itemType, iColor, worldNumber, instanceID ) Added ID of Giant Beetle to various pack animal checks Pack animals will now drop any newbie/blessed items stored in their packs upon death Added new NPC properties to track pet loyalty, and exposed these as Character JS properties, and NPC DFN tags: JS Properties .maxLoyalty // Defaults to 100 .loyalty // Starts at 25 DFN Tags MAXLOYALTY=# // Defaults to 100 LOYALTY=# // Starts at 25 Updated TriggerEvent JS function to support return values (int, bool, string, object) from called script Updated various JS scripts to make use of new TriggerEvent functionality and reduce reliance on custom tags: js/item/archerybutte.js js/item/trainingdummy.js js/server/data/combatanims.js js/server/data/weapontypes.js Updated archerybutte script to use dictionary for system and text messages Updated archerybutte script to support increased range, distance penalty and dex/str bonuses when calculating score Added new UOX.INI settings under [pets and hirelings] section related to pet control and loyalty: CHECKPETCONTROLDIFFICULTY=1 // Enable/Disable pet control difficulty system PETLOYALTYGAINONSUCCESS=1 // Amount of pet loyalty gained on successful pet command use PETLOYALTYLOSSONFAILURE=3 // Amount of pet loyalty lost on failed pet command use PETLOYALTYRATE=900 // Amount of seconds between each time pet loyalty is automatically reduced by 1. Takes 25 hours to deplete completely from max Added new persistent NPC property that keeps track of the difficulty of taming and controlling a pet, and exposed it as a Character JS property: .orneriness Every time a tamed pet is released or goes wild, its "orneriness" increases, making it more difficult for other players to tame, and more difficult for anyone to control. Updated CBasePetResponse::canControlPet() function to use pet control difficulty system if enabled, which checks player's animal taming/animal lore skill vs a pet's "orneriness" to determine chance of pet accepting a given pet command On successful use of pet command, increases pet loyalty by value defined in PETLOYALTYGAINONSUCCESS ini setting On failed use of pet command, decreases pet loyalty by value defined in PETLOYALTYLOSSONFAILURE ini setting Added new Character JS Method to calculate chance of a player successfully controlling the pet: .CalculateControlChance( mChar ) // Returns value between 0 and 1000 indicating chance of success Feeding a pet will now restore its loyalty to maximum Pets will now lose loyalty on hunger checks when at maximum hunger Pets that are maximum hungry will now only have a chance to go wild if loyalty has dropped to zero Added new DFN tag for creatures.dfn - TYPE - which contains a string describing the type of creature Added secure pet trading. Players who trade pets will now see a pet transfer deed appear in a secure trade window with the name and type of creature, and upon completion of the trade the associated pet will be instantly transferred to the other player Updated resource JS scripts (js/server/resource/*) to use dictionaries for all system messages Updated skill JS scripts (js/skill/*) to use dictionaries for all system messages Updated housing JS scripts (js/server/house/*) to use dictionaries for all system messages Updated item JS scripts (js/item/*) to use dictionaries for all system messages Updated magic JS scripts (js/magic/*) to use dictionaries for all system messages Updated NPC AI JS scripts (js/npc/ai/*) to use dictionaries for all system messages Updated command JS scripts (js/commands/*) to use dictionaries for all system messages, gump tooltips, etc Updated code to use dictionaries for all system messages Fixed incorrect spelling for UOX.INI setting HIDEW(H)ILEMOUNTED and updated hiding skill (js/skill/hiding.js) to actually allow/disallow hiding while mounted based on this setting Added new Character JS Method to make it easier to make one NPC initiate combat with another: .InitiateCombat( targetChar ) // Character attempts to initiate combat with target character Updated parrying portion of combat code to be in line with Pub15/pre-AoS parrying mechanics. High AR shields now absorb more damage on a successful parry, while low AR shields have a higher chance of parrying. Shields are also now more effective against archery attacks (full absorption potential) than melee attacks (half absorption potential). Updated combat damage calculations to be in line with Pub15/pre-AoS damage calculations Adjusted default value of COMBATNPCDAMAGERATE ini setting (damage divisor when target is a player) from 2 to 1 to account for these changes. Removed dictionary.UNK, and made dictionary.ZRO the default dictionary used for all unsupported languages Added dictionary support for additional languages: Portuguese, Italian, Czech Updated default dictionaries for the following languages: English, French Added default dictionaries for the following languages: German, Spanish, Portuguese, Italian, Czech (note that translations have been provided by automatic services and will contain inaccuracies!) Added new UOX.INI setting to allow specifying a default dictionary language for server, which if set will force that language for all dictionary messages, regardless of client settings: SERVERLANGUAGE=0 // Set default server dictionary language. Supported languages: 0 - None/language used by each client, 1 - English, 2 - German, 3 - Spanish, 5 - French, 6 - Portuguese, 7 - Italian, 8 - Czech Added new function in combat.cpp - AdjustArmorClassDamage() - which adjusts the damage dealt in combat based on whether armour class (AC DFN tag or .ac JS property) of weapon and armour equipped on hit location of target match up. A weapon with armour class 1 would essentially be doubly effective against armour of armour class 1. Allows setting up things like piercing weapons being better against some armor types than mace weapons, etc. Added new UOX.INI setting under [combat] to enable/disable double damage from armour class bonuses: ARMORCLASSDAMAGEBONUS=0/1 //defaults to 0)
2021-07-28 16:02:56 +08:00
loyaltyRate = cwmWorldState->ServerData()->SystemTimer( tSERVER_LOYALTYRATE );
}
0.99.4v Added JS command to reload dictionaries 'reloaddictionaries Fixed a server crash related to casting of spells Fixed some issues with Line-of-Sight checks related to items under/above ground, LoS checks between different floors of buildings, etc. Updated handling of skill-training keywords to be based on language-independent keyword IDs rather than trying to match player-input text to specific skill-names Updated animal-trainer/stablemasterscript (js/npc/ai/stablemaster.js) with several changes: Fixed an issue where the same pet would be stabled in all available slots if payment was taken from player's bank account instead of their backpack Fixed an issue where stablemaster would not pause walking for a while when a player interacts with them Converted all system messages and text messages in stablemaster script to dictionary entries Added new NPC AI type to source - AI_STABLEMASTER (9) - and assigned this to animal trainers. This is used to identify this type of NPCs for the purpose of displaying relevant context menus Reworked banker AI script (js/npc/ai/banker.js) to use triggerwords from client instead of hard-defined strings, to work better with multiple languages (and work with all relevant triggerwords) Fixed a bug with banker AI script (js/npc/ai/banker.js) that prevented players from using the "withdraw" command Re-added NPC AI 8 to banker NPCs (dfndata/npc/male_vendors.dfn and female_vendors.dfn) so code can check for presence of this AI when handling context menus Removed remaining hard-coded banking functionality - all handled by script anyway Added new context menu option for NPC bankers - Open Bankbox Updated code handling of context menus to only show context menus when relevant: Open Paperdoll - Shows for all characters with a paperdoll Open Backpack - Shows for player's character, pack animals and hirelings Open Bankbox - Shows for banker NPCs (if within 8 tiles) Buy/Sell - Shows for vendor NPCs (if within 8 tiles, and if they have anything for sale/are buying anything) Added new context menu entries for pets, which can be used if player is within 12 tiles of pet: Command: Kill Command: Stop Command: Follow Command: Stay Command: Guard Add Friend Remove Friend Transfer Release Added new context menu entries for stablemasters/animal trainers: Claim All Pets Stable Pet Added new context menu entries for Escort Quest NPCs Ask Destination (if within 3 tiles) Accept Escort (if within 3 tiles) Abandon Escort Added new context menus for NPCs that can teach skills to players (limited to max 10 per NPC) Train [skillName] Added new AI script for NPC hirelings (3204=js/npc/ai/hireling.js), who can be hired to follow the player around for a limited amount of time, and function the same way as pets. In addition to the regular pet commands, these speech commands are supported: hire // The hireling will respond with the cost to hire them dismiss // Replaces the "release" command for pets; will dismiss the hireling patrol // The hireling will patrol between it's current location and a second targeted location nearby move // The hireling will try to shuffle out of the way fetch // The hireling will try to fetch a targeted item drop // The hireling will drop to the ground all loot they're currently carrying report // The hireling will report on the remaining time they're hired for Added new NPC DFN tag used by code to detect hireling NPCs for the purpose of displaying context menus: HIRELING // No additional value/data needed for tag Added new context menu entries for Hireling NPCs, in addition to the ones for regular pets: Hire // Can be used within 3 steps of the hireling, who will respond with cost to hire them Dismiss // Replaces the "release" command for pets, will dismiss the hireling Added HIRELING tag and SCRIPT=3204 to and updated stats of various NPCs that will be hireable: m_fighter, f_fighter, m_beggar, f_beggar, m_peasant, f_peasant, m_sailor, f_sailor, m_pirate, f_pirate Added new hireling NPC: m_paladin, f_paladin Added new UOX ini setting to enable/disable context menus CONTEXTMENUS=1/0 (defaults to 1) Added new Item JS Method to check if an item's ID is on a specified food list .IsOnFoodList( foodList ) // Returns true/false if item's ID is on specified foodList Added new OMNIVORE food list and assigned it to [basehuman] DFN section Added new Character JS Properties .isGuarded // Gets/Sets whether character is guarded by a pet/hireling .guarding // Gets/Sets the object (if any) being guarded by a pet/hireling Fixed multiple issues with health bars, flagging and character highlighting Added some crash protection for invalid data used with CUSTOMINTTAG and CUSTOMSTRINGTAG DFN tags for Items, NPCs and Multis Fixed an issue which prevented hard-coded checks from running when using items Added new global js object (Timer) to make the use of character timers in JS more robust, with properties matching timer names from enum in source. Properties: .TIMEOUT // Time until next attack can be done in combat .INVIS // Time until invisible character becomes visible .HUNGER // Time until character grows more hungry .THIRST // Time until character grows more thirsty .POISONTIME // Time until next tick of poison damage .POISONTEXT // Time until next message about suffering from poison .POISONWEAROFF // Time until poison wears off .SPELLTIME // Time until spell cast is completed. Can be set to 0 to interrupt .ANTISPAM // Time until next speech message can be sent (for anti spam purposes) .CRIMFLAG // Time until criminal flag runs out .MURDERRATE // Time until next murder count decay .PEACETIMER // Time until character can re-enter combat after being affected by peacemaking .FLYINGTOGGLE // Time until next time flying ability can be toggled for gargoyles .MOVETIME // Time until NPC can move again .SPATIMER // Time until next time NPC can cast a spell .SUMMONTIME // Time until a summoned NPC will vanish .EVADETIME // Time until an NPC will exit evade state .LOGOUT // Time it takes for a player char to vanish after logout Examples of use: var hungerTimer = myChar.GetTimer( Timer.HUNGER ) myChar.SetTimer( Timer.HUNGER, 15000 ) Added new Character JS Methods to add, remove and list friends of a pet/hireling: .AddFriend( playerToAdd ) // Adds player to friend list .RemoveFriend( playerToRemove ) // Removes player from friend list .GetFriendList() // Gets list of friends .ClearFriendList() // Clears list of friends Added new Character JS Method to fetch a player character's list of pets/followers .GetPetList() // Gets list of pets/followers Added new persistent NPC property to keep track of a pet's previous owners, whether those tamed the pet or had it transferred to them. Every time a pet is tamed, or is transferred to a new owner, this list is updated: GenericList< CChar * > petOwnerList Added new Character JS Method to check if a player is on a pet's owner list as a previous owner: .HasBeenOwner( mChar ) Previous owners of a pet can re-tame it with guaranteed chance of success Updated JS Method Refresh() to be usable with both items or characters, to send updated state of object to nearby players Added character tooltip [Guarded] for characters being guarded by a pet/hireling Pets/hirelings that are transferred will now immediately start following their new master instead of wandering freely Pets/hirelings can no longer be transferred between players as long as either party is flagged as a criminal Pets/hirelings can no longer be transferred to dead players Pets/hirelings can no longer be transferred to NPCs Summoned creatures can no longer be transferred to other players Summoned creatures can no longer have friends Friend lists of pets/hirelings are now cleared when the pet/hireling is transferred to another player Added new UOX.INI settings to control how many pets players can have active: MAXCONTROLSLOTS=0 // Maximum number of pet control slots available to player. Disabled if 0 MAXFOLLOWERS=5 // Maximum pets/followers a player can have active at the same time. Used if control slots are disabled MAXPETOWNERS=5 // Maximum number of different owners a pet can have over its lifetime before it becomes impossible to retame Added new NPC property and NPC DFN tag that keeps track of how many pet control slots an NPC would take up if owned by a player: UI08 controlSlots // source property CONTROLSLOTS=# // DFN tag Added new Character JS properties: .ownerCount // Get the total number of owners a pet/hireling has had, based on NPC's petOwnerList .controlSlots // Get/Set number of pet control slots an NPC will occupy .controlSlotsUsed // Get/Set the number of control slots used by a player Updated get (js/commands/targeting/get.js) and set (js/commands/targeting/set.js) commands to support getting/setting the following character properties: deaths ownerCount (read only) controlSlots controlSlotsUsed Updated NPC DFNs with default CONTROLSLOT=# tags Increased the max distance from player that onSpeech JS event will trigger from 7 to 12 Updated how "all attack" and "all follow" commands for pets are handled. Now loops through all pets owned by character and executes command for each eligible pet Fixed an issue where NPCs could follow characters in different worlds/instances than them selves Updated default max amount of items that can be sold to NPC vendors from 5 to 250 Guards can no longer train players in skills Updated equipment itemlists (dfndata/items/itemlists/itemlists.dfn) with blank entries to introduce some more variety in the type of clothes NPCs wear in general Added new NPCs to DFNs (dfndata/npc/undead.dfn) and added them to undead npclist: [skeletalmage] // variation of [bonemage] [skeletalknight] // variation of [boneknight] Updated Titles (dfndata/titles/titles.dfn) with up-to-date titles for skills around Pub 15, and added titles for skills added after that. Also added "Elder" and "Legendary" titles for 110 and 120 skillpoints Updated EQUIPITEM tag in newbie.dfn (dfndata/newbie/newbie.dfn) to support an optional hue parameter (EQUIPITEM=id,hue) Updated starting equipment for new characters (dfndata/newbie/newbie.dfn), with commented out practice weapons. Uncomment to use Added item definitions for practice weapons (dfndata/items/gear/weapons/practice_weapons.dfn): practice_skinning_knife practice_hatchet practice_axe practice_mace practice_longsword practice_spear practice_bow practice_club practice_crook practice_gnarled_staff Updated mount statues DFN (dfndata/items/misc/mount-statues.dfn) and JS (js/npc/pets/*.js) files to include pet control slot related stuff Pets now inherit the karma of their owners, but revert to their original karma upon release Pets and hirelings will no longer follow the ghosts of their dead owners, but stay to guard their corpse Added optional 9th parameter for JS Function CreateDFNItem to specify a color for item created. This comes before the other optional parameters - worldNumber and instanceID (which are only used if character is NULL): CreateDFNItem( mSock, mChar, sectionName, inPack, iAmount, itemType, iColor, worldNumber, instanceID ) Added ID of Giant Beetle to various pack animal checks Pack animals will now drop any newbie/blessed items stored in their packs upon death Added new NPC properties to track pet loyalty, and exposed these as Character JS properties, and NPC DFN tags: JS Properties .maxLoyalty // Defaults to 100 .loyalty // Starts at 25 DFN Tags MAXLOYALTY=# // Defaults to 100 LOYALTY=# // Starts at 25 Updated TriggerEvent JS function to support return values (int, bool, string, object) from called script Updated various JS scripts to make use of new TriggerEvent functionality and reduce reliance on custom tags: js/item/archerybutte.js js/item/trainingdummy.js js/server/data/combatanims.js js/server/data/weapontypes.js Updated archerybutte script to use dictionary for system and text messages Updated archerybutte script to support increased range, distance penalty and dex/str bonuses when calculating score Added new UOX.INI settings under [pets and hirelings] section related to pet control and loyalty: CHECKPETCONTROLDIFFICULTY=1 // Enable/Disable pet control difficulty system PETLOYALTYGAINONSUCCESS=1 // Amount of pet loyalty gained on successful pet command use PETLOYALTYLOSSONFAILURE=3 // Amount of pet loyalty lost on failed pet command use PETLOYALTYRATE=900 // Amount of seconds between each time pet loyalty is automatically reduced by 1. Takes 25 hours to deplete completely from max Added new persistent NPC property that keeps track of the difficulty of taming and controlling a pet, and exposed it as a Character JS property: .orneriness Every time a tamed pet is released or goes wild, its "orneriness" increases, making it more difficult for other players to tame, and more difficult for anyone to control. Updated CBasePetResponse::canControlPet() function to use pet control difficulty system if enabled, which checks player's animal taming/animal lore skill vs a pet's "orneriness" to determine chance of pet accepting a given pet command On successful use of pet command, increases pet loyalty by value defined in PETLOYALTYGAINONSUCCESS ini setting On failed use of pet command, decreases pet loyalty by value defined in PETLOYALTYLOSSONFAILURE ini setting Added new Character JS Method to calculate chance of a player successfully controlling the pet: .CalculateControlChance( mChar ) // Returns value between 0 and 1000 indicating chance of success Feeding a pet will now restore its loyalty to maximum Pets will now lose loyalty on hunger checks when at maximum hunger Pets that are maximum hungry will now only have a chance to go wild if loyalty has dropped to zero Added new DFN tag for creatures.dfn - TYPE - which contains a string describing the type of creature Added secure pet trading. Players who trade pets will now see a pet transfer deed appear in a secure trade window with the name and type of creature, and upon completion of the trade the associated pet will be instantly transferred to the other player Updated resource JS scripts (js/server/resource/*) to use dictionaries for all system messages Updated skill JS scripts (js/skill/*) to use dictionaries for all system messages Updated housing JS scripts (js/server/house/*) to use dictionaries for all system messages Updated item JS scripts (js/item/*) to use dictionaries for all system messages Updated magic JS scripts (js/magic/*) to use dictionaries for all system messages Updated NPC AI JS scripts (js/npc/ai/*) to use dictionaries for all system messages Updated command JS scripts (js/commands/*) to use dictionaries for all system messages, gump tooltips, etc Updated code to use dictionaries for all system messages Fixed incorrect spelling for UOX.INI setting HIDEW(H)ILEMOUNTED and updated hiding skill (js/skill/hiding.js) to actually allow/disallow hiding while mounted based on this setting Added new Character JS Method to make it easier to make one NPC initiate combat with another: .InitiateCombat( targetChar ) // Character attempts to initiate combat with target character Updated parrying portion of combat code to be in line with Pub15/pre-AoS parrying mechanics. High AR shields now absorb more damage on a successful parry, while low AR shields have a higher chance of parrying. Shields are also now more effective against archery attacks (full absorption potential) than melee attacks (half absorption potential). Updated combat damage calculations to be in line with Pub15/pre-AoS damage calculations Adjusted default value of COMBATNPCDAMAGERATE ini setting (damage divisor when target is a player) from 2 to 1 to account for these changes. Removed dictionary.UNK, and made dictionary.ZRO the default dictionary used for all unsupported languages Added dictionary support for additional languages: Portuguese, Italian, Czech Updated default dictionaries for the following languages: English, French Added default dictionaries for the following languages: German, Spanish, Portuguese, Italian, Czech (note that translations have been provided by automatic services and will contain inaccuracies!) Added new UOX.INI setting to allow specifying a default dictionary language for server, which if set will force that language for all dictionary messages, regardless of client settings: SERVERLANGUAGE=0 // Set default server dictionary language. Supported languages: 0 - None/language used by each client, 1 - English, 2 - German, 3 - Spanish, 5 - French, 6 - Portuguese, 7 - Italian, 8 - Czech Added new function in combat.cpp - AdjustArmorClassDamage() - which adjusts the damage dealt in combat based on whether armour class (AC DFN tag or .ac JS property) of weapon and armour equipped on hit location of target match up. A weapon with armour class 1 would essentially be doubly effective against armour of armour class 1. Allows setting up things like piercing weapons being better against some armor types than mace weapons, etc. Added new UOX.INI setting under [combat] to enable/disable double damage from armour class bonuses: ARMORCLASSDAMAGEBONUS=0/1 //defaults to 0)
2021-07-28 16:02:56 +08:00
*vp = INT_TO_JSVAL( loyaltyRate );
break;
}
0.99.4x Fixed an issue where the color of NPC corpse names would not always match up with the NPC's flag color Fixed a bug where the baseRange and maxRange properties of ranged weapons would not get saved to world files. These values are now saved in the format of RANGE=baseRange,maxRange Changed the way items are added to containers, to ensure that the order in which the items are displayed to the player always reflects the order in which they were added; now the most recent item added/moved in a container will always be rendered on top of older items. Made adjustments to how items are randomly added to containers; should use more of a given container gump's available area now Exposed Item property to JS engine, which contains serial of the creator of an item: .creator // contains serial of the creator of an item. If set, maker's marks will show up in the item's tooltip Fixed an issue where JS engine would lose track of script context if one script used CreateDFNItem() or SpawnNPC() functions and the new objects had events that triggered upon creation. UOX3 now restores the original script context at the tail end of these functions. Added new JS Event to allow inserting custom tooltip text for objects, which will be displayed in tooltips right after the object name. Any text returned from the event will be displayed, and the text can make use of the same HTML tags as gumps to make changes to color, font, etc. onTooltip( myObj ) // Triggers for objects right before the object's tooltip properties are sent to client Updated 'tweak and 'set commands to refresh item being modified if movable state of item changes, so the change is reflected in nearby clients Fixed an issue with NPC vendors and items bought from players not being properly removed from the vendor's "bought container" when players buy them again Ported Item Identification skill from code to JS (js/skill/itemid.js) and removed hard-coded version Implemented magic item generator in JS (js/item/magic_item.js). When this script is attached to an NPC, it has a chance to generate magic weapons, armors, wands/staffs and rings as loot on the NPC's corpse when slain. The chance of getting quality magical items increases with the fame level of the NPC in question. The types of magical items generated follows the pattern of such items as implemented in UO prior to the AoS expansion. Examples: exceedingly accurate war hammer of vanquishing substantial, accurate axe of power and Daemon's Breath silver long sword massive platemail arms of Protection metal shield of defense durable ringmail tunic of guarding All magic items have a chance to have spell effects attached (with rings/wands being guaranteed to have these), with a limited amount of charges available. For weapons, these effects activate on successful hits in combat, while for armors they activate on equip, and then periodically as long as the item is worn. Rings and wands/staffs have to be manually activated and targeted - with the exception of rings of invisibility, which activate the moment you equip them! Related scripts: js/item/magic_armor_equipeffects.js js/item/magic_weapon_accbonus.js js/item/magic_weapon_equip.js js/item/magic_weapon_spell_attack.js The magic item loot generation script has been attached to a number of different NPCs, all of which now have a chance to drop magic items as loot when defeated. A bonus magical item - the glacial staff - has also been implemented (js/item/magic_glacial_staff.js), and has a chance to drop as loot from Giant Ice Serpents! Fixed an issue with CustomTarget where the target message would not be displayed if the cursorType parameter was provided Fixed bug with 'rename command, which referenced a non-existing variable that caused a script crash Added additional object properties to 'get and 'set commands: .shouldSave // Determines if an item should be saved in worldfiles or not .baseRange // Determines the base range of a ranged weapon, less than which it becomes less effective .maxRange // Determines the max range of a ranged weapon, beyond which it cannot reach its target The feature that allows stats like Strength, Dexterity and Intelligence to provide bonuses to skill checks has been turned into a UOX.INI setting, which is disabled by default. The bonuses have also been nerfed; they will no longer contribute more to the success of a skill check than the actual skill being checked! STATSAFFECTSKILLCHECKS=0/1 // If enabled, stats can provide bonuses to skill checks based on the weighting for those stats as setup in dfndata/skills/skills.dfn Updated damage tracking code to include the type of damage that was dealt (PHYSICAl vs HEAT vs COLD, etc) Updated Character JS Method Damage() to include a new parameter that can specify the type of damage that was dealt to the character. The new parameter must always be included if other optional parameters are used. Note that updates might be required for scripts making use of this method.Updated syntax: .Damage( amount ) .Damage( amount, damageType ) .Damage( amount, damageType, attacker ) .Damage( amount, damageType, attacker, doRepsys ) Supported damageTypes: PHYSICAL = 1 LIGHT = 2 RAIN = 3 COLD = 4 HEAT = 5 LIGHTNING = 6 // magic damage POISON = 7 SNOW = 8 Updated JS Event OnDamage to include an additional parameter that describes the type of damage that was dealt. New syntax: onDamage( damaged, attacker, damageValue, damageType ) Updated JS Event OnSpellTarget to allow rejecting a spell being cast on a target by returning a value of 2 from the script Split the character priv flag for magic reflection into a temporary one (one-time magic reflection spell) and a permanent one (innate permanent reflection ability). The temporary effect is put in place by Magic Reflection spell, and is removed after a successful spell reflect. The permanent one is an innate ability of a character and is not removed even after a spell is reflected. Added new Character JS property to get/set state of a character's permanent magic reflect ability: .permanentMagicReflect // 0 = disable, 1 = enable Added special abilities/effects for the following NPCs: Acid Elementals now have a chance to damage the melee weapons of their attackers Dull Copper Elementals now explode on death Shadow Iron Elemental is immune to targeted spell damage Copper Elementals have permanent magic reflect, and reflect some physical damage back at their attacker Bronze Elementals deal passive area damage to nearby players every 5 to 10 seconds Valorite Elementals have permanent magic reflect, reflect some physical damage back at their attacker Snow/Ice Elementals deal passive area damage to nearby players every 5 to 10 seconds Lava Serpents deal passive area damage to nearby players every 5 to 10 seconds Phoenixes deal passive area damage to nearby players every 5 to 10 seconds Pixies have a chance to cast a random spell upon receiving a death blow: Bless (target) Curse (target) Explosion (target) Greater Poison (target) Greater Heal (self, prevents death) Ethereal Warriors will now resurrect dead players with positive karma Ethereal Warriors now have a chance to drain target's health, stamina or mana on hit Fire Breath special ability added to the following NPCs, with the random ability damage scaling with the NPCs current health: Hell Cat, 5 to 8 dmg at max health Fire Steed, 6 to 9 dmg at max health Hell Hounds, 8 to 11 dmg at max health Lava Lizard, 8 to 11 dmg at max health Predator Hell Cat, 9 to 14 dmg at max health Sea Serpent, 11 to 17 dmg at max health Swamp Dragon, 15 to 22 dmg at max health Armored Swamp Dragon, 15 to 22 dmg at max health Fire Gargoyle, 20 to 30 dmg at max health Deep Sea Serpent, 21 to 32 dmg at max health Serpentine Dragon, 22 to 32 dmg at max health Drake (Gray), 22 to 32 dmg at max health Drake (Red), 22 to 32 dmg at max health Nightmare, 26 to 39 dmg at max health Dark Steed, 26 to 39 dmg at max health Silver Steed, 26 to 39 dmg at max health Kraken, 39 to 59 dmg at max health Dragon (Red), 41 to 62 dmg at max health Dragon (Gray), 41 to 62 dmg at max health Shadow Wyrm, 50 to 75 dmg at max health Reptalon, 51 to 77 dmg at max health Skeletal Dragon, 52 to 77 dmg at max health Ancient Wyrm, 60 to 90 dmg at max health Update stats, skills and loot for all currently implemented NPCs Removed an ancient piece of code that prevented corpses from being generated for various elementals and blade spirits on death. This was originally put in place because these creatures had no corpses, and would replace it with a backpack instead, but these creatures now all have corpses in all client versions supported by UOX3 Updated potions script (js/item/potion.js) with updated formula for amount of hitpoints healed by healing potions, and added restrictions for using them when at full health and/or if poisoned (Dragon Slayer) Fixed a bug where creatures (and humans, if FORCENEWANIMATIONPACKET was disabled in uox.ini) would play animations with wrong frame count, causing the animations to either freeze for a few frames at the end, or get cut off a couple of frames early Implemented bonus hit chance for Archery skill, based on mention of such a bonus in Publish 5 patch notes and related UO House of Commons chat. This has been exposed as a UOX.INI setting where this bonus can be tweaked: ARCHERYHITBONUS=10 // Bonus hit chance for Archery skill added to regular hit chance in combat. Defaults to 10% Implemented optional extra delay between moving and being able to shoot with ranged weapons in combat (in addition to whatever delay is there due to speed of the ranged weapon). This is exposed as a UOX.INI setting: ARCHERYSHOOTDELAY=0.5 // Minimum delay in seconds from a player stops moving until they can start to fire their ranged weapon. Defaults to 0.5s Fixed a bug where players who never entered combat mode could fire ranged weapons while moving Updated Add-menu with some improvements for usability: Menu now directly on the Objects (previously "Shard") tab for quicker access, with a small welcome text and quick-link button for UOX3 docs Settings tab contains some (persistent, will be saved with character) options for how the Add-menu behaves, along with a few quick-access buttons to some useful commands. Available options: Option to add chosen item at specific location instead of in GM's backpack Option to add chosen item repeatedly until cancelled Option to automatically reopen Add-menu on last menu that was open when a selection is made Option to force decayable state of all added items to either off (doesn't decay), on (decays) or nothing (use item default) Option to force movable state of all added items to either off (not movable), on (movable) or nothing (use item default) Added a Home button at the bottom of the menu, that takes the user back to the front page of the Add-menu regardless of which menu page they're on Updated Character/Socket JS Method SysMessage() with an optional parameter to specify the color used to display the system message. Updated syntax: .SysMessage( "Text" ) // Display "Text" to user as a system message with default system message color from ini .SysMessage( "Text %s %s", txtArg1, txtArg2 ) // Display "Text" to player with string arguments injected into text .SysMessage( txtColor, "Text" ) // Display "Text" to user with a specified color .SysMessage( txtColor, "Text %s %s", txtArg1, txtArg2 ) // Combination of text color, text and string arguments Fixed a bug where hair/beard items could show up inside corpses Fixed a bug where items could sometimes vanish (visually) from containers when bouncing back because player was not able to pick them up Fixed a bug where players would be unable to pick up a freely movable item from a locked down container Updated handling of item bouncing on pickup to use UOX3 dictionary messages instead of hard-coded client messages Added support for new Dictionary language: dictionary.POL - Polish (SERVERLANGUAGE=8 in uox.ini, or client language 83 if SERVERLANGUAGE is set to 0) Added taming restrictions for Unicorn, Ki-Rin and Cu Sidhe (js/skill/taming.js) Added modification of some creatures stats after they've been tamed (js/skill/taming.js) Added restrictions for who can ride certain creatures (Unicorn, Ki-Rin, Cu Sidhe) Updated words of power for Meteor Swarm spell to follow the same logic as other spells using Kal (Summon): Kal Des Flam Ylem Added new Item/Character JS Methods to get/set temporary custom tags which don't persist across worldsaves (or across reconnects, for players): .GetTempTag( "tagName" ) .SetTempTag( "tagName", tagValue ) When applying HPMAX, STAMINAMAX AND MANAMAX DFN tags to new NPCs, their current HP, STAMINA and MANA properties will now be automatically updated to match Fixed a server crash caused by empty speech messages sent from certain clients Fixed a bug that prevented teleport locations in Felucca/Trammel from working properly Updated calculations in code for duration and damage of existing poison strengths (1 - Lesser, 2 - Normal, 3 - Greater, 4 - Deadly) to match with ~Publish 15 (LBR/pre-AoS), and added another poison strength for monster usage (5 - Lethal) The strength of the Poison and Poison Field spells is now based on the average of the caster's Magery and Poisoning skills, the distance from the target (Poison spell only) and the target's Resisting Spells skill. If caster is further away than 2 tiles from target, the poison strength always equals Lesser Poison, otherwise the following rules apply: If caster's combined skill is higher than 100.0, poison strength equals Greater Poison, with 5% chance of Deadly Poison (if Poison spell) or Deadly Poison (if Poison Field spell) If caster's combined skill is higher than 70.2, poison strength equals Greater Poison If caster's combined skill is higher than 30.2, poison strength equals Normal Poison If caster's combined skill is 30.2 or lower, poison strength equals Lesser Poison If target resists spell, poison strength is reduced by 1 level, unless it's already at the lowest level Fixed an issue that would would let players move faster than they should have been allowed to Fixed misc issues with Party System: Mana and Stamina should now update for Party Members when added to the party, when going in/out of range and when their stats update while in range Players who get disconnected or relog should now find themselves back in the same party they were in previously Added system messages to inform party members about updates to their party, and to let invited players know they've successfully joined a party (or rejoined, if relogging) World saves now operate on the principle of only saving changes done since the last world save. Combined with the fact that NPCs in UOX3 are only active if there are players in the same/neighbouring map regions, shard owners may expect to see a decrease in world save times ranging from ~11% to ~99%, depending on how active and how spread out their player base is. If no changes have taken place since last save, saves are virtually instantaneous!
2021-09-20 21:35:17 +08:00
case CCP_SHOULDSAVE: *vp = BOOLEAN_TO_JSVAL( gPriv->ShouldSave() ); break;
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
case CCP_PARTYLOOTABLE:
{
Party *toGet = PartyFactory::GetSingleton().Get( gPriv );
2021-06-12 07:30:23 -04:00
if( toGet == nullptr )
{
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
*vp = BOOLEAN_TO_JSVAL( false );
}
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
else
{
CPartyEntry *toScan = toGet->Find( gPriv );
2021-06-12 07:30:23 -04:00
if( toScan == nullptr )
{
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
*vp = BOOLEAN_TO_JSVAL( false );
}
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
else
{
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
*vp = BOOLEAN_TO_JSVAL( toScan->IsLootable() );
}
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
}
break;
Housing Revamp and more Updated JS SysMessage function to accept up to 10 extra, optional arguments, which can be used with dictionary messages that require additional parameters like %s or %i Added new type of house privilege in cMultiObj.cpp to keep track of friends of the multi - HOUSEPRIV_FRIEND - which is stored during worldsaves as one or more Friend=<player serial> tags in house.wsc Added new type of house privilege in cMultiObj.cpp to keep track of guests of the multi - HOUSEPRIV_GUEST - which is stored during worldsaves as one or more Guest=<player serial> tags in house.wsc When items are created for houses upon house placement, a reference to the multi's serial is now stored in the house sign's MORE property to allow easier tracking of which house a particular sign belongs to Added tracking of new, persistent properties for houses via cMultiObj.cpp/h: lockdowns, secure containers, vendors, guests, friends, owners, ban location, public status, number of visits, timestamps Added a multitude of new methods in cMultiObj.cpp/h to assist in improving the functionality of houses Added new tags for houses in house.dfn (default values applied if tag not specified): MAXSECURECONTAINERS=4 - Max amount of secure containers allowed in a multi MAXLOCKDOWNS=256 - Max amount of lockdowns allowed in a multi MAXVENDORS=10 - Max amount of vendors allowed in a multi MAXBANS=50 - Max amount of bans in a multi's ban list MAXFRIENDS=50 - Max amount of friends in a multi's friend list MAXGUESTS=50 - Max amount of guests in a multi's guest list MAXOWNERS=8 - Max amount of owners and co-owners in a multi's owner list MAXTRASHCONTAINERS=1 - Max amount of trash containers allowed in multi SCRIPT=<scriptID> - Assign a JS script-ID directly to a multi FRONTDOOR - indicates that a door is the front door of a house. Cannot be locked in public houses! INTERIORDOOR - indicates that a door is an interior door of a house. Can be locked in public houses. BANX - Location X offset for multi's ban location, if not used, will try to use SE corner of multi instead BANY - Location Y offset for multi's ban location, if not used, will try to use SE corner of multi instead Added JS Event: onHouseCommand( tSock, multiObj, cmdID ) - For handling spoken house commands via JS scripts attached to multi. Updated JS Events: onEntrance() - can now trigger both for multi being entered and/or object entering onLeaving() - can now trigger both for multi being left and/or object entering onSpeech() - can now also trigger for items (in addition to chars) with event & script attached, if UOX.INI setting ITEMSDETECTSPEECH is enabled Added JS Multi methods: .IsBoat() - Returns whether the item (or multi) is a boat .IsOwner( playerToCheck ) - Returns whether a player is the owner of a multi .IsOnOwnerList( playerToCheck ) - Returns whether a player is on the (co-)owner list of a multi .IsOnFriendList( playerToCheck ) - Returns whether a player is on the friend list of a multi .IsOnGuestList( playerToCheck ) - Returns whether a player is on the guest list of a multi .IsOnBanList( playerToCheck ) - Returns whether a player is on the ban list of a multi .AddToFriendList( playertoAdd ) - Adds player to the friend list of a multi .RemoveFromFriendList( playertoRemove ) - Removes player from the friend list of a multi .AddToGuestList( playertoAdd ) - Adds player to the guest list of a multi .RemoveFromGuestList( playertoRemove ) - Removes player from the guest list of a multi .ClearOwnerList() - Clears all entries from a multi's (co-)owner list .ClearFriendList() - Clears all entries from a multi's friend list .ClearGuestList() - Clears all entries from a multi's guest list .ClearBanList() - Clears all entries from a multi's ban list .SecureContainer( itemToSecure ) - Secures a container in a multi .UnsecureContainer( itemToUnsecure ) - Unsecures a container in a multi .IsSecureContainer( itemToCheck ) - Checks if specified item is a secure container in a multi .LockDownItem( itemToLockDown) - Locks down an item in a multi .ReleaseItem( itemToRelease ) - Releases a locked down item in a multi .KillKeys() - Deletes ALL keys associated with a multi .AddTrashCont( itemToAdd ) - Add trash container to multi's list of trash containers .RemoveTrashCont( itemToRemove ) - Remove trash container from multi's list of trash containers Added JS Item (Multi only) properties: .lockdowns - Get the number of lockdowns in a multi .maxLockdowns - Get/Set the max number of lockdowns allowed in a multi .secureContainers - Get the number of secure containers in a multi .maxSecureContainers - Get/Set the max number of secure containers allowed in a multi .trashContainers - Get the number of trash containers in a multi .maxTrashContainers - Get/Set the max number of trash containers allowed in a multi .friends - Get the number of friends in a multi's friend list .maxFriends - Get/Set the max number of friends allowed in a multi's friend list .guests - Get the number of guests in a multi's guest list .maxGuests - Get/Set the max number of guests allowed in a multi's guest list .owners - Get the number of owners in a multi's owner list .maxOwners - Get/Set the max number of owners allowed in a multi's owner list .bans - Get the number of banned players in a multi's ban list .maxBans - Get/Set the max number of banned players allowed in a multi's ban list .vendors - Get the number of player vendors in a multi .maxVendors - Get the max number of player vendors allowed in a multi .deed - Get the item sectionID for deed used to place multi .isPublic - Get/Set the private/public state of a multi .buildTimestamp - Get the timestamp for when the house was originally placed .tradeTimestamp - Get the timestamp for when the house was last traded to another player .banX - Get/Set the ban location X offset for the multi .banY - Get/Set the ban location Y offset for the multi Added JS Character properties: .multi = Get/Set the multi object the character is in .accountNum = Get the account number the character belongs to .housesOwned = Get a count of houses owned by the character .housesCoOwned = Get a count of houses co-owned by the character Updated JS cBaseObject Methods .FirstItem(), .NextItem() and .FinishedItems() to also support iterating through items in multis Updated JS multi Methods .FirstChar(), .NextChar() and .FinishedChars() to support an additional parameter to specify what kind of characters to loop through: "default" or no parameter - all characters inside the multi "owner" - players on multi's owner list "friend" - players on multi's friend list "guest" - players on multi's guest list "banned" - players on multi's ban list Added new INI tags to a new section of uox.ini called [houses] DECAYTIMERINHOUSE=3600 // Decay timer in seconds for non-locked down items inside houses PROTECTPRIVATEHOUSES=1 // Toggles whether private houses will automatically boot unauthorized visitors (1) or not (0) TRACKHOUSESPERACCOUNT=1 // Toggles whether to track (and restrict) house ownership per account (1) or per character (0) MAXHOUSESOWNABLE=1 // Specifies the max amount of houses a player can own per account/char, depending on how house ownership is tracked MAXHOUSESCOOWNABLE=10 // Specifies the max amount of houses a player can co-own per character CANOWNANDCOOWNHOUSES=1 // Toggles whether players can own and co-own houses at the same time COOWNHOUSESONSAMEACCOUNT=1 // Toggles whether characters on same account as house owner will be treated as co-owners Added new INI tags in [settings] section of uox.ini: ITEMSDETECTSPEECH=0 // If enabled, server will search for nearby items with onSpeech JS event running whenever a character speaks. Disabled by default. MAXPLAYERPACKITEMS=125 // Defines max item capacity for player (and NPC) backpacks. Defaults to 125. Moved most of the existing house functionality to JS and expanded upon it to reach feature parity with houses in regular UO around Publish 15/16, with various extras thrown in for good measure and all functionality being customizable: js/server/house/house.js (15000) - handles detection of house commands and characters entering/leaving houses js/server/house/houseSign.js (15001) - contains and handles all house-related gumps/menus and what is shown when players interact with house sign js/server/house/houseCommands.js (15002) - handles functionality of house commands and other functionality such as transfer of ownership, demolishing house, etc. js/server/house/houseDeed.js (15003) - handles initial rules that allow/disallow placement of additional houses for players All house-related menus now fully handled through JS All house commands and other functionality now fully handled through JS Removed redundant hard-coded house functionality Implemented Co-owners, friends, guests for houses, with access rules in place for entry, lockdowns, house commands, etc. Implemented Private and Public houses Implemented Secure Containers and Trash Barrels Definable max lockdowns, secure containers, player vendors, bans, friends, guests, owners, trash containers and more - per house type JS scripts can now be attached directly to houses Doors in houses can be marked as front doors or interior doors, and will be treated differently with regards to private and public houses Added new item to dfndata/items/containers/misc.dfn - [trashbarrel] Added new JS script (js/items/trashbarrel.js) with trash barrel functionality for houses. Trash barrels that are marked as secure containers are only accessible by owners, co-owners and friends of the house. Various options available at top of script. Updated js/items/axe.js to support chopping up trash barrels and house add-ons in houses owned by the player Fixed an issue with house doors being left behind after demolishing houses while their doors were open Fixed an issue where GMs could be banned from player houses Added Line of Sight checks to speech, to give players some privacy in their own homes Updated house placement code to more accurately check for other multis, dynamic and static objects when placing houses; now requires free space around each house that cannot be blocked by other houses or items that can block player movement, and disallows placement of houses on roads Updated house placement code to move characters blocking house placement to SE corner of the house Updated house placement code to disallow placing houses in guarded regions, or in dungeons Added new DFN tag for regions to enable/disable player houses in specific regions: HOUSING=0/1 Added new region (247) that covers path to Valley of Eodon in Felucca Added new region (248) that covers Valley of Eodon in Ter-Mur, with player housing disabled Added new region (249) that covers entire T2A lands, with player housing disabled Updated SPACEX and SPACEY values for all houses in dfndata/house/house.dfn to match updated house placement code Added new JS property to Regions that can be used to determine or change state of player housing in a region: .canPlaceHouse() Updated rules for usage of dye tubs to dye locked down items; now only house owners or co-owners may dye locked down items Updated rules for usage of the following locked down items in a house, which are now only usable by house owners and co-owners Dyes, Guildstone Deeds, Recall Runes (renaming), Rename Deeds, Townstone Deeds, House Deeds, Boat Models, Player Vendor Deeds, Ore, Hair Dye Updated rules for usage of the following locked down items in a house, which are now only usable by house owners, co-owners and friends: Keys, Dye Tubs, Magic Scrolls, Fireworks Wands, Magic Wands, Smithing Tools, Mining Tools, Fishing Poles Updated item lockdown rules to allow locking down (and releasing) items in a container as long as the container is locked down, and to only allow releasing a locked down container if it's empty of locked down items Updated item lockdown rules to only allow locking down movement-blocking items further than 2 tiles away from doors Updated rules for releasing items in houses - now the house owner can release any locked down items, co-owners can release items locked down by themselves or by friends, while friends can release only items locked down by themselves Added some feedback to player about why their attempted house placement failed Items added by GMs directly into multis will now decay based on the house-specific decay timer instead of the regular one Fixed an issue that could cause items to almost instantly decay after being released from lockdown in a house Placing house add-ons now properly takes into account SPACEX and SPACEY values when checking if they can fit in selected area of houses Re-added SPACEX and SPACEY values for Pentagram and Loom house add-ons House add-ons can now be converted back into house add-on deeds by chopping them with an axe Added new item type - IT_HOUSEADDON (201) - used by house add-ons placed in player houses Fixed a bug where keys would stop working after being added to a keyring, and would turn into blank keys upon release from the keyring Added visitor count for public player houses, which keeps track of how many visits a public house has received, with each player counted max 1 time every 24 hours Fixed an issue with FindPlayersInOldVisrange() where it didn't take into account that players could see buildings further away than the standard update range. This could cause players to see ghost images of buildings if they were at the "right" distance when the building was being demolished Added NODECAY tag to all signs and doors in dfndata/house/house.dfn Added FRONTDOOR or INTERIORDOOR (as appropriate) to all doors in dfndata/house/house.dfn Added BANX and BANY to specify ban location for some houses in dfndata/house/house.dfn instead of relying on finding SE corner automatically Implemented strongboxes (js/server/house/strongbox.js) for co-owners of a house, which can be placed with the house command "i wish to place a strongbox". Max capacity is 25 items Updated 'REMOVE command to take an optional parameter - itemID. If supplied, the command will remove all items with this itemID from a targeted container Fixed a bug when checking if dynamic items were blocking valid spawn locations for NPCs, some function arguments were in the wrong order! Improved code that finds valid spawn locations for items and NPCs spawned via spawn regions. As server gradually builds up lists of valid spawn locations per region over time, it will start using these lists more often, rather than always look for brand new spawn locations. Fixed a bug with CMulHandler::CheckStaticFlag() that prevented NPCs from spawning inside buildings with no static floors! Fixed an issue with repeating commands that prevented GMs from being able to cancel them when using the ClassicUO client Exposed character property .accountNum to JS engine Extended CDataList class to include a Clear() method for clearing lists Updated JS File method .Open() to support an optional, third argument - subFolderName - that defines in which sub-folder of UOX3/shared/ to store/look for a file. If no third argument is supplied, UOX3 will default to using the shared folder itself. Updated JS File method .Length() to return a value of -1 for files that don't exist Added new code function, exposed to JS engine with same parameters, which simply checks if a given tile ID has a specific flag bool CheckTileFlag( UI16 itemID, TILEFLAG flagToCheck ) Added JS function used to find the root container of an item (if any) FindRootContainer( itemSerial ) FindRootContainer( item ) Added new JS function that allows deleting files from UOX3/shared/ folder or subfolders of shared folder. If no subFolderName is provided, looks for file directly in shared folder itself. Restrictions on file- and folder-names apply. bool DeleteFile( fileName, subFolderName ) Added new JS functions for checking if a specific client or server feature is enabled. See documentation for full list of client/server features. GetClientFeature( bitNum ) // Returns true if specified client feature is enabled on server GetServerFeature( bitNum ) // Returns true if specified server feature is enabled on server Added new JS function for returning the value of almost any server setting from UOX.INI GetServerSetting( settingNameInDoubleQuotes ) Updated JS function DoesDynamicBlock() with two new parameters - checkOnlyMultis and checkOnlyNonMultis Updated JS function DoesMapBlock() with two new parameters - checkMultiPlacement and checkForRoad Fixed an issue where a LoS check would prevent players from accessing containers in their own backpack Added new functions in findfuncs.cpp to make it easier to find items near another object or location: findNearbyItems( object, distance ) findNearbyItems( x, y, worldNumber, instanceID, distance ) Added new Item property - maxItems - used by containers to determine their max item capacity Added new Item property - totalItemCount - used to get total item count in a container (including sub-containers) Added check for max item capacity when creating new items that are added to a character's backpack - items will be created below character's feet if backpack is full! Added new DFN tag for items, used by containers to determine item capacity for a given container: MAXITEMS=# // 125 is the default for all containers if not set Added new JS Item properties: .maxItems // gets/sets item capacity for a given container .totalItemCount // gets total item count in a container, including sub-containers Updated item tooltips for containers to show accurate total item count, as well as to display max item capacity Fixed a bug where picking up items from a non-locked down pile of items on the floor inside a multi could cause the remaining pile to be seen as no longer inside the multi, disallowing locking it back down and causing it to decay based on regular decay timer instead of house-specific one Updated JS command set to allow setting poison-level on items ('set poison #) and hunger-level on characters ('set hunger #) Fixed an issue with js/item/food.js that prevented poisoned food from poisoning characters when eaten Fixed an issue with js/skill/poisoning.js that prevented players from poisoning food! Updated various JS scripts and hardcoded targeting functions to disallow the targeting of locked down resources using skills and tools Updated JS Method TextMessage() to support three extra, optional parameters. Note that if one optional parameter is included, all preceding optional parameters are also required! speechTarget - What kind of target is this message intended for? 0 - Only visible for sender and receiver of message 1 - Visible to all players in range 2 - Visible to all NPCs and players in range 3 - Visible to all PCs everywhere + NPCs in range 4 - Visible to all PCs everywhere (broadcast) 5 - Only visible for the receiver of the message speechTargetSerial - The serial of the receiver of the message, used if speechTarget is 0 or 5 speechFontType - The type of font to display the text in. Defaults to normal. 0 - Bold 1 - Normal with shadow 2 - Bold with shadow 3 - Normal 4 - Gothic 5 - Italic 6 - Small, dark 7 - Colourful 8 - Runic (only works with CAPS) 9 - Small, light Added timestamp to worldsaves in console, to make it easier to see when a particular world-save was done Added info about compiler/environment displayed at the top of the UOX3 console during startup Updated dictionary files with new messages primarily related to housing
2020-11-04 02:00:37 +08:00
}
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
case CCP_PARTY:
{
// Hm Quite funny, same thing as .owner
Party *tempParty = PartyFactory::GetSingleton().Get( gPriv );
2021-06-12 07:30:23 -04:00
if( tempParty == nullptr )
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
{ // Return a JS_NULL
*vp = JSVAL_NULL;
}
else
{
// Otherwise Acquire an object
JSObject *myParty = JSEngine->AcquireObject( IUE_PARTY, tempParty, JSEngine->FindActiveRuntime( JS_GetRuntime( cx )));
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
*vp = OBJECT_TO_JSVAL( myParty );
}
Housing Revamp and more Updated JS SysMessage function to accept up to 10 extra, optional arguments, which can be used with dictionary messages that require additional parameters like %s or %i Added new type of house privilege in cMultiObj.cpp to keep track of friends of the multi - HOUSEPRIV_FRIEND - which is stored during worldsaves as one or more Friend=<player serial> tags in house.wsc Added new type of house privilege in cMultiObj.cpp to keep track of guests of the multi - HOUSEPRIV_GUEST - which is stored during worldsaves as one or more Guest=<player serial> tags in house.wsc When items are created for houses upon house placement, a reference to the multi's serial is now stored in the house sign's MORE property to allow easier tracking of which house a particular sign belongs to Added tracking of new, persistent properties for houses via cMultiObj.cpp/h: lockdowns, secure containers, vendors, guests, friends, owners, ban location, public status, number of visits, timestamps Added a multitude of new methods in cMultiObj.cpp/h to assist in improving the functionality of houses Added new tags for houses in house.dfn (default values applied if tag not specified): MAXSECURECONTAINERS=4 - Max amount of secure containers allowed in a multi MAXLOCKDOWNS=256 - Max amount of lockdowns allowed in a multi MAXVENDORS=10 - Max amount of vendors allowed in a multi MAXBANS=50 - Max amount of bans in a multi's ban list MAXFRIENDS=50 - Max amount of friends in a multi's friend list MAXGUESTS=50 - Max amount of guests in a multi's guest list MAXOWNERS=8 - Max amount of owners and co-owners in a multi's owner list MAXTRASHCONTAINERS=1 - Max amount of trash containers allowed in multi SCRIPT=<scriptID> - Assign a JS script-ID directly to a multi FRONTDOOR - indicates that a door is the front door of a house. Cannot be locked in public houses! INTERIORDOOR - indicates that a door is an interior door of a house. Can be locked in public houses. BANX - Location X offset for multi's ban location, if not used, will try to use SE corner of multi instead BANY - Location Y offset for multi's ban location, if not used, will try to use SE corner of multi instead Added JS Event: onHouseCommand( tSock, multiObj, cmdID ) - For handling spoken house commands via JS scripts attached to multi. Updated JS Events: onEntrance() - can now trigger both for multi being entered and/or object entering onLeaving() - can now trigger both for multi being left and/or object entering onSpeech() - can now also trigger for items (in addition to chars) with event & script attached, if UOX.INI setting ITEMSDETECTSPEECH is enabled Added JS Multi methods: .IsBoat() - Returns whether the item (or multi) is a boat .IsOwner( playerToCheck ) - Returns whether a player is the owner of a multi .IsOnOwnerList( playerToCheck ) - Returns whether a player is on the (co-)owner list of a multi .IsOnFriendList( playerToCheck ) - Returns whether a player is on the friend list of a multi .IsOnGuestList( playerToCheck ) - Returns whether a player is on the guest list of a multi .IsOnBanList( playerToCheck ) - Returns whether a player is on the ban list of a multi .AddToFriendList( playertoAdd ) - Adds player to the friend list of a multi .RemoveFromFriendList( playertoRemove ) - Removes player from the friend list of a multi .AddToGuestList( playertoAdd ) - Adds player to the guest list of a multi .RemoveFromGuestList( playertoRemove ) - Removes player from the guest list of a multi .ClearOwnerList() - Clears all entries from a multi's (co-)owner list .ClearFriendList() - Clears all entries from a multi's friend list .ClearGuestList() - Clears all entries from a multi's guest list .ClearBanList() - Clears all entries from a multi's ban list .SecureContainer( itemToSecure ) - Secures a container in a multi .UnsecureContainer( itemToUnsecure ) - Unsecures a container in a multi .IsSecureContainer( itemToCheck ) - Checks if specified item is a secure container in a multi .LockDownItem( itemToLockDown) - Locks down an item in a multi .ReleaseItem( itemToRelease ) - Releases a locked down item in a multi .KillKeys() - Deletes ALL keys associated with a multi .AddTrashCont( itemToAdd ) - Add trash container to multi's list of trash containers .RemoveTrashCont( itemToRemove ) - Remove trash container from multi's list of trash containers Added JS Item (Multi only) properties: .lockdowns - Get the number of lockdowns in a multi .maxLockdowns - Get/Set the max number of lockdowns allowed in a multi .secureContainers - Get the number of secure containers in a multi .maxSecureContainers - Get/Set the max number of secure containers allowed in a multi .trashContainers - Get the number of trash containers in a multi .maxTrashContainers - Get/Set the max number of trash containers allowed in a multi .friends - Get the number of friends in a multi's friend list .maxFriends - Get/Set the max number of friends allowed in a multi's friend list .guests - Get the number of guests in a multi's guest list .maxGuests - Get/Set the max number of guests allowed in a multi's guest list .owners - Get the number of owners in a multi's owner list .maxOwners - Get/Set the max number of owners allowed in a multi's owner list .bans - Get the number of banned players in a multi's ban list .maxBans - Get/Set the max number of banned players allowed in a multi's ban list .vendors - Get the number of player vendors in a multi .maxVendors - Get the max number of player vendors allowed in a multi .deed - Get the item sectionID for deed used to place multi .isPublic - Get/Set the private/public state of a multi .buildTimestamp - Get the timestamp for when the house was originally placed .tradeTimestamp - Get the timestamp for when the house was last traded to another player .banX - Get/Set the ban location X offset for the multi .banY - Get/Set the ban location Y offset for the multi Added JS Character properties: .multi = Get/Set the multi object the character is in .accountNum = Get the account number the character belongs to .housesOwned = Get a count of houses owned by the character .housesCoOwned = Get a count of houses co-owned by the character Updated JS cBaseObject Methods .FirstItem(), .NextItem() and .FinishedItems() to also support iterating through items in multis Updated JS multi Methods .FirstChar(), .NextChar() and .FinishedChars() to support an additional parameter to specify what kind of characters to loop through: "default" or no parameter - all characters inside the multi "owner" - players on multi's owner list "friend" - players on multi's friend list "guest" - players on multi's guest list "banned" - players on multi's ban list Added new INI tags to a new section of uox.ini called [houses] DECAYTIMERINHOUSE=3600 // Decay timer in seconds for non-locked down items inside houses PROTECTPRIVATEHOUSES=1 // Toggles whether private houses will automatically boot unauthorized visitors (1) or not (0) TRACKHOUSESPERACCOUNT=1 // Toggles whether to track (and restrict) house ownership per account (1) or per character (0) MAXHOUSESOWNABLE=1 // Specifies the max amount of houses a player can own per account/char, depending on how house ownership is tracked MAXHOUSESCOOWNABLE=10 // Specifies the max amount of houses a player can co-own per character CANOWNANDCOOWNHOUSES=1 // Toggles whether players can own and co-own houses at the same time COOWNHOUSESONSAMEACCOUNT=1 // Toggles whether characters on same account as house owner will be treated as co-owners Added new INI tags in [settings] section of uox.ini: ITEMSDETECTSPEECH=0 // If enabled, server will search for nearby items with onSpeech JS event running whenever a character speaks. Disabled by default. MAXPLAYERPACKITEMS=125 // Defines max item capacity for player (and NPC) backpacks. Defaults to 125. Moved most of the existing house functionality to JS and expanded upon it to reach feature parity with houses in regular UO around Publish 15/16, with various extras thrown in for good measure and all functionality being customizable: js/server/house/house.js (15000) - handles detection of house commands and characters entering/leaving houses js/server/house/houseSign.js (15001) - contains and handles all house-related gumps/menus and what is shown when players interact with house sign js/server/house/houseCommands.js (15002) - handles functionality of house commands and other functionality such as transfer of ownership, demolishing house, etc. js/server/house/houseDeed.js (15003) - handles initial rules that allow/disallow placement of additional houses for players All house-related menus now fully handled through JS All house commands and other functionality now fully handled through JS Removed redundant hard-coded house functionality Implemented Co-owners, friends, guests for houses, with access rules in place for entry, lockdowns, house commands, etc. Implemented Private and Public houses Implemented Secure Containers and Trash Barrels Definable max lockdowns, secure containers, player vendors, bans, friends, guests, owners, trash containers and more - per house type JS scripts can now be attached directly to houses Doors in houses can be marked as front doors or interior doors, and will be treated differently with regards to private and public houses Added new item to dfndata/items/containers/misc.dfn - [trashbarrel] Added new JS script (js/items/trashbarrel.js) with trash barrel functionality for houses. Trash barrels that are marked as secure containers are only accessible by owners, co-owners and friends of the house. Various options available at top of script. Updated js/items/axe.js to support chopping up trash barrels and house add-ons in houses owned by the player Fixed an issue with house doors being left behind after demolishing houses while their doors were open Fixed an issue where GMs could be banned from player houses Added Line of Sight checks to speech, to give players some privacy in their own homes Updated house placement code to more accurately check for other multis, dynamic and static objects when placing houses; now requires free space around each house that cannot be blocked by other houses or items that can block player movement, and disallows placement of houses on roads Updated house placement code to move characters blocking house placement to SE corner of the house Updated house placement code to disallow placing houses in guarded regions, or in dungeons Added new DFN tag for regions to enable/disable player houses in specific regions: HOUSING=0/1 Added new region (247) that covers path to Valley of Eodon in Felucca Added new region (248) that covers Valley of Eodon in Ter-Mur, with player housing disabled Added new region (249) that covers entire T2A lands, with player housing disabled Updated SPACEX and SPACEY values for all houses in dfndata/house/house.dfn to match updated house placement code Added new JS property to Regions that can be used to determine or change state of player housing in a region: .canPlaceHouse() Updated rules for usage of dye tubs to dye locked down items; now only house owners or co-owners may dye locked down items Updated rules for usage of the following locked down items in a house, which are now only usable by house owners and co-owners Dyes, Guildstone Deeds, Recall Runes (renaming), Rename Deeds, Townstone Deeds, House Deeds, Boat Models, Player Vendor Deeds, Ore, Hair Dye Updated rules for usage of the following locked down items in a house, which are now only usable by house owners, co-owners and friends: Keys, Dye Tubs, Magic Scrolls, Fireworks Wands, Magic Wands, Smithing Tools, Mining Tools, Fishing Poles Updated item lockdown rules to allow locking down (and releasing) items in a container as long as the container is locked down, and to only allow releasing a locked down container if it's empty of locked down items Updated item lockdown rules to only allow locking down movement-blocking items further than 2 tiles away from doors Updated rules for releasing items in houses - now the house owner can release any locked down items, co-owners can release items locked down by themselves or by friends, while friends can release only items locked down by themselves Added some feedback to player about why their attempted house placement failed Items added by GMs directly into multis will now decay based on the house-specific decay timer instead of the regular one Fixed an issue that could cause items to almost instantly decay after being released from lockdown in a house Placing house add-ons now properly takes into account SPACEX and SPACEY values when checking if they can fit in selected area of houses Re-added SPACEX and SPACEY values for Pentagram and Loom house add-ons House add-ons can now be converted back into house add-on deeds by chopping them with an axe Added new item type - IT_HOUSEADDON (201) - used by house add-ons placed in player houses Fixed a bug where keys would stop working after being added to a keyring, and would turn into blank keys upon release from the keyring Added visitor count for public player houses, which keeps track of how many visits a public house has received, with each player counted max 1 time every 24 hours Fixed an issue with FindPlayersInOldVisrange() where it didn't take into account that players could see buildings further away than the standard update range. This could cause players to see ghost images of buildings if they were at the "right" distance when the building was being demolished Added NODECAY tag to all signs and doors in dfndata/house/house.dfn Added FRONTDOOR or INTERIORDOOR (as appropriate) to all doors in dfndata/house/house.dfn Added BANX and BANY to specify ban location for some houses in dfndata/house/house.dfn instead of relying on finding SE corner automatically Implemented strongboxes (js/server/house/strongbox.js) for co-owners of a house, which can be placed with the house command "i wish to place a strongbox". Max capacity is 25 items Updated 'REMOVE command to take an optional parameter - itemID. If supplied, the command will remove all items with this itemID from a targeted container Fixed a bug when checking if dynamic items were blocking valid spawn locations for NPCs, some function arguments were in the wrong order! Improved code that finds valid spawn locations for items and NPCs spawned via spawn regions. As server gradually builds up lists of valid spawn locations per region over time, it will start using these lists more often, rather than always look for brand new spawn locations. Fixed a bug with CMulHandler::CheckStaticFlag() that prevented NPCs from spawning inside buildings with no static floors! Fixed an issue with repeating commands that prevented GMs from being able to cancel them when using the ClassicUO client Exposed character property .accountNum to JS engine Extended CDataList class to include a Clear() method for clearing lists Updated JS File method .Open() to support an optional, third argument - subFolderName - that defines in which sub-folder of UOX3/shared/ to store/look for a file. If no third argument is supplied, UOX3 will default to using the shared folder itself. Updated JS File method .Length() to return a value of -1 for files that don't exist Added new code function, exposed to JS engine with same parameters, which simply checks if a given tile ID has a specific flag bool CheckTileFlag( UI16 itemID, TILEFLAG flagToCheck ) Added JS function used to find the root container of an item (if any) FindRootContainer( itemSerial ) FindRootContainer( item ) Added new JS function that allows deleting files from UOX3/shared/ folder or subfolders of shared folder. If no subFolderName is provided, looks for file directly in shared folder itself. Restrictions on file- and folder-names apply. bool DeleteFile( fileName, subFolderName ) Added new JS functions for checking if a specific client or server feature is enabled. See documentation for full list of client/server features. GetClientFeature( bitNum ) // Returns true if specified client feature is enabled on server GetServerFeature( bitNum ) // Returns true if specified server feature is enabled on server Added new JS function for returning the value of almost any server setting from UOX.INI GetServerSetting( settingNameInDoubleQuotes ) Updated JS function DoesDynamicBlock() with two new parameters - checkOnlyMultis and checkOnlyNonMultis Updated JS function DoesMapBlock() with two new parameters - checkMultiPlacement and checkForRoad Fixed an issue where a LoS check would prevent players from accessing containers in their own backpack Added new functions in findfuncs.cpp to make it easier to find items near another object or location: findNearbyItems( object, distance ) findNearbyItems( x, y, worldNumber, instanceID, distance ) Added new Item property - maxItems - used by containers to determine their max item capacity Added new Item property - totalItemCount - used to get total item count in a container (including sub-containers) Added check for max item capacity when creating new items that are added to a character's backpack - items will be created below character's feet if backpack is full! Added new DFN tag for items, used by containers to determine item capacity for a given container: MAXITEMS=# // 125 is the default for all containers if not set Added new JS Item properties: .maxItems // gets/sets item capacity for a given container .totalItemCount // gets total item count in a container, including sub-containers Updated item tooltips for containers to show accurate total item count, as well as to display max item capacity Fixed a bug where picking up items from a non-locked down pile of items on the floor inside a multi could cause the remaining pile to be seen as no longer inside the multi, disallowing locking it back down and causing it to decay based on regular decay timer instead of house-specific one Updated JS command set to allow setting poison-level on items ('set poison #) and hunger-level on characters ('set hunger #) Fixed an issue with js/item/food.js that prevented poisoned food from poisoning characters when eaten Fixed an issue with js/skill/poisoning.js that prevented players from poisoning food! Updated various JS scripts and hardcoded targeting functions to disallow the targeting of locked down resources using skills and tools Updated JS Method TextMessage() to support three extra, optional parameters. Note that if one optional parameter is included, all preceding optional parameters are also required! speechTarget - What kind of target is this message intended for? 0 - Only visible for sender and receiver of message 1 - Visible to all players in range 2 - Visible to all NPCs and players in range 3 - Visible to all PCs everywhere + NPCs in range 4 - Visible to all PCs everywhere (broadcast) 5 - Only visible for the receiver of the message speechTargetSerial - The serial of the receiver of the message, used if speechTarget is 0 or 5 speechFontType - The type of font to display the text in. Defaults to normal. 0 - Bold 1 - Normal with shadow 2 - Bold with shadow 3 - Normal 4 - Gothic 5 - Italic 6 - Small, dark 7 - Colourful 8 - Runic (only works with CAPS) 9 - Small, light Added timestamp to worldsaves in console, to make it easier to see when a particular world-save was done Added info about compiler/environment displayed at the top of the UOX3 console during startup Updated dictionary files with new messages primarily related to housing
2020-11-04 02:00:37 +08:00
break;
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
}
Housing Revamp and more Updated JS SysMessage function to accept up to 10 extra, optional arguments, which can be used with dictionary messages that require additional parameters like %s or %i Added new type of house privilege in cMultiObj.cpp to keep track of friends of the multi - HOUSEPRIV_FRIEND - which is stored during worldsaves as one or more Friend=<player serial> tags in house.wsc Added new type of house privilege in cMultiObj.cpp to keep track of guests of the multi - HOUSEPRIV_GUEST - which is stored during worldsaves as one or more Guest=<player serial> tags in house.wsc When items are created for houses upon house placement, a reference to the multi's serial is now stored in the house sign's MORE property to allow easier tracking of which house a particular sign belongs to Added tracking of new, persistent properties for houses via cMultiObj.cpp/h: lockdowns, secure containers, vendors, guests, friends, owners, ban location, public status, number of visits, timestamps Added a multitude of new methods in cMultiObj.cpp/h to assist in improving the functionality of houses Added new tags for houses in house.dfn (default values applied if tag not specified): MAXSECURECONTAINERS=4 - Max amount of secure containers allowed in a multi MAXLOCKDOWNS=256 - Max amount of lockdowns allowed in a multi MAXVENDORS=10 - Max amount of vendors allowed in a multi MAXBANS=50 - Max amount of bans in a multi's ban list MAXFRIENDS=50 - Max amount of friends in a multi's friend list MAXGUESTS=50 - Max amount of guests in a multi's guest list MAXOWNERS=8 - Max amount of owners and co-owners in a multi's owner list MAXTRASHCONTAINERS=1 - Max amount of trash containers allowed in multi SCRIPT=<scriptID> - Assign a JS script-ID directly to a multi FRONTDOOR - indicates that a door is the front door of a house. Cannot be locked in public houses! INTERIORDOOR - indicates that a door is an interior door of a house. Can be locked in public houses. BANX - Location X offset for multi's ban location, if not used, will try to use SE corner of multi instead BANY - Location Y offset for multi's ban location, if not used, will try to use SE corner of multi instead Added JS Event: onHouseCommand( tSock, multiObj, cmdID ) - For handling spoken house commands via JS scripts attached to multi. Updated JS Events: onEntrance() - can now trigger both for multi being entered and/or object entering onLeaving() - can now trigger both for multi being left and/or object entering onSpeech() - can now also trigger for items (in addition to chars) with event & script attached, if UOX.INI setting ITEMSDETECTSPEECH is enabled Added JS Multi methods: .IsBoat() - Returns whether the item (or multi) is a boat .IsOwner( playerToCheck ) - Returns whether a player is the owner of a multi .IsOnOwnerList( playerToCheck ) - Returns whether a player is on the (co-)owner list of a multi .IsOnFriendList( playerToCheck ) - Returns whether a player is on the friend list of a multi .IsOnGuestList( playerToCheck ) - Returns whether a player is on the guest list of a multi .IsOnBanList( playerToCheck ) - Returns whether a player is on the ban list of a multi .AddToFriendList( playertoAdd ) - Adds player to the friend list of a multi .RemoveFromFriendList( playertoRemove ) - Removes player from the friend list of a multi .AddToGuestList( playertoAdd ) - Adds player to the guest list of a multi .RemoveFromGuestList( playertoRemove ) - Removes player from the guest list of a multi .ClearOwnerList() - Clears all entries from a multi's (co-)owner list .ClearFriendList() - Clears all entries from a multi's friend list .ClearGuestList() - Clears all entries from a multi's guest list .ClearBanList() - Clears all entries from a multi's ban list .SecureContainer( itemToSecure ) - Secures a container in a multi .UnsecureContainer( itemToUnsecure ) - Unsecures a container in a multi .IsSecureContainer( itemToCheck ) - Checks if specified item is a secure container in a multi .LockDownItem( itemToLockDown) - Locks down an item in a multi .ReleaseItem( itemToRelease ) - Releases a locked down item in a multi .KillKeys() - Deletes ALL keys associated with a multi .AddTrashCont( itemToAdd ) - Add trash container to multi's list of trash containers .RemoveTrashCont( itemToRemove ) - Remove trash container from multi's list of trash containers Added JS Item (Multi only) properties: .lockdowns - Get the number of lockdowns in a multi .maxLockdowns - Get/Set the max number of lockdowns allowed in a multi .secureContainers - Get the number of secure containers in a multi .maxSecureContainers - Get/Set the max number of secure containers allowed in a multi .trashContainers - Get the number of trash containers in a multi .maxTrashContainers - Get/Set the max number of trash containers allowed in a multi .friends - Get the number of friends in a multi's friend list .maxFriends - Get/Set the max number of friends allowed in a multi's friend list .guests - Get the number of guests in a multi's guest list .maxGuests - Get/Set the max number of guests allowed in a multi's guest list .owners - Get the number of owners in a multi's owner list .maxOwners - Get/Set the max number of owners allowed in a multi's owner list .bans - Get the number of banned players in a multi's ban list .maxBans - Get/Set the max number of banned players allowed in a multi's ban list .vendors - Get the number of player vendors in a multi .maxVendors - Get the max number of player vendors allowed in a multi .deed - Get the item sectionID for deed used to place multi .isPublic - Get/Set the private/public state of a multi .buildTimestamp - Get the timestamp for when the house was originally placed .tradeTimestamp - Get the timestamp for when the house was last traded to another player .banX - Get/Set the ban location X offset for the multi .banY - Get/Set the ban location Y offset for the multi Added JS Character properties: .multi = Get/Set the multi object the character is in .accountNum = Get the account number the character belongs to .housesOwned = Get a count of houses owned by the character .housesCoOwned = Get a count of houses co-owned by the character Updated JS cBaseObject Methods .FirstItem(), .NextItem() and .FinishedItems() to also support iterating through items in multis Updated JS multi Methods .FirstChar(), .NextChar() and .FinishedChars() to support an additional parameter to specify what kind of characters to loop through: "default" or no parameter - all characters inside the multi "owner" - players on multi's owner list "friend" - players on multi's friend list "guest" - players on multi's guest list "banned" - players on multi's ban list Added new INI tags to a new section of uox.ini called [houses] DECAYTIMERINHOUSE=3600 // Decay timer in seconds for non-locked down items inside houses PROTECTPRIVATEHOUSES=1 // Toggles whether private houses will automatically boot unauthorized visitors (1) or not (0) TRACKHOUSESPERACCOUNT=1 // Toggles whether to track (and restrict) house ownership per account (1) or per character (0) MAXHOUSESOWNABLE=1 // Specifies the max amount of houses a player can own per account/char, depending on how house ownership is tracked MAXHOUSESCOOWNABLE=10 // Specifies the max amount of houses a player can co-own per character CANOWNANDCOOWNHOUSES=1 // Toggles whether players can own and co-own houses at the same time COOWNHOUSESONSAMEACCOUNT=1 // Toggles whether characters on same account as house owner will be treated as co-owners Added new INI tags in [settings] section of uox.ini: ITEMSDETECTSPEECH=0 // If enabled, server will search for nearby items with onSpeech JS event running whenever a character speaks. Disabled by default. MAXPLAYERPACKITEMS=125 // Defines max item capacity for player (and NPC) backpacks. Defaults to 125. Moved most of the existing house functionality to JS and expanded upon it to reach feature parity with houses in regular UO around Publish 15/16, with various extras thrown in for good measure and all functionality being customizable: js/server/house/house.js (15000) - handles detection of house commands and characters entering/leaving houses js/server/house/houseSign.js (15001) - contains and handles all house-related gumps/menus and what is shown when players interact with house sign js/server/house/houseCommands.js (15002) - handles functionality of house commands and other functionality such as transfer of ownership, demolishing house, etc. js/server/house/houseDeed.js (15003) - handles initial rules that allow/disallow placement of additional houses for players All house-related menus now fully handled through JS All house commands and other functionality now fully handled through JS Removed redundant hard-coded house functionality Implemented Co-owners, friends, guests for houses, with access rules in place for entry, lockdowns, house commands, etc. Implemented Private and Public houses Implemented Secure Containers and Trash Barrels Definable max lockdowns, secure containers, player vendors, bans, friends, guests, owners, trash containers and more - per house type JS scripts can now be attached directly to houses Doors in houses can be marked as front doors or interior doors, and will be treated differently with regards to private and public houses Added new item to dfndata/items/containers/misc.dfn - [trashbarrel] Added new JS script (js/items/trashbarrel.js) with trash barrel functionality for houses. Trash barrels that are marked as secure containers are only accessible by owners, co-owners and friends of the house. Various options available at top of script. Updated js/items/axe.js to support chopping up trash barrels and house add-ons in houses owned by the player Fixed an issue with house doors being left behind after demolishing houses while their doors were open Fixed an issue where GMs could be banned from player houses Added Line of Sight checks to speech, to give players some privacy in their own homes Updated house placement code to more accurately check for other multis, dynamic and static objects when placing houses; now requires free space around each house that cannot be blocked by other houses or items that can block player movement, and disallows placement of houses on roads Updated house placement code to move characters blocking house placement to SE corner of the house Updated house placement code to disallow placing houses in guarded regions, or in dungeons Added new DFN tag for regions to enable/disable player houses in specific regions: HOUSING=0/1 Added new region (247) that covers path to Valley of Eodon in Felucca Added new region (248) that covers Valley of Eodon in Ter-Mur, with player housing disabled Added new region (249) that covers entire T2A lands, with player housing disabled Updated SPACEX and SPACEY values for all houses in dfndata/house/house.dfn to match updated house placement code Added new JS property to Regions that can be used to determine or change state of player housing in a region: .canPlaceHouse() Updated rules for usage of dye tubs to dye locked down items; now only house owners or co-owners may dye locked down items Updated rules for usage of the following locked down items in a house, which are now only usable by house owners and co-owners Dyes, Guildstone Deeds, Recall Runes (renaming), Rename Deeds, Townstone Deeds, House Deeds, Boat Models, Player Vendor Deeds, Ore, Hair Dye Updated rules for usage of the following locked down items in a house, which are now only usable by house owners, co-owners and friends: Keys, Dye Tubs, Magic Scrolls, Fireworks Wands, Magic Wands, Smithing Tools, Mining Tools, Fishing Poles Updated item lockdown rules to allow locking down (and releasing) items in a container as long as the container is locked down, and to only allow releasing a locked down container if it's empty of locked down items Updated item lockdown rules to only allow locking down movement-blocking items further than 2 tiles away from doors Updated rules for releasing items in houses - now the house owner can release any locked down items, co-owners can release items locked down by themselves or by friends, while friends can release only items locked down by themselves Added some feedback to player about why their attempted house placement failed Items added by GMs directly into multis will now decay based on the house-specific decay timer instead of the regular one Fixed an issue that could cause items to almost instantly decay after being released from lockdown in a house Placing house add-ons now properly takes into account SPACEX and SPACEY values when checking if they can fit in selected area of houses Re-added SPACEX and SPACEY values for Pentagram and Loom house add-ons House add-ons can now be converted back into house add-on deeds by chopping them with an axe Added new item type - IT_HOUSEADDON (201) - used by house add-ons placed in player houses Fixed a bug where keys would stop working after being added to a keyring, and would turn into blank keys upon release from the keyring Added visitor count for public player houses, which keeps track of how many visits a public house has received, with each player counted max 1 time every 24 hours Fixed an issue with FindPlayersInOldVisrange() where it didn't take into account that players could see buildings further away than the standard update range. This could cause players to see ghost images of buildings if they were at the "right" distance when the building was being demolished Added NODECAY tag to all signs and doors in dfndata/house/house.dfn Added FRONTDOOR or INTERIORDOOR (as appropriate) to all doors in dfndata/house/house.dfn Added BANX and BANY to specify ban location for some houses in dfndata/house/house.dfn instead of relying on finding SE corner automatically Implemented strongboxes (js/server/house/strongbox.js) for co-owners of a house, which can be placed with the house command "i wish to place a strongbox". Max capacity is 25 items Updated 'REMOVE command to take an optional parameter - itemID. If supplied, the command will remove all items with this itemID from a targeted container Fixed a bug when checking if dynamic items were blocking valid spawn locations for NPCs, some function arguments were in the wrong order! Improved code that finds valid spawn locations for items and NPCs spawned via spawn regions. As server gradually builds up lists of valid spawn locations per region over time, it will start using these lists more often, rather than always look for brand new spawn locations. Fixed a bug with CMulHandler::CheckStaticFlag() that prevented NPCs from spawning inside buildings with no static floors! Fixed an issue with repeating commands that prevented GMs from being able to cancel them when using the ClassicUO client Exposed character property .accountNum to JS engine Extended CDataList class to include a Clear() method for clearing lists Updated JS File method .Open() to support an optional, third argument - subFolderName - that defines in which sub-folder of UOX3/shared/ to store/look for a file. If no third argument is supplied, UOX3 will default to using the shared folder itself. Updated JS File method .Length() to return a value of -1 for files that don't exist Added new code function, exposed to JS engine with same parameters, which simply checks if a given tile ID has a specific flag bool CheckTileFlag( UI16 itemID, TILEFLAG flagToCheck ) Added JS function used to find the root container of an item (if any) FindRootContainer( itemSerial ) FindRootContainer( item ) Added new JS function that allows deleting files from UOX3/shared/ folder or subfolders of shared folder. If no subFolderName is provided, looks for file directly in shared folder itself. Restrictions on file- and folder-names apply. bool DeleteFile( fileName, subFolderName ) Added new JS functions for checking if a specific client or server feature is enabled. See documentation for full list of client/server features. GetClientFeature( bitNum ) // Returns true if specified client feature is enabled on server GetServerFeature( bitNum ) // Returns true if specified server feature is enabled on server Added new JS function for returning the value of almost any server setting from UOX.INI GetServerSetting( settingNameInDoubleQuotes ) Updated JS function DoesDynamicBlock() with two new parameters - checkOnlyMultis and checkOnlyNonMultis Updated JS function DoesMapBlock() with two new parameters - checkMultiPlacement and checkForRoad Fixed an issue where a LoS check would prevent players from accessing containers in their own backpack Added new functions in findfuncs.cpp to make it easier to find items near another object or location: findNearbyItems( object, distance ) findNearbyItems( x, y, worldNumber, instanceID, distance ) Added new Item property - maxItems - used by containers to determine their max item capacity Added new Item property - totalItemCount - used to get total item count in a container (including sub-containers) Added check for max item capacity when creating new items that are added to a character's backpack - items will be created below character's feet if backpack is full! Added new DFN tag for items, used by containers to determine item capacity for a given container: MAXITEMS=# // 125 is the default for all containers if not set Added new JS Item properties: .maxItems // gets/sets item capacity for a given container .totalItemCount // gets total item count in a container, including sub-containers Updated item tooltips for containers to show accurate total item count, as well as to display max item capacity Fixed a bug where picking up items from a non-locked down pile of items on the floor inside a multi could cause the remaining pile to be seen as no longer inside the multi, disallowing locking it back down and causing it to decay based on regular decay timer instead of house-specific one Updated JS command set to allow setting poison-level on items ('set poison #) and hunger-level on characters ('set hunger #) Fixed an issue with js/item/food.js that prevented poisoned food from poisoning characters when eaten Fixed an issue with js/skill/poisoning.js that prevented players from poisoning food! Updated various JS scripts and hardcoded targeting functions to disallow the targeting of locked down resources using skills and tools Updated JS Method TextMessage() to support three extra, optional parameters. Note that if one optional parameter is included, all preceding optional parameters are also required! speechTarget - What kind of target is this message intended for? 0 - Only visible for sender and receiver of message 1 - Visible to all players in range 2 - Visible to all NPCs and players in range 3 - Visible to all PCs everywhere + NPCs in range 4 - Visible to all PCs everywhere (broadcast) 5 - Only visible for the receiver of the message speechTargetSerial - The serial of the receiver of the message, used if speechTarget is 0 or 5 speechFontType - The type of font to display the text in. Defaults to normal. 0 - Bold 1 - Normal with shadow 2 - Bold with shadow 3 - Normal 4 - Gothic 5 - Italic 6 - Small, dark 7 - Colourful 8 - Runic (only works with CAPS) 9 - Small, light Added timestamp to worldsaves in console, to make it easier to see when a particular world-save was done Added info about compiler/environment displayed at the top of the UOX3 console during startup Updated dictionary files with new messages primarily related to housing
2020-11-04 02:00:37 +08:00
case CCP_MULTI:
CMultiObj *multi;
multi = gPriv->GetMultiObj();
if( !ValidateObject( multi ))
{
Housing Revamp and more Updated JS SysMessage function to accept up to 10 extra, optional arguments, which can be used with dictionary messages that require additional parameters like %s or %i Added new type of house privilege in cMultiObj.cpp to keep track of friends of the multi - HOUSEPRIV_FRIEND - which is stored during worldsaves as one or more Friend=<player serial> tags in house.wsc Added new type of house privilege in cMultiObj.cpp to keep track of guests of the multi - HOUSEPRIV_GUEST - which is stored during worldsaves as one or more Guest=<player serial> tags in house.wsc When items are created for houses upon house placement, a reference to the multi's serial is now stored in the house sign's MORE property to allow easier tracking of which house a particular sign belongs to Added tracking of new, persistent properties for houses via cMultiObj.cpp/h: lockdowns, secure containers, vendors, guests, friends, owners, ban location, public status, number of visits, timestamps Added a multitude of new methods in cMultiObj.cpp/h to assist in improving the functionality of houses Added new tags for houses in house.dfn (default values applied if tag not specified): MAXSECURECONTAINERS=4 - Max amount of secure containers allowed in a multi MAXLOCKDOWNS=256 - Max amount of lockdowns allowed in a multi MAXVENDORS=10 - Max amount of vendors allowed in a multi MAXBANS=50 - Max amount of bans in a multi's ban list MAXFRIENDS=50 - Max amount of friends in a multi's friend list MAXGUESTS=50 - Max amount of guests in a multi's guest list MAXOWNERS=8 - Max amount of owners and co-owners in a multi's owner list MAXTRASHCONTAINERS=1 - Max amount of trash containers allowed in multi SCRIPT=<scriptID> - Assign a JS script-ID directly to a multi FRONTDOOR - indicates that a door is the front door of a house. Cannot be locked in public houses! INTERIORDOOR - indicates that a door is an interior door of a house. Can be locked in public houses. BANX - Location X offset for multi's ban location, if not used, will try to use SE corner of multi instead BANY - Location Y offset for multi's ban location, if not used, will try to use SE corner of multi instead Added JS Event: onHouseCommand( tSock, multiObj, cmdID ) - For handling spoken house commands via JS scripts attached to multi. Updated JS Events: onEntrance() - can now trigger both for multi being entered and/or object entering onLeaving() - can now trigger both for multi being left and/or object entering onSpeech() - can now also trigger for items (in addition to chars) with event & script attached, if UOX.INI setting ITEMSDETECTSPEECH is enabled Added JS Multi methods: .IsBoat() - Returns whether the item (or multi) is a boat .IsOwner( playerToCheck ) - Returns whether a player is the owner of a multi .IsOnOwnerList( playerToCheck ) - Returns whether a player is on the (co-)owner list of a multi .IsOnFriendList( playerToCheck ) - Returns whether a player is on the friend list of a multi .IsOnGuestList( playerToCheck ) - Returns whether a player is on the guest list of a multi .IsOnBanList( playerToCheck ) - Returns whether a player is on the ban list of a multi .AddToFriendList( playertoAdd ) - Adds player to the friend list of a multi .RemoveFromFriendList( playertoRemove ) - Removes player from the friend list of a multi .AddToGuestList( playertoAdd ) - Adds player to the guest list of a multi .RemoveFromGuestList( playertoRemove ) - Removes player from the guest list of a multi .ClearOwnerList() - Clears all entries from a multi's (co-)owner list .ClearFriendList() - Clears all entries from a multi's friend list .ClearGuestList() - Clears all entries from a multi's guest list .ClearBanList() - Clears all entries from a multi's ban list .SecureContainer( itemToSecure ) - Secures a container in a multi .UnsecureContainer( itemToUnsecure ) - Unsecures a container in a multi .IsSecureContainer( itemToCheck ) - Checks if specified item is a secure container in a multi .LockDownItem( itemToLockDown) - Locks down an item in a multi .ReleaseItem( itemToRelease ) - Releases a locked down item in a multi .KillKeys() - Deletes ALL keys associated with a multi .AddTrashCont( itemToAdd ) - Add trash container to multi's list of trash containers .RemoveTrashCont( itemToRemove ) - Remove trash container from multi's list of trash containers Added JS Item (Multi only) properties: .lockdowns - Get the number of lockdowns in a multi .maxLockdowns - Get/Set the max number of lockdowns allowed in a multi .secureContainers - Get the number of secure containers in a multi .maxSecureContainers - Get/Set the max number of secure containers allowed in a multi .trashContainers - Get the number of trash containers in a multi .maxTrashContainers - Get/Set the max number of trash containers allowed in a multi .friends - Get the number of friends in a multi's friend list .maxFriends - Get/Set the max number of friends allowed in a multi's friend list .guests - Get the number of guests in a multi's guest list .maxGuests - Get/Set the max number of guests allowed in a multi's guest list .owners - Get the number of owners in a multi's owner list .maxOwners - Get/Set the max number of owners allowed in a multi's owner list .bans - Get the number of banned players in a multi's ban list .maxBans - Get/Set the max number of banned players allowed in a multi's ban list .vendors - Get the number of player vendors in a multi .maxVendors - Get the max number of player vendors allowed in a multi .deed - Get the item sectionID for deed used to place multi .isPublic - Get/Set the private/public state of a multi .buildTimestamp - Get the timestamp for when the house was originally placed .tradeTimestamp - Get the timestamp for when the house was last traded to another player .banX - Get/Set the ban location X offset for the multi .banY - Get/Set the ban location Y offset for the multi Added JS Character properties: .multi = Get/Set the multi object the character is in .accountNum = Get the account number the character belongs to .housesOwned = Get a count of houses owned by the character .housesCoOwned = Get a count of houses co-owned by the character Updated JS cBaseObject Methods .FirstItem(), .NextItem() and .FinishedItems() to also support iterating through items in multis Updated JS multi Methods .FirstChar(), .NextChar() and .FinishedChars() to support an additional parameter to specify what kind of characters to loop through: "default" or no parameter - all characters inside the multi "owner" - players on multi's owner list "friend" - players on multi's friend list "guest" - players on multi's guest list "banned" - players on multi's ban list Added new INI tags to a new section of uox.ini called [houses] DECAYTIMERINHOUSE=3600 // Decay timer in seconds for non-locked down items inside houses PROTECTPRIVATEHOUSES=1 // Toggles whether private houses will automatically boot unauthorized visitors (1) or not (0) TRACKHOUSESPERACCOUNT=1 // Toggles whether to track (and restrict) house ownership per account (1) or per character (0) MAXHOUSESOWNABLE=1 // Specifies the max amount of houses a player can own per account/char, depending on how house ownership is tracked MAXHOUSESCOOWNABLE=10 // Specifies the max amount of houses a player can co-own per character CANOWNANDCOOWNHOUSES=1 // Toggles whether players can own and co-own houses at the same time COOWNHOUSESONSAMEACCOUNT=1 // Toggles whether characters on same account as house owner will be treated as co-owners Added new INI tags in [settings] section of uox.ini: ITEMSDETECTSPEECH=0 // If enabled, server will search for nearby items with onSpeech JS event running whenever a character speaks. Disabled by default. MAXPLAYERPACKITEMS=125 // Defines max item capacity for player (and NPC) backpacks. Defaults to 125. Moved most of the existing house functionality to JS and expanded upon it to reach feature parity with houses in regular UO around Publish 15/16, with various extras thrown in for good measure and all functionality being customizable: js/server/house/house.js (15000) - handles detection of house commands and characters entering/leaving houses js/server/house/houseSign.js (15001) - contains and handles all house-related gumps/menus and what is shown when players interact with house sign js/server/house/houseCommands.js (15002) - handles functionality of house commands and other functionality such as transfer of ownership, demolishing house, etc. js/server/house/houseDeed.js (15003) - handles initial rules that allow/disallow placement of additional houses for players All house-related menus now fully handled through JS All house commands and other functionality now fully handled through JS Removed redundant hard-coded house functionality Implemented Co-owners, friends, guests for houses, with access rules in place for entry, lockdowns, house commands, etc. Implemented Private and Public houses Implemented Secure Containers and Trash Barrels Definable max lockdowns, secure containers, player vendors, bans, friends, guests, owners, trash containers and more - per house type JS scripts can now be attached directly to houses Doors in houses can be marked as front doors or interior doors, and will be treated differently with regards to private and public houses Added new item to dfndata/items/containers/misc.dfn - [trashbarrel] Added new JS script (js/items/trashbarrel.js) with trash barrel functionality for houses. Trash barrels that are marked as secure containers are only accessible by owners, co-owners and friends of the house. Various options available at top of script. Updated js/items/axe.js to support chopping up trash barrels and house add-ons in houses owned by the player Fixed an issue with house doors being left behind after demolishing houses while their doors were open Fixed an issue where GMs could be banned from player houses Added Line of Sight checks to speech, to give players some privacy in their own homes Updated house placement code to more accurately check for other multis, dynamic and static objects when placing houses; now requires free space around each house that cannot be blocked by other houses or items that can block player movement, and disallows placement of houses on roads Updated house placement code to move characters blocking house placement to SE corner of the house Updated house placement code to disallow placing houses in guarded regions, or in dungeons Added new DFN tag for regions to enable/disable player houses in specific regions: HOUSING=0/1 Added new region (247) that covers path to Valley of Eodon in Felucca Added new region (248) that covers Valley of Eodon in Ter-Mur, with player housing disabled Added new region (249) that covers entire T2A lands, with player housing disabled Updated SPACEX and SPACEY values for all houses in dfndata/house/house.dfn to match updated house placement code Added new JS property to Regions that can be used to determine or change state of player housing in a region: .canPlaceHouse() Updated rules for usage of dye tubs to dye locked down items; now only house owners or co-owners may dye locked down items Updated rules for usage of the following locked down items in a house, which are now only usable by house owners and co-owners Dyes, Guildstone Deeds, Recall Runes (renaming), Rename Deeds, Townstone Deeds, House Deeds, Boat Models, Player Vendor Deeds, Ore, Hair Dye Updated rules for usage of the following locked down items in a house, which are now only usable by house owners, co-owners and friends: Keys, Dye Tubs, Magic Scrolls, Fireworks Wands, Magic Wands, Smithing Tools, Mining Tools, Fishing Poles Updated item lockdown rules to allow locking down (and releasing) items in a container as long as the container is locked down, and to only allow releasing a locked down container if it's empty of locked down items Updated item lockdown rules to only allow locking down movement-blocking items further than 2 tiles away from doors Updated rules for releasing items in houses - now the house owner can release any locked down items, co-owners can release items locked down by themselves or by friends, while friends can release only items locked down by themselves Added some feedback to player about why their attempted house placement failed Items added by GMs directly into multis will now decay based on the house-specific decay timer instead of the regular one Fixed an issue that could cause items to almost instantly decay after being released from lockdown in a house Placing house add-ons now properly takes into account SPACEX and SPACEY values when checking if they can fit in selected area of houses Re-added SPACEX and SPACEY values for Pentagram and Loom house add-ons House add-ons can now be converted back into house add-on deeds by chopping them with an axe Added new item type - IT_HOUSEADDON (201) - used by house add-ons placed in player houses Fixed a bug where keys would stop working after being added to a keyring, and would turn into blank keys upon release from the keyring Added visitor count for public player houses, which keeps track of how many visits a public house has received, with each player counted max 1 time every 24 hours Fixed an issue with FindPlayersInOldVisrange() where it didn't take into account that players could see buildings further away than the standard update range. This could cause players to see ghost images of buildings if they were at the "right" distance when the building was being demolished Added NODECAY tag to all signs and doors in dfndata/house/house.dfn Added FRONTDOOR or INTERIORDOOR (as appropriate) to all doors in dfndata/house/house.dfn Added BANX and BANY to specify ban location for some houses in dfndata/house/house.dfn instead of relying on finding SE corner automatically Implemented strongboxes (js/server/house/strongbox.js) for co-owners of a house, which can be placed with the house command "i wish to place a strongbox". Max capacity is 25 items Updated 'REMOVE command to take an optional parameter - itemID. If supplied, the command will remove all items with this itemID from a targeted container Fixed a bug when checking if dynamic items were blocking valid spawn locations for NPCs, some function arguments were in the wrong order! Improved code that finds valid spawn locations for items and NPCs spawned via spawn regions. As server gradually builds up lists of valid spawn locations per region over time, it will start using these lists more often, rather than always look for brand new spawn locations. Fixed a bug with CMulHandler::CheckStaticFlag() that prevented NPCs from spawning inside buildings with no static floors! Fixed an issue with repeating commands that prevented GMs from being able to cancel them when using the ClassicUO client Exposed character property .accountNum to JS engine Extended CDataList class to include a Clear() method for clearing lists Updated JS File method .Open() to support an optional, third argument - subFolderName - that defines in which sub-folder of UOX3/shared/ to store/look for a file. If no third argument is supplied, UOX3 will default to using the shared folder itself. Updated JS File method .Length() to return a value of -1 for files that don't exist Added new code function, exposed to JS engine with same parameters, which simply checks if a given tile ID has a specific flag bool CheckTileFlag( UI16 itemID, TILEFLAG flagToCheck ) Added JS function used to find the root container of an item (if any) FindRootContainer( itemSerial ) FindRootContainer( item ) Added new JS function that allows deleting files from UOX3/shared/ folder or subfolders of shared folder. If no subFolderName is provided, looks for file directly in shared folder itself. Restrictions on file- and folder-names apply. bool DeleteFile( fileName, subFolderName ) Added new JS functions for checking if a specific client or server feature is enabled. See documentation for full list of client/server features. GetClientFeature( bitNum ) // Returns true if specified client feature is enabled on server GetServerFeature( bitNum ) // Returns true if specified server feature is enabled on server Added new JS function for returning the value of almost any server setting from UOX.INI GetServerSetting( settingNameInDoubleQuotes ) Updated JS function DoesDynamicBlock() with two new parameters - checkOnlyMultis and checkOnlyNonMultis Updated JS function DoesMapBlock() with two new parameters - checkMultiPlacement and checkForRoad Fixed an issue where a LoS check would prevent players from accessing containers in their own backpack Added new functions in findfuncs.cpp to make it easier to find items near another object or location: findNearbyItems( object, distance ) findNearbyItems( x, y, worldNumber, instanceID, distance ) Added new Item property - maxItems - used by containers to determine their max item capacity Added new Item property - totalItemCount - used to get total item count in a container (including sub-containers) Added check for max item capacity when creating new items that are added to a character's backpack - items will be created below character's feet if backpack is full! Added new DFN tag for items, used by containers to determine item capacity for a given container: MAXITEMS=# // 125 is the default for all containers if not set Added new JS Item properties: .maxItems // gets/sets item capacity for a given container .totalItemCount // gets total item count in a container, including sub-containers Updated item tooltips for containers to show accurate total item count, as well as to display max item capacity Fixed a bug where picking up items from a non-locked down pile of items on the floor inside a multi could cause the remaining pile to be seen as no longer inside the multi, disallowing locking it back down and causing it to decay based on regular decay timer instead of house-specific one Updated JS command set to allow setting poison-level on items ('set poison #) and hunger-level on characters ('set hunger #) Fixed an issue with js/item/food.js that prevented poisoned food from poisoning characters when eaten Fixed an issue with js/skill/poisoning.js that prevented players from poisoning food! Updated various JS scripts and hardcoded targeting functions to disallow the targeting of locked down resources using skills and tools Updated JS Method TextMessage() to support three extra, optional parameters. Note that if one optional parameter is included, all preceding optional parameters are also required! speechTarget - What kind of target is this message intended for? 0 - Only visible for sender and receiver of message 1 - Visible to all players in range 2 - Visible to all NPCs and players in range 3 - Visible to all PCs everywhere + NPCs in range 4 - Visible to all PCs everywhere (broadcast) 5 - Only visible for the receiver of the message speechTargetSerial - The serial of the receiver of the message, used if speechTarget is 0 or 5 speechFontType - The type of font to display the text in. Defaults to normal. 0 - Bold 1 - Normal with shadow 2 - Bold with shadow 3 - Normal 4 - Gothic 5 - Italic 6 - Small, dark 7 - Colourful 8 - Runic (only works with CAPS) 9 - Small, light Added timestamp to worldsaves in console, to make it easier to see when a particular world-save was done Added info about compiler/environment displayed at the top of the UOX3 console during startup Updated dictionary files with new messages primarily related to housing
2020-11-04 02:00:37 +08:00
*vp = JSVAL_NULL;
}
Housing Revamp and more Updated JS SysMessage function to accept up to 10 extra, optional arguments, which can be used with dictionary messages that require additional parameters like %s or %i Added new type of house privilege in cMultiObj.cpp to keep track of friends of the multi - HOUSEPRIV_FRIEND - which is stored during worldsaves as one or more Friend=<player serial> tags in house.wsc Added new type of house privilege in cMultiObj.cpp to keep track of guests of the multi - HOUSEPRIV_GUEST - which is stored during worldsaves as one or more Guest=<player serial> tags in house.wsc When items are created for houses upon house placement, a reference to the multi's serial is now stored in the house sign's MORE property to allow easier tracking of which house a particular sign belongs to Added tracking of new, persistent properties for houses via cMultiObj.cpp/h: lockdowns, secure containers, vendors, guests, friends, owners, ban location, public status, number of visits, timestamps Added a multitude of new methods in cMultiObj.cpp/h to assist in improving the functionality of houses Added new tags for houses in house.dfn (default values applied if tag not specified): MAXSECURECONTAINERS=4 - Max amount of secure containers allowed in a multi MAXLOCKDOWNS=256 - Max amount of lockdowns allowed in a multi MAXVENDORS=10 - Max amount of vendors allowed in a multi MAXBANS=50 - Max amount of bans in a multi's ban list MAXFRIENDS=50 - Max amount of friends in a multi's friend list MAXGUESTS=50 - Max amount of guests in a multi's guest list MAXOWNERS=8 - Max amount of owners and co-owners in a multi's owner list MAXTRASHCONTAINERS=1 - Max amount of trash containers allowed in multi SCRIPT=<scriptID> - Assign a JS script-ID directly to a multi FRONTDOOR - indicates that a door is the front door of a house. Cannot be locked in public houses! INTERIORDOOR - indicates that a door is an interior door of a house. Can be locked in public houses. BANX - Location X offset for multi's ban location, if not used, will try to use SE corner of multi instead BANY - Location Y offset for multi's ban location, if not used, will try to use SE corner of multi instead Added JS Event: onHouseCommand( tSock, multiObj, cmdID ) - For handling spoken house commands via JS scripts attached to multi. Updated JS Events: onEntrance() - can now trigger both for multi being entered and/or object entering onLeaving() - can now trigger both for multi being left and/or object entering onSpeech() - can now also trigger for items (in addition to chars) with event & script attached, if UOX.INI setting ITEMSDETECTSPEECH is enabled Added JS Multi methods: .IsBoat() - Returns whether the item (or multi) is a boat .IsOwner( playerToCheck ) - Returns whether a player is the owner of a multi .IsOnOwnerList( playerToCheck ) - Returns whether a player is on the (co-)owner list of a multi .IsOnFriendList( playerToCheck ) - Returns whether a player is on the friend list of a multi .IsOnGuestList( playerToCheck ) - Returns whether a player is on the guest list of a multi .IsOnBanList( playerToCheck ) - Returns whether a player is on the ban list of a multi .AddToFriendList( playertoAdd ) - Adds player to the friend list of a multi .RemoveFromFriendList( playertoRemove ) - Removes player from the friend list of a multi .AddToGuestList( playertoAdd ) - Adds player to the guest list of a multi .RemoveFromGuestList( playertoRemove ) - Removes player from the guest list of a multi .ClearOwnerList() - Clears all entries from a multi's (co-)owner list .ClearFriendList() - Clears all entries from a multi's friend list .ClearGuestList() - Clears all entries from a multi's guest list .ClearBanList() - Clears all entries from a multi's ban list .SecureContainer( itemToSecure ) - Secures a container in a multi .UnsecureContainer( itemToUnsecure ) - Unsecures a container in a multi .IsSecureContainer( itemToCheck ) - Checks if specified item is a secure container in a multi .LockDownItem( itemToLockDown) - Locks down an item in a multi .ReleaseItem( itemToRelease ) - Releases a locked down item in a multi .KillKeys() - Deletes ALL keys associated with a multi .AddTrashCont( itemToAdd ) - Add trash container to multi's list of trash containers .RemoveTrashCont( itemToRemove ) - Remove trash container from multi's list of trash containers Added JS Item (Multi only) properties: .lockdowns - Get the number of lockdowns in a multi .maxLockdowns - Get/Set the max number of lockdowns allowed in a multi .secureContainers - Get the number of secure containers in a multi .maxSecureContainers - Get/Set the max number of secure containers allowed in a multi .trashContainers - Get the number of trash containers in a multi .maxTrashContainers - Get/Set the max number of trash containers allowed in a multi .friends - Get the number of friends in a multi's friend list .maxFriends - Get/Set the max number of friends allowed in a multi's friend list .guests - Get the number of guests in a multi's guest list .maxGuests - Get/Set the max number of guests allowed in a multi's guest list .owners - Get the number of owners in a multi's owner list .maxOwners - Get/Set the max number of owners allowed in a multi's owner list .bans - Get the number of banned players in a multi's ban list .maxBans - Get/Set the max number of banned players allowed in a multi's ban list .vendors - Get the number of player vendors in a multi .maxVendors - Get the max number of player vendors allowed in a multi .deed - Get the item sectionID for deed used to place multi .isPublic - Get/Set the private/public state of a multi .buildTimestamp - Get the timestamp for when the house was originally placed .tradeTimestamp - Get the timestamp for when the house was last traded to another player .banX - Get/Set the ban location X offset for the multi .banY - Get/Set the ban location Y offset for the multi Added JS Character properties: .multi = Get/Set the multi object the character is in .accountNum = Get the account number the character belongs to .housesOwned = Get a count of houses owned by the character .housesCoOwned = Get a count of houses co-owned by the character Updated JS cBaseObject Methods .FirstItem(), .NextItem() and .FinishedItems() to also support iterating through items in multis Updated JS multi Methods .FirstChar(), .NextChar() and .FinishedChars() to support an additional parameter to specify what kind of characters to loop through: "default" or no parameter - all characters inside the multi "owner" - players on multi's owner list "friend" - players on multi's friend list "guest" - players on multi's guest list "banned" - players on multi's ban list Added new INI tags to a new section of uox.ini called [houses] DECAYTIMERINHOUSE=3600 // Decay timer in seconds for non-locked down items inside houses PROTECTPRIVATEHOUSES=1 // Toggles whether private houses will automatically boot unauthorized visitors (1) or not (0) TRACKHOUSESPERACCOUNT=1 // Toggles whether to track (and restrict) house ownership per account (1) or per character (0) MAXHOUSESOWNABLE=1 // Specifies the max amount of houses a player can own per account/char, depending on how house ownership is tracked MAXHOUSESCOOWNABLE=10 // Specifies the max amount of houses a player can co-own per character CANOWNANDCOOWNHOUSES=1 // Toggles whether players can own and co-own houses at the same time COOWNHOUSESONSAMEACCOUNT=1 // Toggles whether characters on same account as house owner will be treated as co-owners Added new INI tags in [settings] section of uox.ini: ITEMSDETECTSPEECH=0 // If enabled, server will search for nearby items with onSpeech JS event running whenever a character speaks. Disabled by default. MAXPLAYERPACKITEMS=125 // Defines max item capacity for player (and NPC) backpacks. Defaults to 125. Moved most of the existing house functionality to JS and expanded upon it to reach feature parity with houses in regular UO around Publish 15/16, with various extras thrown in for good measure and all functionality being customizable: js/server/house/house.js (15000) - handles detection of house commands and characters entering/leaving houses js/server/house/houseSign.js (15001) - contains and handles all house-related gumps/menus and what is shown when players interact with house sign js/server/house/houseCommands.js (15002) - handles functionality of house commands and other functionality such as transfer of ownership, demolishing house, etc. js/server/house/houseDeed.js (15003) - handles initial rules that allow/disallow placement of additional houses for players All house-related menus now fully handled through JS All house commands and other functionality now fully handled through JS Removed redundant hard-coded house functionality Implemented Co-owners, friends, guests for houses, with access rules in place for entry, lockdowns, house commands, etc. Implemented Private and Public houses Implemented Secure Containers and Trash Barrels Definable max lockdowns, secure containers, player vendors, bans, friends, guests, owners, trash containers and more - per house type JS scripts can now be attached directly to houses Doors in houses can be marked as front doors or interior doors, and will be treated differently with regards to private and public houses Added new item to dfndata/items/containers/misc.dfn - [trashbarrel] Added new JS script (js/items/trashbarrel.js) with trash barrel functionality for houses. Trash barrels that are marked as secure containers are only accessible by owners, co-owners and friends of the house. Various options available at top of script. Updated js/items/axe.js to support chopping up trash barrels and house add-ons in houses owned by the player Fixed an issue with house doors being left behind after demolishing houses while their doors were open Fixed an issue where GMs could be banned from player houses Added Line of Sight checks to speech, to give players some privacy in their own homes Updated house placement code to more accurately check for other multis, dynamic and static objects when placing houses; now requires free space around each house that cannot be blocked by other houses or items that can block player movement, and disallows placement of houses on roads Updated house placement code to move characters blocking house placement to SE corner of the house Updated house placement code to disallow placing houses in guarded regions, or in dungeons Added new DFN tag for regions to enable/disable player houses in specific regions: HOUSING=0/1 Added new region (247) that covers path to Valley of Eodon in Felucca Added new region (248) that covers Valley of Eodon in Ter-Mur, with player housing disabled Added new region (249) that covers entire T2A lands, with player housing disabled Updated SPACEX and SPACEY values for all houses in dfndata/house/house.dfn to match updated house placement code Added new JS property to Regions that can be used to determine or change state of player housing in a region: .canPlaceHouse() Updated rules for usage of dye tubs to dye locked down items; now only house owners or co-owners may dye locked down items Updated rules for usage of the following locked down items in a house, which are now only usable by house owners and co-owners Dyes, Guildstone Deeds, Recall Runes (renaming), Rename Deeds, Townstone Deeds, House Deeds, Boat Models, Player Vendor Deeds, Ore, Hair Dye Updated rules for usage of the following locked down items in a house, which are now only usable by house owners, co-owners and friends: Keys, Dye Tubs, Magic Scrolls, Fireworks Wands, Magic Wands, Smithing Tools, Mining Tools, Fishing Poles Updated item lockdown rules to allow locking down (and releasing) items in a container as long as the container is locked down, and to only allow releasing a locked down container if it's empty of locked down items Updated item lockdown rules to only allow locking down movement-blocking items further than 2 tiles away from doors Updated rules for releasing items in houses - now the house owner can release any locked down items, co-owners can release items locked down by themselves or by friends, while friends can release only items locked down by themselves Added some feedback to player about why their attempted house placement failed Items added by GMs directly into multis will now decay based on the house-specific decay timer instead of the regular one Fixed an issue that could cause items to almost instantly decay after being released from lockdown in a house Placing house add-ons now properly takes into account SPACEX and SPACEY values when checking if they can fit in selected area of houses Re-added SPACEX and SPACEY values for Pentagram and Loom house add-ons House add-ons can now be converted back into house add-on deeds by chopping them with an axe Added new item type - IT_HOUSEADDON (201) - used by house add-ons placed in player houses Fixed a bug where keys would stop working after being added to a keyring, and would turn into blank keys upon release from the keyring Added visitor count for public player houses, which keeps track of how many visits a public house has received, with each player counted max 1 time every 24 hours Fixed an issue with FindPlayersInOldVisrange() where it didn't take into account that players could see buildings further away than the standard update range. This could cause players to see ghost images of buildings if they were at the "right" distance when the building was being demolished Added NODECAY tag to all signs and doors in dfndata/house/house.dfn Added FRONTDOOR or INTERIORDOOR (as appropriate) to all doors in dfndata/house/house.dfn Added BANX and BANY to specify ban location for some houses in dfndata/house/house.dfn instead of relying on finding SE corner automatically Implemented strongboxes (js/server/house/strongbox.js) for co-owners of a house, which can be placed with the house command "i wish to place a strongbox". Max capacity is 25 items Updated 'REMOVE command to take an optional parameter - itemID. If supplied, the command will remove all items with this itemID from a targeted container Fixed a bug when checking if dynamic items were blocking valid spawn locations for NPCs, some function arguments were in the wrong order! Improved code that finds valid spawn locations for items and NPCs spawned via spawn regions. As server gradually builds up lists of valid spawn locations per region over time, it will start using these lists more often, rather than always look for brand new spawn locations. Fixed a bug with CMulHandler::CheckStaticFlag() that prevented NPCs from spawning inside buildings with no static floors! Fixed an issue with repeating commands that prevented GMs from being able to cancel them when using the ClassicUO client Exposed character property .accountNum to JS engine Extended CDataList class to include a Clear() method for clearing lists Updated JS File method .Open() to support an optional, third argument - subFolderName - that defines in which sub-folder of UOX3/shared/ to store/look for a file. If no third argument is supplied, UOX3 will default to using the shared folder itself. Updated JS File method .Length() to return a value of -1 for files that don't exist Added new code function, exposed to JS engine with same parameters, which simply checks if a given tile ID has a specific flag bool CheckTileFlag( UI16 itemID, TILEFLAG flagToCheck ) Added JS function used to find the root container of an item (if any) FindRootContainer( itemSerial ) FindRootContainer( item ) Added new JS function that allows deleting files from UOX3/shared/ folder or subfolders of shared folder. If no subFolderName is provided, looks for file directly in shared folder itself. Restrictions on file- and folder-names apply. bool DeleteFile( fileName, subFolderName ) Added new JS functions for checking if a specific client or server feature is enabled. See documentation for full list of client/server features. GetClientFeature( bitNum ) // Returns true if specified client feature is enabled on server GetServerFeature( bitNum ) // Returns true if specified server feature is enabled on server Added new JS function for returning the value of almost any server setting from UOX.INI GetServerSetting( settingNameInDoubleQuotes ) Updated JS function DoesDynamicBlock() with two new parameters - checkOnlyMultis and checkOnlyNonMultis Updated JS function DoesMapBlock() with two new parameters - checkMultiPlacement and checkForRoad Fixed an issue where a LoS check would prevent players from accessing containers in their own backpack Added new functions in findfuncs.cpp to make it easier to find items near another object or location: findNearbyItems( object, distance ) findNearbyItems( x, y, worldNumber, instanceID, distance ) Added new Item property - maxItems - used by containers to determine their max item capacity Added new Item property - totalItemCount - used to get total item count in a container (including sub-containers) Added check for max item capacity when creating new items that are added to a character's backpack - items will be created below character's feet if backpack is full! Added new DFN tag for items, used by containers to determine item capacity for a given container: MAXITEMS=# // 125 is the default for all containers if not set Added new JS Item properties: .maxItems // gets/sets item capacity for a given container .totalItemCount // gets total item count in a container, including sub-containers Updated item tooltips for containers to show accurate total item count, as well as to display max item capacity Fixed a bug where picking up items from a non-locked down pile of items on the floor inside a multi could cause the remaining pile to be seen as no longer inside the multi, disallowing locking it back down and causing it to decay based on regular decay timer instead of house-specific one Updated JS command set to allow setting poison-level on items ('set poison #) and hunger-level on characters ('set hunger #) Fixed an issue with js/item/food.js that prevented poisoned food from poisoning characters when eaten Fixed an issue with js/skill/poisoning.js that prevented players from poisoning food! Updated various JS scripts and hardcoded targeting functions to disallow the targeting of locked down resources using skills and tools Updated JS Method TextMessage() to support three extra, optional parameters. Note that if one optional parameter is included, all preceding optional parameters are also required! speechTarget - What kind of target is this message intended for? 0 - Only visible for sender and receiver of message 1 - Visible to all players in range 2 - Visible to all NPCs and players in range 3 - Visible to all PCs everywhere + NPCs in range 4 - Visible to all PCs everywhere (broadcast) 5 - Only visible for the receiver of the message speechTargetSerial - The serial of the receiver of the message, used if speechTarget is 0 or 5 speechFontType - The type of font to display the text in. Defaults to normal. 0 - Bold 1 - Normal with shadow 2 - Bold with shadow 3 - Normal 4 - Gothic 5 - Italic 6 - Small, dark 7 - Colourful 8 - Runic (only works with CAPS) 9 - Small, light Added timestamp to worldsaves in console, to make it easier to see when a particular world-save was done Added info about compiler/environment displayed at the top of the UOX3 console during startup Updated dictionary files with new messages primarily related to housing
2020-11-04 02:00:37 +08:00
else
{
// Otherwise Acquire an object
JSObject *myObj = JSEngine->AcquireObject( IUE_ITEM, multi, JSEngine->FindActiveRuntime( JS_GetRuntime( cx )));
Housing Revamp and more Updated JS SysMessage function to accept up to 10 extra, optional arguments, which can be used with dictionary messages that require additional parameters like %s or %i Added new type of house privilege in cMultiObj.cpp to keep track of friends of the multi - HOUSEPRIV_FRIEND - which is stored during worldsaves as one or more Friend=<player serial> tags in house.wsc Added new type of house privilege in cMultiObj.cpp to keep track of guests of the multi - HOUSEPRIV_GUEST - which is stored during worldsaves as one or more Guest=<player serial> tags in house.wsc When items are created for houses upon house placement, a reference to the multi's serial is now stored in the house sign's MORE property to allow easier tracking of which house a particular sign belongs to Added tracking of new, persistent properties for houses via cMultiObj.cpp/h: lockdowns, secure containers, vendors, guests, friends, owners, ban location, public status, number of visits, timestamps Added a multitude of new methods in cMultiObj.cpp/h to assist in improving the functionality of houses Added new tags for houses in house.dfn (default values applied if tag not specified): MAXSECURECONTAINERS=4 - Max amount of secure containers allowed in a multi MAXLOCKDOWNS=256 - Max amount of lockdowns allowed in a multi MAXVENDORS=10 - Max amount of vendors allowed in a multi MAXBANS=50 - Max amount of bans in a multi's ban list MAXFRIENDS=50 - Max amount of friends in a multi's friend list MAXGUESTS=50 - Max amount of guests in a multi's guest list MAXOWNERS=8 - Max amount of owners and co-owners in a multi's owner list MAXTRASHCONTAINERS=1 - Max amount of trash containers allowed in multi SCRIPT=<scriptID> - Assign a JS script-ID directly to a multi FRONTDOOR - indicates that a door is the front door of a house. Cannot be locked in public houses! INTERIORDOOR - indicates that a door is an interior door of a house. Can be locked in public houses. BANX - Location X offset for multi's ban location, if not used, will try to use SE corner of multi instead BANY - Location Y offset for multi's ban location, if not used, will try to use SE corner of multi instead Added JS Event: onHouseCommand( tSock, multiObj, cmdID ) - For handling spoken house commands via JS scripts attached to multi. Updated JS Events: onEntrance() - can now trigger both for multi being entered and/or object entering onLeaving() - can now trigger both for multi being left and/or object entering onSpeech() - can now also trigger for items (in addition to chars) with event & script attached, if UOX.INI setting ITEMSDETECTSPEECH is enabled Added JS Multi methods: .IsBoat() - Returns whether the item (or multi) is a boat .IsOwner( playerToCheck ) - Returns whether a player is the owner of a multi .IsOnOwnerList( playerToCheck ) - Returns whether a player is on the (co-)owner list of a multi .IsOnFriendList( playerToCheck ) - Returns whether a player is on the friend list of a multi .IsOnGuestList( playerToCheck ) - Returns whether a player is on the guest list of a multi .IsOnBanList( playerToCheck ) - Returns whether a player is on the ban list of a multi .AddToFriendList( playertoAdd ) - Adds player to the friend list of a multi .RemoveFromFriendList( playertoRemove ) - Removes player from the friend list of a multi .AddToGuestList( playertoAdd ) - Adds player to the guest list of a multi .RemoveFromGuestList( playertoRemove ) - Removes player from the guest list of a multi .ClearOwnerList() - Clears all entries from a multi's (co-)owner list .ClearFriendList() - Clears all entries from a multi's friend list .ClearGuestList() - Clears all entries from a multi's guest list .ClearBanList() - Clears all entries from a multi's ban list .SecureContainer( itemToSecure ) - Secures a container in a multi .UnsecureContainer( itemToUnsecure ) - Unsecures a container in a multi .IsSecureContainer( itemToCheck ) - Checks if specified item is a secure container in a multi .LockDownItem( itemToLockDown) - Locks down an item in a multi .ReleaseItem( itemToRelease ) - Releases a locked down item in a multi .KillKeys() - Deletes ALL keys associated with a multi .AddTrashCont( itemToAdd ) - Add trash container to multi's list of trash containers .RemoveTrashCont( itemToRemove ) - Remove trash container from multi's list of trash containers Added JS Item (Multi only) properties: .lockdowns - Get the number of lockdowns in a multi .maxLockdowns - Get/Set the max number of lockdowns allowed in a multi .secureContainers - Get the number of secure containers in a multi .maxSecureContainers - Get/Set the max number of secure containers allowed in a multi .trashContainers - Get the number of trash containers in a multi .maxTrashContainers - Get/Set the max number of trash containers allowed in a multi .friends - Get the number of friends in a multi's friend list .maxFriends - Get/Set the max number of friends allowed in a multi's friend list .guests - Get the number of guests in a multi's guest list .maxGuests - Get/Set the max number of guests allowed in a multi's guest list .owners - Get the number of owners in a multi's owner list .maxOwners - Get/Set the max number of owners allowed in a multi's owner list .bans - Get the number of banned players in a multi's ban list .maxBans - Get/Set the max number of banned players allowed in a multi's ban list .vendors - Get the number of player vendors in a multi .maxVendors - Get the max number of player vendors allowed in a multi .deed - Get the item sectionID for deed used to place multi .isPublic - Get/Set the private/public state of a multi .buildTimestamp - Get the timestamp for when the house was originally placed .tradeTimestamp - Get the timestamp for when the house was last traded to another player .banX - Get/Set the ban location X offset for the multi .banY - Get/Set the ban location Y offset for the multi Added JS Character properties: .multi = Get/Set the multi object the character is in .accountNum = Get the account number the character belongs to .housesOwned = Get a count of houses owned by the character .housesCoOwned = Get a count of houses co-owned by the character Updated JS cBaseObject Methods .FirstItem(), .NextItem() and .FinishedItems() to also support iterating through items in multis Updated JS multi Methods .FirstChar(), .NextChar() and .FinishedChars() to support an additional parameter to specify what kind of characters to loop through: "default" or no parameter - all characters inside the multi "owner" - players on multi's owner list "friend" - players on multi's friend list "guest" - players on multi's guest list "banned" - players on multi's ban list Added new INI tags to a new section of uox.ini called [houses] DECAYTIMERINHOUSE=3600 // Decay timer in seconds for non-locked down items inside houses PROTECTPRIVATEHOUSES=1 // Toggles whether private houses will automatically boot unauthorized visitors (1) or not (0) TRACKHOUSESPERACCOUNT=1 // Toggles whether to track (and restrict) house ownership per account (1) or per character (0) MAXHOUSESOWNABLE=1 // Specifies the max amount of houses a player can own per account/char, depending on how house ownership is tracked MAXHOUSESCOOWNABLE=10 // Specifies the max amount of houses a player can co-own per character CANOWNANDCOOWNHOUSES=1 // Toggles whether players can own and co-own houses at the same time COOWNHOUSESONSAMEACCOUNT=1 // Toggles whether characters on same account as house owner will be treated as co-owners Added new INI tags in [settings] section of uox.ini: ITEMSDETECTSPEECH=0 // If enabled, server will search for nearby items with onSpeech JS event running whenever a character speaks. Disabled by default. MAXPLAYERPACKITEMS=125 // Defines max item capacity for player (and NPC) backpacks. Defaults to 125. Moved most of the existing house functionality to JS and expanded upon it to reach feature parity with houses in regular UO around Publish 15/16, with various extras thrown in for good measure and all functionality being customizable: js/server/house/house.js (15000) - handles detection of house commands and characters entering/leaving houses js/server/house/houseSign.js (15001) - contains and handles all house-related gumps/menus and what is shown when players interact with house sign js/server/house/houseCommands.js (15002) - handles functionality of house commands and other functionality such as transfer of ownership, demolishing house, etc. js/server/house/houseDeed.js (15003) - handles initial rules that allow/disallow placement of additional houses for players All house-related menus now fully handled through JS All house commands and other functionality now fully handled through JS Removed redundant hard-coded house functionality Implemented Co-owners, friends, guests for houses, with access rules in place for entry, lockdowns, house commands, etc. Implemented Private and Public houses Implemented Secure Containers and Trash Barrels Definable max lockdowns, secure containers, player vendors, bans, friends, guests, owners, trash containers and more - per house type JS scripts can now be attached directly to houses Doors in houses can be marked as front doors or interior doors, and will be treated differently with regards to private and public houses Added new item to dfndata/items/containers/misc.dfn - [trashbarrel] Added new JS script (js/items/trashbarrel.js) with trash barrel functionality for houses. Trash barrels that are marked as secure containers are only accessible by owners, co-owners and friends of the house. Various options available at top of script. Updated js/items/axe.js to support chopping up trash barrels and house add-ons in houses owned by the player Fixed an issue with house doors being left behind after demolishing houses while their doors were open Fixed an issue where GMs could be banned from player houses Added Line of Sight checks to speech, to give players some privacy in their own homes Updated house placement code to more accurately check for other multis, dynamic and static objects when placing houses; now requires free space around each house that cannot be blocked by other houses or items that can block player movement, and disallows placement of houses on roads Updated house placement code to move characters blocking house placement to SE corner of the house Updated house placement code to disallow placing houses in guarded regions, or in dungeons Added new DFN tag for regions to enable/disable player houses in specific regions: HOUSING=0/1 Added new region (247) that covers path to Valley of Eodon in Felucca Added new region (248) that covers Valley of Eodon in Ter-Mur, with player housing disabled Added new region (249) that covers entire T2A lands, with player housing disabled Updated SPACEX and SPACEY values for all houses in dfndata/house/house.dfn to match updated house placement code Added new JS property to Regions that can be used to determine or change state of player housing in a region: .canPlaceHouse() Updated rules for usage of dye tubs to dye locked down items; now only house owners or co-owners may dye locked down items Updated rules for usage of the following locked down items in a house, which are now only usable by house owners and co-owners Dyes, Guildstone Deeds, Recall Runes (renaming), Rename Deeds, Townstone Deeds, House Deeds, Boat Models, Player Vendor Deeds, Ore, Hair Dye Updated rules for usage of the following locked down items in a house, which are now only usable by house owners, co-owners and friends: Keys, Dye Tubs, Magic Scrolls, Fireworks Wands, Magic Wands, Smithing Tools, Mining Tools, Fishing Poles Updated item lockdown rules to allow locking down (and releasing) items in a container as long as the container is locked down, and to only allow releasing a locked down container if it's empty of locked down items Updated item lockdown rules to only allow locking down movement-blocking items further than 2 tiles away from doors Updated rules for releasing items in houses - now the house owner can release any locked down items, co-owners can release items locked down by themselves or by friends, while friends can release only items locked down by themselves Added some feedback to player about why their attempted house placement failed Items added by GMs directly into multis will now decay based on the house-specific decay timer instead of the regular one Fixed an issue that could cause items to almost instantly decay after being released from lockdown in a house Placing house add-ons now properly takes into account SPACEX and SPACEY values when checking if they can fit in selected area of houses Re-added SPACEX and SPACEY values for Pentagram and Loom house add-ons House add-ons can now be converted back into house add-on deeds by chopping them with an axe Added new item type - IT_HOUSEADDON (201) - used by house add-ons placed in player houses Fixed a bug where keys would stop working after being added to a keyring, and would turn into blank keys upon release from the keyring Added visitor count for public player houses, which keeps track of how many visits a public house has received, with each player counted max 1 time every 24 hours Fixed an issue with FindPlayersInOldVisrange() where it didn't take into account that players could see buildings further away than the standard update range. This could cause players to see ghost images of buildings if they were at the "right" distance when the building was being demolished Added NODECAY tag to all signs and doors in dfndata/house/house.dfn Added FRONTDOOR or INTERIORDOOR (as appropriate) to all doors in dfndata/house/house.dfn Added BANX and BANY to specify ban location for some houses in dfndata/house/house.dfn instead of relying on finding SE corner automatically Implemented strongboxes (js/server/house/strongbox.js) for co-owners of a house, which can be placed with the house command "i wish to place a strongbox". Max capacity is 25 items Updated 'REMOVE command to take an optional parameter - itemID. If supplied, the command will remove all items with this itemID from a targeted container Fixed a bug when checking if dynamic items were blocking valid spawn locations for NPCs, some function arguments were in the wrong order! Improved code that finds valid spawn locations for items and NPCs spawned via spawn regions. As server gradually builds up lists of valid spawn locations per region over time, it will start using these lists more often, rather than always look for brand new spawn locations. Fixed a bug with CMulHandler::CheckStaticFlag() that prevented NPCs from spawning inside buildings with no static floors! Fixed an issue with repeating commands that prevented GMs from being able to cancel them when using the ClassicUO client Exposed character property .accountNum to JS engine Extended CDataList class to include a Clear() method for clearing lists Updated JS File method .Open() to support an optional, third argument - subFolderName - that defines in which sub-folder of UOX3/shared/ to store/look for a file. If no third argument is supplied, UOX3 will default to using the shared folder itself. Updated JS File method .Length() to return a value of -1 for files that don't exist Added new code function, exposed to JS engine with same parameters, which simply checks if a given tile ID has a specific flag bool CheckTileFlag( UI16 itemID, TILEFLAG flagToCheck ) Added JS function used to find the root container of an item (if any) FindRootContainer( itemSerial ) FindRootContainer( item ) Added new JS function that allows deleting files from UOX3/shared/ folder or subfolders of shared folder. If no subFolderName is provided, looks for file directly in shared folder itself. Restrictions on file- and folder-names apply. bool DeleteFile( fileName, subFolderName ) Added new JS functions for checking if a specific client or server feature is enabled. See documentation for full list of client/server features. GetClientFeature( bitNum ) // Returns true if specified client feature is enabled on server GetServerFeature( bitNum ) // Returns true if specified server feature is enabled on server Added new JS function for returning the value of almost any server setting from UOX.INI GetServerSetting( settingNameInDoubleQuotes ) Updated JS function DoesDynamicBlock() with two new parameters - checkOnlyMultis and checkOnlyNonMultis Updated JS function DoesMapBlock() with two new parameters - checkMultiPlacement and checkForRoad Fixed an issue where a LoS check would prevent players from accessing containers in their own backpack Added new functions in findfuncs.cpp to make it easier to find items near another object or location: findNearbyItems( object, distance ) findNearbyItems( x, y, worldNumber, instanceID, distance ) Added new Item property - maxItems - used by containers to determine their max item capacity Added new Item property - totalItemCount - used to get total item count in a container (including sub-containers) Added check for max item capacity when creating new items that are added to a character's backpack - items will be created below character's feet if backpack is full! Added new DFN tag for items, used by containers to determine item capacity for a given container: MAXITEMS=# // 125 is the default for all containers if not set Added new JS Item properties: .maxItems // gets/sets item capacity for a given container .totalItemCount // gets total item count in a container, including sub-containers Updated item tooltips for containers to show accurate total item count, as well as to display max item capacity Fixed a bug where picking up items from a non-locked down pile of items on the floor inside a multi could cause the remaining pile to be seen as no longer inside the multi, disallowing locking it back down and causing it to decay based on regular decay timer instead of house-specific one Updated JS command set to allow setting poison-level on items ('set poison #) and hunger-level on characters ('set hunger #) Fixed an issue with js/item/food.js that prevented poisoned food from poisoning characters when eaten Fixed an issue with js/skill/poisoning.js that prevented players from poisoning food! Updated various JS scripts and hardcoded targeting functions to disallow the targeting of locked down resources using skills and tools Updated JS Method TextMessage() to support three extra, optional parameters. Note that if one optional parameter is included, all preceding optional parameters are also required! speechTarget - What kind of target is this message intended for? 0 - Only visible for sender and receiver of message 1 - Visible to all players in range 2 - Visible to all NPCs and players in range 3 - Visible to all PCs everywhere + NPCs in range 4 - Visible to all PCs everywhere (broadcast) 5 - Only visible for the receiver of the message speechTargetSerial - The serial of the receiver of the message, used if speechTarget is 0 or 5 speechFontType - The type of font to display the text in. Defaults to normal. 0 - Bold 1 - Normal with shadow 2 - Bold with shadow 3 - Normal 4 - Gothic 5 - Italic 6 - Small, dark 7 - Colourful 8 - Runic (only works with CAPS) 9 - Small, light Added timestamp to worldsaves in console, to make it easier to see when a particular world-save was done Added info about compiler/environment displayed at the top of the UOX3 console during startup Updated dictionary files with new messages primarily related to housing
2020-11-04 02:00:37 +08:00
*vp = OBJECT_TO_JSVAL( myObj );
}
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
break;
case CCP_HOUSESOWNED: *vp = INT_TO_JSVAL( gPriv->CountHousesOwned( false )); break;
case CCP_HOUSESCOOWNED: *vp = INT_TO_JSVAL( gPriv->CountHousesOwned( true )); break;
Wholist updated, menus to manage npcs and spawn objects, misc Revamped 'wholist GM command entirely in JS, now comes with filters for names, online/offline status, sorting by name or last online date, quick-buttons to tweak/teleport/inspect, etc. Updated syntax: 'wholist [on] 'wholist off 'wholist force Also available under alias 'playeradmin, with the same parameters Added new JS command for GMs to assist managing NPCs, using updated wholist menu as basis: 'npcadmin Added new JS command for GMs to assist managing object-based Spawners, using updated wholist menu as basis: 'spawnadmin Exposed the following character properties to JS engine: .lastOn // String-formatted timestamp of last time character was oniline .lastOnSecs // Timestamp of last time character was online, expressed as seconds since Unix epoch Added some validation (and re-synching) of lastOn vs lastOnSecs player character properties - only active when running in debug mode Updated onBoatTurn JS Event to support a 4th parameter - a reference to the boat's tillerman: onBoatTurn( iBoat, oldDir, newDir, iTiller ) Added (missing from last commit) JS Method for boats to fetch tillerman reference: .GetTiller() Updated JS Docs with details about onBoatTurn JS event, .GetTiller() method and .lastOn/.lastOnSecs properties Added some console output with details about time taken for each regionspawn cycle Added some new tiledata override entries for some tiles (stairs/platforms) missing NoShoot flag in some older clients (dfndata/maps/tiles.dfn)
2025-04-27 09:18:09 +08:00
case CCP_LASTON:
{
auto lastOnString = gPriv->GetLastOn();
tString = JS_NewStringCopyZ( cx, lastOnString.c_str() );
*vp = STRING_TO_JSVAL( tString );
break;
}
case CCP_LASTONSECS:
JS_NewNumberValue( cx, gPriv->GetLastOnSecs(), vp );
break;
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
default:
break;
}
}
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
return JS_TRUE;
}
JSBool CCharacterProps_setProperty( JSContext* cx, JSObject* obj, jsid id, JSBool strict, jsval* vp )
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
{
CChar *gPriv = static_cast<CChar *>( JS_GetPrivate( cx, obj ));
if( !ValidateObject( gPriv ))
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
return JS_FALSE;
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
JSEncapsulate encaps( cx, vp );
2025-04-07 14:11:13 +10:00
UI16 propID = getScriptID( cx, id, JSP_CHAR );
2025-04-07 12:44:01 +10:00
if( propID != 0xFFFF )
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
{
2025-04-07 12:44:01 +10:00
switch( propID )
{
case CCP_ACCOUNTNUM: gPriv->SetAccountNum( static_cast<UI16>( encaps.toInt() )); break;
case CCP_CREATEDON: break;
UOX3 0.99.6-RC6 Removed arbitrary and hidden restrictions on refreshing list of online players shown with 'wholist command Fixed an issue where player ghosts that get teleported would not see themselves get updated to new location Fixed a server crash from clients disconnecting while running server in debug mode Improved how container updates are sent to players; now only sends to clients that have actually opened the container, and who are still within range Added more information about UO data files being loaded during server startup Enhanced the GM 'add menu to allow clicking directly on images of items/npcs to add them, and adjusted size of menus to accommodate this Fixed an issue with fleeing NPCs that could cause them to attempt to flee across time and space, regardless of distance to target/attacker in combat Added NPC AI that runs away from players if they get too close (even outside combat). Applied to hind, rabbits, squirrels, ferrets and various birds by default: AI_ANIMAL_SCARED (aitype 12) Fixed issues with NPCs fleeing forever, or getting stuck in flee/don't flee loop, by introducing max fleeing distance (50 tiles) and cooldown (30 sec) on fleeing Updated onNameRequest JS Event to include third parameter with origin of name request, so script responses can be tailored appropriately: onNameRequest( myObj, requestedBy, requestSource ) Potential values for requestSource: 0 - Speech/System Messages 1 - Guild Menus 2 - Stat Window (self) 3 - Stat Window (other) 4 - Tooltip 5 - Paperdoll Journal 6 - Paperdoll 7 - Single Click / All-Names 8 - System 9 - Secure Trade Window Added Adaptive Performance System (APS) that dynamically adjust how often NPC AI/movement is checked based on overall shard performance. If performance drops below defined threshold, UOX3 gradually slows down checks for NPC AI/movement to prioritize player movement/speech/command responsiveness. If performance climbs back up above threshold, slowdowns are gradually removed. The following UOX.INI options have been added under [system] category to support this system: APSPERFTHRESHOLD=50 // Performance threshold (measured in simulation cycles/sec) below which the APS kicks in APSINTERVAL=100 // How often (in milliseconds) the APS checks performance and makes adjustments (if needed) to balance out shard performance APSDELAYSTEP=50 // How much the delay timer is modified by (in milliseconds) each time APS makes adjustments APSDELAYMAXCAP=2000 // Max amount of of delay APS can introduce for NPC AI/movement handling when attempting to restore shard performance Added new JS Methods for Region objects: .GetOrePrefs( oreType ) // Get ore preference data for ore type found in town region. Returned as an array containing the following data: orePrefData -> [ oreName, // name of ore color, // color of ore minskill, // min skill to mine ore ingotName, // name of ingot created from ore makemenu, // makemenu entry for crafting something from ingot oreChance, // default global chance of finding this ore type scriptID // script attached to mined ore ], orePrefChance // Chance of finding this ore type in given town region .GetOreChance() // Get base chance of finding any ore in town region Moved Mining skill plus gravedigging feature from hard code to scripts (js/skill/mining.js) to make it easier to maintain and/or customize, and removed hard coded variants Gravedigging now relies on the ore resource system behind the scenes to restrict how often graves in a given area can be dug up Fixed some incorrect references to .worldNumber Character property in misc scripts (should be .worldnumber) Made some "hard-scripted" system messages in misc scripts use dictionary system instead Added spawn region for banker NPCs in Serpent's Hold (dfndata/spawn/felucca/spawn_town_serpents_hold.dfn, dfndata/spawn/trammel/spawn_town_serpents_hold.dfn) Fixed region definition of Ocllo to actually cover the entire town (dfndata/regions/regions.dfn) Added numerous additional locations accessible with 'goplace # command, for key locations in Ilshenar, Malas, Tokuno Islands and Ter Mur (dfndata/location/location.dfn) Revised travel-menu portion of GM menu (shortcut: 'travel) to include more travel options based on new locations (dfndata/items/travelmenu.dfn and travelmenu.bulk.dfn) Fixed an issue where NPCs could attempt to attack targets in other worlds/instances Added new JS Event that triggers for characters who are about to deal damage in combat. Complimentary to onDamage, which triggers for chars receiving damage: onDamageDeal( dmgDealer, dmgReceiver, damageValue, damageType ) Added new JS Event that can trigger in global script upon creation of new player chars. Note that this will trigger in place of onCreateDFN event for player characters: onCreatePlayer( pChar ) Added new JS Event that triggers for characters selecting a target with a spell. Complimentary to onSpellTarget, which triggers for targets selected with a spell: onSpellTargetSelect( caster, target, spellNum ) Updated onCombatStart and onCombatEnd JS Events to also trigger for the other party in combat Updated onPickup JS Event to include a third parameter - the potential container item was picked up from. Event now also triggers event in scripts attached to said containers: onPickup( iPickedUp, pChar, iCont ) Added tracking of total playtime per individual character, and per account across all characters, and exposed these properties to JS engine: .totalPlayTime // Account property, total playtime across all chars .playTime // Character property, total playtime on given character only Added new player-accessible command ('playtime) to spit out the playtime of current character/account as a whole (js/commands/playtime.js) Implemented first version of Young Player System: Replaced the UNUSED9 account flag with YOUNG, to be used by Young/New Player System Added new JS Account property that gets/sets whether player account is considered Young: .isYoung Added new Char timers: TIMER_YOUNGHEAL // Restricts how often Young players are healed by NPC healers TIMER_YOUNGMESSAGE // Restricts how often Young players are warned about dangerous looking monsters in overworld Updated GM commands 'get and 'set to get/set .isYoung property of player's account (js/commands/targeting/get.js and set.js) Added new UOX.INI setting to enable/disable Young Player System (enabled by default): YOUNGPLAYERSYSTEM=1 If Young Player System is enabled, all newly created player accounts are automatically marked with Young flag Added new script to handle various restrictions and functions related to Young characters (js/player/young_player.js): Young characters will have [Young] displayed over their head Young characters will have their Young status checked and verified on every login + every stat/skill gain, to revoke the Young status if any of the following is true: Account has a total playtime of more than 40 hours Any character has more than 350 total (base) skill points Any character has more than 70 skill points in a single skill Any character has more than 150 total stat points Any character has more than 80 stat points in a single stat Young characters can renounce their Young status manually by saying the words "I renounce my young player status" Young characters get two additional items upon creation: a new player ticket (can be combined with any other players new player ticket for both players to get a reward) a sextant (shows Young players directions to nearest moongate/bank regardless of where they are, as long as outdoors) Young characters cannot target other player characters with hostile spells or skills Young characters cannot be the target of other player characters' hostile spells or skills Young characters can only cast beneficial spells upon themselves or other Young characters Young characters can only be the target of beneficial spells from other Young players Young players (and their pets/followers) cannot attack or harm any other players (or their pets/followers), nor themselves be attacked or harmed by any other players (or their pets/followers), whether from combat, spells, skills or items Young players don't lose any of their items on death, and are teleported to the nearest healer upon death with all their items intact Young players receive a warning upon entering dungeons that monsters there will be hostile Updated global script (js/server/global.js) to: Check/Verify Young status of players upon login Attach young player script on login/creation for players on Young accounts Give specific items to Young players upon creation Added new script (js/item/corpse.js) that is assigned to all freshly created corpses. This script handles restrictions related to Young players interactions with corpses, and the interactions of other players with corpses of Young players Updated JS Method .Carve() to return true/false depending on whether carving a corpse was successful Updated Healer AI in code to heal nearby injured Young players Updated Evil AI and Evil Caster AI in code to avoid selecting Young players as targets in combat outside of dungeons Added a new section to UOX.INI - [young player starting locations] - that can be used to define starting locations for Young players. If only one such location is provided, all players start there. Otherwise, it matches the same starting location setup as the regular one - with one entry per town in Britannia. Restricted transferring and/or friending of pets (code) and hirelings (hirelings.js) between Young and non-Young players Restricted Young players from recalling or gating to Felucca facet Young players can instantly logout from anywhere, at any time
2023-07-01 20:02:40 +08:00
case CCP_PLAYTIME: gPriv->SetPlayTime( static_cast<UI32>( encaps.toInt() )); break;
case CCP_SECTIONID: gPriv->SetSectionId( encaps.toString() ); break;
case CCP_NAME: gPriv->SetName( encaps.toString() ); break;
Thief Revamp - 0.99.6-RC5 Added script for NPC guildmasters (js/npc/ai/guildmaster.js). Only one NPC guild has been setup in the script so far (more can be easily added) - the Thieves Guild - which if joined grants players the ability to steal from other players and to buy disguise kits Added two new NPCs, which there will now spawn one of in a random location in each city in Britannia (felucca facet): m_thief_guildmaster (dfndata/npc/male_human.dfn) f_thief_guildmaster (dfndata/npc/female_Human.dfn) Added two new character properties to keep track of which NPC guild a player (or NPC) belongs to. These properties have been exposed as the following Character JS properties: .npcGuild // ID of NPC guild, as defined in script .npcGuildJoined // Timestamp for when player joined NPC guild Added script for Disguise Kits (js/item/disguisekit.js). These allow members of the Thieves Guild to disguise themselves from the prying eyes of other players. Added two new character properties: .isDisguised // true/false flag for character being disguised .origName // used to store character's original name before disguise went into effect Moved implementation of Stealing skill from code to script (js/skill/stealing.js) and revamped it completely in the process. Changes include: New features: Town rare stealing - any item marked as "special stealable" with new item property .stealable can be stolen, even if it's locked down by a GM on the ground, or inside a container When stealing from item piles, thief can potentially steal the amount of items that makes up the max weight limit for what they can steal, from those piles Chance to successfully steal is now affected by whether there are any characters (NPCs or Players) that witness the attempt. Depends on distance to character, and direction character is facing Players now become "permagrey" when successfully stealing from another player, regardless of whether it's witnessed Players now receive a "stealing" flag when stealing from another player, regardless of whether it's witnessed Stolen items cannot be removed from thief's backpack for 30 seconds following the theft of the item (AoS core shard era and above) Optional AoS feature to steal special consumable items from monsters Updated default stealing rules: Updated calculations to determine chance of success when stealing Players cannot steal while engaged in combat Players are revealed if hidden as soon as they use the stealing skill Players can no longer steal items in the secure trade window Players can no longer steal items from NPC shopkeepers Both hands must be free to steal Stealing now checks line of sight to target player/object Only members of Thieves Guild (NPC guild) can now steal from other players, unless they are guild enemies Players can no longer steal from NPC guards by default Players can no longer steal from the same NPC monster more than once Only gold and gems can be stolen from innocent players in dungeon/ll areas of Felucca, if core shard era is set to AoS or higher Players can no longer steal items held on cursor by other players Orcish masks now eplode if player steals from orcs while wearing it If core shard era is set to LBR or lower, player is marked as an aggressor if they steal from another player Guards can only be called on players that are flagged as criminals within the first 10 seconds of them being flagged Stealing script options: Allow stealing entire containers (off by default pre-AoS) Return stolen items on thief death (off by default) Temporarily make stolen items immovable in thief's backpack (on by default post-AoS) Temporarily protect traded items (on by default) Let dexterity affect chance for successful theft (off by default) Let light level affect chance for successful theft (off by default) Allow stealing from NPC Guards (off by default) Allow stealing special loot from monsters (on by default post-ml) Moved implementation of Snooping skill from code to script (js/skill/snooping.js), with some changes: Players cannot snoop pack animals from inside a house, if the animal is outside The deeper inside main backpack a container sits, the harder it becomes to snoop inside it Included an optional feature that lets targets of snooping gradually become more aware, increasing the difficulty of succeeding. This awareness fades over time. Players have a chance to stay hidden while snooping, based on their Hiding skill Karma is now lowered by snooping regardless of success or failure Added tracking system for "aggressors" in combat. A player attacking someone (regardless of flag status) will be marked as aggressor to that someone for 2 minutes Added tracking system for "permagrey" flags - these are stored on a per-target basis, so a player can be flagged visibly as permagrey to multiple other players. Persists until player dies. Player combat targets and war mode are now cleared on logout Players will now be unable to hide if within visual distance and in line of sight of their attacker or current target in combat Server leave-announcement now only happens after the logout timer has expired, instead of the exact moment the player presses the logout button Fixed an issue that could cause swimming NPCs to swim on land NPCs now have the ability to temporarily ignore unreachable targets in combat. If attacked by someone they are ignoring, they will enter evade state and try to move away from that someone. SpawnRegions now support NPCLISTS with weighted entries. Example of an NPCLIST with 75% chance of spawning some kind of orc, and 25% chance of spawning a ratman archer: [NPCLIST example] { 75|NPCLIST=allorc 25|ratman } Added 3 additional "all purpose" item properties (.more0, .more1 and .more2) and exposed those to JS engine. These work the same as more/morex/morey/morez Mark spell now stores a 4th property on recall runes - instanceID. This is stored in the rune's .more0 property. Recall and Gate spells now check the recall rune (or runebook)'s 4th location property - instanceID - to determine where the player ends up Fixed a server crash related to equipment being automatically unequipped if character is no longer strong enough to have it equipped Added new JS Function to check if any characters at specified location potentially block movement: DoesCharacterBlock( x, y, z, worldNum, instanceID ) // returns true if a character exists at given coordinate (within z +/- 4)
2023-06-20 02:21:16 +08:00
case CCP_ORIGNAME: gPriv->SetOrgName( encaps.toString() ); break;
case CCP_TITLE: gPriv->SetTitle( encaps.toString() ); break;
case CCP_X: gPriv->SetLocation( static_cast<SI16>( encaps.toInt() ), gPriv->GetY(), gPriv->GetZ() ); break;
case CCP_Y: gPriv->SetLocation( gPriv->GetX(), static_cast<SI16>( encaps.toInt() ), gPriv->GetZ() ); break;
case CCP_Z: gPriv->SetZ( static_cast<SI08>( encaps.toInt() )); break;
case CCP_ID: gPriv->SetId( static_cast<UI16>( encaps.toInt() )); break;
case CCP_COLOUR: gPriv->SetColour( static_cast<UI16>( encaps.toInt() )); break;
case CCP_CONTROLSLOTS: gPriv->SetControlSlots( static_cast<UI16>( encaps.toInt() )); break;
case CCP_CONTROLSLOTSUSED: gPriv->SetControlSlotsUsed( static_cast<UI16>( encaps.toInt() )); break;
case CCP_ORNERINESS: gPriv->SetOrneriness( static_cast<UI16>( encaps.toInt() )); break;
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
case CCP_OWNER:
if( *vp != JSVAL_NULL )
Instance-support and misc code cleanup Misc code and documentation cleanup: Updated and standardized function comment blocks throughout entire codebase Grouped getters and setters together in pairs and documented them as one Removed empty and/or non-useful information from comment blocks Removed unused function from cItem.cpp/h - IncID() - formerly used to change IDs for doors Added new feature - Instances Objects (characters, items, multis, spawnregions) can now make use of a 5th parameter to determine their location in the game world. In addition to the traditional X, Y, Z and WORLDNUMBER parameters, a new one has been added - INSTANCEID - that allows objects to exist at the same coordinates in the same world, but in different "dimensions". Code has been updated in multiple places to support this, and a default instanceID of 0 is assumed if nothing else is specified. Added support for new DFN tag in town regions, spawn regions and locations - INSTANCEID (defaults to 0 if not present) Added support for another start location parameter after worldNum in UOX.INI representing instanceID (defaults to 0 if not present) Updated TWEAK menu to include WorldNumber and instanceID Fixed BaseWeight option in TWEAK menu Updated CBase_Teleport - now takes an optional 5th parameter instanceID Updated SE_SpawnNPC now takes an optional 5th parameter - instanceID Updated SE_FindMulti now takes an optional 5th parameter - instanceID Updated SE_GetItem now takes an optional 5th parameter - instanceID Updated SE_FindItem now takes an optional 6th parameter - instanceID Added new JS property for Items, Characters, Regions: .instanceID Added JS property for Regions: .members - returns comma-separated list of town member serials Updated JS scripts making use of the above-mentioned JS Methods/Functions Updated dictionaries with new tweak menu entry texts Exposed SpawnRegions to JS engine, and updated JS docs with details: SpawnRegion JS Functions IterateOverSpawnRegions() GetSpawnRegion( spawnRegNum ) GetSpawnRegionCount() SpawnRegion JS Properties name regionNum itemList npcList item npc maxItems maxNpcs itemCount npcCount onlyOutside prefZ x1 y1 x2 y2 world instanceID minTime maxTime call
2020-08-08 13:57:15 +08:00
{
CChar *myChar = static_cast<CChar*>( encaps.toObject() );
if( !ValidateObject( myChar ))
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
break;
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
gPriv->SetOwner( myChar );
}
else
{
2021-06-12 07:30:23 -04:00
gPriv->SetOwner( nullptr );
}
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
break;
case CCP_VISIBLE: gPriv->SetVisible( static_cast<VisibleTypes>( encaps.toInt() )); break;
case CCP_SERIAL: break;
case CCP_HEALTH: gPriv->SetHP( encaps.toInt() ); break;
Minor JS revamp - multiple scripts per object! Added TryParseJSVal() helper function in cScript.cpp, used to parse jsval values returned from script events. Provides results matching 0 (0, false), 1 (1, true) or any specific int value returned from script. JS events updated to use new TryParseJSVal helper function (no change in behaviour): onDecay, onResurrect, onCommand, onBuyFromVendor, onSellToVendor, onPickup, onCharDoubleClick, onSkillGump, onUseBandageMacro, onCombatStart, onCombatEnd, onDeathBlow, onBuy, onSell JS events with slight change of behaviour after update to use TryParseJSVal: onDrop, onDropItemOnItem, onDropItemOnNpc - previously, a blank or non-existent return value would be treated the same as a return true. This will now be treated as a return false. Update scripts accordingly! JS events updated to support return values from scripts: onCollide, onTalk, onSnooped, OnHungerChange Return false or nothing to prevent hard code from running Return true to allow hard code to run like normal onStolenFrom, onAISliver, onLightChange, onVirtueGumpPress, onQuestGump, onSpecialMove, onSwing, onClick, onHouseCommand, onSellToVendor, onSkillCheck, onSpellGain, onSpellLoss Return false to allow hard code and other scripts with event to run like normal Return true to prevent hard code and other scripts with event from running onSteal Return false or nothing to allow hard code and other scripts with event to run like normal Return true to prevent hard code and onStolenFrom event from running (theft failed?) Return 2 to prevent hard code, but allow onStolenFrom event to run (theft succeeded, but handled in script?) onLeaving, onEntrance, onEquip, onUnequip, onEnterEvadeState, onSoldToVendor, onBoughtFromVendor, onSpellSuccess, onSpellTarget, onFlagChange, onDeath Return false or nothing to allow other scripts with event to run like normal Return true to prevent other scripts with event from running Added new JS events that run prior to items being equipped/unequipped, with support for return values: onEquipAttempt( pEquipper, iEquipping ) onUnequipAttempt( pEquipper, iUnequipping ) Return false or nothing to reject attempt to equip/unequip item, and prevent hard-code or other scripts with event from running Return true to allow hard code to run like normal Added new JS event that runs prior to onSnooped event, for character doing the snooping: onSnoopAttempt( snooped, snooper ) Return false or nothing to prevent hard code and other snooping-related events from running Return true to allow hard code and other snooping-related events to run like normal Updated onSnooped JS event to accept return values: Return true when success state is true to prevent other scripts with event from running Return true when success state is false to prevent hard code and other scripts with event from running Updated onClick JS event to also run for characters with event attached (return 1 to prevent showing hard-coded name for whatever object is clicked) Updated onSteal JS event to include a third parameter, an object reference for the target of the theft Added support for assigning multiple JS scripts per object (item, multi, char, region). Any time a scriptID is added to an object, the list of such IDs for that object will be sorted from lowest to highest scriptID, which also determines the execution order for the scripts. Note that if the same JS event is present in several scripts assigned to an object, each of those events will trigger, unless the rules about return values for said event prevent this DFNs for Items, Multis, Characters and Regions can now contain multiple SCRIPT=scriptID tags per definition. Each such SCRIPT tag will be applied to the object in question, then sorted from lowest to highest scriptID by server. Added new JS property for Items, Multis, Characters and Regions: .scriptTriggers // If used to get property, will return array object with all script IDs assigned to object. If used to set property, will add script ID to existing list of script IDs for object. Modified JS property for Items, Multis, Characters and Regions, which for backwards compatibility functions similar to in older versions: .scripttrigger // If used to get property, will return last script ID in list of script IDs assigned to object. If used to set property, will clear list of script IDs and assign only the new ID Added new JS Methods for Items, Multis, Characters and Regions: .AddScriptTrigger( scriptID ) // Adds a new scriptID to list of scripts assigned to object .RemoveScriptTrigger( scriptID ) // Remove a specific scriptID from object (0 = remove all) Moved SETSCPTRIG command from code to JS (js/commands/targeting/scptrig.js), and supplemented it with some additional commands: GETSCPTRIG // List out all scriptIDs assigned to object SETSCPTRIG scriptID // Clears list of scriptIDs for object, then assigns the specified scriptID ADDSCPTRIG scriptID // Adds specified scriptID to list of scriptsIDs assigned to object REMOVESCPTRIG scriptID // Removes specified scriptID from list of scriptIDs assigned to object (0 = remove all)
2021-05-25 19:37:52 +08:00
case CCP_SCRIPTTRIGGER:
{
// For backwards compatibility; clears out other scripts and assigns a specific script
2022-10-24 23:42:16 +08:00
UI16 scriptId = static_cast<UI16>( encaps.toInt() );
cScript *toExecute = JSMapping->GetScript( scriptId );
2021-06-12 07:30:23 -04:00
if( toExecute == nullptr )
Minor JS revamp - multiple scripts per object! Added TryParseJSVal() helper function in cScript.cpp, used to parse jsval values returned from script events. Provides results matching 0 (0, false), 1 (1, true) or any specific int value returned from script. JS events updated to use new TryParseJSVal helper function (no change in behaviour): onDecay, onResurrect, onCommand, onBuyFromVendor, onSellToVendor, onPickup, onCharDoubleClick, onSkillGump, onUseBandageMacro, onCombatStart, onCombatEnd, onDeathBlow, onBuy, onSell JS events with slight change of behaviour after update to use TryParseJSVal: onDrop, onDropItemOnItem, onDropItemOnNpc - previously, a blank or non-existent return value would be treated the same as a return true. This will now be treated as a return false. Update scripts accordingly! JS events updated to support return values from scripts: onCollide, onTalk, onSnooped, OnHungerChange Return false or nothing to prevent hard code from running Return true to allow hard code to run like normal onStolenFrom, onAISliver, onLightChange, onVirtueGumpPress, onQuestGump, onSpecialMove, onSwing, onClick, onHouseCommand, onSellToVendor, onSkillCheck, onSpellGain, onSpellLoss Return false to allow hard code and other scripts with event to run like normal Return true to prevent hard code and other scripts with event from running onSteal Return false or nothing to allow hard code and other scripts with event to run like normal Return true to prevent hard code and onStolenFrom event from running (theft failed?) Return 2 to prevent hard code, but allow onStolenFrom event to run (theft succeeded, but handled in script?) onLeaving, onEntrance, onEquip, onUnequip, onEnterEvadeState, onSoldToVendor, onBoughtFromVendor, onSpellSuccess, onSpellTarget, onFlagChange, onDeath Return false or nothing to allow other scripts with event to run like normal Return true to prevent other scripts with event from running Added new JS events that run prior to items being equipped/unequipped, with support for return values: onEquipAttempt( pEquipper, iEquipping ) onUnequipAttempt( pEquipper, iUnequipping ) Return false or nothing to reject attempt to equip/unequip item, and prevent hard-code or other scripts with event from running Return true to allow hard code to run like normal Added new JS event that runs prior to onSnooped event, for character doing the snooping: onSnoopAttempt( snooped, snooper ) Return false or nothing to prevent hard code and other snooping-related events from running Return true to allow hard code and other snooping-related events to run like normal Updated onSnooped JS event to accept return values: Return true when success state is true to prevent other scripts with event from running Return true when success state is false to prevent hard code and other scripts with event from running Updated onClick JS event to also run for characters with event attached (return 1 to prevent showing hard-coded name for whatever object is clicked) Updated onSteal JS event to include a third parameter, an object reference for the target of the theft Added support for assigning multiple JS scripts per object (item, multi, char, region). Any time a scriptID is added to an object, the list of such IDs for that object will be sorted from lowest to highest scriptID, which also determines the execution order for the scripts. Note that if the same JS event is present in several scripts assigned to an object, each of those events will trigger, unless the rules about return values for said event prevent this DFNs for Items, Multis, Characters and Regions can now contain multiple SCRIPT=scriptID tags per definition. Each such SCRIPT tag will be applied to the object in question, then sorted from lowest to highest scriptID by server. Added new JS property for Items, Multis, Characters and Regions: .scriptTriggers // If used to get property, will return array object with all script IDs assigned to object. If used to set property, will add script ID to existing list of script IDs for object. Modified JS property for Items, Multis, Characters and Regions, which for backwards compatibility functions similar to in older versions: .scripttrigger // If used to get property, will return last script ID in list of script IDs assigned to object. If used to set property, will clear list of script IDs and assign only the new ID Added new JS Methods for Items, Multis, Characters and Regions: .AddScriptTrigger( scriptID ) // Adds a new scriptID to list of scripts assigned to object .RemoveScriptTrigger( scriptID ) // Remove a specific scriptID from object (0 = remove all) Moved SETSCPTRIG command from code to JS (js/commands/targeting/scptrig.js), and supplemented it with some additional commands: GETSCPTRIG // List out all scriptIDs assigned to object SETSCPTRIG scriptID // Clears list of scriptIDs for object, then assigns the specified scriptID ADDSCPTRIG scriptID // Adds specified scriptID to list of scriptsIDs assigned to object REMOVESCPTRIG scriptID // Removes specified scriptID from list of scriptIDs assigned to object (0 = remove all)
2021-05-25 19:37:52 +08:00
{
ScriptError( cx, oldstrutil::format( "Unable to assign script trigger - script ID (%i) not found in jse_fileassociations.scp!", scriptId ).c_str() );
Minor JS revamp - multiple scripts per object! Added TryParseJSVal() helper function in cScript.cpp, used to parse jsval values returned from script events. Provides results matching 0 (0, false), 1 (1, true) or any specific int value returned from script. JS events updated to use new TryParseJSVal helper function (no change in behaviour): onDecay, onResurrect, onCommand, onBuyFromVendor, onSellToVendor, onPickup, onCharDoubleClick, onSkillGump, onUseBandageMacro, onCombatStart, onCombatEnd, onDeathBlow, onBuy, onSell JS events with slight change of behaviour after update to use TryParseJSVal: onDrop, onDropItemOnItem, onDropItemOnNpc - previously, a blank or non-existent return value would be treated the same as a return true. This will now be treated as a return false. Update scripts accordingly! JS events updated to support return values from scripts: onCollide, onTalk, onSnooped, OnHungerChange Return false or nothing to prevent hard code from running Return true to allow hard code to run like normal onStolenFrom, onAISliver, onLightChange, onVirtueGumpPress, onQuestGump, onSpecialMove, onSwing, onClick, onHouseCommand, onSellToVendor, onSkillCheck, onSpellGain, onSpellLoss Return false to allow hard code and other scripts with event to run like normal Return true to prevent hard code and other scripts with event from running onSteal Return false or nothing to allow hard code and other scripts with event to run like normal Return true to prevent hard code and onStolenFrom event from running (theft failed?) Return 2 to prevent hard code, but allow onStolenFrom event to run (theft succeeded, but handled in script?) onLeaving, onEntrance, onEquip, onUnequip, onEnterEvadeState, onSoldToVendor, onBoughtFromVendor, onSpellSuccess, onSpellTarget, onFlagChange, onDeath Return false or nothing to allow other scripts with event to run like normal Return true to prevent other scripts with event from running Added new JS events that run prior to items being equipped/unequipped, with support for return values: onEquipAttempt( pEquipper, iEquipping ) onUnequipAttempt( pEquipper, iUnequipping ) Return false or nothing to reject attempt to equip/unequip item, and prevent hard-code or other scripts with event from running Return true to allow hard code to run like normal Added new JS event that runs prior to onSnooped event, for character doing the snooping: onSnoopAttempt( snooped, snooper ) Return false or nothing to prevent hard code and other snooping-related events from running Return true to allow hard code and other snooping-related events to run like normal Updated onSnooped JS event to accept return values: Return true when success state is true to prevent other scripts with event from running Return true when success state is false to prevent hard code and other scripts with event from running Updated onClick JS event to also run for characters with event attached (return 1 to prevent showing hard-coded name for whatever object is clicked) Updated onSteal JS event to include a third parameter, an object reference for the target of the theft Added support for assigning multiple JS scripts per object (item, multi, char, region). Any time a scriptID is added to an object, the list of such IDs for that object will be sorted from lowest to highest scriptID, which also determines the execution order for the scripts. Note that if the same JS event is present in several scripts assigned to an object, each of those events will trigger, unless the rules about return values for said event prevent this DFNs for Items, Multis, Characters and Regions can now contain multiple SCRIPT=scriptID tags per definition. Each such SCRIPT tag will be applied to the object in question, then sorted from lowest to highest scriptID by server. Added new JS property for Items, Multis, Characters and Regions: .scriptTriggers // If used to get property, will return array object with all script IDs assigned to object. If used to set property, will add script ID to existing list of script IDs for object. Modified JS property for Items, Multis, Characters and Regions, which for backwards compatibility functions similar to in older versions: .scripttrigger // If used to get property, will return last script ID in list of script IDs assigned to object. If used to set property, will clear list of script IDs and assign only the new ID Added new JS Methods for Items, Multis, Characters and Regions: .AddScriptTrigger( scriptID ) // Adds a new scriptID to list of scripts assigned to object .RemoveScriptTrigger( scriptID ) // Remove a specific scriptID from object (0 = remove all) Moved SETSCPTRIG command from code to JS (js/commands/targeting/scptrig.js), and supplemented it with some additional commands: GETSCPTRIG // List out all scriptIDs assigned to object SETSCPTRIG scriptID // Clears list of scriptIDs for object, then assigns the specified scriptID ADDSCPTRIG scriptID // Adds specified scriptID to list of scriptsIDs assigned to object REMOVESCPTRIG scriptID // Removes specified scriptID from list of scriptIDs assigned to object (0 = remove all)
2021-05-25 19:37:52 +08:00
}
else
{
gPriv->ClearScriptTriggers();
gPriv->AddScriptTrigger( scriptId );
Minor JS revamp - multiple scripts per object! Added TryParseJSVal() helper function in cScript.cpp, used to parse jsval values returned from script events. Provides results matching 0 (0, false), 1 (1, true) or any specific int value returned from script. JS events updated to use new TryParseJSVal helper function (no change in behaviour): onDecay, onResurrect, onCommand, onBuyFromVendor, onSellToVendor, onPickup, onCharDoubleClick, onSkillGump, onUseBandageMacro, onCombatStart, onCombatEnd, onDeathBlow, onBuy, onSell JS events with slight change of behaviour after update to use TryParseJSVal: onDrop, onDropItemOnItem, onDropItemOnNpc - previously, a blank or non-existent return value would be treated the same as a return true. This will now be treated as a return false. Update scripts accordingly! JS events updated to support return values from scripts: onCollide, onTalk, onSnooped, OnHungerChange Return false or nothing to prevent hard code from running Return true to allow hard code to run like normal onStolenFrom, onAISliver, onLightChange, onVirtueGumpPress, onQuestGump, onSpecialMove, onSwing, onClick, onHouseCommand, onSellToVendor, onSkillCheck, onSpellGain, onSpellLoss Return false to allow hard code and other scripts with event to run like normal Return true to prevent hard code and other scripts with event from running onSteal Return false or nothing to allow hard code and other scripts with event to run like normal Return true to prevent hard code and onStolenFrom event from running (theft failed?) Return 2 to prevent hard code, but allow onStolenFrom event to run (theft succeeded, but handled in script?) onLeaving, onEntrance, onEquip, onUnequip, onEnterEvadeState, onSoldToVendor, onBoughtFromVendor, onSpellSuccess, onSpellTarget, onFlagChange, onDeath Return false or nothing to allow other scripts with event to run like normal Return true to prevent other scripts with event from running Added new JS events that run prior to items being equipped/unequipped, with support for return values: onEquipAttempt( pEquipper, iEquipping ) onUnequipAttempt( pEquipper, iUnequipping ) Return false or nothing to reject attempt to equip/unequip item, and prevent hard-code or other scripts with event from running Return true to allow hard code to run like normal Added new JS event that runs prior to onSnooped event, for character doing the snooping: onSnoopAttempt( snooped, snooper ) Return false or nothing to prevent hard code and other snooping-related events from running Return true to allow hard code and other snooping-related events to run like normal Updated onSnooped JS event to accept return values: Return true when success state is true to prevent other scripts with event from running Return true when success state is false to prevent hard code and other scripts with event from running Updated onClick JS event to also run for characters with event attached (return 1 to prevent showing hard-coded name for whatever object is clicked) Updated onSteal JS event to include a third parameter, an object reference for the target of the theft Added support for assigning multiple JS scripts per object (item, multi, char, region). Any time a scriptID is added to an object, the list of such IDs for that object will be sorted from lowest to highest scriptID, which also determines the execution order for the scripts. Note that if the same JS event is present in several scripts assigned to an object, each of those events will trigger, unless the rules about return values for said event prevent this DFNs for Items, Multis, Characters and Regions can now contain multiple SCRIPT=scriptID tags per definition. Each such SCRIPT tag will be applied to the object in question, then sorted from lowest to highest scriptID by server. Added new JS property for Items, Multis, Characters and Regions: .scriptTriggers // If used to get property, will return array object with all script IDs assigned to object. If used to set property, will add script ID to existing list of script IDs for object. Modified JS property for Items, Multis, Characters and Regions, which for backwards compatibility functions similar to in older versions: .scripttrigger // If used to get property, will return last script ID in list of script IDs assigned to object. If used to set property, will clear list of script IDs and assign only the new ID Added new JS Methods for Items, Multis, Characters and Regions: .AddScriptTrigger( scriptID ) // Adds a new scriptID to list of scripts assigned to object .RemoveScriptTrigger( scriptID ) // Remove a specific scriptID from object (0 = remove all) Moved SETSCPTRIG command from code to JS (js/commands/targeting/scptrig.js), and supplemented it with some additional commands: GETSCPTRIG // List out all scriptIDs assigned to object SETSCPTRIG scriptID // Clears list of scriptIDs for object, then assigns the specified scriptID ADDSCPTRIG scriptID // Adds specified scriptID to list of scriptsIDs assigned to object REMOVESCPTRIG scriptID // Removes specified scriptID from list of scriptIDs assigned to object (0 = remove all)
2021-05-25 19:37:52 +08:00
}
break;
}
case CCP_SCRIPTTRIGGERS:
{
if( *vp != JSVAL_NULL )
{
2022-10-24 23:42:16 +08:00
UI16 scriptId = static_cast<UI16>( encaps.toInt() );
cScript *toExecute = JSMapping->GetScript( scriptId );
2021-06-12 07:30:23 -04:00
if( toExecute == nullptr )
Minor JS revamp - multiple scripts per object! Added TryParseJSVal() helper function in cScript.cpp, used to parse jsval values returned from script events. Provides results matching 0 (0, false), 1 (1, true) or any specific int value returned from script. JS events updated to use new TryParseJSVal helper function (no change in behaviour): onDecay, onResurrect, onCommand, onBuyFromVendor, onSellToVendor, onPickup, onCharDoubleClick, onSkillGump, onUseBandageMacro, onCombatStart, onCombatEnd, onDeathBlow, onBuy, onSell JS events with slight change of behaviour after update to use TryParseJSVal: onDrop, onDropItemOnItem, onDropItemOnNpc - previously, a blank or non-existent return value would be treated the same as a return true. This will now be treated as a return false. Update scripts accordingly! JS events updated to support return values from scripts: onCollide, onTalk, onSnooped, OnHungerChange Return false or nothing to prevent hard code from running Return true to allow hard code to run like normal onStolenFrom, onAISliver, onLightChange, onVirtueGumpPress, onQuestGump, onSpecialMove, onSwing, onClick, onHouseCommand, onSellToVendor, onSkillCheck, onSpellGain, onSpellLoss Return false to allow hard code and other scripts with event to run like normal Return true to prevent hard code and other scripts with event from running onSteal Return false or nothing to allow hard code and other scripts with event to run like normal Return true to prevent hard code and onStolenFrom event from running (theft failed?) Return 2 to prevent hard code, but allow onStolenFrom event to run (theft succeeded, but handled in script?) onLeaving, onEntrance, onEquip, onUnequip, onEnterEvadeState, onSoldToVendor, onBoughtFromVendor, onSpellSuccess, onSpellTarget, onFlagChange, onDeath Return false or nothing to allow other scripts with event to run like normal Return true to prevent other scripts with event from running Added new JS events that run prior to items being equipped/unequipped, with support for return values: onEquipAttempt( pEquipper, iEquipping ) onUnequipAttempt( pEquipper, iUnequipping ) Return false or nothing to reject attempt to equip/unequip item, and prevent hard-code or other scripts with event from running Return true to allow hard code to run like normal Added new JS event that runs prior to onSnooped event, for character doing the snooping: onSnoopAttempt( snooped, snooper ) Return false or nothing to prevent hard code and other snooping-related events from running Return true to allow hard code and other snooping-related events to run like normal Updated onSnooped JS event to accept return values: Return true when success state is true to prevent other scripts with event from running Return true when success state is false to prevent hard code and other scripts with event from running Updated onClick JS event to also run for characters with event attached (return 1 to prevent showing hard-coded name for whatever object is clicked) Updated onSteal JS event to include a third parameter, an object reference for the target of the theft Added support for assigning multiple JS scripts per object (item, multi, char, region). Any time a scriptID is added to an object, the list of such IDs for that object will be sorted from lowest to highest scriptID, which also determines the execution order for the scripts. Note that if the same JS event is present in several scripts assigned to an object, each of those events will trigger, unless the rules about return values for said event prevent this DFNs for Items, Multis, Characters and Regions can now contain multiple SCRIPT=scriptID tags per definition. Each such SCRIPT tag will be applied to the object in question, then sorted from lowest to highest scriptID by server. Added new JS property for Items, Multis, Characters and Regions: .scriptTriggers // If used to get property, will return array object with all script IDs assigned to object. If used to set property, will add script ID to existing list of script IDs for object. Modified JS property for Items, Multis, Characters and Regions, which for backwards compatibility functions similar to in older versions: .scripttrigger // If used to get property, will return last script ID in list of script IDs assigned to object. If used to set property, will clear list of script IDs and assign only the new ID Added new JS Methods for Items, Multis, Characters and Regions: .AddScriptTrigger( scriptID ) // Adds a new scriptID to list of scripts assigned to object .RemoveScriptTrigger( scriptID ) // Remove a specific scriptID from object (0 = remove all) Moved SETSCPTRIG command from code to JS (js/commands/targeting/scptrig.js), and supplemented it with some additional commands: GETSCPTRIG // List out all scriptIDs assigned to object SETSCPTRIG scriptID // Clears list of scriptIDs for object, then assigns the specified scriptID ADDSCPTRIG scriptID // Adds specified scriptID to list of scriptsIDs assigned to object REMOVESCPTRIG scriptID // Removes specified scriptID from list of scriptIDs assigned to object (0 = remove all)
2021-05-25 19:37:52 +08:00
{
ScriptError( cx, oldstrutil::format( "Unable to assign script trigger - script ID (%i) not found in jse_fileassociations.scp!", scriptId ).c_str() );
Minor JS revamp - multiple scripts per object! Added TryParseJSVal() helper function in cScript.cpp, used to parse jsval values returned from script events. Provides results matching 0 (0, false), 1 (1, true) or any specific int value returned from script. JS events updated to use new TryParseJSVal helper function (no change in behaviour): onDecay, onResurrect, onCommand, onBuyFromVendor, onSellToVendor, onPickup, onCharDoubleClick, onSkillGump, onUseBandageMacro, onCombatStart, onCombatEnd, onDeathBlow, onBuy, onSell JS events with slight change of behaviour after update to use TryParseJSVal: onDrop, onDropItemOnItem, onDropItemOnNpc - previously, a blank or non-existent return value would be treated the same as a return true. This will now be treated as a return false. Update scripts accordingly! JS events updated to support return values from scripts: onCollide, onTalk, onSnooped, OnHungerChange Return false or nothing to prevent hard code from running Return true to allow hard code to run like normal onStolenFrom, onAISliver, onLightChange, onVirtueGumpPress, onQuestGump, onSpecialMove, onSwing, onClick, onHouseCommand, onSellToVendor, onSkillCheck, onSpellGain, onSpellLoss Return false to allow hard code and other scripts with event to run like normal Return true to prevent hard code and other scripts with event from running onSteal Return false or nothing to allow hard code and other scripts with event to run like normal Return true to prevent hard code and onStolenFrom event from running (theft failed?) Return 2 to prevent hard code, but allow onStolenFrom event to run (theft succeeded, but handled in script?) onLeaving, onEntrance, onEquip, onUnequip, onEnterEvadeState, onSoldToVendor, onBoughtFromVendor, onSpellSuccess, onSpellTarget, onFlagChange, onDeath Return false or nothing to allow other scripts with event to run like normal Return true to prevent other scripts with event from running Added new JS events that run prior to items being equipped/unequipped, with support for return values: onEquipAttempt( pEquipper, iEquipping ) onUnequipAttempt( pEquipper, iUnequipping ) Return false or nothing to reject attempt to equip/unequip item, and prevent hard-code or other scripts with event from running Return true to allow hard code to run like normal Added new JS event that runs prior to onSnooped event, for character doing the snooping: onSnoopAttempt( snooped, snooper ) Return false or nothing to prevent hard code and other snooping-related events from running Return true to allow hard code and other snooping-related events to run like normal Updated onSnooped JS event to accept return values: Return true when success state is true to prevent other scripts with event from running Return true when success state is false to prevent hard code and other scripts with event from running Updated onClick JS event to also run for characters with event attached (return 1 to prevent showing hard-coded name for whatever object is clicked) Updated onSteal JS event to include a third parameter, an object reference for the target of the theft Added support for assigning multiple JS scripts per object (item, multi, char, region). Any time a scriptID is added to an object, the list of such IDs for that object will be sorted from lowest to highest scriptID, which also determines the execution order for the scripts. Note that if the same JS event is present in several scripts assigned to an object, each of those events will trigger, unless the rules about return values for said event prevent this DFNs for Items, Multis, Characters and Regions can now contain multiple SCRIPT=scriptID tags per definition. Each such SCRIPT tag will be applied to the object in question, then sorted from lowest to highest scriptID by server. Added new JS property for Items, Multis, Characters and Regions: .scriptTriggers // If used to get property, will return array object with all script IDs assigned to object. If used to set property, will add script ID to existing list of script IDs for object. Modified JS property for Items, Multis, Characters and Regions, which for backwards compatibility functions similar to in older versions: .scripttrigger // If used to get property, will return last script ID in list of script IDs assigned to object. If used to set property, will clear list of script IDs and assign only the new ID Added new JS Methods for Items, Multis, Characters and Regions: .AddScriptTrigger( scriptID ) // Adds a new scriptID to list of scripts assigned to object .RemoveScriptTrigger( scriptID ) // Remove a specific scriptID from object (0 = remove all) Moved SETSCPTRIG command from code to JS (js/commands/targeting/scptrig.js), and supplemented it with some additional commands: GETSCPTRIG // List out all scriptIDs assigned to object SETSCPTRIG scriptID // Clears list of scriptIDs for object, then assigns the specified scriptID ADDSCPTRIG scriptID // Adds specified scriptID to list of scriptsIDs assigned to object REMOVESCPTRIG scriptID // Removes specified scriptID from list of scriptIDs assigned to object (0 = remove all)
2021-05-25 19:37:52 +08:00
}
else
{
gPriv->AddScriptTrigger( scriptId );
Minor JS revamp - multiple scripts per object! Added TryParseJSVal() helper function in cScript.cpp, used to parse jsval values returned from script events. Provides results matching 0 (0, false), 1 (1, true) or any specific int value returned from script. JS events updated to use new TryParseJSVal helper function (no change in behaviour): onDecay, onResurrect, onCommand, onBuyFromVendor, onSellToVendor, onPickup, onCharDoubleClick, onSkillGump, onUseBandageMacro, onCombatStart, onCombatEnd, onDeathBlow, onBuy, onSell JS events with slight change of behaviour after update to use TryParseJSVal: onDrop, onDropItemOnItem, onDropItemOnNpc - previously, a blank or non-existent return value would be treated the same as a return true. This will now be treated as a return false. Update scripts accordingly! JS events updated to support return values from scripts: onCollide, onTalk, onSnooped, OnHungerChange Return false or nothing to prevent hard code from running Return true to allow hard code to run like normal onStolenFrom, onAISliver, onLightChange, onVirtueGumpPress, onQuestGump, onSpecialMove, onSwing, onClick, onHouseCommand, onSellToVendor, onSkillCheck, onSpellGain, onSpellLoss Return false to allow hard code and other scripts with event to run like normal Return true to prevent hard code and other scripts with event from running onSteal Return false or nothing to allow hard code and other scripts with event to run like normal Return true to prevent hard code and onStolenFrom event from running (theft failed?) Return 2 to prevent hard code, but allow onStolenFrom event to run (theft succeeded, but handled in script?) onLeaving, onEntrance, onEquip, onUnequip, onEnterEvadeState, onSoldToVendor, onBoughtFromVendor, onSpellSuccess, onSpellTarget, onFlagChange, onDeath Return false or nothing to allow other scripts with event to run like normal Return true to prevent other scripts with event from running Added new JS events that run prior to items being equipped/unequipped, with support for return values: onEquipAttempt( pEquipper, iEquipping ) onUnequipAttempt( pEquipper, iUnequipping ) Return false or nothing to reject attempt to equip/unequip item, and prevent hard-code or other scripts with event from running Return true to allow hard code to run like normal Added new JS event that runs prior to onSnooped event, for character doing the snooping: onSnoopAttempt( snooped, snooper ) Return false or nothing to prevent hard code and other snooping-related events from running Return true to allow hard code and other snooping-related events to run like normal Updated onSnooped JS event to accept return values: Return true when success state is true to prevent other scripts with event from running Return true when success state is false to prevent hard code and other scripts with event from running Updated onClick JS event to also run for characters with event attached (return 1 to prevent showing hard-coded name for whatever object is clicked) Updated onSteal JS event to include a third parameter, an object reference for the target of the theft Added support for assigning multiple JS scripts per object (item, multi, char, region). Any time a scriptID is added to an object, the list of such IDs for that object will be sorted from lowest to highest scriptID, which also determines the execution order for the scripts. Note that if the same JS event is present in several scripts assigned to an object, each of those events will trigger, unless the rules about return values for said event prevent this DFNs for Items, Multis, Characters and Regions can now contain multiple SCRIPT=scriptID tags per definition. Each such SCRIPT tag will be applied to the object in question, then sorted from lowest to highest scriptID by server. Added new JS property for Items, Multis, Characters and Regions: .scriptTriggers // If used to get property, will return array object with all script IDs assigned to object. If used to set property, will add script ID to existing list of script IDs for object. Modified JS property for Items, Multis, Characters and Regions, which for backwards compatibility functions similar to in older versions: .scripttrigger // If used to get property, will return last script ID in list of script IDs assigned to object. If used to set property, will clear list of script IDs and assign only the new ID Added new JS Methods for Items, Multis, Characters and Regions: .AddScriptTrigger( scriptID ) // Adds a new scriptID to list of scripts assigned to object .RemoveScriptTrigger( scriptID ) // Remove a specific scriptID from object (0 = remove all) Moved SETSCPTRIG command from code to JS (js/commands/targeting/scptrig.js), and supplemented it with some additional commands: GETSCPTRIG // List out all scriptIDs assigned to object SETSCPTRIG scriptID // Clears list of scriptIDs for object, then assigns the specified scriptID ADDSCPTRIG scriptID // Adds specified scriptID to list of scriptsIDs assigned to object REMOVESCPTRIG scriptID // Removes specified scriptID from list of scriptIDs assigned to object (0 = remove all)
2021-05-25 19:37:52 +08:00
}
}
else
{
// If null value was provided, clear script triggers on object
gPriv->ClearScriptTriggers();
}
break;
}
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
case CCP_WORLDNUMBER:
if( !Map->InsideValidWorld( gPriv->GetX(), gPriv->GetY(), static_cast<UI08>( encaps.toInt() )))
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
return JS_FALSE;
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
gPriv->RemoveFromSight();
gPriv->SetLocation( gPriv->GetX(), gPriv->GetY(), gPriv->GetZ(), static_cast<UI08>( encaps.toInt() ), gPriv->GetInstanceId() );
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
if( !gPriv->IsNpc() )
{
SendMapChange( static_cast<UI08>( encaps.toInt() ), gPriv->GetSocket() );
}
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
break;
case CCP_INSTANCEID:
{
// Remove character from nearby players
gPriv->RemoveFromSight();
Instance-support and misc code cleanup Misc code and documentation cleanup: Updated and standardized function comment blocks throughout entire codebase Grouped getters and setters together in pairs and documented them as one Removed empty and/or non-useful information from comment blocks Removed unused function from cItem.cpp/h - IncID() - formerly used to change IDs for doors Added new feature - Instances Objects (characters, items, multis, spawnregions) can now make use of a 5th parameter to determine their location in the game world. In addition to the traditional X, Y, Z and WORLDNUMBER parameters, a new one has been added - INSTANCEID - that allows objects to exist at the same coordinates in the same world, but in different "dimensions". Code has been updated in multiple places to support this, and a default instanceID of 0 is assumed if nothing else is specified. Added support for new DFN tag in town regions, spawn regions and locations - INSTANCEID (defaults to 0 if not present) Added support for another start location parameter after worldNum in UOX.INI representing instanceID (defaults to 0 if not present) Updated TWEAK menu to include WorldNumber and instanceID Fixed BaseWeight option in TWEAK menu Updated CBase_Teleport - now takes an optional 5th parameter instanceID Updated SE_SpawnNPC now takes an optional 5th parameter - instanceID Updated SE_FindMulti now takes an optional 5th parameter - instanceID Updated SE_GetItem now takes an optional 5th parameter - instanceID Updated SE_FindItem now takes an optional 6th parameter - instanceID Added new JS property for Items, Characters, Regions: .instanceID Added JS property for Regions: .members - returns comma-separated list of town member serials Updated JS scripts making use of the above-mentioned JS Methods/Functions Updated dictionaries with new tweak menu entry texts Exposed SpawnRegions to JS engine, and updated JS docs with details: SpawnRegion JS Functions IterateOverSpawnRegions() GetSpawnRegion( spawnRegNum ) GetSpawnRegionCount() SpawnRegion JS Properties name regionNum itemList npcList item npc maxItems maxNpcs itemCount npcCount onlyOutside prefZ x1 y1 x2 y2 world instanceID minTime maxTime call
2020-08-08 13:57:15 +08:00
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
// Remove nearby objects from player!
if( !gPriv->IsNpc() )
{
gPriv->RemoveAllObjectsFromSight( gPriv->GetSocket() );
Instance-support and misc code cleanup Misc code and documentation cleanup: Updated and standardized function comment blocks throughout entire codebase Grouped getters and setters together in pairs and documented them as one Removed empty and/or non-useful information from comment blocks Removed unused function from cItem.cpp/h - IncID() - formerly used to change IDs for doors Added new feature - Instances Objects (characters, items, multis, spawnregions) can now make use of a 5th parameter to determine their location in the game world. In addition to the traditional X, Y, Z and WORLDNUMBER parameters, a new one has been added - INSTANCEID - that allows objects to exist at the same coordinates in the same world, but in different "dimensions". Code has been updated in multiple places to support this, and a default instanceID of 0 is assumed if nothing else is specified. Added support for new DFN tag in town regions, spawn regions and locations - INSTANCEID (defaults to 0 if not present) Added support for another start location parameter after worldNum in UOX.INI representing instanceID (defaults to 0 if not present) Updated TWEAK menu to include WorldNumber and instanceID Fixed BaseWeight option in TWEAK menu Updated CBase_Teleport - now takes an optional 5th parameter instanceID Updated SE_SpawnNPC now takes an optional 5th parameter - instanceID Updated SE_FindMulti now takes an optional 5th parameter - instanceID Updated SE_GetItem now takes an optional 5th parameter - instanceID Updated SE_FindItem now takes an optional 6th parameter - instanceID Added new JS property for Items, Characters, Regions: .instanceID Added JS property for Regions: .members - returns comma-separated list of town member serials Updated JS scripts making use of the above-mentioned JS Methods/Functions Updated dictionaries with new tweak menu entry texts Exposed SpawnRegions to JS engine, and updated JS docs with details: SpawnRegion JS Functions IterateOverSpawnRegions() GetSpawnRegion( spawnRegNum ) GetSpawnRegionCount() SpawnRegion JS Properties name regionNum itemList npcList item npc maxItems maxNpcs itemCount npcCount onlyOutside prefZ x1 y1 x2 y2 world instanceID minTime maxTime call
2020-08-08 13:57:15 +08:00
}
gPriv->SetLocation( gPriv->GetX(), gPriv->GetY(), gPriv->GetZ(), gPriv->WorldNumber(), static_cast<UI16>( encaps.toInt() ));
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
break;
}
case CCP_TARGET:
//TODO: Check if the user(admin per jscript) can set the target
if( *vp != JSVAL_NULL )
{
CChar *myChar = static_cast<CChar *>( encaps.toObject() );
if( !ValidateObject( myChar ))
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
break;
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
gPriv->SetTarg( myChar );
}
else
{
2021-06-12 07:30:23 -04:00
gPriv->SetTarg( nullptr );
}
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
break;
case CCP_DEXTERITY: gPriv->SetDexterity( encaps.toInt() ); break;
case CCP_INTELLIGENCE: gPriv->SetIntelligence( encaps.toInt() ); break;
case CCP_STRENGTH: gPriv->SetStrength( encaps.toInt() ); break;
case CCP_SKILLS: break;
case CCP_MANA: gPriv->SetMana( encaps.toInt() ); break;
case CCP_STAMINA: gPriv->SetStamina( encaps.toInt() ); break;
case CCP_CHARPACK: break;
case CCP_FAME: gPriv->SetFame( static_cast<SI16>( encaps.toInt() )); break;
case CCP_KARMA: gPriv->SetKarma( static_cast<SI16>( encaps.toInt() )); break;
case CCP_HUNGER: gPriv->SetHunger( static_cast<SI08>( encaps.toInt() )); break;
case CCP_THIRST: gPriv->SetThirst( static_cast<SI08>( encaps.toInt() )); break;
case CCP_CANATTACK: gPriv->SetCanAttack( encaps.toBool() ); break;
case CCP_KARMALOCK: gPriv->SetKarmaLock( encaps.toBool() ); break;
case CCP_FLEEAT: gPriv->SetFleeAt( static_cast<SI16>( encaps.toInt() )); break;
case CCP_REATTACKAT: gPriv->SetReattackAt( static_cast<SI16>( encaps.toInt() )); break;
case CCP_BRKPEACE: gPriv->SetBrkPeaceChance( encaps.toInt() ); break;
case CCP_SETPEACE: gPriv->SetPeace( encaps.toInt() ); break;
case CCP_FROZEN: gPriv->SetFrozen( encaps.toBool() ); break;
case CCP_COMMANDLEVEL: gPriv->SetCommandLevel( static_cast<UI08>( encaps.toInt() )); break;
case CCP_RACE: Races->ApplyRace( gPriv, static_cast<RACEID>( encaps.toInt() ), true ); break;
case CCP_MAXHP: gPriv->SetFixedMaxHP( static_cast<SI16>( encaps.toInt() )); break;
case CCP_MAXMANA: gPriv->SetFixedMaxMana( static_cast<SI16>( encaps.toInt() )); break;
case CCP_MAXSTAMINA: gPriv->SetFixedMaxStam( static_cast<SI16>( encaps.toInt() )); break;
Thief Revamp - 0.99.6-RC5 Added script for NPC guildmasters (js/npc/ai/guildmaster.js). Only one NPC guild has been setup in the script so far (more can be easily added) - the Thieves Guild - which if joined grants players the ability to steal from other players and to buy disguise kits Added two new NPCs, which there will now spawn one of in a random location in each city in Britannia (felucca facet): m_thief_guildmaster (dfndata/npc/male_human.dfn) f_thief_guildmaster (dfndata/npc/female_Human.dfn) Added two new character properties to keep track of which NPC guild a player (or NPC) belongs to. These properties have been exposed as the following Character JS properties: .npcGuild // ID of NPC guild, as defined in script .npcGuildJoined // Timestamp for when player joined NPC guild Added script for Disguise Kits (js/item/disguisekit.js). These allow members of the Thieves Guild to disguise themselves from the prying eyes of other players. Added two new character properties: .isDisguised // true/false flag for character being disguised .origName // used to store character's original name before disguise went into effect Moved implementation of Stealing skill from code to script (js/skill/stealing.js) and revamped it completely in the process. Changes include: New features: Town rare stealing - any item marked as "special stealable" with new item property .stealable can be stolen, even if it's locked down by a GM on the ground, or inside a container When stealing from item piles, thief can potentially steal the amount of items that makes up the max weight limit for what they can steal, from those piles Chance to successfully steal is now affected by whether there are any characters (NPCs or Players) that witness the attempt. Depends on distance to character, and direction character is facing Players now become "permagrey" when successfully stealing from another player, regardless of whether it's witnessed Players now receive a "stealing" flag when stealing from another player, regardless of whether it's witnessed Stolen items cannot be removed from thief's backpack for 30 seconds following the theft of the item (AoS core shard era and above) Optional AoS feature to steal special consumable items from monsters Updated default stealing rules: Updated calculations to determine chance of success when stealing Players cannot steal while engaged in combat Players are revealed if hidden as soon as they use the stealing skill Players can no longer steal items in the secure trade window Players can no longer steal items from NPC shopkeepers Both hands must be free to steal Stealing now checks line of sight to target player/object Only members of Thieves Guild (NPC guild) can now steal from other players, unless they are guild enemies Players can no longer steal from NPC guards by default Players can no longer steal from the same NPC monster more than once Only gold and gems can be stolen from innocent players in dungeon/ll areas of Felucca, if core shard era is set to AoS or higher Players can no longer steal items held on cursor by other players Orcish masks now eplode if player steals from orcs while wearing it If core shard era is set to LBR or lower, player is marked as an aggressor if they steal from another player Guards can only be called on players that are flagged as criminals within the first 10 seconds of them being flagged Stealing script options: Allow stealing entire containers (off by default pre-AoS) Return stolen items on thief death (off by default) Temporarily make stolen items immovable in thief's backpack (on by default post-AoS) Temporarily protect traded items (on by default) Let dexterity affect chance for successful theft (off by default) Let light level affect chance for successful theft (off by default) Allow stealing from NPC Guards (off by default) Allow stealing special loot from monsters (on by default post-ml) Moved implementation of Snooping skill from code to script (js/skill/snooping.js), with some changes: Players cannot snoop pack animals from inside a house, if the animal is outside The deeper inside main backpack a container sits, the harder it becomes to snoop inside it Included an optional feature that lets targets of snooping gradually become more aware, increasing the difficulty of succeeding. This awareness fades over time. Players have a chance to stay hidden while snooping, based on their Hiding skill Karma is now lowered by snooping regardless of success or failure Added tracking system for "aggressors" in combat. A player attacking someone (regardless of flag status) will be marked as aggressor to that someone for 2 minutes Added tracking system for "permagrey" flags - these are stored on a per-target basis, so a player can be flagged visibly as permagrey to multiple other players. Persists until player dies. Player combat targets and war mode are now cleared on logout Players will now be unable to hide if within visual distance and in line of sight of their attacker or current target in combat Server leave-announcement now only happens after the logout timer has expired, instead of the exact moment the player presses the logout button Fixed an issue that could cause swimming NPCs to swim on land NPCs now have the ability to temporarily ignore unreachable targets in combat. If attacked by someone they are ignoring, they will enter evade state and try to move away from that someone. SpawnRegions now support NPCLISTS with weighted entries. Example of an NPCLIST with 75% chance of spawning some kind of orc, and 25% chance of spawning a ratman archer: [NPCLIST example] { 75|NPCLIST=allorc 25|ratman } Added 3 additional "all purpose" item properties (.more0, .more1 and .more2) and exposed those to JS engine. These work the same as more/morex/morey/morez Mark spell now stores a 4th property on recall runes - instanceID. This is stored in the rune's .more0 property. Recall and Gate spells now check the recall rune (or runebook)'s 4th location property - instanceID - to determine where the player ends up Fixed a server crash related to equipment being automatically unequipped if character is no longer strong enough to have it equipped Added new JS Function to check if any characters at specified location potentially block movement: DoesCharacterBlock( x, y, z, worldNum, instanceID ) // returns true if a character exists at given coordinate (within z +/- 4)
2023-06-20 02:21:16 +08:00
case CCP_HASSTOLEN:
{
if( encaps.toBool() )
{
FlagForStealing( gPriv );
}
else
{
gPriv->HasStolen( false );
gPriv->SetTimer( tCHAR_STEALFLAG, 0 );
UpdateFlag( gPriv );
}
break;
}
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
case CCP_CRIMINAL:
if( encaps.toBool() )
{
MakeCriminal( gPriv );
}
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
else
{
gPriv->SetTimer( tCHAR_CRIMFLAG, 0 );
UpdateFlag( gPriv );
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
}
break;
case CCP_INNOCENT:
if( !encaps.toBool() )
{
MakeCriminal( gPriv );
}
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
else
{
gPriv->SetTimer( tCHAR_CRIMFLAG, 0 );
UpdateFlag( gPriv );
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
}
break;
case CCP_NEUTRAL:
if( encaps.toBool() )
{
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
gPriv->SetFlagNeutral();
}
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
else
{
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
gPriv->SetFlagBlue();
}
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
gPriv->SetTimer( tCHAR_CRIMFLAG, 0 );
UpdateFlag( gPriv );
break;
case CCP_MURDERCOUNT:
gPriv->SetKills( static_cast<SI16>( encaps.toInt() ));
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
UpdateFlag( gPriv );
break;
case CCP_GENDER:
switch( static_cast<SI16>( encaps.toInt() ))
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
{
case 0: // male
if( gPriv->IsDead() )
{
gPriv->SetId( 0x0192 );
}
else
{
gPriv->SetId( 0x0190 );
}
break;
case 1: // female
if( gPriv->IsDead() )
{
gPriv->SetId( 0x0193 );
}
else
{
gPriv->SetId( 0x0191 );
}
break;
case 2: // elf male
if( gPriv->IsDead() )
{
gPriv->SetId( 0x025F );
}
else
{
gPriv->SetId( 0x025D );
}
break;
case 3: // elf female
if( gPriv->IsDead() )
{
gPriv->SetId( 0x0260 );
}
else
{
gPriv->SetId( 0x025E );
}
break;
case 4: // gargoyle male
if( gPriv->IsDead() )
{
gPriv->SetId( 0x02B6 );
}
else
{
gPriv->SetId( 0x029A );
}
break;
case 5: // gargoyle female
if( gPriv->IsDead() )
{
gPriv->SetId( 0x02B7 );
}
else
{
gPriv->SetId( 0x029B );
}
break;
default:
break;
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
}
break;
case CCP_NPC: gPriv->SetNpc( encaps.toBool() ); break;
case CCP_AWAKE: gPriv->SetAwake( encaps.toBool() ); break;
case CCP_DIRECTION: gPriv->SetDir( static_cast<UI08>( encaps.toInt() )); break;
case CCP_REGION: gPriv->SetRegion( static_cast<UI16>( encaps.toInt() )); break;
Rework of passive stat regeneration Updated code calculating passive health, stamina and mana regeneration for characters, based on new UOX.INI settings and bonuses from characters/items/races Added three new Character/Item/Race DFN tags to grant bonus health/stamina/mana regeneration: HEALTHREGENBONUS=# // 10 bonus points equates to 0.01 extra hp regen per second, independent of era STAMINAREGENBONUS=# // 10 bonus points equates to 0.05 extra stamina regen per second MANAREGENBONUS=# // 10 bonus point equates to 0.1 extra mana regen per second ...also available as JS Properties: .healthRegenBonus .staminaRegenBonus .manaRegenBonus Updated get/set JS commands to allow getting/setting regen bonuses for health, stamina and mana Updated races.dfn to include default +2 health regen bonus for humans, and +2 mana regen bonus for gargoyles. Added new UOX.INI settings under [Skills and Stats] section: HEALTHREGENMODE=1 // 0 = no passive health regen, 1 = default passive health regen STAMINAREGENMODE=1 // 0 = no passive stamina regen, 1 = default passive stamina regen (LBR or below), 2 = AoS or beyond, 3 = SA and beyond MANAREGENMODE=1 // 0 = no passive mana regen, 1 = default passive mana regen (LBR or below), 2 = AoS (Pub17), 3 = AoS/SE (Pub18 and beyond), 4 = ML, 5 = KR, 6 = SA and beyond HEALTHREGENCAP=# // Max cap for Health Regeneration Bonus stat per character STAMINAREGENCAP=# // Max cap for Stamina Regeneration Bonus stat per character MANAREGENCAP=# // Max cap for Mana Regeneration Bonus stat per character Added new UOX.INI section ([default race bonuses]) with the following new settings for the 3 default playable races (only used if nothing else specified in races.dfn): HUMANHEALTHREGENBONUS=0 // default health regen bonus for human race (2 from ML expansion onwards) HUMANSTAMINAREGENBONUS=0 // default stamina regen bonus for human race HUMANMANAREGENBONUS=0 // default mana regen bonus for human race ELFHEALTHREGENBONUS=0 // default health regen bonus for elf race ELFSTAMINAREGENBONUS=0 // default stamina regen bonus for elf race ELFMANAREGENBONUS=0 // default mana regen bonus for elf race GARGOYLEHEALTHREGENBONUS=0 // default health regen bonus for gargoyle race GARGOYLESTAMINAREGENBONUS=0 // default stamina regen bonus for gargoyle race GARGOYLEMANAREGENBONUS=0 // default mana regen bonus for gargoyle race (2 from SA expansion onwards) Updated UOX3 Documentation with new feature section on Stat Regeneration with details on stat regeneration rules and recommended settings per UO era Added support for Medable armors (have no effect on meditation skill and/or passive regen of mana when worn) and Mage Armors (can turn non-medable armor into medable armor) These properties are defined per armor piece using the first and second bits of the MORE property: MORE=0x1 0x0 0x0 0x0 // Medable Armor MORE=0x0 0x1 0x0 0x0 // Mage Armor The following armor types have been marked as medable by default: leather armor, leather ninja armor, leather samurai armor, leaf armor, gargish cloth armor, gargish leather armor and all hats and masks Updated JS Method .Defense() to support optional fourth and fifth parameters - excludeMedableArmor (true/false) and includeShield (true/false) Updated CalfDef function to support including shields in the calculations, and updated mana regen code to include shields when checking for equipped armor Updated Meditation skill JS script to exclude medable armor from armor check, include shields, and apply different rules for active meditation depending on mana regen mode Updated stat window to include defensive rating of shields (based on Parrying skill) and/or elemental resistances (if enabled in ini) Added a new property to CRace class, which is automatically set and incremented as UOX3 loads in races from races.dfn: raceID Added new Getters/Setters for CRace class to retrieve ID of a specific Race object Updated JS property .id for Race JS Object to return new race ID instead of iterating through list of races to compare race object and return index Reloading DFNs now also reloads Races
2025-04-20 06:05:44 +08:00
case CCP_HEALTHREGENBONUS: gPriv->SetHealthRegenBonus( static_cast<SI16>( encaps.toInt() )); break;
case CCP_STAMINAREGENBONUS: gPriv->SetStaminaRegenBonus( static_cast<SI16>( encaps.toInt() )); break;
case CCP_MANAREGENBONUS: gPriv->SetManaRegenBonus( static_cast<SI16>( encaps.toInt() )); break;
UOX3 0.99.6-RC3 Updated Item DFNs with ORIGIN and SECTIONID tags for relevant items Added JS Function to make comparing eras (based on object origin or server settings) easier: EraStringToNum( eraString ) // Takes an era string (uo, t2a, uor, td, lbr, aos, etc) and returns an int Updated some JS scripts to use EraStringToNum() for era comparisons (potionkeg.js) Default CORESHARDERA setting is now LBR Removed PUB15 as a separate "era" - it's identical to late stage LBR anyway: Removed support for GETPUB15 tag Added support for GETUO tag for items/NPCs: GETUO=<sectionID> // Inherit DFN section if core shard era is Ultima Online (original release, before T2A) Rewrote portions of MsgBoardQuestEscortCreate() function in msgboard.cpp to ensure only escort regions within same world as NPC can be selected as destinations Increased maximum number of possible escort regions that can exist from 255 to 65535 Added region definitions for all shrines in Britannia (Fel & Trammel), and marked them as valid destinations for NPC escorts (uox3/regions/regions.dfn) Moved bankers from vendor to human DFN files, and made them inherit basehuman instead of basevendor - since they are not vendors To address an issue with escorted NPCs not timing out and vanishing if they are left in a "dormant" area of the world with no player activity, the NPCs are marked as "always awake" the moment they arrive at their destination. Note that the uox.ini setting ALLOWAWAKENPCS needs to be enabled for this to work. Fixed an issue where spawnsection of spawners did not show up correctly in tweak menu Fixed an issue where the generic Orc AI script didn't have a return true at end of onDamage() event, which prevented all orcs from taking damage in combat (js/npc/ai/monster/orc.js) Moved Anatomy skill-check in healing script (js/skill/healing.js) from onCallback1() function to onTimer() to prevent the skill-check from being spammable Added mount ID for Frost Mite in creatures.dfn, allowing it to be used as mount Exposed the following character properties to JS engine, which can be used to view/adjust the permanent hair/beard options for a character: .hairStyle .hairColour .beardStyle .beardColour Updated 'kill hair, 'shavehair, 'shavebeard and 'remove commands to clear permanent hair/beard colour and style properties in addition to removing the item itself Added a GM override to let GMs place as many houses as they want (js/server/house/houseDeed.js) Fixed an issue where attempting to sell items to NPC shopkeepers could result in client crashing Added a new JS Event: onMultiLogout( iMulti, cPlayer ) // Handles players logging out while inside multis Updated house script (js/server/house/house.js) with onMultiLogout event, which allows owners (always) and co-owners/friends/guests (if option enabled in uox.ini) to safely log out inside the house (without getting booted). Added a "keyless" option for interacting with locked doors (js/item/doors.js) of player-owned houses, which lets owners/co-owners/friends/guests of a house use locked doors in the house without requiring a key in their backpack, if the options for that are enabled in UOX.INI. Enabled for owners/co-owners and friends by default (but not for guests) Note that if option to safely log out is enabled, but keyless option is NOT enabled, then the server will check if the player has a key to the house in their backpack, and eject them from the house upon logging out if not. This is to make sure players don't get stuck inside a house they can't get out of because they lack the rights to open doors etc. Added new UOX.INI options, under the [houses] section: SAFECOOWNERLOGOUT=1 // Allow co-owners to safely and instantly log out inside house SAFEFRIENDLOGOUT=1 // Allow friends to safely and instantly log out inside house SAFEGUESTLOGOUT=1 // Allow guests to safely and instantly log out inside house KEYLESSOWNERACCESS=1 // Allow owner of house to use locked doors in house without key in pack KEYLESSCOOWNERACCESS=1 // Allow co-owners of house to use locked doors in house without key in pack KEYLESSFRIENDACCESS=1 // Allow friends of house to use locked doors in house without key in pack KEYLESSGUESTACCESS=0 // Allow guests of house to use locked doors in house without key in pack Fixed NOHAIR tag from races.dfn not being loaded correctly
2023-03-04 22:50:55 +08:00
case CCP_ORIGIN: gPriv->SetOrigin( cwmWorldState->ServerData()->EraStringToEnum( encaps.toString() )); break;
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
case CCP_TOWN:
cwmWorldState->townRegions[gPriv->GetTown()]->RemoveTownMember( *gPriv );
0.99.4d Added new option in UOX.INI under [settings] section: MAPDIFFSENABLED=0/1 // If enabled, server will attempt to load diff files, and send "Enable Map-diff files" packet to client to also load these. Disabled by default. Server no longer loads map/statics diff files by default, nor does it send packet to client to request loading these files, as only client versions below 7.0.8.2 will actively load these files. Can be re-enabled with new UOX.INI setting mentioned above! Fixed incorrect ID for gargish dagger in CHandleCombat::getWeaponType() Added missing weapon entries in CHandleCombat::getWeaponType(): bladed whip, barbed whip, spiked whip, gargish talwar Fixed an issue that would show the end part of some tiledata names as garbled text instead of cutting off the text(!) at 20 characters Fixed an issue with advanced character creation template when using ClassicUO client, which sends a profession value of 255 instead of 0 when no profession template has been selected. Fixed an issue where clones of NPCs that can split in combat didn't get the NPC flag correctly set Guild titles are now removed for players who leave their guilds Enabled closing some hard-coded gump menus using right-click (howto, guild, towns, wholist, addmenu, craftmenu, info) Fixed an issue where adding base items using 'add [itemID] would sometimes get false positive hits from harditems.dfn, depending on the length of the itemID Fixed an issue where items added using 'add [itemID] would not get names applied properly from harditems.dfn Item/NPC DFN tag GET can now inherit a random parent by adding additional values separated by spaces. Syntax: GET=parent1 parent2 parent3 (etc) Fixed an issue where NPC backpacks would not have the max item capacity set properly Added new properties for CItem objects (also exposed as JS Item Properties): maxRange // max distance a ranged weapon can fire at (replaces ARCHERRANGE ini setting) baseRange // base distance throwing weapons (when implemented) can be used at Added support for new Item DFN tag that replaces global UOX.INI setting ARCHERRANGE: MAXRANGE=# // Specifies max range of ranged weapon Added support for new Item/NPC DFN tags to support randomizing elemental resistances: RESISTFIRE=#/# # // Set NPC's poison resistance; fixed or random value RESISTCOLD=#/# # // Set NPC's poison resistance; fixed or random value RESISTLIGHTNING=#/# # // Set NPC's poison resistance; fixed or random value RESISTPOISON=#/# # // Set NPC's poison resistance; fixed or random value Added support for two new DFN tags in dfndata/race/races.dfn that can be used to allow/ban lists of equipment for specific races ALLOWEQUIPLIST=# BANEQUIPLIST=# Added support for new section in dfndata/race/races.dfn - [EQUIPLIST #], which can be used to define lists of equipment that is whitelisted or banned for specific races. Fixed a bug that would report incorrect weight in tooltips for Item/NPC spawner objects ScriptSections are now reapplied for items bought by players from NPC vendors Fixed an issue where players could drop an item on the ground and other players would still see the item after it was picked up, because of a failed distance check vs old location coordinates (in pack) instead of vs current location on ground Fixed a bug with players being able to use last-target macro to target objects picked up and held by other players on their cursor Updated all references to "devinelock" to be "divinelock" instead - this includes the name of the JS Item property Fixed house commands triggering (useless) targeting cursors for players onboard boats Changed default statcap in UOX.INI from 325 to 225 Fixed a out-of-range error for players attempting to combine ore inside their own backpack Fixed various issues with distance checks and container checks when using/target objects Added optional 4th "hue" parameter to AddGump JS method Added JS Function to get total amount of accounts on server - GetAccountCount() Added JS Function to get total amount of players online - GetPlayerCount() onSwing JS Event can now trigger in scripts attached to items, not just items attached to characters Added some JS Functions to expose some hard-coded constants to JS scripts: BASEITEMSERIAL() // Base item serial INVALIDSERIAL() // Invalid serial INVALIDID() // Invalid ID INVALIDCOLOUR() // Invalid colour Fixed an issue where JS character property .colour would modify origSkin property instead of colour Fixed an issue where JS character property .guildTitle returned the name of the character instead of the guild title Character JS property .poison can now also be used to set a character's poisoned level, not just read it Exposed Item property to JS engine: .ac // armour class for item (0-128). Primarily used for setting race-restrictions for equippable items, i.e. race X cannot equip items of armour class Y. .def // defensive value of item (Physical resistance post-AoS, AR in older UO) // NOTE: The following properties don't actually do anything yet, but can still be used in custom JS scripts if desired .resistCold // Cold resistance of item 0-1000, where 1000 equals 100.0% .resistHeat // Heat/Fire resistance of item 0-1000, where 1000 equals 100.0% .resistLight // Light resistance of item 0-1000, where 1000 equals 100.0% .resistLightning // Energy/Lightning resistance of item 0-1000, where 1000 equals 100.0% .resistPoison // Poison resistance of item 0-1000, where 1000 equals 100.0% .resistRain // Rain resistance of item 0-1000, where 1000 equals 100.0% .resistSnow // Snow resistance of item 0-1000, where 1000 equals 100.0% .damageHeat // Weapon deals Heat/Fire elemental damage (true/false) .damageCold // Weapon deals Cold elemental damage (true/false) .damageLight // Weapon deals Light elemental damage (true/false) .damageLightning // Weapon deals Lightning elemental damage (true/false) .damagePoison // Weapon deals Poison elemental damage (true/false) .damageRain // Weapon deals Rain/Water elemental damage (true/false) .damageSnow // Weapon deals Snow/Ice elemental damage (true/false) Added new UOX.INI setting under [server] to enable/disable shard response to ConnectUO server polling (disabled by default) Sub-commands are no longer included when registering packets to be overloaded via RegisterPacket function, as that part was never fully implemented. Packet-hook scripts can be setup for specific packet IDs, but any sub-command checking will need to be done in the script itself JS Packet Method GetDWord() now uses JS_NewNumberValue instead of INT_TO_JSVAL to read from the socket buffer, to better handle large numbers, which could previously be returned with wrong values. JS Function CalcItemFromSer() now uses a JS_GetStringBytes() and str_value() combo instead of JSVAL_TO_INT() to read the data provided in the function argument. This allows JS scripts to provide item serials to the function directly without needing to split it into four parts first (though that still works) Fixed issue where JS properties for multis didn't always return correct values The 'set command can now be used to set the armour class of items ('set ac #) Reimplemented 'tweak command in JS engine (js/commands/targeting/tweak.js) - can be used to view and modify properties of characters, character skills, items, multis and regions (target ground) Added placeholder packet-hook script (js/server/network/0xf1_connectUoServerPoll.js) to handle responses to ConnectUO server polling. By default this script does nothing, but serves as a placeholder for drop-in replacement scripts generated specifically for each shard by the ConnectUO service. Updated some commands to support an alternate STATIC keyword (can also be ommitted) to add base items: 'add static itemID 'tile static itemID Updated some commands with support for randomization. Provided itemID will be randomized based on provided rndValue: /js/commands/targeting/add.js: 'add itemID rndValue cmdtable.cpp and targeting.cpp: 'tile itemID rndValue 'tile itemID x1 x2 y1 y2 z rndValue Updated js/commands/custom/repeatingcmds.js to support 'm delete as an alias for 'rremove Added 'props as an alias for the 'tweak command Added 'teleport as an alias for the 'tele command (js/commands/targeting/tele.js) Added 'shavehair and 'shavebeard as aliases for 'kill hair and 'kill beard (js/commands/targeting/kill.js) Added 'noinvul and 'mortal aliases for the 'invul false command (js/commands/custom/misc-cmds.js) Added 'immortal and 'invul (without parameter) as aliases for the 'invul true command Added 'bringtopack as an alias of 'movetobag command (js/commands/targeting/movetobag.js) Updated check for cancelling of target cursor in various JS scripts Minor updates to various JS scripts Fixed issue where some item definitions in dfndata/harditems/harditems.dfn and dfndata/items/building/lighting.dfn used comma instead of space as delimiter for the VALUE tag, which thus never got applied Updated all NPC definitions to let NPCs spawn facing in random directions
2021-03-22 05:59:20 +08:00
if( *vp != JSVAL_NULL )
{
cwmWorldState->townRegions[encaps.toInt()]->AddAsTownMember( *gPriv );
}
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
break;
case CCP_GUILD:
0.99.4d Added new option in UOX.INI under [settings] section: MAPDIFFSENABLED=0/1 // If enabled, server will attempt to load diff files, and send "Enable Map-diff files" packet to client to also load these. Disabled by default. Server no longer loads map/statics diff files by default, nor does it send packet to client to request loading these files, as only client versions below 7.0.8.2 will actively load these files. Can be re-enabled with new UOX.INI setting mentioned above! Fixed incorrect ID for gargish dagger in CHandleCombat::getWeaponType() Added missing weapon entries in CHandleCombat::getWeaponType(): bladed whip, barbed whip, spiked whip, gargish talwar Fixed an issue that would show the end part of some tiledata names as garbled text instead of cutting off the text(!) at 20 characters Fixed an issue with advanced character creation template when using ClassicUO client, which sends a profession value of 255 instead of 0 when no profession template has been selected. Fixed an issue where clones of NPCs that can split in combat didn't get the NPC flag correctly set Guild titles are now removed for players who leave their guilds Enabled closing some hard-coded gump menus using right-click (howto, guild, towns, wholist, addmenu, craftmenu, info) Fixed an issue where adding base items using 'add [itemID] would sometimes get false positive hits from harditems.dfn, depending on the length of the itemID Fixed an issue where items added using 'add [itemID] would not get names applied properly from harditems.dfn Item/NPC DFN tag GET can now inherit a random parent by adding additional values separated by spaces. Syntax: GET=parent1 parent2 parent3 (etc) Fixed an issue where NPC backpacks would not have the max item capacity set properly Added new properties for CItem objects (also exposed as JS Item Properties): maxRange // max distance a ranged weapon can fire at (replaces ARCHERRANGE ini setting) baseRange // base distance throwing weapons (when implemented) can be used at Added support for new Item DFN tag that replaces global UOX.INI setting ARCHERRANGE: MAXRANGE=# // Specifies max range of ranged weapon Added support for new Item/NPC DFN tags to support randomizing elemental resistances: RESISTFIRE=#/# # // Set NPC's poison resistance; fixed or random value RESISTCOLD=#/# # // Set NPC's poison resistance; fixed or random value RESISTLIGHTNING=#/# # // Set NPC's poison resistance; fixed or random value RESISTPOISON=#/# # // Set NPC's poison resistance; fixed or random value Added support for two new DFN tags in dfndata/race/races.dfn that can be used to allow/ban lists of equipment for specific races ALLOWEQUIPLIST=# BANEQUIPLIST=# Added support for new section in dfndata/race/races.dfn - [EQUIPLIST #], which can be used to define lists of equipment that is whitelisted or banned for specific races. Fixed a bug that would report incorrect weight in tooltips for Item/NPC spawner objects ScriptSections are now reapplied for items bought by players from NPC vendors Fixed an issue where players could drop an item on the ground and other players would still see the item after it was picked up, because of a failed distance check vs old location coordinates (in pack) instead of vs current location on ground Fixed a bug with players being able to use last-target macro to target objects picked up and held by other players on their cursor Updated all references to "devinelock" to be "divinelock" instead - this includes the name of the JS Item property Fixed house commands triggering (useless) targeting cursors for players onboard boats Changed default statcap in UOX.INI from 325 to 225 Fixed a out-of-range error for players attempting to combine ore inside their own backpack Fixed various issues with distance checks and container checks when using/target objects Added optional 4th "hue" parameter to AddGump JS method Added JS Function to get total amount of accounts on server - GetAccountCount() Added JS Function to get total amount of players online - GetPlayerCount() onSwing JS Event can now trigger in scripts attached to items, not just items attached to characters Added some JS Functions to expose some hard-coded constants to JS scripts: BASEITEMSERIAL() // Base item serial INVALIDSERIAL() // Invalid serial INVALIDID() // Invalid ID INVALIDCOLOUR() // Invalid colour Fixed an issue where JS character property .colour would modify origSkin property instead of colour Fixed an issue where JS character property .guildTitle returned the name of the character instead of the guild title Character JS property .poison can now also be used to set a character's poisoned level, not just read it Exposed Item property to JS engine: .ac // armour class for item (0-128). Primarily used for setting race-restrictions for equippable items, i.e. race X cannot equip items of armour class Y. .def // defensive value of item (Physical resistance post-AoS, AR in older UO) // NOTE: The following properties don't actually do anything yet, but can still be used in custom JS scripts if desired .resistCold // Cold resistance of item 0-1000, where 1000 equals 100.0% .resistHeat // Heat/Fire resistance of item 0-1000, where 1000 equals 100.0% .resistLight // Light resistance of item 0-1000, where 1000 equals 100.0% .resistLightning // Energy/Lightning resistance of item 0-1000, where 1000 equals 100.0% .resistPoison // Poison resistance of item 0-1000, where 1000 equals 100.0% .resistRain // Rain resistance of item 0-1000, where 1000 equals 100.0% .resistSnow // Snow resistance of item 0-1000, where 1000 equals 100.0% .damageHeat // Weapon deals Heat/Fire elemental damage (true/false) .damageCold // Weapon deals Cold elemental damage (true/false) .damageLight // Weapon deals Light elemental damage (true/false) .damageLightning // Weapon deals Lightning elemental damage (true/false) .damagePoison // Weapon deals Poison elemental damage (true/false) .damageRain // Weapon deals Rain/Water elemental damage (true/false) .damageSnow // Weapon deals Snow/Ice elemental damage (true/false) Added new UOX.INI setting under [server] to enable/disable shard response to ConnectUO server polling (disabled by default) Sub-commands are no longer included when registering packets to be overloaded via RegisterPacket function, as that part was never fully implemented. Packet-hook scripts can be setup for specific packet IDs, but any sub-command checking will need to be done in the script itself JS Packet Method GetDWord() now uses JS_NewNumberValue instead of INT_TO_JSVAL to read from the socket buffer, to better handle large numbers, which could previously be returned with wrong values. JS Function CalcItemFromSer() now uses a JS_GetStringBytes() and str_value() combo instead of JSVAL_TO_INT() to read the data provided in the function argument. This allows JS scripts to provide item serials to the function directly without needing to split it into four parts first (though that still works) Fixed issue where JS properties for multis didn't always return correct values The 'set command can now be used to set the armour class of items ('set ac #) Reimplemented 'tweak command in JS engine (js/commands/targeting/tweak.js) - can be used to view and modify properties of characters, character skills, items, multis and regions (target ground) Added placeholder packet-hook script (js/server/network/0xf1_connectUoServerPoll.js) to handle responses to ConnectUO server polling. By default this script does nothing, but serves as a placeholder for drop-in replacement scripts generated specifically for each shard by the ConnectUO service. Updated some commands to support an alternate STATIC keyword (can also be ommitted) to add base items: 'add static itemID 'tile static itemID Updated some commands with support for randomization. Provided itemID will be randomized based on provided rndValue: /js/commands/targeting/add.js: 'add itemID rndValue cmdtable.cpp and targeting.cpp: 'tile itemID rndValue 'tile itemID x1 x2 y1 y2 z rndValue Updated js/commands/custom/repeatingcmds.js to support 'm delete as an alias for 'rremove Added 'props as an alias for the 'tweak command Added 'teleport as an alias for the 'tele command (js/commands/targeting/tele.js) Added 'shavehair and 'shavebeard as aliases for 'kill hair and 'kill beard (js/commands/targeting/kill.js) Added 'noinvul and 'mortal aliases for the 'invul false command (js/commands/custom/misc-cmds.js) Added 'immortal and 'invul (without parameter) as aliases for the 'invul true command Added 'bringtopack as an alias of 'movetobag command (js/commands/targeting/movetobag.js) Updated check for cancelling of target cursor in various JS scripts Minor updates to various JS scripts Fixed issue where some item definitions in dfndata/harditems/harditems.dfn and dfndata/items/building/lighting.dfn used comma instead of space as delimiter for the VALUE tag, which thus never got applied Updated all NPC definitions to let NPCs spawn facing in random directions
2021-03-22 05:59:20 +08:00
if( !gPriv->IsNpc() )
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
{
0.99.4d Added new option in UOX.INI under [settings] section: MAPDIFFSENABLED=0/1 // If enabled, server will attempt to load diff files, and send "Enable Map-diff files" packet to client to also load these. Disabled by default. Server no longer loads map/statics diff files by default, nor does it send packet to client to request loading these files, as only client versions below 7.0.8.2 will actively load these files. Can be re-enabled with new UOX.INI setting mentioned above! Fixed incorrect ID for gargish dagger in CHandleCombat::getWeaponType() Added missing weapon entries in CHandleCombat::getWeaponType(): bladed whip, barbed whip, spiked whip, gargish talwar Fixed an issue that would show the end part of some tiledata names as garbled text instead of cutting off the text(!) at 20 characters Fixed an issue with advanced character creation template when using ClassicUO client, which sends a profession value of 255 instead of 0 when no profession template has been selected. Fixed an issue where clones of NPCs that can split in combat didn't get the NPC flag correctly set Guild titles are now removed for players who leave their guilds Enabled closing some hard-coded gump menus using right-click (howto, guild, towns, wholist, addmenu, craftmenu, info) Fixed an issue where adding base items using 'add [itemID] would sometimes get false positive hits from harditems.dfn, depending on the length of the itemID Fixed an issue where items added using 'add [itemID] would not get names applied properly from harditems.dfn Item/NPC DFN tag GET can now inherit a random parent by adding additional values separated by spaces. Syntax: GET=parent1 parent2 parent3 (etc) Fixed an issue where NPC backpacks would not have the max item capacity set properly Added new properties for CItem objects (also exposed as JS Item Properties): maxRange // max distance a ranged weapon can fire at (replaces ARCHERRANGE ini setting) baseRange // base distance throwing weapons (when implemented) can be used at Added support for new Item DFN tag that replaces global UOX.INI setting ARCHERRANGE: MAXRANGE=# // Specifies max range of ranged weapon Added support for new Item/NPC DFN tags to support randomizing elemental resistances: RESISTFIRE=#/# # // Set NPC's poison resistance; fixed or random value RESISTCOLD=#/# # // Set NPC's poison resistance; fixed or random value RESISTLIGHTNING=#/# # // Set NPC's poison resistance; fixed or random value RESISTPOISON=#/# # // Set NPC's poison resistance; fixed or random value Added support for two new DFN tags in dfndata/race/races.dfn that can be used to allow/ban lists of equipment for specific races ALLOWEQUIPLIST=# BANEQUIPLIST=# Added support for new section in dfndata/race/races.dfn - [EQUIPLIST #], which can be used to define lists of equipment that is whitelisted or banned for specific races. Fixed a bug that would report incorrect weight in tooltips for Item/NPC spawner objects ScriptSections are now reapplied for items bought by players from NPC vendors Fixed an issue where players could drop an item on the ground and other players would still see the item after it was picked up, because of a failed distance check vs old location coordinates (in pack) instead of vs current location on ground Fixed a bug with players being able to use last-target macro to target objects picked up and held by other players on their cursor Updated all references to "devinelock" to be "divinelock" instead - this includes the name of the JS Item property Fixed house commands triggering (useless) targeting cursors for players onboard boats Changed default statcap in UOX.INI from 325 to 225 Fixed a out-of-range error for players attempting to combine ore inside their own backpack Fixed various issues with distance checks and container checks when using/target objects Added optional 4th "hue" parameter to AddGump JS method Added JS Function to get total amount of accounts on server - GetAccountCount() Added JS Function to get total amount of players online - GetPlayerCount() onSwing JS Event can now trigger in scripts attached to items, not just items attached to characters Added some JS Functions to expose some hard-coded constants to JS scripts: BASEITEMSERIAL() // Base item serial INVALIDSERIAL() // Invalid serial INVALIDID() // Invalid ID INVALIDCOLOUR() // Invalid colour Fixed an issue where JS character property .colour would modify origSkin property instead of colour Fixed an issue where JS character property .guildTitle returned the name of the character instead of the guild title Character JS property .poison can now also be used to set a character's poisoned level, not just read it Exposed Item property to JS engine: .ac // armour class for item (0-128). Primarily used for setting race-restrictions for equippable items, i.e. race X cannot equip items of armour class Y. .def // defensive value of item (Physical resistance post-AoS, AR in older UO) // NOTE: The following properties don't actually do anything yet, but can still be used in custom JS scripts if desired .resistCold // Cold resistance of item 0-1000, where 1000 equals 100.0% .resistHeat // Heat/Fire resistance of item 0-1000, where 1000 equals 100.0% .resistLight // Light resistance of item 0-1000, where 1000 equals 100.0% .resistLightning // Energy/Lightning resistance of item 0-1000, where 1000 equals 100.0% .resistPoison // Poison resistance of item 0-1000, where 1000 equals 100.0% .resistRain // Rain resistance of item 0-1000, where 1000 equals 100.0% .resistSnow // Snow resistance of item 0-1000, where 1000 equals 100.0% .damageHeat // Weapon deals Heat/Fire elemental damage (true/false) .damageCold // Weapon deals Cold elemental damage (true/false) .damageLight // Weapon deals Light elemental damage (true/false) .damageLightning // Weapon deals Lightning elemental damage (true/false) .damagePoison // Weapon deals Poison elemental damage (true/false) .damageRain // Weapon deals Rain/Water elemental damage (true/false) .damageSnow // Weapon deals Snow/Ice elemental damage (true/false) Added new UOX.INI setting under [server] to enable/disable shard response to ConnectUO server polling (disabled by default) Sub-commands are no longer included when registering packets to be overloaded via RegisterPacket function, as that part was never fully implemented. Packet-hook scripts can be setup for specific packet IDs, but any sub-command checking will need to be done in the script itself JS Packet Method GetDWord() now uses JS_NewNumberValue instead of INT_TO_JSVAL to read from the socket buffer, to better handle large numbers, which could previously be returned with wrong values. JS Function CalcItemFromSer() now uses a JS_GetStringBytes() and str_value() combo instead of JSVAL_TO_INT() to read the data provided in the function argument. This allows JS scripts to provide item serials to the function directly without needing to split it into four parts first (though that still works) Fixed issue where JS properties for multis didn't always return correct values The 'set command can now be used to set the armour class of items ('set ac #) Reimplemented 'tweak command in JS engine (js/commands/targeting/tweak.js) - can be used to view and modify properties of characters, character skills, items, multis and regions (target ground) Added placeholder packet-hook script (js/server/network/0xf1_connectUoServerPoll.js) to handle responses to ConnectUO server polling. By default this script does nothing, but serves as a placeholder for drop-in replacement scripts generated specifically for each shard by the ConnectUO service. Updated some commands to support an alternate STATIC keyword (can also be ommitted) to add base items: 'add static itemID 'tile static itemID Updated some commands with support for randomization. Provided itemID will be randomized based on provided rndValue: /js/commands/targeting/add.js: 'add itemID rndValue cmdtable.cpp and targeting.cpp: 'tile itemID rndValue 'tile itemID x1 x2 y1 y2 z rndValue Updated js/commands/custom/repeatingcmds.js to support 'm delete as an alias for 'rremove Added 'props as an alias for the 'tweak command Added 'teleport as an alias for the 'tele command (js/commands/targeting/tele.js) Added 'shavehair and 'shavebeard as aliases for 'kill hair and 'kill beard (js/commands/targeting/kill.js) Added 'noinvul and 'mortal aliases for the 'invul false command (js/commands/custom/misc-cmds.js) Added 'immortal and 'invul (without parameter) as aliases for the 'invul true command Added 'bringtopack as an alias of 'movetobag command (js/commands/targeting/movetobag.js) Updated check for cancelling of target cursor in various JS scripts Minor updates to various JS scripts Fixed issue where some item definitions in dfndata/harditems/harditems.dfn and dfndata/items/building/lighting.dfn used comma instead of space as delimiter for the VALUE tag, which thus never got applied Updated all NPC definitions to let NPCs spawn facing in random directions
2021-03-22 05:59:20 +08:00
GuildSys->Resign( gPriv->GetSocket() );
if( *vp != JSVAL_NULL )
{
CGuild *myGuild = static_cast<CGuild*>( encaps.toObject() );
0.99.4d Added new option in UOX.INI under [settings] section: MAPDIFFSENABLED=0/1 // If enabled, server will attempt to load diff files, and send "Enable Map-diff files" packet to client to also load these. Disabled by default. Server no longer loads map/statics diff files by default, nor does it send packet to client to request loading these files, as only client versions below 7.0.8.2 will actively load these files. Can be re-enabled with new UOX.INI setting mentioned above! Fixed incorrect ID for gargish dagger in CHandleCombat::getWeaponType() Added missing weapon entries in CHandleCombat::getWeaponType(): bladed whip, barbed whip, spiked whip, gargish talwar Fixed an issue that would show the end part of some tiledata names as garbled text instead of cutting off the text(!) at 20 characters Fixed an issue with advanced character creation template when using ClassicUO client, which sends a profession value of 255 instead of 0 when no profession template has been selected. Fixed an issue where clones of NPCs that can split in combat didn't get the NPC flag correctly set Guild titles are now removed for players who leave their guilds Enabled closing some hard-coded gump menus using right-click (howto, guild, towns, wholist, addmenu, craftmenu, info) Fixed an issue where adding base items using 'add [itemID] would sometimes get false positive hits from harditems.dfn, depending on the length of the itemID Fixed an issue where items added using 'add [itemID] would not get names applied properly from harditems.dfn Item/NPC DFN tag GET can now inherit a random parent by adding additional values separated by spaces. Syntax: GET=parent1 parent2 parent3 (etc) Fixed an issue where NPC backpacks would not have the max item capacity set properly Added new properties for CItem objects (also exposed as JS Item Properties): maxRange // max distance a ranged weapon can fire at (replaces ARCHERRANGE ini setting) baseRange // base distance throwing weapons (when implemented) can be used at Added support for new Item DFN tag that replaces global UOX.INI setting ARCHERRANGE: MAXRANGE=# // Specifies max range of ranged weapon Added support for new Item/NPC DFN tags to support randomizing elemental resistances: RESISTFIRE=#/# # // Set NPC's poison resistance; fixed or random value RESISTCOLD=#/# # // Set NPC's poison resistance; fixed or random value RESISTLIGHTNING=#/# # // Set NPC's poison resistance; fixed or random value RESISTPOISON=#/# # // Set NPC's poison resistance; fixed or random value Added support for two new DFN tags in dfndata/race/races.dfn that can be used to allow/ban lists of equipment for specific races ALLOWEQUIPLIST=# BANEQUIPLIST=# Added support for new section in dfndata/race/races.dfn - [EQUIPLIST #], which can be used to define lists of equipment that is whitelisted or banned for specific races. Fixed a bug that would report incorrect weight in tooltips for Item/NPC spawner objects ScriptSections are now reapplied for items bought by players from NPC vendors Fixed an issue where players could drop an item on the ground and other players would still see the item after it was picked up, because of a failed distance check vs old location coordinates (in pack) instead of vs current location on ground Fixed a bug with players being able to use last-target macro to target objects picked up and held by other players on their cursor Updated all references to "devinelock" to be "divinelock" instead - this includes the name of the JS Item property Fixed house commands triggering (useless) targeting cursors for players onboard boats Changed default statcap in UOX.INI from 325 to 225 Fixed a out-of-range error for players attempting to combine ore inside their own backpack Fixed various issues with distance checks and container checks when using/target objects Added optional 4th "hue" parameter to AddGump JS method Added JS Function to get total amount of accounts on server - GetAccountCount() Added JS Function to get total amount of players online - GetPlayerCount() onSwing JS Event can now trigger in scripts attached to items, not just items attached to characters Added some JS Functions to expose some hard-coded constants to JS scripts: BASEITEMSERIAL() // Base item serial INVALIDSERIAL() // Invalid serial INVALIDID() // Invalid ID INVALIDCOLOUR() // Invalid colour Fixed an issue where JS character property .colour would modify origSkin property instead of colour Fixed an issue where JS character property .guildTitle returned the name of the character instead of the guild title Character JS property .poison can now also be used to set a character's poisoned level, not just read it Exposed Item property to JS engine: .ac // armour class for item (0-128). Primarily used for setting race-restrictions for equippable items, i.e. race X cannot equip items of armour class Y. .def // defensive value of item (Physical resistance post-AoS, AR in older UO) // NOTE: The following properties don't actually do anything yet, but can still be used in custom JS scripts if desired .resistCold // Cold resistance of item 0-1000, where 1000 equals 100.0% .resistHeat // Heat/Fire resistance of item 0-1000, where 1000 equals 100.0% .resistLight // Light resistance of item 0-1000, where 1000 equals 100.0% .resistLightning // Energy/Lightning resistance of item 0-1000, where 1000 equals 100.0% .resistPoison // Poison resistance of item 0-1000, where 1000 equals 100.0% .resistRain // Rain resistance of item 0-1000, where 1000 equals 100.0% .resistSnow // Snow resistance of item 0-1000, where 1000 equals 100.0% .damageHeat // Weapon deals Heat/Fire elemental damage (true/false) .damageCold // Weapon deals Cold elemental damage (true/false) .damageLight // Weapon deals Light elemental damage (true/false) .damageLightning // Weapon deals Lightning elemental damage (true/false) .damagePoison // Weapon deals Poison elemental damage (true/false) .damageRain // Weapon deals Rain/Water elemental damage (true/false) .damageSnow // Weapon deals Snow/Ice elemental damage (true/false) Added new UOX.INI setting under [server] to enable/disable shard response to ConnectUO server polling (disabled by default) Sub-commands are no longer included when registering packets to be overloaded via RegisterPacket function, as that part was never fully implemented. Packet-hook scripts can be setup for specific packet IDs, but any sub-command checking will need to be done in the script itself JS Packet Method GetDWord() now uses JS_NewNumberValue instead of INT_TO_JSVAL to read from the socket buffer, to better handle large numbers, which could previously be returned with wrong values. JS Function CalcItemFromSer() now uses a JS_GetStringBytes() and str_value() combo instead of JSVAL_TO_INT() to read the data provided in the function argument. This allows JS scripts to provide item serials to the function directly without needing to split it into four parts first (though that still works) Fixed issue where JS properties for multis didn't always return correct values The 'set command can now be used to set the armour class of items ('set ac #) Reimplemented 'tweak command in JS engine (js/commands/targeting/tweak.js) - can be used to view and modify properties of characters, character skills, items, multis and regions (target ground) Added placeholder packet-hook script (js/server/network/0xf1_connectUoServerPoll.js) to handle responses to ConnectUO server polling. By default this script does nothing, but serves as a placeholder for drop-in replacement scripts generated specifically for each shard by the ConnectUO service. Updated some commands to support an alternate STATIC keyword (can also be ommitted) to add base items: 'add static itemID 'tile static itemID Updated some commands with support for randomization. Provided itemID will be randomized based on provided rndValue: /js/commands/targeting/add.js: 'add itemID rndValue cmdtable.cpp and targeting.cpp: 'tile itemID rndValue 'tile itemID x1 x2 y1 y2 z rndValue Updated js/commands/custom/repeatingcmds.js to support 'm delete as an alias for 'rremove Added 'props as an alias for the 'tweak command Added 'teleport as an alias for the 'tele command (js/commands/targeting/tele.js) Added 'shavehair and 'shavebeard as aliases for 'kill hair and 'kill beard (js/commands/targeting/kill.js) Added 'noinvul and 'mortal aliases for the 'invul false command (js/commands/custom/misc-cmds.js) Added 'immortal and 'invul (without parameter) as aliases for the 'invul true command Added 'bringtopack as an alias of 'movetobag command (js/commands/targeting/movetobag.js) Updated check for cancelling of target cursor in various JS scripts Minor updates to various JS scripts Fixed issue where some item definitions in dfndata/harditems/harditems.dfn and dfndata/items/building/lighting.dfn used comma instead of space as delimiter for the VALUE tag, which thus never got applied Updated all NPC definitions to let NPCs spawn facing in random directions
2021-03-22 05:59:20 +08:00
myGuild->NewRecruit( gPriv->GetSerial() );
}
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
}
break;
Guild-specific updates - [ADD] Integrated FindGuildId( const CGuild* ) in guild relation functions for better JS mapping (Thanks to Xuri for the base implementation) - [ADD] Added new JS Function: - CreateNewGuild() // Returns the guild object for further setup - [ADD] Added new Guild JS Methods: .AddMember( targChar ), .AddRecruit( targChar ), .RemoveRecruit( targChar ), .RemoveMember( targChar ), .RecruitToMember( targChar ), .IsAtWar( targetGuild ), .IsAlly( targetGuild ), IsNeutral( targetGuild ) Added documentation entries for all new guild/character functions and methods - [ADD] New JS Event that triggers when GUILD button in paperdoll is pressed: - onGuildButton( mChar ) - [ADD] Added new Guild JS Property: .id (guild number) - [ADD] Added new Character JS Property: .guildNumber - [UPD] Updated Guild JS Methods and renamed them: - Renamed .NewMember( trgChar ) to .AddMember( trgChar ) - Renamed .NewRecruit( trgChar ) to .AddRecruit( trgChar ) - Renamed .GuildIsAtWar( targetGuild ) to .IsAtWar( targetGuild ) - Renamed .GuildIsAlly( targetGuild) to .IsAlly( targetGuild ) - Renamed .GuildIsNeutral( targetGuild ) to .IsNeutral( targetGuild ) - [UPD] Removed Character JS Method .CheckGuild(). Can be checked via .guild and/or .guildNumber properties - [UPD] 'get command can now be used to fetch guild information for characters. Example: 'get guild / 'get guildnumber - [UPD] Updated 'add item sectionID command to support optional amount. New syntax: 'add item sectionID amount - [FIX] Fixed an issue with 'wholist command where characters with serials in the millions would not show up in the list
2025-08-05 04:05:43 +08:00
case CCP_GUILDNUMBER: gPriv->SetGuildNumber( static_cast<SI16>( encaps.toInt() )); break;
case CCP_OLDWANDERTYPE: gPriv->SetOldNpcWander( static_cast<SI08>( encaps.toInt() )); break;
case CCP_WANDERTYPE: gPriv->SetNpcWander( static_cast<SI08>( encaps.toInt() ), true ); break;
case CCP_FX1: gPriv->SetFx( static_cast<SI16>( encaps.toInt() ), 0 ); break;
case CCP_FY1: gPriv->SetFy( static_cast<SI16>( encaps.toInt() ), 0 ); break;
case CCP_FX2: gPriv->SetFx( static_cast<SI16>( encaps.toInt() ), 1 ); break;
case CCP_FY2: gPriv->SetFy( static_cast<SI16>( encaps.toInt() ), 1 ); break;
case CCP_FZ: gPriv->SetFz( static_cast<SI08>( encaps.toInt() )); break;
case CCP_SPAWNX: gPriv->SetSpawnX( static_cast<SI16>( encaps.toInt() )); break;
case CCP_SPAWNY: gPriv->SetSpawnY( static_cast<SI16>( encaps.toInt() )); break;
case CCP_SPAWNZ: gPriv->SetSpawnZ( static_cast<SI08>( encaps.toInt() )); break;
Minor pathfinding revamp plus misc fixes Updated target-based 'wipe command to also affect valid NPCs (non-invulnerable, non-pets) (js/commands/wipe.js) NPC admin gump (js/commands/wholist.js) will now force-refresh on next open after NPCs have been removed via the remove button in the menu Spawn Object admin gump (js/commands/spawnadmin.js) will now force-refresh on next open after spawn objects have been removed via the remove button in the menu Added three new GM commands (js/commands/targeting/xwalk.js) that can be used to control NPCs remotely: 'xwalk // Makes targeted NPC pathfind and walk to target location 'xrun // Makes targeted NPC pathfind and run to target location 'xturn // Makes targeted NPC turn towards target location Updated AdvancedPathfinding() in movement.cpp to include two optional parameters allowPartial // if true, move even if calculated path is blocked, until blocked (defaults to false) ignoreDoors // if true, ignore doors during pathfinding calculations and calculate the path is if the door was not there (defaults to false) Updated .WalkTo() and .RunTo() JS Character Methods to support the two additional pathfinding parameters, and also to support maxSteps values beyond 255 Updated pathfinding heuristic from Manhattan (4-way) to Octile (8-way) distance for improved pathfinding accuracy and increased performance with diagonal movement In some situations, UOX3 will now calculate a new partial path for NPCs who failed to follow their assigned path, to get them closer to their final destination Optimized pathfinding logic for NPCs following a target (like pets/hirelings, or NPCs in combat), to reduce the amount of pathfinding calculations required when target is moving. The NPCs will now keep track of the general direction towards their target, and if the NPCs are already heading in the right direction, they'll keep going as long as they have a path left to follow or until direction towards target has changed. This also eliminates a problem where NPCs would stick to their path until they reach the end, even if target has gone in a different direction. Updated logic for how NPCs turn during pathfinding. Instead of adding an extra "push" for direction into the calculated path itself to ensure NPC will both turn and move in that direction, which allowed some inaccuracies to creep into the calculated paths, that extra push is now handled while NPC is executing the path instead, whenever direction changes are needed Partial pathfinding is now enabled for fleeing NPCs by default, to increase their chances of getting further away from their opponent in combat Partial pathfinding is now enabled for NPCs in water by default, to allow them to get as close as possible to their opponent in combat Fixed an issue where NPC movement speeds would misbehave at certain speeds where the calculated movement time would get rounded down to zero NPCs will now play a fidgeting animation if they've remained motionless for 3 seconds or more while not in a state of actively trying to move/pathfind Increased max pathfinding steps for NPCs in combat from 50 to 75 Fixed an issue where NPCs would stop and wait when they should have been moving, after successful pathfinding calculation Fixed an issue where NPCs that ignore a target and enter evade state would not leave combat Added two new JS Character properties that can be used to evaluate pathfinding success (for instance in combination with onPathFindEnd Event), and/or opens for manipulating pathfinding target locations via scripts: .pathTargX // Current NPC pathfinding target, X coordinate .pathTargY // Current NPC pathfinding target, Y coordinate
2025-05-05 00:03:09 +08:00
case CCP_PATHTARGX: gPriv->SetPathTargX( static_cast<UI16>( encaps.toInt() )); break;
case CCP_PATHTARGY: gPriv->SetPathTargY( static_cast<UI16>( encaps.toInt() )); break;
2026-03-05 10:23:51 -06:00
case CCP_ISONHORSE: gPriv->SetOnHorse( encaps.toBool() ); break;
case CCP_TDEXTERITY: gPriv->SetDexterity2( encaps.toInt() ); break;
case CCP_TINTELLIGENCE: gPriv->SetIntelligence2( encaps.toInt() ); break;
case CCP_TSTRENGTH: gPriv->SetStrength2( encaps.toInt() ); break;
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
case CCP_LIGHTLEVEL:
gPriv->SetFixedLight( static_cast<UI08>( encaps.toInt() ));
2021-06-12 07:30:23 -04:00
if( gPriv->GetSocket() != nullptr )
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
{
if( static_cast<UI08>( encaps.toInt() ) == 255 )
{
DoLight( gPriv->GetSocket(), cwmWorldState->ServerData()->WorldLightCurrentLevel() );
}
else
{
DoLight( gPriv->GetSocket(), static_cast<UI08>( encaps.toInt() ));
}
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
}
break;
case CCP_VULNERABLE: gPriv->SetInvulnerable( !encaps.toBool() ); break;
case CCP_HUNGERSTATUS: gPriv->SetHungerStatus( encaps.toBool() ); break;
case CCP_THIRSTSTATUS: gPriv->SetThirstStatus( encaps.toBool() ); break;
case CCP_LODAMAGE: gPriv->SetLoDamage( static_cast<SI16>( encaps.toInt() )); break;
case CCP_HIDAMAGE: gPriv->SetHiDamage( static_cast<SI16>( encaps.toInt() )); break;
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
case CCP_ATWAR:
gPriv->SetWar( encaps.toBool() );
Movement->CombatWalk( gPriv );
break;
case CCP_SPELLCAST: gPriv->SetSpellCast( static_cast<SI08>( encaps.toInt() )); break;
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
case CCP_ISCASTING:
{
bool isCasting = encaps.toBool();
gPriv->SetCasting( isCasting );
gPriv->SetJSCasting( isCasting );
}
break;
Small update Fixed an issue with an internal movement check that prevented characters from moving in valid map areas in Felucca/Trammel from X 6144 to X 7168 Fixed an issue where .instanceID property was misspelled in 'xgo GM command script, causing characters to be teleported to an out of bounds area where they would no longer be saved (js/commands/targeting/x.js) Added some additional error-checking to .Teleport()/.SetLocation() JS Method to prevent script-accidents from sending characters out of bounds. Updated Poisoning skill to add poison-charges to weapons being poisoned. Charges are consumed when applying poison in combat (js/skill/poisoning.js) Updated combat code to consume poison-charges if a poisoned weapon is used to poison an opponent Updated shoplists for Blacksmiths and Weaponsmiths - they now buy/sell longswords (dfndata/items/shoplist.dfn) Updated MageShopping shoplist for mage vendors - they now buy/sell mass curse scrolls (dfndata/items/shoplist.dfn) Added new Spawn Region DFN tag that can specify which era or eras of UO (Multiple comma-separated entries supported) a given spawn region is valid for. Spawn region not valid for core shard era will be ignored. Syntax: ERAS=UO,T2A,UOR,LBR,AOS,SE,ML,SA,HS,TOL Added new Spawn Region DFN tag that allows using another spawn region as a "parent". All properties of this parent will be inherited except for these, which are ignored: ERAS, NPCLIST, ITEMLIST, NPC and ITEM. Syntax for new tag: GET=# // Inherit a specified spawn region Added spawn region for animal trainer vendor in Vesper stable Added spawn region for fur trader/tanner vendors in The Best Hides of Britain Added spawn region for spinner vendor in The Lord's Clothier's and The Right Fit shops in Britain Added spawn region for tanner NPC to Nujel'm Tannery (and fixed leatherworker spawn region for same area) Added spawn regions for banker NPCs in East Bank of Britain, First Bank of Moonglow, Jhelom Bank and Jeweler, Bank of Skara Brae Added spawn regions for stables, tailor and blacksmith inside Castle British Added spawn regions for mage shops, mage guilds and farm houses in Moonglow Added spawn regions for misc vendors and townfolk in multiple cities Added spawn regions for Fire Island Updated spawn regions for Dagger Isle/Ice Island Added spawn regions for forests and jungles in southern Britannia and on various islands including Bucc's Den, Moonglow, Serpent's Hold, and misc unpopulated islands Added spawn regions for area east of Skara Brae, around Hedge Maze and south of Britain Added spawn regions for wandering healers outside every dungeon entrance in Britannia and Lost Lands Re-integrated ocean spawn regions for ocean creatures (dolphin, walrus, water elemental, sea serpent) from the original community-based spawn file Added reagent spawns in overworld spawn regions in Britannia/Lost Lands Added special reagent spawns in swamp areas Added additional overworld spawn regions in Britannia/Lost Lands Added spawn regions for Khaldun dungeon that spawn some new and some old NPCs: Old: Zombies, skeletons, skeletal mages, skeletal knights, ancient liches New: Cursed (and named) NPCs, shadowfiends, zealots of khaldun (knights/summoners), tentacles of the harrower Updated size and positions of some existing overworld spawn regions Fixed incorrect spawn region size for small island south of Trinsic Added switch/door puzzle functionality in Khaldun dungeon using new switch/door combo script (js/item/dungeons/switch_door_combo.js) Added "smart objects" in Khaldun dungeon that activate when you come close enough (js/item/dungeons/smart_activate_item.js) Added teleport locations within Khaldun dungeon (js/teleport.scp) Added custom AIs to existing NPC spawning in Khaldun dungeon: Ancient Lich (summons other undead, and can turn into one of them for disguise) Added DFN entries for new NPCs spawning in Khaldun dungeon, some with custom AIs: [tentacles_of_the_harrower] -> Tentacles of the Harrower (life steal) [shadowfiend] -> Shadowfiends (seek out and reveal hidden players) [zealot_knight]/[zealot_summoner] -> Zealots of Khaldun (turn into undead on death, male/female variants) [cursed] -> Cursed (male/female variants) [spectralarmor] -> Spectral Armor Added DFN entries for new (named) NPCs spawning in Khaldun dungeon: [lysander_gathenwale] -> Lysander Gathenwale [grimmoch_drummel] -> Grimmoch Drummel [morg_bergen] -> Morg Bergen [tavara_sewel] -> Tavara Sewel Added new NPC DFN entries: [leatherworker] -> alias for male/female leatherworker vendors [mapmaker] -> alias for male/female mapmaker vendors Added new Race DFN entries: [RACE 29] -> Cursed (enemies of RACE 30) [RACE 30] -> Zealots (enemies of RACE 29) Added new book DFN entries for Khaldun journals of Lysander, Tavara and Grimmoch - available as loot from the respective NPCs (dfndata/misc/books.dfn and dfndata/items/misc/books.dfn) Added 25% chance for hit-animations and hit-SFX to play for targets in combat, instead of playing every time - can get very spammy Monsters with actual weapons equipped (like Ophidian Enforcer with Halberd/Bardiche) will now get appropriate combat SFX for hitting with that weapon Updated Healing skill to base cure/resurrection skill requirements on the calculated skill, rather than base skill (js/skill/healing.js) Fixed an issue where healing with bandages and dying in the process would not properly reset the healing-related tags and skills used Updated healing script to show a resurrection confirmation menu for players targeted with bandages for resurrect (js/skill/healing.js) All skill usage states now reset on death, to prevent cases of players being "busy" while trying to use skills that got stuck due to script bugs. The 'regspawn GM command now supports a new parameter called "max". Updated command syntax: 'regspawn # // perform a single respawn cycle in a specific spawn region 'regspawn all // perform a single respawn cycle across all spawn regions 'regspawn max // respawn ALL spawn regions to MAX capacity in one go Added new UOX.INI setting that determines the maximum range at which NPCs can initiate attacks on players/NPCs (the old MAXRANGE=10 setting now instead defines max range at which players can initiate attacks on players/NPCs): MAXNPCAGGRORANGE=10 Optimized performance by significantly reducing the number of line-of-sight checks performed by characters, especially in combat scenarios, or when evaluating potential targets for NPC AIs. The amount of checks done is also affected by the new ini setting for max aggro range. Fixed an issue where both NPC and player characters would instantly drop one hunger level (from 6 to 5) upon creation since hungerrate was not initialized until after first hunger-event Updated character priv property from UI16 to UI32, and added a new flag that determines if fame/karma title is hidden for character: HIDEFAMEKARMATITLE (0x10000) NPCs will no longer aggro other NPCs if the Z difference between them is greater or equal to 20 (i.e. they're on different floors), unless both are using ranged weapons and both are in range Fixed an issue where players could get discounts from shopkeepers even though neither player nor shopkeeper were members of a NPC guild (js/npc/ai/shopkeeper.js) Fixed an issue where the "premium" a player would get when selling items to a shopkeeper in the same NPC guild as them would be 110% extra on top of the item's value, instead of the intended 10% (js/npc/ai/shopkeeper.js) (Thanks, cobrag0318!) Added missing tall straw hat to tailoring crafting scripts (Thanks, Dragon Slayer!) Improved error reporting during compilation of individual scripts being reloaded - will now show more context and line number onCombatEnd JS Event now also triggers when NPCs ignore their target and/or evade during combat Updated 'decorate command to support saving/loading custom tags on items for world templates. These are stored after a @ symbol in the world template, each custom tag separated by a | symbol, and with each custom tag saved using this syntax: key$type$value Updated resource-harvesting scripts to use script-specific global (const) variables, to avoid interference between different scripts (js/server/resource/*) Added new resource-harvesting scripts and added spawn regions for these in fields on farms all over Britannia/Lost Lands cabbages (js/server/resource/cabbages.js) canteloupes (js/server/resource/canteloupes.js) carrots (js/server/resource/carrots.js) garlic (js/server/resource/garlic.js) gourds (js/server/resource/gourds.js) honeydew melons (js/server/resource/honeydewmelon.js) onions (js/server/resource/onions.js) pumpkins (js/server/resource/pumpkins.js) squashes (js/server/resource/squashes.js) turnips (js/server/resource/turnips.js) watermelons (js/server/resource/watermelon.js) Updated CSpawnRegion::FindItemSpotToSpawn() function in cSpawnRegion.cpp to prevent duplicate spawning of exact same item in exact same location Updated sectionid of all potion and scroll aliases to match main item, so they'll get correctly picked up by NPC shopkeepers (dfndata/items/magic/potions.dfn and scrolls.dfn) Specified sectionid for backpacks, so it also gets applied to packs added using the alias [backpack] (dfndata/items/misc/provisions.dfn) Fixed a code issue that prevented players from selling empty containers to NPC shopkeepers willing to buy such containers Fixed an issue where field-spells (wall of stone, poison field, etc) would ignore dynamic/static items that should block these Fixed an issue where field-spells could be cast into houses from the outside by standing next to a wall and targeting self Fixed a War/Peace-mode desync between client and server by having server always notify client (using war-toggle packet) when the "at war" flag is toggled for player character Fixed an issue with hiding skill that wouldn't allow player to hide after having acquired self as target in combat (through spellcasting, for instance) (Thanks, Dragon Slayer!) Fixed an issue where mana/reagents were consumed and skillcheck performed before all spellcast-validations had succeeded, resulting in the occasional loss of reagents/mana when spellcasting was disallowed (code and js/magic/clumsy.js and level1targ.js) Fixed an issue with lack of criminal-flagging for casting of hostile spells scripted in JS (clumsy, magic arrow, feeblemind) vs blue targets (js/magic/clumsy.js and level1targ.js) Fixed some issues with Line-of-Sight checking code that returned incorrect results, which amongst other things affected spellcasting in areas with uneven terrain Fixed some issues with movement code and climbing of ladders, in particular the rope ladder in the 2-story log cabin. Code now sets a "is climbing" flag when character steps onto a rope ladder, and uses that to help resolve some edge cases, and then unsets it when they step off. Renamed section headers of some map-items in DFNs from "locationname" to "locationnamemap" for clarity (example: "britain" to "britainmap") Fixed broken "map wrapping" when sailing to edges of map in Felucca or Trammel Fixed a server crash related to attempts at reading data from invalid map tiles
2025-06-27 08:40:02 +08:00
case CCP_PRIV: gPriv->SetPriv( static_cast<UI32>( encaps.toInt() )); break;
case CCP_TOWNPRIV: gPriv->SetTownpriv( static_cast<SI08>( encaps.toInt() )); break;
case CCP_GUILDTITLE: gPriv->SetGuildTitle( encaps.toString() ); break;
UOX3 0.99.6-RC3 Updated Item DFNs with ORIGIN and SECTIONID tags for relevant items Added JS Function to make comparing eras (based on object origin or server settings) easier: EraStringToNum( eraString ) // Takes an era string (uo, t2a, uor, td, lbr, aos, etc) and returns an int Updated some JS scripts to use EraStringToNum() for era comparisons (potionkeg.js) Default CORESHARDERA setting is now LBR Removed PUB15 as a separate "era" - it's identical to late stage LBR anyway: Removed support for GETPUB15 tag Added support for GETUO tag for items/NPCs: GETUO=<sectionID> // Inherit DFN section if core shard era is Ultima Online (original release, before T2A) Rewrote portions of MsgBoardQuestEscortCreate() function in msgboard.cpp to ensure only escort regions within same world as NPC can be selected as destinations Increased maximum number of possible escort regions that can exist from 255 to 65535 Added region definitions for all shrines in Britannia (Fel & Trammel), and marked them as valid destinations for NPC escorts (uox3/regions/regions.dfn) Moved bankers from vendor to human DFN files, and made them inherit basehuman instead of basevendor - since they are not vendors To address an issue with escorted NPCs not timing out and vanishing if they are left in a "dormant" area of the world with no player activity, the NPCs are marked as "always awake" the moment they arrive at their destination. Note that the uox.ini setting ALLOWAWAKENPCS needs to be enabled for this to work. Fixed an issue where spawnsection of spawners did not show up correctly in tweak menu Fixed an issue where the generic Orc AI script didn't have a return true at end of onDamage() event, which prevented all orcs from taking damage in combat (js/npc/ai/monster/orc.js) Moved Anatomy skill-check in healing script (js/skill/healing.js) from onCallback1() function to onTimer() to prevent the skill-check from being spammable Added mount ID for Frost Mite in creatures.dfn, allowing it to be used as mount Exposed the following character properties to JS engine, which can be used to view/adjust the permanent hair/beard options for a character: .hairStyle .hairColour .beardStyle .beardColour Updated 'kill hair, 'shavehair, 'shavebeard and 'remove commands to clear permanent hair/beard colour and style properties in addition to removing the item itself Added a GM override to let GMs place as many houses as they want (js/server/house/houseDeed.js) Fixed an issue where attempting to sell items to NPC shopkeepers could result in client crashing Added a new JS Event: onMultiLogout( iMulti, cPlayer ) // Handles players logging out while inside multis Updated house script (js/server/house/house.js) with onMultiLogout event, which allows owners (always) and co-owners/friends/guests (if option enabled in uox.ini) to safely log out inside the house (without getting booted). Added a "keyless" option for interacting with locked doors (js/item/doors.js) of player-owned houses, which lets owners/co-owners/friends/guests of a house use locked doors in the house without requiring a key in their backpack, if the options for that are enabled in UOX.INI. Enabled for owners/co-owners and friends by default (but not for guests) Note that if option to safely log out is enabled, but keyless option is NOT enabled, then the server will check if the player has a key to the house in their backpack, and eject them from the house upon logging out if not. This is to make sure players don't get stuck inside a house they can't get out of because they lack the rights to open doors etc. Added new UOX.INI options, under the [houses] section: SAFECOOWNERLOGOUT=1 // Allow co-owners to safely and instantly log out inside house SAFEFRIENDLOGOUT=1 // Allow friends to safely and instantly log out inside house SAFEGUESTLOGOUT=1 // Allow guests to safely and instantly log out inside house KEYLESSOWNERACCESS=1 // Allow owner of house to use locked doors in house without key in pack KEYLESSCOOWNERACCESS=1 // Allow co-owners of house to use locked doors in house without key in pack KEYLESSFRIENDACCESS=1 // Allow friends of house to use locked doors in house without key in pack KEYLESSGUESTACCESS=0 // Allow guests of house to use locked doors in house without key in pack Fixed NOHAIR tag from races.dfn not being loaded correctly
2023-03-04 22:50:55 +08:00
case CCP_HAIRSTYLE: gPriv->SetHairStyle( static_cast<UI16>( encaps.toInt() ) ); break;
case CCP_HAIRCOLOUR: gPriv->SetHairColour( static_cast<UI16>( encaps.toInt() ) ); break;
case CCP_BEARDSTYLE: gPriv->SetBeardStyle( static_cast<UI16>( encaps.toInt() ) ); break;
case CCP_BEARDCOLOUR: gPriv->SetBeardColour( static_cast<UI16>( encaps.toInt() ) ); break;
case CCP_FONTTYPE: gPriv->SetFontType( static_cast<SI08>( encaps.toInt() )); break;
case CCP_SAYCOLOUR: gPriv->SetSayColour( static_cast<COLOUR>( encaps.toInt() )); break;
case CCP_EMOTECOLOUR: gPriv->SetEmoteColour( static_cast<COLOUR>( encaps.toInt() )); break;
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
case CCP_ATTACKER:
if( *vp != JSVAL_NULL )
{
CChar *myChar = static_cast<CChar *>( encaps.toObject() );
if( !ValidateObject( myChar ))
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
break;
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
gPriv->SetAttacker( myChar );
}
else
{
2021-06-12 07:30:23 -04:00
gPriv->SetAttacker( nullptr );
}
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
break;
case CCP_RACEGATE: gPriv->SetRaceGate( static_cast<RACEID>( encaps.toInt() )); break;
case CCP_SKILLLOCK: break;
2025-02-10 11:17:51 -06:00
case CCP_SKILLCAP: break;
case CCP_DEATHS: gPriv->SetDeaths( static_cast<UI16>( encaps.toInt() )); break;
case CCP_NEXTACT: gPriv->SetNextAct( static_cast<UI08>( encaps.toInt() )); break;
case CCP_CELL: gPriv->SetCell( static_cast<SI08>( encaps.toInt() )); break;
case CCP_ALLMOVE: gPriv->SetAllMove( encaps.toBool() ); break;
case CCP_HOUSEICONS: gPriv->SetViewHouseAsIcon( encaps.toBool() ); break;
case CCP_SPATTACK: gPriv->SetSpAttack( static_cast<SI16>( encaps.toInt() )); break;
case CCP_SPDELAY: gPriv->SetSpDelay( static_cast<SI08>( encaps.toInt() )); break;
2025-01-14 22:16:11 -06:00
case CCP_SWINGSPEEDINCREASE: gPriv->SetSwingSpeedIncrease( static_cast<SI16>( encaps.toInt() )); break;
2025-03-08 20:29:52 -06:00
case CCP_LUCK: gPriv->SetLuck( static_cast<SI16>( encaps.toInt() )); break;
case CCP_HITCHANCE: gPriv->SetHitChance( static_cast<SI16>( encaps.toInt() )); break;
case CCP_DEFENSECHANCE: gPriv->SetDefenseChance( static_cast<SI16>( encaps.toInt() )); break;
case CCP_DAMAGEINCREASE: gPriv->SetDamageIncrease( static_cast<SI16>( encaps.toInt() )); break;
case CCP_AITYPE: gPriv->SetNPCAiType( static_cast<SI16>( encaps.toInt() )); break;
case CCP_SPLIT: gPriv->SetSplit( static_cast<UI08>( encaps.toInt() )); break;
case CCP_SPLITCHANCE: gPriv->SetSplitChance( static_cast<UI08>( encaps.toInt() ));break;
2026-03-12 11:01:58 -05:00
case CCP_VENDORGOLDHELD:gPriv->SetHoldG( static_cast<UI32>( encaps.toInt() )); break;
case CCP_HIRELING: gPriv->SetCanHire( encaps.toBool() ); break;
case CCP_TRAINER: gPriv->SetCanTrain( encaps.toBool() ); break;
case CCP_WEIGHT: gPriv->SetWeight( static_cast<SI32>( encaps.toInt() )); break;
case CCP_SQUELCH: gPriv->SetSquelched( static_cast<UI08>( encaps.toInt() )); break;
case CCP_MAGICREFLECT: gPriv->SetTempReflected( encaps.toBool() ); break;
case CCP_PERMMAGICREFLECT: gPriv->SetPermReflected( encaps.toBool() ); break;
Small update Fixed an issue with an internal movement check that prevented characters from moving in valid map areas in Felucca/Trammel from X 6144 to X 7168 Fixed an issue where .instanceID property was misspelled in 'xgo GM command script, causing characters to be teleported to an out of bounds area where they would no longer be saved (js/commands/targeting/x.js) Added some additional error-checking to .Teleport()/.SetLocation() JS Method to prevent script-accidents from sending characters out of bounds. Updated Poisoning skill to add poison-charges to weapons being poisoned. Charges are consumed when applying poison in combat (js/skill/poisoning.js) Updated combat code to consume poison-charges if a poisoned weapon is used to poison an opponent Updated shoplists for Blacksmiths and Weaponsmiths - they now buy/sell longswords (dfndata/items/shoplist.dfn) Updated MageShopping shoplist for mage vendors - they now buy/sell mass curse scrolls (dfndata/items/shoplist.dfn) Added new Spawn Region DFN tag that can specify which era or eras of UO (Multiple comma-separated entries supported) a given spawn region is valid for. Spawn region not valid for core shard era will be ignored. Syntax: ERAS=UO,T2A,UOR,LBR,AOS,SE,ML,SA,HS,TOL Added new Spawn Region DFN tag that allows using another spawn region as a "parent". All properties of this parent will be inherited except for these, which are ignored: ERAS, NPCLIST, ITEMLIST, NPC and ITEM. Syntax for new tag: GET=# // Inherit a specified spawn region Added spawn region for animal trainer vendor in Vesper stable Added spawn region for fur trader/tanner vendors in The Best Hides of Britain Added spawn region for spinner vendor in The Lord's Clothier's and The Right Fit shops in Britain Added spawn region for tanner NPC to Nujel'm Tannery (and fixed leatherworker spawn region for same area) Added spawn regions for banker NPCs in East Bank of Britain, First Bank of Moonglow, Jhelom Bank and Jeweler, Bank of Skara Brae Added spawn regions for stables, tailor and blacksmith inside Castle British Added spawn regions for mage shops, mage guilds and farm houses in Moonglow Added spawn regions for misc vendors and townfolk in multiple cities Added spawn regions for Fire Island Updated spawn regions for Dagger Isle/Ice Island Added spawn regions for forests and jungles in southern Britannia and on various islands including Bucc's Den, Moonglow, Serpent's Hold, and misc unpopulated islands Added spawn regions for area east of Skara Brae, around Hedge Maze and south of Britain Added spawn regions for wandering healers outside every dungeon entrance in Britannia and Lost Lands Re-integrated ocean spawn regions for ocean creatures (dolphin, walrus, water elemental, sea serpent) from the original community-based spawn file Added reagent spawns in overworld spawn regions in Britannia/Lost Lands Added special reagent spawns in swamp areas Added additional overworld spawn regions in Britannia/Lost Lands Added spawn regions for Khaldun dungeon that spawn some new and some old NPCs: Old: Zombies, skeletons, skeletal mages, skeletal knights, ancient liches New: Cursed (and named) NPCs, shadowfiends, zealots of khaldun (knights/summoners), tentacles of the harrower Updated size and positions of some existing overworld spawn regions Fixed incorrect spawn region size for small island south of Trinsic Added switch/door puzzle functionality in Khaldun dungeon using new switch/door combo script (js/item/dungeons/switch_door_combo.js) Added "smart objects" in Khaldun dungeon that activate when you come close enough (js/item/dungeons/smart_activate_item.js) Added teleport locations within Khaldun dungeon (js/teleport.scp) Added custom AIs to existing NPC spawning in Khaldun dungeon: Ancient Lich (summons other undead, and can turn into one of them for disguise) Added DFN entries for new NPCs spawning in Khaldun dungeon, some with custom AIs: [tentacles_of_the_harrower] -> Tentacles of the Harrower (life steal) [shadowfiend] -> Shadowfiends (seek out and reveal hidden players) [zealot_knight]/[zealot_summoner] -> Zealots of Khaldun (turn into undead on death, male/female variants) [cursed] -> Cursed (male/female variants) [spectralarmor] -> Spectral Armor Added DFN entries for new (named) NPCs spawning in Khaldun dungeon: [lysander_gathenwale] -> Lysander Gathenwale [grimmoch_drummel] -> Grimmoch Drummel [morg_bergen] -> Morg Bergen [tavara_sewel] -> Tavara Sewel Added new NPC DFN entries: [leatherworker] -> alias for male/female leatherworker vendors [mapmaker] -> alias for male/female mapmaker vendors Added new Race DFN entries: [RACE 29] -> Cursed (enemies of RACE 30) [RACE 30] -> Zealots (enemies of RACE 29) Added new book DFN entries for Khaldun journals of Lysander, Tavara and Grimmoch - available as loot from the respective NPCs (dfndata/misc/books.dfn and dfndata/items/misc/books.dfn) Added 25% chance for hit-animations and hit-SFX to play for targets in combat, instead of playing every time - can get very spammy Monsters with actual weapons equipped (like Ophidian Enforcer with Halberd/Bardiche) will now get appropriate combat SFX for hitting with that weapon Updated Healing skill to base cure/resurrection skill requirements on the calculated skill, rather than base skill (js/skill/healing.js) Fixed an issue where healing with bandages and dying in the process would not properly reset the healing-related tags and skills used Updated healing script to show a resurrection confirmation menu for players targeted with bandages for resurrect (js/skill/healing.js) All skill usage states now reset on death, to prevent cases of players being "busy" while trying to use skills that got stuck due to script bugs. The 'regspawn GM command now supports a new parameter called "max". Updated command syntax: 'regspawn # // perform a single respawn cycle in a specific spawn region 'regspawn all // perform a single respawn cycle across all spawn regions 'regspawn max // respawn ALL spawn regions to MAX capacity in one go Added new UOX.INI setting that determines the maximum range at which NPCs can initiate attacks on players/NPCs (the old MAXRANGE=10 setting now instead defines max range at which players can initiate attacks on players/NPCs): MAXNPCAGGRORANGE=10 Optimized performance by significantly reducing the number of line-of-sight checks performed by characters, especially in combat scenarios, or when evaluating potential targets for NPC AIs. The amount of checks done is also affected by the new ini setting for max aggro range. Fixed an issue where both NPC and player characters would instantly drop one hunger level (from 6 to 5) upon creation since hungerrate was not initialized until after first hunger-event Updated character priv property from UI16 to UI32, and added a new flag that determines if fame/karma title is hidden for character: HIDEFAMEKARMATITLE (0x10000) NPCs will no longer aggro other NPCs if the Z difference between them is greater or equal to 20 (i.e. they're on different floors), unless both are using ranged weapons and both are in range Fixed an issue where players could get discounts from shopkeepers even though neither player nor shopkeeper were members of a NPC guild (js/npc/ai/shopkeeper.js) Fixed an issue where the "premium" a player would get when selling items to a shopkeeper in the same NPC guild as them would be 110% extra on top of the item's value, instead of the intended 10% (js/npc/ai/shopkeeper.js) (Thanks, cobrag0318!) Added missing tall straw hat to tailoring crafting scripts (Thanks, Dragon Slayer!) Improved error reporting during compilation of individual scripts being reloaded - will now show more context and line number onCombatEnd JS Event now also triggers when NPCs ignore their target and/or evade during combat Updated 'decorate command to support saving/loading custom tags on items for world templates. These are stored after a @ symbol in the world template, each custom tag separated by a | symbol, and with each custom tag saved using this syntax: key$type$value Updated resource-harvesting scripts to use script-specific global (const) variables, to avoid interference between different scripts (js/server/resource/*) Added new resource-harvesting scripts and added spawn regions for these in fields on farms all over Britannia/Lost Lands cabbages (js/server/resource/cabbages.js) canteloupes (js/server/resource/canteloupes.js) carrots (js/server/resource/carrots.js) garlic (js/server/resource/garlic.js) gourds (js/server/resource/gourds.js) honeydew melons (js/server/resource/honeydewmelon.js) onions (js/server/resource/onions.js) pumpkins (js/server/resource/pumpkins.js) squashes (js/server/resource/squashes.js) turnips (js/server/resource/turnips.js) watermelons (js/server/resource/watermelon.js) Updated CSpawnRegion::FindItemSpotToSpawn() function in cSpawnRegion.cpp to prevent duplicate spawning of exact same item in exact same location Updated sectionid of all potion and scroll aliases to match main item, so they'll get correctly picked up by NPC shopkeepers (dfndata/items/magic/potions.dfn and scrolls.dfn) Specified sectionid for backpacks, so it also gets applied to packs added using the alias [backpack] (dfndata/items/misc/provisions.dfn) Fixed a code issue that prevented players from selling empty containers to NPC shopkeepers willing to buy such containers Fixed an issue where field-spells (wall of stone, poison field, etc) would ignore dynamic/static items that should block these Fixed an issue where field-spells could be cast into houses from the outside by standing next to a wall and targeting self Fixed a War/Peace-mode desync between client and server by having server always notify client (using war-toggle packet) when the "at war" flag is toggled for player character Fixed an issue with hiding skill that wouldn't allow player to hide after having acquired self as target in combat (through spellcasting, for instance) (Thanks, Dragon Slayer!) Fixed an issue where mana/reagents were consumed and skillcheck performed before all spellcast-validations had succeeded, resulting in the occasional loss of reagents/mana when spellcasting was disallowed (code and js/magic/clumsy.js and level1targ.js) Fixed an issue with lack of criminal-flagging for casting of hostile spells scripted in JS (clumsy, magic arrow, feeblemind) vs blue targets (js/magic/clumsy.js and level1targ.js) Fixed some issues with Line-of-Sight checking code that returned incorrect results, which amongst other things affected spellcasting in areas with uneven terrain Fixed some issues with movement code and climbing of ladders, in particular the rope ladder in the 2-story log cabin. Code now sets a "is climbing" flag when character steps onto a rope ladder, and uses that to help resolve some edge cases, and then unsets it when they step off. Renamed section headers of some map-items in DFNs from "locationname" to "locationnamemap" for clarity (example: "britain" to "britainmap") Fixed broken "map wrapping" when sailing to edges of map in Felucca or Trammel Fixed a server crash related to attempts at reading data from invalid map tiles
2025-06-27 08:40:02 +08:00
case CCP_HIDEFAMEKARMATITLE: gPriv->HideFameKarmaTitle( encaps.toBool() ); break;
2026-03-08 18:17:11 -05:00
case CCP_NOCHARCOLLIDE: gPriv->NoCharCollide( encaps.toBool() ); break;
case CCP_TAMED: gPriv->SetTamed( encaps.toBool() ); break;
case CCP_TAMEDHUNGERRATE: gPriv->SetTamedHungerRate( static_cast<UI16>( encaps.toInt() )); break;
case CCP_TAMEDTHIRSTRATE: gPriv->SetTamedThirstRate( static_cast<UI16>( encaps.toInt() )); break;
case CCP_THIRSTWILDCHANCE: gPriv->SetTamedThirstWildChance( static_cast<UI08>( encaps.toInt() )); break;
case CCP_HUNGERWILDCHANCE: gPriv->SetTamedHungerWildChance( static_cast<UI08>( encaps.toInt() )); break;
case CCP_FOODLIST: gPriv->SetFood( encaps.toString() ); break;
case CCP_MOUNTED: gPriv->SetMounted( encaps.toBool() ); break;
case CCP_STABLED: gPriv->SetStabled( encaps.toBool() ); break;
case CCP_USINGPOTION: gPriv->SetUsingPotion( encaps.toBool() ); break;
case CCP_STEALTH: gPriv->SetStealth( encaps.toInt() ); break;
case CCP_SKILLTOTAME: gPriv->SetTaming( encaps.toInt() ); break;
case CCP_SKILLTOPROV: gPriv->SetProvoing( encaps.toInt() ); break;
case CCP_SKILLTOPEACE: gPriv->SetPeaceing( encaps.toInt() ); break;
case CCP_POISON: gPriv->SetPoisoned( static_cast<UI08>( encaps.toInt() )); break;
case CCP_POISONEDBY: gPriv->SetPoisoned( static_cast<UI32>( encaps.toInt() )); break;
case CCP_POISONSTRENGTH: gPriv->SetPoisonStrength( static_cast<UI08>( encaps.toInt() )); break;
case CCP_ISPOLYMORPHED: gPriv->IsPolymorphed( encaps.toBool() ); break;
case CCP_ISINCOGNITO: gPriv->IsIncognito( encaps.toBool() ); break;
Thief Revamp - 0.99.6-RC5 Added script for NPC guildmasters (js/npc/ai/guildmaster.js). Only one NPC guild has been setup in the script so far (more can be easily added) - the Thieves Guild - which if joined grants players the ability to steal from other players and to buy disguise kits Added two new NPCs, which there will now spawn one of in a random location in each city in Britannia (felucca facet): m_thief_guildmaster (dfndata/npc/male_human.dfn) f_thief_guildmaster (dfndata/npc/female_Human.dfn) Added two new character properties to keep track of which NPC guild a player (or NPC) belongs to. These properties have been exposed as the following Character JS properties: .npcGuild // ID of NPC guild, as defined in script .npcGuildJoined // Timestamp for when player joined NPC guild Added script for Disguise Kits (js/item/disguisekit.js). These allow members of the Thieves Guild to disguise themselves from the prying eyes of other players. Added two new character properties: .isDisguised // true/false flag for character being disguised .origName // used to store character's original name before disguise went into effect Moved implementation of Stealing skill from code to script (js/skill/stealing.js) and revamped it completely in the process. Changes include: New features: Town rare stealing - any item marked as "special stealable" with new item property .stealable can be stolen, even if it's locked down by a GM on the ground, or inside a container When stealing from item piles, thief can potentially steal the amount of items that makes up the max weight limit for what they can steal, from those piles Chance to successfully steal is now affected by whether there are any characters (NPCs or Players) that witness the attempt. Depends on distance to character, and direction character is facing Players now become "permagrey" when successfully stealing from another player, regardless of whether it's witnessed Players now receive a "stealing" flag when stealing from another player, regardless of whether it's witnessed Stolen items cannot be removed from thief's backpack for 30 seconds following the theft of the item (AoS core shard era and above) Optional AoS feature to steal special consumable items from monsters Updated default stealing rules: Updated calculations to determine chance of success when stealing Players cannot steal while engaged in combat Players are revealed if hidden as soon as they use the stealing skill Players can no longer steal items in the secure trade window Players can no longer steal items from NPC shopkeepers Both hands must be free to steal Stealing now checks line of sight to target player/object Only members of Thieves Guild (NPC guild) can now steal from other players, unless they are guild enemies Players can no longer steal from NPC guards by default Players can no longer steal from the same NPC monster more than once Only gold and gems can be stolen from innocent players in dungeon/ll areas of Felucca, if core shard era is set to AoS or higher Players can no longer steal items held on cursor by other players Orcish masks now eplode if player steals from orcs while wearing it If core shard era is set to LBR or lower, player is marked as an aggressor if they steal from another player Guards can only be called on players that are flagged as criminals within the first 10 seconds of them being flagged Stealing script options: Allow stealing entire containers (off by default pre-AoS) Return stolen items on thief death (off by default) Temporarily make stolen items immovable in thief's backpack (on by default post-AoS) Temporarily protect traded items (on by default) Let dexterity affect chance for successful theft (off by default) Let light level affect chance for successful theft (off by default) Allow stealing from NPC Guards (off by default) Allow stealing special loot from monsters (on by default post-ml) Moved implementation of Snooping skill from code to script (js/skill/snooping.js), with some changes: Players cannot snoop pack animals from inside a house, if the animal is outside The deeper inside main backpack a container sits, the harder it becomes to snoop inside it Included an optional feature that lets targets of snooping gradually become more aware, increasing the difficulty of succeeding. This awareness fades over time. Players have a chance to stay hidden while snooping, based on their Hiding skill Karma is now lowered by snooping regardless of success or failure Added tracking system for "aggressors" in combat. A player attacking someone (regardless of flag status) will be marked as aggressor to that someone for 2 minutes Added tracking system for "permagrey" flags - these are stored on a per-target basis, so a player can be flagged visibly as permagrey to multiple other players. Persists until player dies. Player combat targets and war mode are now cleared on logout Players will now be unable to hide if within visual distance and in line of sight of their attacker or current target in combat Server leave-announcement now only happens after the logout timer has expired, instead of the exact moment the player presses the logout button Fixed an issue that could cause swimming NPCs to swim on land NPCs now have the ability to temporarily ignore unreachable targets in combat. If attacked by someone they are ignoring, they will enter evade state and try to move away from that someone. SpawnRegions now support NPCLISTS with weighted entries. Example of an NPCLIST with 75% chance of spawning some kind of orc, and 25% chance of spawning a ratman archer: [NPCLIST example] { 75|NPCLIST=allorc 25|ratman } Added 3 additional "all purpose" item properties (.more0, .more1 and .more2) and exposed those to JS engine. These work the same as more/morex/morey/morez Mark spell now stores a 4th property on recall runes - instanceID. This is stored in the rune's .more0 property. Recall and Gate spells now check the recall rune (or runebook)'s 4th location property - instanceID - to determine where the player ends up Fixed a server crash related to equipment being automatically unequipped if character is no longer strong enough to have it equipped Added new JS Function to check if any characters at specified location potentially block movement: DoesCharacterBlock( x, y, z, worldNum, instanceID ) // returns true if a character exists at given coordinate (within z +/- 4)
2023-06-20 02:21:16 +08:00
case CCP_ISDISGUISED: gPriv->IsDisguised( encaps.toBool() ); break;
case CCP_CANRUN: gPriv->SetRun( encaps.toBool() ); break;
case CCP_ISGUARDED: gPriv->SetGuarded( encaps.toBool() ); break;
0.99.4v Added JS command to reload dictionaries 'reloaddictionaries Fixed a server crash related to casting of spells Fixed some issues with Line-of-Sight checks related to items under/above ground, LoS checks between different floors of buildings, etc. Updated handling of skill-training keywords to be based on language-independent keyword IDs rather than trying to match player-input text to specific skill-names Updated animal-trainer/stablemasterscript (js/npc/ai/stablemaster.js) with several changes: Fixed an issue where the same pet would be stabled in all available slots if payment was taken from player's bank account instead of their backpack Fixed an issue where stablemaster would not pause walking for a while when a player interacts with them Converted all system messages and text messages in stablemaster script to dictionary entries Added new NPC AI type to source - AI_STABLEMASTER (9) - and assigned this to animal trainers. This is used to identify this type of NPCs for the purpose of displaying relevant context menus Reworked banker AI script (js/npc/ai/banker.js) to use triggerwords from client instead of hard-defined strings, to work better with multiple languages (and work with all relevant triggerwords) Fixed a bug with banker AI script (js/npc/ai/banker.js) that prevented players from using the "withdraw" command Re-added NPC AI 8 to banker NPCs (dfndata/npc/male_vendors.dfn and female_vendors.dfn) so code can check for presence of this AI when handling context menus Removed remaining hard-coded banking functionality - all handled by script anyway Added new context menu option for NPC bankers - Open Bankbox Updated code handling of context menus to only show context menus when relevant: Open Paperdoll - Shows for all characters with a paperdoll Open Backpack - Shows for player's character, pack animals and hirelings Open Bankbox - Shows for banker NPCs (if within 8 tiles) Buy/Sell - Shows for vendor NPCs (if within 8 tiles, and if they have anything for sale/are buying anything) Added new context menu entries for pets, which can be used if player is within 12 tiles of pet: Command: Kill Command: Stop Command: Follow Command: Stay Command: Guard Add Friend Remove Friend Transfer Release Added new context menu entries for stablemasters/animal trainers: Claim All Pets Stable Pet Added new context menu entries for Escort Quest NPCs Ask Destination (if within 3 tiles) Accept Escort (if within 3 tiles) Abandon Escort Added new context menus for NPCs that can teach skills to players (limited to max 10 per NPC) Train [skillName] Added new AI script for NPC hirelings (3204=js/npc/ai/hireling.js), who can be hired to follow the player around for a limited amount of time, and function the same way as pets. In addition to the regular pet commands, these speech commands are supported: hire // The hireling will respond with the cost to hire them dismiss // Replaces the "release" command for pets; will dismiss the hireling patrol // The hireling will patrol between it's current location and a second targeted location nearby move // The hireling will try to shuffle out of the way fetch // The hireling will try to fetch a targeted item drop // The hireling will drop to the ground all loot they're currently carrying report // The hireling will report on the remaining time they're hired for Added new NPC DFN tag used by code to detect hireling NPCs for the purpose of displaying context menus: HIRELING // No additional value/data needed for tag Added new context menu entries for Hireling NPCs, in addition to the ones for regular pets: Hire // Can be used within 3 steps of the hireling, who will respond with cost to hire them Dismiss // Replaces the "release" command for pets, will dismiss the hireling Added HIRELING tag and SCRIPT=3204 to and updated stats of various NPCs that will be hireable: m_fighter, f_fighter, m_beggar, f_beggar, m_peasant, f_peasant, m_sailor, f_sailor, m_pirate, f_pirate Added new hireling NPC: m_paladin, f_paladin Added new UOX ini setting to enable/disable context menus CONTEXTMENUS=1/0 (defaults to 1) Added new Item JS Method to check if an item's ID is on a specified food list .IsOnFoodList( foodList ) // Returns true/false if item's ID is on specified foodList Added new OMNIVORE food list and assigned it to [basehuman] DFN section Added new Character JS Properties .isGuarded // Gets/Sets whether character is guarded by a pet/hireling .guarding // Gets/Sets the object (if any) being guarded by a pet/hireling Fixed multiple issues with health bars, flagging and character highlighting Added some crash protection for invalid data used with CUSTOMINTTAG and CUSTOMSTRINGTAG DFN tags for Items, NPCs and Multis Fixed an issue which prevented hard-coded checks from running when using items Added new global js object (Timer) to make the use of character timers in JS more robust, with properties matching timer names from enum in source. Properties: .TIMEOUT // Time until next attack can be done in combat .INVIS // Time until invisible character becomes visible .HUNGER // Time until character grows more hungry .THIRST // Time until character grows more thirsty .POISONTIME // Time until next tick of poison damage .POISONTEXT // Time until next message about suffering from poison .POISONWEAROFF // Time until poison wears off .SPELLTIME // Time until spell cast is completed. Can be set to 0 to interrupt .ANTISPAM // Time until next speech message can be sent (for anti spam purposes) .CRIMFLAG // Time until criminal flag runs out .MURDERRATE // Time until next murder count decay .PEACETIMER // Time until character can re-enter combat after being affected by peacemaking .FLYINGTOGGLE // Time until next time flying ability can be toggled for gargoyles .MOVETIME // Time until NPC can move again .SPATIMER // Time until next time NPC can cast a spell .SUMMONTIME // Time until a summoned NPC will vanish .EVADETIME // Time until an NPC will exit evade state .LOGOUT // Time it takes for a player char to vanish after logout Examples of use: var hungerTimer = myChar.GetTimer( Timer.HUNGER ) myChar.SetTimer( Timer.HUNGER, 15000 ) Added new Character JS Methods to add, remove and list friends of a pet/hireling: .AddFriend( playerToAdd ) // Adds player to friend list .RemoveFriend( playerToRemove ) // Removes player from friend list .GetFriendList() // Gets list of friends .ClearFriendList() // Clears list of friends Added new Character JS Method to fetch a player character's list of pets/followers .GetPetList() // Gets list of pets/followers Added new persistent NPC property to keep track of a pet's previous owners, whether those tamed the pet or had it transferred to them. Every time a pet is tamed, or is transferred to a new owner, this list is updated: GenericList< CChar * > petOwnerList Added new Character JS Method to check if a player is on a pet's owner list as a previous owner: .HasBeenOwner( mChar ) Previous owners of a pet can re-tame it with guaranteed chance of success Updated JS Method Refresh() to be usable with both items or characters, to send updated state of object to nearby players Added character tooltip [Guarded] for characters being guarded by a pet/hireling Pets/hirelings that are transferred will now immediately start following their new master instead of wandering freely Pets/hirelings can no longer be transferred between players as long as either party is flagged as a criminal Pets/hirelings can no longer be transferred to dead players Pets/hirelings can no longer be transferred to NPCs Summoned creatures can no longer be transferred to other players Summoned creatures can no longer have friends Friend lists of pets/hirelings are now cleared when the pet/hireling is transferred to another player Added new UOX.INI settings to control how many pets players can have active: MAXCONTROLSLOTS=0 // Maximum number of pet control slots available to player. Disabled if 0 MAXFOLLOWERS=5 // Maximum pets/followers a player can have active at the same time. Used if control slots are disabled MAXPETOWNERS=5 // Maximum number of different owners a pet can have over its lifetime before it becomes impossible to retame Added new NPC property and NPC DFN tag that keeps track of how many pet control slots an NPC would take up if owned by a player: UI08 controlSlots // source property CONTROLSLOTS=# // DFN tag Added new Character JS properties: .ownerCount // Get the total number of owners a pet/hireling has had, based on NPC's petOwnerList .controlSlots // Get/Set number of pet control slots an NPC will occupy .controlSlotsUsed // Get/Set the number of control slots used by a player Updated get (js/commands/targeting/get.js) and set (js/commands/targeting/set.js) commands to support getting/setting the following character properties: deaths ownerCount (read only) controlSlots controlSlotsUsed Updated NPC DFNs with default CONTROLSLOT=# tags Increased the max distance from player that onSpeech JS event will trigger from 7 to 12 Updated how "all attack" and "all follow" commands for pets are handled. Now loops through all pets owned by character and executes command for each eligible pet Fixed an issue where NPCs could follow characters in different worlds/instances than them selves Updated default max amount of items that can be sold to NPC vendors from 5 to 250 Guards can no longer train players in skills Updated equipment itemlists (dfndata/items/itemlists/itemlists.dfn) with blank entries to introduce some more variety in the type of clothes NPCs wear in general Added new NPCs to DFNs (dfndata/npc/undead.dfn) and added them to undead npclist: [skeletalmage] // variation of [bonemage] [skeletalknight] // variation of [boneknight] Updated Titles (dfndata/titles/titles.dfn) with up-to-date titles for skills around Pub 15, and added titles for skills added after that. Also added "Elder" and "Legendary" titles for 110 and 120 skillpoints Updated EQUIPITEM tag in newbie.dfn (dfndata/newbie/newbie.dfn) to support an optional hue parameter (EQUIPITEM=id,hue) Updated starting equipment for new characters (dfndata/newbie/newbie.dfn), with commented out practice weapons. Uncomment to use Added item definitions for practice weapons (dfndata/items/gear/weapons/practice_weapons.dfn): practice_skinning_knife practice_hatchet practice_axe practice_mace practice_longsword practice_spear practice_bow practice_club practice_crook practice_gnarled_staff Updated mount statues DFN (dfndata/items/misc/mount-statues.dfn) and JS (js/npc/pets/*.js) files to include pet control slot related stuff Pets now inherit the karma of their owners, but revert to their original karma upon release Pets and hirelings will no longer follow the ghosts of their dead owners, but stay to guard their corpse Added optional 9th parameter for JS Function CreateDFNItem to specify a color for item created. This comes before the other optional parameters - worldNumber and instanceID (which are only used if character is NULL): CreateDFNItem( mSock, mChar, sectionName, inPack, iAmount, itemType, iColor, worldNumber, instanceID ) Added ID of Giant Beetle to various pack animal checks Pack animals will now drop any newbie/blessed items stored in their packs upon death Added new NPC properties to track pet loyalty, and exposed these as Character JS properties, and NPC DFN tags: JS Properties .maxLoyalty // Defaults to 100 .loyalty // Starts at 25 DFN Tags MAXLOYALTY=# // Defaults to 100 LOYALTY=# // Starts at 25 Updated TriggerEvent JS function to support return values (int, bool, string, object) from called script Updated various JS scripts to make use of new TriggerEvent functionality and reduce reliance on custom tags: js/item/archerybutte.js js/item/trainingdummy.js js/server/data/combatanims.js js/server/data/weapontypes.js Updated archerybutte script to use dictionary for system and text messages Updated archerybutte script to support increased range, distance penalty and dex/str bonuses when calculating score Added new UOX.INI settings under [pets and hirelings] section related to pet control and loyalty: CHECKPETCONTROLDIFFICULTY=1 // Enable/Disable pet control difficulty system PETLOYALTYGAINONSUCCESS=1 // Amount of pet loyalty gained on successful pet command use PETLOYALTYLOSSONFAILURE=3 // Amount of pet loyalty lost on failed pet command use PETLOYALTYRATE=900 // Amount of seconds between each time pet loyalty is automatically reduced by 1. Takes 25 hours to deplete completely from max Added new persistent NPC property that keeps track of the difficulty of taming and controlling a pet, and exposed it as a Character JS property: .orneriness Every time a tamed pet is released or goes wild, its "orneriness" increases, making it more difficult for other players to tame, and more difficult for anyone to control. Updated CBasePetResponse::canControlPet() function to use pet control difficulty system if enabled, which checks player's animal taming/animal lore skill vs a pet's "orneriness" to determine chance of pet accepting a given pet command On successful use of pet command, increases pet loyalty by value defined in PETLOYALTYGAINONSUCCESS ini setting On failed use of pet command, decreases pet loyalty by value defined in PETLOYALTYLOSSONFAILURE ini setting Added new Character JS Method to calculate chance of a player successfully controlling the pet: .CalculateControlChance( mChar ) // Returns value between 0 and 1000 indicating chance of success Feeding a pet will now restore its loyalty to maximum Pets will now lose loyalty on hunger checks when at maximum hunger Pets that are maximum hungry will now only have a chance to go wild if loyalty has dropped to zero Added new DFN tag for creatures.dfn - TYPE - which contains a string describing the type of creature Added secure pet trading. Players who trade pets will now see a pet transfer deed appear in a secure trade window with the name and type of creature, and upon completion of the trade the associated pet will be instantly transferred to the other player Updated resource JS scripts (js/server/resource/*) to use dictionaries for all system messages Updated skill JS scripts (js/skill/*) to use dictionaries for all system messages Updated housing JS scripts (js/server/house/*) to use dictionaries for all system messages Updated item JS scripts (js/item/*) to use dictionaries for all system messages Updated magic JS scripts (js/magic/*) to use dictionaries for all system messages Updated NPC AI JS scripts (js/npc/ai/*) to use dictionaries for all system messages Updated command JS scripts (js/commands/*) to use dictionaries for all system messages, gump tooltips, etc Updated code to use dictionaries for all system messages Fixed incorrect spelling for UOX.INI setting HIDEW(H)ILEMOUNTED and updated hiding skill (js/skill/hiding.js) to actually allow/disallow hiding while mounted based on this setting Added new Character JS Method to make it easier to make one NPC initiate combat with another: .InitiateCombat( targetChar ) // Character attempts to initiate combat with target character Updated parrying portion of combat code to be in line with Pub15/pre-AoS parrying mechanics. High AR shields now absorb more damage on a successful parry, while low AR shields have a higher chance of parrying. Shields are also now more effective against archery attacks (full absorption potential) than melee attacks (half absorption potential). Updated combat damage calculations to be in line with Pub15/pre-AoS damage calculations Adjusted default value of COMBATNPCDAMAGERATE ini setting (damage divisor when target is a player) from 2 to 1 to account for these changes. Removed dictionary.UNK, and made dictionary.ZRO the default dictionary used for all unsupported languages Added dictionary support for additional languages: Portuguese, Italian, Czech Updated default dictionaries for the following languages: English, French Added default dictionaries for the following languages: German, Spanish, Portuguese, Italian, Czech (note that translations have been provided by automatic services and will contain inaccuracies!) Added new UOX.INI setting to allow specifying a default dictionary language for server, which if set will force that language for all dictionary messages, regardless of client settings: SERVERLANGUAGE=0 // Set default server dictionary language. Supported languages: 0 - None/language used by each client, 1 - English, 2 - German, 3 - Spanish, 5 - French, 6 - Portuguese, 7 - Italian, 8 - Czech Added new function in combat.cpp - AdjustArmorClassDamage() - which adjusts the damage dealt in combat based on whether armour class (AC DFN tag or .ac JS property) of weapon and armour equipped on hit location of target match up. A weapon with armour class 1 would essentially be doubly effective against armour of armour class 1. Allows setting up things like piercing weapons being better against some armor types than mace weapons, etc. Added new UOX.INI setting under [combat] to enable/disable double damage from armour class bonuses: ARMORCLASSDAMAGEBONUS=0/1 //defaults to 0)
2021-07-28 16:02:56 +08:00
case CCP_GUARDING:
if( *vp != JSVAL_NULL )
{
CBaseObject *myObj = static_cast<CBaseObject *>( encaps.toObject() );
if( !ValidateObject( myObj ))
0.99.4v Added JS command to reload dictionaries 'reloaddictionaries Fixed a server crash related to casting of spells Fixed some issues with Line-of-Sight checks related to items under/above ground, LoS checks between different floors of buildings, etc. Updated handling of skill-training keywords to be based on language-independent keyword IDs rather than trying to match player-input text to specific skill-names Updated animal-trainer/stablemasterscript (js/npc/ai/stablemaster.js) with several changes: Fixed an issue where the same pet would be stabled in all available slots if payment was taken from player's bank account instead of their backpack Fixed an issue where stablemaster would not pause walking for a while when a player interacts with them Converted all system messages and text messages in stablemaster script to dictionary entries Added new NPC AI type to source - AI_STABLEMASTER (9) - and assigned this to animal trainers. This is used to identify this type of NPCs for the purpose of displaying relevant context menus Reworked banker AI script (js/npc/ai/banker.js) to use triggerwords from client instead of hard-defined strings, to work better with multiple languages (and work with all relevant triggerwords) Fixed a bug with banker AI script (js/npc/ai/banker.js) that prevented players from using the "withdraw" command Re-added NPC AI 8 to banker NPCs (dfndata/npc/male_vendors.dfn and female_vendors.dfn) so code can check for presence of this AI when handling context menus Removed remaining hard-coded banking functionality - all handled by script anyway Added new context menu option for NPC bankers - Open Bankbox Updated code handling of context menus to only show context menus when relevant: Open Paperdoll - Shows for all characters with a paperdoll Open Backpack - Shows for player's character, pack animals and hirelings Open Bankbox - Shows for banker NPCs (if within 8 tiles) Buy/Sell - Shows for vendor NPCs (if within 8 tiles, and if they have anything for sale/are buying anything) Added new context menu entries for pets, which can be used if player is within 12 tiles of pet: Command: Kill Command: Stop Command: Follow Command: Stay Command: Guard Add Friend Remove Friend Transfer Release Added new context menu entries for stablemasters/animal trainers: Claim All Pets Stable Pet Added new context menu entries for Escort Quest NPCs Ask Destination (if within 3 tiles) Accept Escort (if within 3 tiles) Abandon Escort Added new context menus for NPCs that can teach skills to players (limited to max 10 per NPC) Train [skillName] Added new AI script for NPC hirelings (3204=js/npc/ai/hireling.js), who can be hired to follow the player around for a limited amount of time, and function the same way as pets. In addition to the regular pet commands, these speech commands are supported: hire // The hireling will respond with the cost to hire them dismiss // Replaces the "release" command for pets; will dismiss the hireling patrol // The hireling will patrol between it's current location and a second targeted location nearby move // The hireling will try to shuffle out of the way fetch // The hireling will try to fetch a targeted item drop // The hireling will drop to the ground all loot they're currently carrying report // The hireling will report on the remaining time they're hired for Added new NPC DFN tag used by code to detect hireling NPCs for the purpose of displaying context menus: HIRELING // No additional value/data needed for tag Added new context menu entries for Hireling NPCs, in addition to the ones for regular pets: Hire // Can be used within 3 steps of the hireling, who will respond with cost to hire them Dismiss // Replaces the "release" command for pets, will dismiss the hireling Added HIRELING tag and SCRIPT=3204 to and updated stats of various NPCs that will be hireable: m_fighter, f_fighter, m_beggar, f_beggar, m_peasant, f_peasant, m_sailor, f_sailor, m_pirate, f_pirate Added new hireling NPC: m_paladin, f_paladin Added new UOX ini setting to enable/disable context menus CONTEXTMENUS=1/0 (defaults to 1) Added new Item JS Method to check if an item's ID is on a specified food list .IsOnFoodList( foodList ) // Returns true/false if item's ID is on specified foodList Added new OMNIVORE food list and assigned it to [basehuman] DFN section Added new Character JS Properties .isGuarded // Gets/Sets whether character is guarded by a pet/hireling .guarding // Gets/Sets the object (if any) being guarded by a pet/hireling Fixed multiple issues with health bars, flagging and character highlighting Added some crash protection for invalid data used with CUSTOMINTTAG and CUSTOMSTRINGTAG DFN tags for Items, NPCs and Multis Fixed an issue which prevented hard-coded checks from running when using items Added new global js object (Timer) to make the use of character timers in JS more robust, with properties matching timer names from enum in source. Properties: .TIMEOUT // Time until next attack can be done in combat .INVIS // Time until invisible character becomes visible .HUNGER // Time until character grows more hungry .THIRST // Time until character grows more thirsty .POISONTIME // Time until next tick of poison damage .POISONTEXT // Time until next message about suffering from poison .POISONWEAROFF // Time until poison wears off .SPELLTIME // Time until spell cast is completed. Can be set to 0 to interrupt .ANTISPAM // Time until next speech message can be sent (for anti spam purposes) .CRIMFLAG // Time until criminal flag runs out .MURDERRATE // Time until next murder count decay .PEACETIMER // Time until character can re-enter combat after being affected by peacemaking .FLYINGTOGGLE // Time until next time flying ability can be toggled for gargoyles .MOVETIME // Time until NPC can move again .SPATIMER // Time until next time NPC can cast a spell .SUMMONTIME // Time until a summoned NPC will vanish .EVADETIME // Time until an NPC will exit evade state .LOGOUT // Time it takes for a player char to vanish after logout Examples of use: var hungerTimer = myChar.GetTimer( Timer.HUNGER ) myChar.SetTimer( Timer.HUNGER, 15000 ) Added new Character JS Methods to add, remove and list friends of a pet/hireling: .AddFriend( playerToAdd ) // Adds player to friend list .RemoveFriend( playerToRemove ) // Removes player from friend list .GetFriendList() // Gets list of friends .ClearFriendList() // Clears list of friends Added new Character JS Method to fetch a player character's list of pets/followers .GetPetList() // Gets list of pets/followers Added new persistent NPC property to keep track of a pet's previous owners, whether those tamed the pet or had it transferred to them. Every time a pet is tamed, or is transferred to a new owner, this list is updated: GenericList< CChar * > petOwnerList Added new Character JS Method to check if a player is on a pet's owner list as a previous owner: .HasBeenOwner( mChar ) Previous owners of a pet can re-tame it with guaranteed chance of success Updated JS Method Refresh() to be usable with both items or characters, to send updated state of object to nearby players Added character tooltip [Guarded] for characters being guarded by a pet/hireling Pets/hirelings that are transferred will now immediately start following their new master instead of wandering freely Pets/hirelings can no longer be transferred between players as long as either party is flagged as a criminal Pets/hirelings can no longer be transferred to dead players Pets/hirelings can no longer be transferred to NPCs Summoned creatures can no longer be transferred to other players Summoned creatures can no longer have friends Friend lists of pets/hirelings are now cleared when the pet/hireling is transferred to another player Added new UOX.INI settings to control how many pets players can have active: MAXCONTROLSLOTS=0 // Maximum number of pet control slots available to player. Disabled if 0 MAXFOLLOWERS=5 // Maximum pets/followers a player can have active at the same time. Used if control slots are disabled MAXPETOWNERS=5 // Maximum number of different owners a pet can have over its lifetime before it becomes impossible to retame Added new NPC property and NPC DFN tag that keeps track of how many pet control slots an NPC would take up if owned by a player: UI08 controlSlots // source property CONTROLSLOTS=# // DFN tag Added new Character JS properties: .ownerCount // Get the total number of owners a pet/hireling has had, based on NPC's petOwnerList .controlSlots // Get/Set number of pet control slots an NPC will occupy .controlSlotsUsed // Get/Set the number of control slots used by a player Updated get (js/commands/targeting/get.js) and set (js/commands/targeting/set.js) commands to support getting/setting the following character properties: deaths ownerCount (read only) controlSlots controlSlotsUsed Updated NPC DFNs with default CONTROLSLOT=# tags Increased the max distance from player that onSpeech JS event will trigger from 7 to 12 Updated how "all attack" and "all follow" commands for pets are handled. Now loops through all pets owned by character and executes command for each eligible pet Fixed an issue where NPCs could follow characters in different worlds/instances than them selves Updated default max amount of items that can be sold to NPC vendors from 5 to 250 Guards can no longer train players in skills Updated equipment itemlists (dfndata/items/itemlists/itemlists.dfn) with blank entries to introduce some more variety in the type of clothes NPCs wear in general Added new NPCs to DFNs (dfndata/npc/undead.dfn) and added them to undead npclist: [skeletalmage] // variation of [bonemage] [skeletalknight] // variation of [boneknight] Updated Titles (dfndata/titles/titles.dfn) with up-to-date titles for skills around Pub 15, and added titles for skills added after that. Also added "Elder" and "Legendary" titles for 110 and 120 skillpoints Updated EQUIPITEM tag in newbie.dfn (dfndata/newbie/newbie.dfn) to support an optional hue parameter (EQUIPITEM=id,hue) Updated starting equipment for new characters (dfndata/newbie/newbie.dfn), with commented out practice weapons. Uncomment to use Added item definitions for practice weapons (dfndata/items/gear/weapons/practice_weapons.dfn): practice_skinning_knife practice_hatchet practice_axe practice_mace practice_longsword practice_spear practice_bow practice_club practice_crook practice_gnarled_staff Updated mount statues DFN (dfndata/items/misc/mount-statues.dfn) and JS (js/npc/pets/*.js) files to include pet control slot related stuff Pets now inherit the karma of their owners, but revert to their original karma upon release Pets and hirelings will no longer follow the ghosts of their dead owners, but stay to guard their corpse Added optional 9th parameter for JS Function CreateDFNItem to specify a color for item created. This comes before the other optional parameters - worldNumber and instanceID (which are only used if character is NULL): CreateDFNItem( mSock, mChar, sectionName, inPack, iAmount, itemType, iColor, worldNumber, instanceID ) Added ID of Giant Beetle to various pack animal checks Pack animals will now drop any newbie/blessed items stored in their packs upon death Added new NPC properties to track pet loyalty, and exposed these as Character JS properties, and NPC DFN tags: JS Properties .maxLoyalty // Defaults to 100 .loyalty // Starts at 25 DFN Tags MAXLOYALTY=# // Defaults to 100 LOYALTY=# // Starts at 25 Updated TriggerEvent JS function to support return values (int, bool, string, object) from called script Updated various JS scripts to make use of new TriggerEvent functionality and reduce reliance on custom tags: js/item/archerybutte.js js/item/trainingdummy.js js/server/data/combatanims.js js/server/data/weapontypes.js Updated archerybutte script to use dictionary for system and text messages Updated archerybutte script to support increased range, distance penalty and dex/str bonuses when calculating score Added new UOX.INI settings under [pets and hirelings] section related to pet control and loyalty: CHECKPETCONTROLDIFFICULTY=1 // Enable/Disable pet control difficulty system PETLOYALTYGAINONSUCCESS=1 // Amount of pet loyalty gained on successful pet command use PETLOYALTYLOSSONFAILURE=3 // Amount of pet loyalty lost on failed pet command use PETLOYALTYRATE=900 // Amount of seconds between each time pet loyalty is automatically reduced by 1. Takes 25 hours to deplete completely from max Added new persistent NPC property that keeps track of the difficulty of taming and controlling a pet, and exposed it as a Character JS property: .orneriness Every time a tamed pet is released or goes wild, its "orneriness" increases, making it more difficult for other players to tame, and more difficult for anyone to control. Updated CBasePetResponse::canControlPet() function to use pet control difficulty system if enabled, which checks player's animal taming/animal lore skill vs a pet's "orneriness" to determine chance of pet accepting a given pet command On successful use of pet command, increases pet loyalty by value defined in PETLOYALTYGAINONSUCCESS ini setting On failed use of pet command, decreases pet loyalty by value defined in PETLOYALTYLOSSONFAILURE ini setting Added new Character JS Method to calculate chance of a player successfully controlling the pet: .CalculateControlChance( mChar ) // Returns value between 0 and 1000 indicating chance of success Feeding a pet will now restore its loyalty to maximum Pets will now lose loyalty on hunger checks when at maximum hunger Pets that are maximum hungry will now only have a chance to go wild if loyalty has dropped to zero Added new DFN tag for creatures.dfn - TYPE - which contains a string describing the type of creature Added secure pet trading. Players who trade pets will now see a pet transfer deed appear in a secure trade window with the name and type of creature, and upon completion of the trade the associated pet will be instantly transferred to the other player Updated resource JS scripts (js/server/resource/*) to use dictionaries for all system messages Updated skill JS scripts (js/skill/*) to use dictionaries for all system messages Updated housing JS scripts (js/server/house/*) to use dictionaries for all system messages Updated item JS scripts (js/item/*) to use dictionaries for all system messages Updated magic JS scripts (js/magic/*) to use dictionaries for all system messages Updated NPC AI JS scripts (js/npc/ai/*) to use dictionaries for all system messages Updated command JS scripts (js/commands/*) to use dictionaries for all system messages, gump tooltips, etc Updated code to use dictionaries for all system messages Fixed incorrect spelling for UOX.INI setting HIDEW(H)ILEMOUNTED and updated hiding skill (js/skill/hiding.js) to actually allow/disallow hiding while mounted based on this setting Added new Character JS Method to make it easier to make one NPC initiate combat with another: .InitiateCombat( targetChar ) // Character attempts to initiate combat with target character Updated parrying portion of combat code to be in line with Pub15/pre-AoS parrying mechanics. High AR shields now absorb more damage on a successful parry, while low AR shields have a higher chance of parrying. Shields are also now more effective against archery attacks (full absorption potential) than melee attacks (half absorption potential). Updated combat damage calculations to be in line with Pub15/pre-AoS damage calculations Adjusted default value of COMBATNPCDAMAGERATE ini setting (damage divisor when target is a player) from 2 to 1 to account for these changes. Removed dictionary.UNK, and made dictionary.ZRO the default dictionary used for all unsupported languages Added dictionary support for additional languages: Portuguese, Italian, Czech Updated default dictionaries for the following languages: English, French Added default dictionaries for the following languages: German, Spanish, Portuguese, Italian, Czech (note that translations have been provided by automatic services and will contain inaccuracies!) Added new UOX.INI setting to allow specifying a default dictionary language for server, which if set will force that language for all dictionary messages, regardless of client settings: SERVERLANGUAGE=0 // Set default server dictionary language. Supported languages: 0 - None/language used by each client, 1 - English, 2 - German, 3 - Spanish, 5 - French, 6 - Portuguese, 7 - Italian, 8 - Czech Added new function in combat.cpp - AdjustArmorClassDamage() - which adjusts the damage dealt in combat based on whether armour class (AC DFN tag or .ac JS property) of weapon and armour equipped on hit location of target match up. A weapon with armour class 1 would essentially be doubly effective against armour of armour class 1. Allows setting up things like piercing weapons being better against some armor types than mace weapons, etc. Added new UOX.INI setting under [combat] to enable/disable double damage from armour class bonuses: ARMORCLASSDAMAGEBONUS=0/1 //defaults to 0)
2021-07-28 16:02:56 +08:00
break;
0.99.4v Added JS command to reload dictionaries 'reloaddictionaries Fixed a server crash related to casting of spells Fixed some issues with Line-of-Sight checks related to items under/above ground, LoS checks between different floors of buildings, etc. Updated handling of skill-training keywords to be based on language-independent keyword IDs rather than trying to match player-input text to specific skill-names Updated animal-trainer/stablemasterscript (js/npc/ai/stablemaster.js) with several changes: Fixed an issue where the same pet would be stabled in all available slots if payment was taken from player's bank account instead of their backpack Fixed an issue where stablemaster would not pause walking for a while when a player interacts with them Converted all system messages and text messages in stablemaster script to dictionary entries Added new NPC AI type to source - AI_STABLEMASTER (9) - and assigned this to animal trainers. This is used to identify this type of NPCs for the purpose of displaying relevant context menus Reworked banker AI script (js/npc/ai/banker.js) to use triggerwords from client instead of hard-defined strings, to work better with multiple languages (and work with all relevant triggerwords) Fixed a bug with banker AI script (js/npc/ai/banker.js) that prevented players from using the "withdraw" command Re-added NPC AI 8 to banker NPCs (dfndata/npc/male_vendors.dfn and female_vendors.dfn) so code can check for presence of this AI when handling context menus Removed remaining hard-coded banking functionality - all handled by script anyway Added new context menu option for NPC bankers - Open Bankbox Updated code handling of context menus to only show context menus when relevant: Open Paperdoll - Shows for all characters with a paperdoll Open Backpack - Shows for player's character, pack animals and hirelings Open Bankbox - Shows for banker NPCs (if within 8 tiles) Buy/Sell - Shows for vendor NPCs (if within 8 tiles, and if they have anything for sale/are buying anything) Added new context menu entries for pets, which can be used if player is within 12 tiles of pet: Command: Kill Command: Stop Command: Follow Command: Stay Command: Guard Add Friend Remove Friend Transfer Release Added new context menu entries for stablemasters/animal trainers: Claim All Pets Stable Pet Added new context menu entries for Escort Quest NPCs Ask Destination (if within 3 tiles) Accept Escort (if within 3 tiles) Abandon Escort Added new context menus for NPCs that can teach skills to players (limited to max 10 per NPC) Train [skillName] Added new AI script for NPC hirelings (3204=js/npc/ai/hireling.js), who can be hired to follow the player around for a limited amount of time, and function the same way as pets. In addition to the regular pet commands, these speech commands are supported: hire // The hireling will respond with the cost to hire them dismiss // Replaces the "release" command for pets; will dismiss the hireling patrol // The hireling will patrol between it's current location and a second targeted location nearby move // The hireling will try to shuffle out of the way fetch // The hireling will try to fetch a targeted item drop // The hireling will drop to the ground all loot they're currently carrying report // The hireling will report on the remaining time they're hired for Added new NPC DFN tag used by code to detect hireling NPCs for the purpose of displaying context menus: HIRELING // No additional value/data needed for tag Added new context menu entries for Hireling NPCs, in addition to the ones for regular pets: Hire // Can be used within 3 steps of the hireling, who will respond with cost to hire them Dismiss // Replaces the "release" command for pets, will dismiss the hireling Added HIRELING tag and SCRIPT=3204 to and updated stats of various NPCs that will be hireable: m_fighter, f_fighter, m_beggar, f_beggar, m_peasant, f_peasant, m_sailor, f_sailor, m_pirate, f_pirate Added new hireling NPC: m_paladin, f_paladin Added new UOX ini setting to enable/disable context menus CONTEXTMENUS=1/0 (defaults to 1) Added new Item JS Method to check if an item's ID is on a specified food list .IsOnFoodList( foodList ) // Returns true/false if item's ID is on specified foodList Added new OMNIVORE food list and assigned it to [basehuman] DFN section Added new Character JS Properties .isGuarded // Gets/Sets whether character is guarded by a pet/hireling .guarding // Gets/Sets the object (if any) being guarded by a pet/hireling Fixed multiple issues with health bars, flagging and character highlighting Added some crash protection for invalid data used with CUSTOMINTTAG and CUSTOMSTRINGTAG DFN tags for Items, NPCs and Multis Fixed an issue which prevented hard-coded checks from running when using items Added new global js object (Timer) to make the use of character timers in JS more robust, with properties matching timer names from enum in source. Properties: .TIMEOUT // Time until next attack can be done in combat .INVIS // Time until invisible character becomes visible .HUNGER // Time until character grows more hungry .THIRST // Time until character grows more thirsty .POISONTIME // Time until next tick of poison damage .POISONTEXT // Time until next message about suffering from poison .POISONWEAROFF // Time until poison wears off .SPELLTIME // Time until spell cast is completed. Can be set to 0 to interrupt .ANTISPAM // Time until next speech message can be sent (for anti spam purposes) .CRIMFLAG // Time until criminal flag runs out .MURDERRATE // Time until next murder count decay .PEACETIMER // Time until character can re-enter combat after being affected by peacemaking .FLYINGTOGGLE // Time until next time flying ability can be toggled for gargoyles .MOVETIME // Time until NPC can move again .SPATIMER // Time until next time NPC can cast a spell .SUMMONTIME // Time until a summoned NPC will vanish .EVADETIME // Time until an NPC will exit evade state .LOGOUT // Time it takes for a player char to vanish after logout Examples of use: var hungerTimer = myChar.GetTimer( Timer.HUNGER ) myChar.SetTimer( Timer.HUNGER, 15000 ) Added new Character JS Methods to add, remove and list friends of a pet/hireling: .AddFriend( playerToAdd ) // Adds player to friend list .RemoveFriend( playerToRemove ) // Removes player from friend list .GetFriendList() // Gets list of friends .ClearFriendList() // Clears list of friends Added new Character JS Method to fetch a player character's list of pets/followers .GetPetList() // Gets list of pets/followers Added new persistent NPC property to keep track of a pet's previous owners, whether those tamed the pet or had it transferred to them. Every time a pet is tamed, or is transferred to a new owner, this list is updated: GenericList< CChar * > petOwnerList Added new Character JS Method to check if a player is on a pet's owner list as a previous owner: .HasBeenOwner( mChar ) Previous owners of a pet can re-tame it with guaranteed chance of success Updated JS Method Refresh() to be usable with both items or characters, to send updated state of object to nearby players Added character tooltip [Guarded] for characters being guarded by a pet/hireling Pets/hirelings that are transferred will now immediately start following their new master instead of wandering freely Pets/hirelings can no longer be transferred between players as long as either party is flagged as a criminal Pets/hirelings can no longer be transferred to dead players Pets/hirelings can no longer be transferred to NPCs Summoned creatures can no longer be transferred to other players Summoned creatures can no longer have friends Friend lists of pets/hirelings are now cleared when the pet/hireling is transferred to another player Added new UOX.INI settings to control how many pets players can have active: MAXCONTROLSLOTS=0 // Maximum number of pet control slots available to player. Disabled if 0 MAXFOLLOWERS=5 // Maximum pets/followers a player can have active at the same time. Used if control slots are disabled MAXPETOWNERS=5 // Maximum number of different owners a pet can have over its lifetime before it becomes impossible to retame Added new NPC property and NPC DFN tag that keeps track of how many pet control slots an NPC would take up if owned by a player: UI08 controlSlots // source property CONTROLSLOTS=# // DFN tag Added new Character JS properties: .ownerCount // Get the total number of owners a pet/hireling has had, based on NPC's petOwnerList .controlSlots // Get/Set number of pet control slots an NPC will occupy .controlSlotsUsed // Get/Set the number of control slots used by a player Updated get (js/commands/targeting/get.js) and set (js/commands/targeting/set.js) commands to support getting/setting the following character properties: deaths ownerCount (read only) controlSlots controlSlotsUsed Updated NPC DFNs with default CONTROLSLOT=# tags Increased the max distance from player that onSpeech JS event will trigger from 7 to 12 Updated how "all attack" and "all follow" commands for pets are handled. Now loops through all pets owned by character and executes command for each eligible pet Fixed an issue where NPCs could follow characters in different worlds/instances than them selves Updated default max amount of items that can be sold to NPC vendors from 5 to 250 Guards can no longer train players in skills Updated equipment itemlists (dfndata/items/itemlists/itemlists.dfn) with blank entries to introduce some more variety in the type of clothes NPCs wear in general Added new NPCs to DFNs (dfndata/npc/undead.dfn) and added them to undead npclist: [skeletalmage] // variation of [bonemage] [skeletalknight] // variation of [boneknight] Updated Titles (dfndata/titles/titles.dfn) with up-to-date titles for skills around Pub 15, and added titles for skills added after that. Also added "Elder" and "Legendary" titles for 110 and 120 skillpoints Updated EQUIPITEM tag in newbie.dfn (dfndata/newbie/newbie.dfn) to support an optional hue parameter (EQUIPITEM=id,hue) Updated starting equipment for new characters (dfndata/newbie/newbie.dfn), with commented out practice weapons. Uncomment to use Added item definitions for practice weapons (dfndata/items/gear/weapons/practice_weapons.dfn): practice_skinning_knife practice_hatchet practice_axe practice_mace practice_longsword practice_spear practice_bow practice_club practice_crook practice_gnarled_staff Updated mount statues DFN (dfndata/items/misc/mount-statues.dfn) and JS (js/npc/pets/*.js) files to include pet control slot related stuff Pets now inherit the karma of their owners, but revert to their original karma upon release Pets and hirelings will no longer follow the ghosts of their dead owners, but stay to guard their corpse Added optional 9th parameter for JS Function CreateDFNItem to specify a color for item created. This comes before the other optional parameters - worldNumber and instanceID (which are only used if character is NULL): CreateDFNItem( mSock, mChar, sectionName, inPack, iAmount, itemType, iColor, worldNumber, instanceID ) Added ID of Giant Beetle to various pack animal checks Pack animals will now drop any newbie/blessed items stored in their packs upon death Added new NPC properties to track pet loyalty, and exposed these as Character JS properties, and NPC DFN tags: JS Properties .maxLoyalty // Defaults to 100 .loyalty // Starts at 25 DFN Tags MAXLOYALTY=# // Defaults to 100 LOYALTY=# // Starts at 25 Updated TriggerEvent JS function to support return values (int, bool, string, object) from called script Updated various JS scripts to make use of new TriggerEvent functionality and reduce reliance on custom tags: js/item/archerybutte.js js/item/trainingdummy.js js/server/data/combatanims.js js/server/data/weapontypes.js Updated archerybutte script to use dictionary for system and text messages Updated archerybutte script to support increased range, distance penalty and dex/str bonuses when calculating score Added new UOX.INI settings under [pets and hirelings] section related to pet control and loyalty: CHECKPETCONTROLDIFFICULTY=1 // Enable/Disable pet control difficulty system PETLOYALTYGAINONSUCCESS=1 // Amount of pet loyalty gained on successful pet command use PETLOYALTYLOSSONFAILURE=3 // Amount of pet loyalty lost on failed pet command use PETLOYALTYRATE=900 // Amount of seconds between each time pet loyalty is automatically reduced by 1. Takes 25 hours to deplete completely from max Added new persistent NPC property that keeps track of the difficulty of taming and controlling a pet, and exposed it as a Character JS property: .orneriness Every time a tamed pet is released or goes wild, its "orneriness" increases, making it more difficult for other players to tame, and more difficult for anyone to control. Updated CBasePetResponse::canControlPet() function to use pet control difficulty system if enabled, which checks player's animal taming/animal lore skill vs a pet's "orneriness" to determine chance of pet accepting a given pet command On successful use of pet command, increases pet loyalty by value defined in PETLOYALTYGAINONSUCCESS ini setting On failed use of pet command, decreases pet loyalty by value defined in PETLOYALTYLOSSONFAILURE ini setting Added new Character JS Method to calculate chance of a player successfully controlling the pet: .CalculateControlChance( mChar ) // Returns value between 0 and 1000 indicating chance of success Feeding a pet will now restore its loyalty to maximum Pets will now lose loyalty on hunger checks when at maximum hunger Pets that are maximum hungry will now only have a chance to go wild if loyalty has dropped to zero Added new DFN tag for creatures.dfn - TYPE - which contains a string describing the type of creature Added secure pet trading. Players who trade pets will now see a pet transfer deed appear in a secure trade window with the name and type of creature, and upon completion of the trade the associated pet will be instantly transferred to the other player Updated resource JS scripts (js/server/resource/*) to use dictionaries for all system messages Updated skill JS scripts (js/skill/*) to use dictionaries for all system messages Updated housing JS scripts (js/server/house/*) to use dictionaries for all system messages Updated item JS scripts (js/item/*) to use dictionaries for all system messages Updated magic JS scripts (js/magic/*) to use dictionaries for all system messages Updated NPC AI JS scripts (js/npc/ai/*) to use dictionaries for all system messages Updated command JS scripts (js/commands/*) to use dictionaries for all system messages, gump tooltips, etc Updated code to use dictionaries for all system messages Fixed incorrect spelling for UOX.INI setting HIDEW(H)ILEMOUNTED and updated hiding skill (js/skill/hiding.js) to actually allow/disallow hiding while mounted based on this setting Added new Character JS Method to make it easier to make one NPC initiate combat with another: .InitiateCombat( targetChar ) // Character attempts to initiate combat with target character Updated parrying portion of combat code to be in line with Pub15/pre-AoS parrying mechanics. High AR shields now absorb more damage on a successful parry, while low AR shields have a higher chance of parrying. Shields are also now more effective against archery attacks (full absorption potential) than melee attacks (half absorption potential). Updated combat damage calculations to be in line with Pub15/pre-AoS damage calculations Adjusted default value of COMBATNPCDAMAGERATE ini setting (damage divisor when target is a player) from 2 to 1 to account for these changes. Removed dictionary.UNK, and made dictionary.ZRO the default dictionary used for all unsupported languages Added dictionary support for additional languages: Portuguese, Italian, Czech Updated default dictionaries for the following languages: English, French Added default dictionaries for the following languages: German, Spanish, Portuguese, Italian, Czech (note that translations have been provided by automatic services and will contain inaccuracies!) Added new UOX.INI setting to allow specifying a default dictionary language for server, which if set will force that language for all dictionary messages, regardless of client settings: SERVERLANGUAGE=0 // Set default server dictionary language. Supported languages: 0 - None/language used by each client, 1 - English, 2 - German, 3 - Spanish, 5 - French, 6 - Portuguese, 7 - Italian, 8 - Czech Added new function in combat.cpp - AdjustArmorClassDamage() - which adjusts the damage dealt in combat based on whether armour class (AC DFN tag or .ac JS property) of weapon and armour equipped on hit location of target match up. A weapon with armour class 1 would essentially be doubly effective against armour of armour class 1. Allows setting up things like piercing weapons being better against some armor types than mace weapons, etc. Added new UOX.INI setting under [combat] to enable/disable double damage from armour class bonuses: ARMORCLASSDAMAGEBONUS=0/1 //defaults to 0)
2021-07-28 16:02:56 +08:00
gPriv->SetGuarding( myObj );
}
else
{
0.99.4v Added JS command to reload dictionaries 'reloaddictionaries Fixed a server crash related to casting of spells Fixed some issues with Line-of-Sight checks related to items under/above ground, LoS checks between different floors of buildings, etc. Updated handling of skill-training keywords to be based on language-independent keyword IDs rather than trying to match player-input text to specific skill-names Updated animal-trainer/stablemasterscript (js/npc/ai/stablemaster.js) with several changes: Fixed an issue where the same pet would be stabled in all available slots if payment was taken from player's bank account instead of their backpack Fixed an issue where stablemaster would not pause walking for a while when a player interacts with them Converted all system messages and text messages in stablemaster script to dictionary entries Added new NPC AI type to source - AI_STABLEMASTER (9) - and assigned this to animal trainers. This is used to identify this type of NPCs for the purpose of displaying relevant context menus Reworked banker AI script (js/npc/ai/banker.js) to use triggerwords from client instead of hard-defined strings, to work better with multiple languages (and work with all relevant triggerwords) Fixed a bug with banker AI script (js/npc/ai/banker.js) that prevented players from using the "withdraw" command Re-added NPC AI 8 to banker NPCs (dfndata/npc/male_vendors.dfn and female_vendors.dfn) so code can check for presence of this AI when handling context menus Removed remaining hard-coded banking functionality - all handled by script anyway Added new context menu option for NPC bankers - Open Bankbox Updated code handling of context menus to only show context menus when relevant: Open Paperdoll - Shows for all characters with a paperdoll Open Backpack - Shows for player's character, pack animals and hirelings Open Bankbox - Shows for banker NPCs (if within 8 tiles) Buy/Sell - Shows for vendor NPCs (if within 8 tiles, and if they have anything for sale/are buying anything) Added new context menu entries for pets, which can be used if player is within 12 tiles of pet: Command: Kill Command: Stop Command: Follow Command: Stay Command: Guard Add Friend Remove Friend Transfer Release Added new context menu entries for stablemasters/animal trainers: Claim All Pets Stable Pet Added new context menu entries for Escort Quest NPCs Ask Destination (if within 3 tiles) Accept Escort (if within 3 tiles) Abandon Escort Added new context menus for NPCs that can teach skills to players (limited to max 10 per NPC) Train [skillName] Added new AI script for NPC hirelings (3204=js/npc/ai/hireling.js), who can be hired to follow the player around for a limited amount of time, and function the same way as pets. In addition to the regular pet commands, these speech commands are supported: hire // The hireling will respond with the cost to hire them dismiss // Replaces the "release" command for pets; will dismiss the hireling patrol // The hireling will patrol between it's current location and a second targeted location nearby move // The hireling will try to shuffle out of the way fetch // The hireling will try to fetch a targeted item drop // The hireling will drop to the ground all loot they're currently carrying report // The hireling will report on the remaining time they're hired for Added new NPC DFN tag used by code to detect hireling NPCs for the purpose of displaying context menus: HIRELING // No additional value/data needed for tag Added new context menu entries for Hireling NPCs, in addition to the ones for regular pets: Hire // Can be used within 3 steps of the hireling, who will respond with cost to hire them Dismiss // Replaces the "release" command for pets, will dismiss the hireling Added HIRELING tag and SCRIPT=3204 to and updated stats of various NPCs that will be hireable: m_fighter, f_fighter, m_beggar, f_beggar, m_peasant, f_peasant, m_sailor, f_sailor, m_pirate, f_pirate Added new hireling NPC: m_paladin, f_paladin Added new UOX ini setting to enable/disable context menus CONTEXTMENUS=1/0 (defaults to 1) Added new Item JS Method to check if an item's ID is on a specified food list .IsOnFoodList( foodList ) // Returns true/false if item's ID is on specified foodList Added new OMNIVORE food list and assigned it to [basehuman] DFN section Added new Character JS Properties .isGuarded // Gets/Sets whether character is guarded by a pet/hireling .guarding // Gets/Sets the object (if any) being guarded by a pet/hireling Fixed multiple issues with health bars, flagging and character highlighting Added some crash protection for invalid data used with CUSTOMINTTAG and CUSTOMSTRINGTAG DFN tags for Items, NPCs and Multis Fixed an issue which prevented hard-coded checks from running when using items Added new global js object (Timer) to make the use of character timers in JS more robust, with properties matching timer names from enum in source. Properties: .TIMEOUT // Time until next attack can be done in combat .INVIS // Time until invisible character becomes visible .HUNGER // Time until character grows more hungry .THIRST // Time until character grows more thirsty .POISONTIME // Time until next tick of poison damage .POISONTEXT // Time until next message about suffering from poison .POISONWEAROFF // Time until poison wears off .SPELLTIME // Time until spell cast is completed. Can be set to 0 to interrupt .ANTISPAM // Time until next speech message can be sent (for anti spam purposes) .CRIMFLAG // Time until criminal flag runs out .MURDERRATE // Time until next murder count decay .PEACETIMER // Time until character can re-enter combat after being affected by peacemaking .FLYINGTOGGLE // Time until next time flying ability can be toggled for gargoyles .MOVETIME // Time until NPC can move again .SPATIMER // Time until next time NPC can cast a spell .SUMMONTIME // Time until a summoned NPC will vanish .EVADETIME // Time until an NPC will exit evade state .LOGOUT // Time it takes for a player char to vanish after logout Examples of use: var hungerTimer = myChar.GetTimer( Timer.HUNGER ) myChar.SetTimer( Timer.HUNGER, 15000 ) Added new Character JS Methods to add, remove and list friends of a pet/hireling: .AddFriend( playerToAdd ) // Adds player to friend list .RemoveFriend( playerToRemove ) // Removes player from friend list .GetFriendList() // Gets list of friends .ClearFriendList() // Clears list of friends Added new Character JS Method to fetch a player character's list of pets/followers .GetPetList() // Gets list of pets/followers Added new persistent NPC property to keep track of a pet's previous owners, whether those tamed the pet or had it transferred to them. Every time a pet is tamed, or is transferred to a new owner, this list is updated: GenericList< CChar * > petOwnerList Added new Character JS Method to check if a player is on a pet's owner list as a previous owner: .HasBeenOwner( mChar ) Previous owners of a pet can re-tame it with guaranteed chance of success Updated JS Method Refresh() to be usable with both items or characters, to send updated state of object to nearby players Added character tooltip [Guarded] for characters being guarded by a pet/hireling Pets/hirelings that are transferred will now immediately start following their new master instead of wandering freely Pets/hirelings can no longer be transferred between players as long as either party is flagged as a criminal Pets/hirelings can no longer be transferred to dead players Pets/hirelings can no longer be transferred to NPCs Summoned creatures can no longer be transferred to other players Summoned creatures can no longer have friends Friend lists of pets/hirelings are now cleared when the pet/hireling is transferred to another player Added new UOX.INI settings to control how many pets players can have active: MAXCONTROLSLOTS=0 // Maximum number of pet control slots available to player. Disabled if 0 MAXFOLLOWERS=5 // Maximum pets/followers a player can have active at the same time. Used if control slots are disabled MAXPETOWNERS=5 // Maximum number of different owners a pet can have over its lifetime before it becomes impossible to retame Added new NPC property and NPC DFN tag that keeps track of how many pet control slots an NPC would take up if owned by a player: UI08 controlSlots // source property CONTROLSLOTS=# // DFN tag Added new Character JS properties: .ownerCount // Get the total number of owners a pet/hireling has had, based on NPC's petOwnerList .controlSlots // Get/Set number of pet control slots an NPC will occupy .controlSlotsUsed // Get/Set the number of control slots used by a player Updated get (js/commands/targeting/get.js) and set (js/commands/targeting/set.js) commands to support getting/setting the following character properties: deaths ownerCount (read only) controlSlots controlSlotsUsed Updated NPC DFNs with default CONTROLSLOT=# tags Increased the max distance from player that onSpeech JS event will trigger from 7 to 12 Updated how "all attack" and "all follow" commands for pets are handled. Now loops through all pets owned by character and executes command for each eligible pet Fixed an issue where NPCs could follow characters in different worlds/instances than them selves Updated default max amount of items that can be sold to NPC vendors from 5 to 250 Guards can no longer train players in skills Updated equipment itemlists (dfndata/items/itemlists/itemlists.dfn) with blank entries to introduce some more variety in the type of clothes NPCs wear in general Added new NPCs to DFNs (dfndata/npc/undead.dfn) and added them to undead npclist: [skeletalmage] // variation of [bonemage] [skeletalknight] // variation of [boneknight] Updated Titles (dfndata/titles/titles.dfn) with up-to-date titles for skills around Pub 15, and added titles for skills added after that. Also added "Elder" and "Legendary" titles for 110 and 120 skillpoints Updated EQUIPITEM tag in newbie.dfn (dfndata/newbie/newbie.dfn) to support an optional hue parameter (EQUIPITEM=id,hue) Updated starting equipment for new characters (dfndata/newbie/newbie.dfn), with commented out practice weapons. Uncomment to use Added item definitions for practice weapons (dfndata/items/gear/weapons/practice_weapons.dfn): practice_skinning_knife practice_hatchet practice_axe practice_mace practice_longsword practice_spear practice_bow practice_club practice_crook practice_gnarled_staff Updated mount statues DFN (dfndata/items/misc/mount-statues.dfn) and JS (js/npc/pets/*.js) files to include pet control slot related stuff Pets now inherit the karma of their owners, but revert to their original karma upon release Pets and hirelings will no longer follow the ghosts of their dead owners, but stay to guard their corpse Added optional 9th parameter for JS Function CreateDFNItem to specify a color for item created. This comes before the other optional parameters - worldNumber and instanceID (which are only used if character is NULL): CreateDFNItem( mSock, mChar, sectionName, inPack, iAmount, itemType, iColor, worldNumber, instanceID ) Added ID of Giant Beetle to various pack animal checks Pack animals will now drop any newbie/blessed items stored in their packs upon death Added new NPC properties to track pet loyalty, and exposed these as Character JS properties, and NPC DFN tags: JS Properties .maxLoyalty // Defaults to 100 .loyalty // Starts at 25 DFN Tags MAXLOYALTY=# // Defaults to 100 LOYALTY=# // Starts at 25 Updated TriggerEvent JS function to support return values (int, bool, string, object) from called script Updated various JS scripts to make use of new TriggerEvent functionality and reduce reliance on custom tags: js/item/archerybutte.js js/item/trainingdummy.js js/server/data/combatanims.js js/server/data/weapontypes.js Updated archerybutte script to use dictionary for system and text messages Updated archerybutte script to support increased range, distance penalty and dex/str bonuses when calculating score Added new UOX.INI settings under [pets and hirelings] section related to pet control and loyalty: CHECKPETCONTROLDIFFICULTY=1 // Enable/Disable pet control difficulty system PETLOYALTYGAINONSUCCESS=1 // Amount of pet loyalty gained on successful pet command use PETLOYALTYLOSSONFAILURE=3 // Amount of pet loyalty lost on failed pet command use PETLOYALTYRATE=900 // Amount of seconds between each time pet loyalty is automatically reduced by 1. Takes 25 hours to deplete completely from max Added new persistent NPC property that keeps track of the difficulty of taming and controlling a pet, and exposed it as a Character JS property: .orneriness Every time a tamed pet is released or goes wild, its "orneriness" increases, making it more difficult for other players to tame, and more difficult for anyone to control. Updated CBasePetResponse::canControlPet() function to use pet control difficulty system if enabled, which checks player's animal taming/animal lore skill vs a pet's "orneriness" to determine chance of pet accepting a given pet command On successful use of pet command, increases pet loyalty by value defined in PETLOYALTYGAINONSUCCESS ini setting On failed use of pet command, decreases pet loyalty by value defined in PETLOYALTYLOSSONFAILURE ini setting Added new Character JS Method to calculate chance of a player successfully controlling the pet: .CalculateControlChance( mChar ) // Returns value between 0 and 1000 indicating chance of success Feeding a pet will now restore its loyalty to maximum Pets will now lose loyalty on hunger checks when at maximum hunger Pets that are maximum hungry will now only have a chance to go wild if loyalty has dropped to zero Added new DFN tag for creatures.dfn - TYPE - which contains a string describing the type of creature Added secure pet trading. Players who trade pets will now see a pet transfer deed appear in a secure trade window with the name and type of creature, and upon completion of the trade the associated pet will be instantly transferred to the other player Updated resource JS scripts (js/server/resource/*) to use dictionaries for all system messages Updated skill JS scripts (js/skill/*) to use dictionaries for all system messages Updated housing JS scripts (js/server/house/*) to use dictionaries for all system messages Updated item JS scripts (js/item/*) to use dictionaries for all system messages Updated magic JS scripts (js/magic/*) to use dictionaries for all system messages Updated NPC AI JS scripts (js/npc/ai/*) to use dictionaries for all system messages Updated command JS scripts (js/commands/*) to use dictionaries for all system messages, gump tooltips, etc Updated code to use dictionaries for all system messages Fixed incorrect spelling for UOX.INI setting HIDEW(H)ILEMOUNTED and updated hiding skill (js/skill/hiding.js) to actually allow/disallow hiding while mounted based on this setting Added new Character JS Method to make it easier to make one NPC initiate combat with another: .InitiateCombat( targetChar ) // Character attempts to initiate combat with target character Updated parrying portion of combat code to be in line with Pub15/pre-AoS parrying mechanics. High AR shields now absorb more damage on a successful parry, while low AR shields have a higher chance of parrying. Shields are also now more effective against archery attacks (full absorption potential) than melee attacks (half absorption potential). Updated combat damage calculations to be in line with Pub15/pre-AoS damage calculations Adjusted default value of COMBATNPCDAMAGERATE ini setting (damage divisor when target is a player) from 2 to 1 to account for these changes. Removed dictionary.UNK, and made dictionary.ZRO the default dictionary used for all unsupported languages Added dictionary support for additional languages: Portuguese, Italian, Czech Updated default dictionaries for the following languages: English, French Added default dictionaries for the following languages: German, Spanish, Portuguese, Italian, Czech (note that translations have been provided by automatic services and will contain inaccuracies!) Added new UOX.INI setting to allow specifying a default dictionary language for server, which if set will force that language for all dictionary messages, regardless of client settings: SERVERLANGUAGE=0 // Set default server dictionary language. Supported languages: 0 - None/language used by each client, 1 - English, 2 - German, 3 - Spanish, 5 - French, 6 - Portuguese, 7 - Italian, 8 - Czech Added new function in combat.cpp - AdjustArmorClassDamage() - which adjusts the damage dealt in combat based on whether armour class (AC DFN tag or .ac JS property) of weapon and armour equipped on hit location of target match up. A weapon with armour class 1 would essentially be doubly effective against armour of armour class 1. Allows setting up things like piercing weapons being better against some armor types than mace weapons, etc. Added new UOX.INI setting under [combat] to enable/disable double damage from armour class bonuses: ARMORCLASSDAMAGEBONUS=0/1 //defaults to 0)
2021-07-28 16:02:56 +08:00
gPriv->SetGuarding( nullptr );
}
0.99.4v Added JS command to reload dictionaries 'reloaddictionaries Fixed a server crash related to casting of spells Fixed some issues with Line-of-Sight checks related to items under/above ground, LoS checks between different floors of buildings, etc. Updated handling of skill-training keywords to be based on language-independent keyword IDs rather than trying to match player-input text to specific skill-names Updated animal-trainer/stablemasterscript (js/npc/ai/stablemaster.js) with several changes: Fixed an issue where the same pet would be stabled in all available slots if payment was taken from player's bank account instead of their backpack Fixed an issue where stablemaster would not pause walking for a while when a player interacts with them Converted all system messages and text messages in stablemaster script to dictionary entries Added new NPC AI type to source - AI_STABLEMASTER (9) - and assigned this to animal trainers. This is used to identify this type of NPCs for the purpose of displaying relevant context menus Reworked banker AI script (js/npc/ai/banker.js) to use triggerwords from client instead of hard-defined strings, to work better with multiple languages (and work with all relevant triggerwords) Fixed a bug with banker AI script (js/npc/ai/banker.js) that prevented players from using the "withdraw" command Re-added NPC AI 8 to banker NPCs (dfndata/npc/male_vendors.dfn and female_vendors.dfn) so code can check for presence of this AI when handling context menus Removed remaining hard-coded banking functionality - all handled by script anyway Added new context menu option for NPC bankers - Open Bankbox Updated code handling of context menus to only show context menus when relevant: Open Paperdoll - Shows for all characters with a paperdoll Open Backpack - Shows for player's character, pack animals and hirelings Open Bankbox - Shows for banker NPCs (if within 8 tiles) Buy/Sell - Shows for vendor NPCs (if within 8 tiles, and if they have anything for sale/are buying anything) Added new context menu entries for pets, which can be used if player is within 12 tiles of pet: Command: Kill Command: Stop Command: Follow Command: Stay Command: Guard Add Friend Remove Friend Transfer Release Added new context menu entries for stablemasters/animal trainers: Claim All Pets Stable Pet Added new context menu entries for Escort Quest NPCs Ask Destination (if within 3 tiles) Accept Escort (if within 3 tiles) Abandon Escort Added new context menus for NPCs that can teach skills to players (limited to max 10 per NPC) Train [skillName] Added new AI script for NPC hirelings (3204=js/npc/ai/hireling.js), who can be hired to follow the player around for a limited amount of time, and function the same way as pets. In addition to the regular pet commands, these speech commands are supported: hire // The hireling will respond with the cost to hire them dismiss // Replaces the "release" command for pets; will dismiss the hireling patrol // The hireling will patrol between it's current location and a second targeted location nearby move // The hireling will try to shuffle out of the way fetch // The hireling will try to fetch a targeted item drop // The hireling will drop to the ground all loot they're currently carrying report // The hireling will report on the remaining time they're hired for Added new NPC DFN tag used by code to detect hireling NPCs for the purpose of displaying context menus: HIRELING // No additional value/data needed for tag Added new context menu entries for Hireling NPCs, in addition to the ones for regular pets: Hire // Can be used within 3 steps of the hireling, who will respond with cost to hire them Dismiss // Replaces the "release" command for pets, will dismiss the hireling Added HIRELING tag and SCRIPT=3204 to and updated stats of various NPCs that will be hireable: m_fighter, f_fighter, m_beggar, f_beggar, m_peasant, f_peasant, m_sailor, f_sailor, m_pirate, f_pirate Added new hireling NPC: m_paladin, f_paladin Added new UOX ini setting to enable/disable context menus CONTEXTMENUS=1/0 (defaults to 1) Added new Item JS Method to check if an item's ID is on a specified food list .IsOnFoodList( foodList ) // Returns true/false if item's ID is on specified foodList Added new OMNIVORE food list and assigned it to [basehuman] DFN section Added new Character JS Properties .isGuarded // Gets/Sets whether character is guarded by a pet/hireling .guarding // Gets/Sets the object (if any) being guarded by a pet/hireling Fixed multiple issues with health bars, flagging and character highlighting Added some crash protection for invalid data used with CUSTOMINTTAG and CUSTOMSTRINGTAG DFN tags for Items, NPCs and Multis Fixed an issue which prevented hard-coded checks from running when using items Added new global js object (Timer) to make the use of character timers in JS more robust, with properties matching timer names from enum in source. Properties: .TIMEOUT // Time until next attack can be done in combat .INVIS // Time until invisible character becomes visible .HUNGER // Time until character grows more hungry .THIRST // Time until character grows more thirsty .POISONTIME // Time until next tick of poison damage .POISONTEXT // Time until next message about suffering from poison .POISONWEAROFF // Time until poison wears off .SPELLTIME // Time until spell cast is completed. Can be set to 0 to interrupt .ANTISPAM // Time until next speech message can be sent (for anti spam purposes) .CRIMFLAG // Time until criminal flag runs out .MURDERRATE // Time until next murder count decay .PEACETIMER // Time until character can re-enter combat after being affected by peacemaking .FLYINGTOGGLE // Time until next time flying ability can be toggled for gargoyles .MOVETIME // Time until NPC can move again .SPATIMER // Time until next time NPC can cast a spell .SUMMONTIME // Time until a summoned NPC will vanish .EVADETIME // Time until an NPC will exit evade state .LOGOUT // Time it takes for a player char to vanish after logout Examples of use: var hungerTimer = myChar.GetTimer( Timer.HUNGER ) myChar.SetTimer( Timer.HUNGER, 15000 ) Added new Character JS Methods to add, remove and list friends of a pet/hireling: .AddFriend( playerToAdd ) // Adds player to friend list .RemoveFriend( playerToRemove ) // Removes player from friend list .GetFriendList() // Gets list of friends .ClearFriendList() // Clears list of friends Added new Character JS Method to fetch a player character's list of pets/followers .GetPetList() // Gets list of pets/followers Added new persistent NPC property to keep track of a pet's previous owners, whether those tamed the pet or had it transferred to them. Every time a pet is tamed, or is transferred to a new owner, this list is updated: GenericList< CChar * > petOwnerList Added new Character JS Method to check if a player is on a pet's owner list as a previous owner: .HasBeenOwner( mChar ) Previous owners of a pet can re-tame it with guaranteed chance of success Updated JS Method Refresh() to be usable with both items or characters, to send updated state of object to nearby players Added character tooltip [Guarded] for characters being guarded by a pet/hireling Pets/hirelings that are transferred will now immediately start following their new master instead of wandering freely Pets/hirelings can no longer be transferred between players as long as either party is flagged as a criminal Pets/hirelings can no longer be transferred to dead players Pets/hirelings can no longer be transferred to NPCs Summoned creatures can no longer be transferred to other players Summoned creatures can no longer have friends Friend lists of pets/hirelings are now cleared when the pet/hireling is transferred to another player Added new UOX.INI settings to control how many pets players can have active: MAXCONTROLSLOTS=0 // Maximum number of pet control slots available to player. Disabled if 0 MAXFOLLOWERS=5 // Maximum pets/followers a player can have active at the same time. Used if control slots are disabled MAXPETOWNERS=5 // Maximum number of different owners a pet can have over its lifetime before it becomes impossible to retame Added new NPC property and NPC DFN tag that keeps track of how many pet control slots an NPC would take up if owned by a player: UI08 controlSlots // source property CONTROLSLOTS=# // DFN tag Added new Character JS properties: .ownerCount // Get the total number of owners a pet/hireling has had, based on NPC's petOwnerList .controlSlots // Get/Set number of pet control slots an NPC will occupy .controlSlotsUsed // Get/Set the number of control slots used by a player Updated get (js/commands/targeting/get.js) and set (js/commands/targeting/set.js) commands to support getting/setting the following character properties: deaths ownerCount (read only) controlSlots controlSlotsUsed Updated NPC DFNs with default CONTROLSLOT=# tags Increased the max distance from player that onSpeech JS event will trigger from 7 to 12 Updated how "all attack" and "all follow" commands for pets are handled. Now loops through all pets owned by character and executes command for each eligible pet Fixed an issue where NPCs could follow characters in different worlds/instances than them selves Updated default max amount of items that can be sold to NPC vendors from 5 to 250 Guards can no longer train players in skills Updated equipment itemlists (dfndata/items/itemlists/itemlists.dfn) with blank entries to introduce some more variety in the type of clothes NPCs wear in general Added new NPCs to DFNs (dfndata/npc/undead.dfn) and added them to undead npclist: [skeletalmage] // variation of [bonemage] [skeletalknight] // variation of [boneknight] Updated Titles (dfndata/titles/titles.dfn) with up-to-date titles for skills around Pub 15, and added titles for skills added after that. Also added "Elder" and "Legendary" titles for 110 and 120 skillpoints Updated EQUIPITEM tag in newbie.dfn (dfndata/newbie/newbie.dfn) to support an optional hue parameter (EQUIPITEM=id,hue) Updated starting equipment for new characters (dfndata/newbie/newbie.dfn), with commented out practice weapons. Uncomment to use Added item definitions for practice weapons (dfndata/items/gear/weapons/practice_weapons.dfn): practice_skinning_knife practice_hatchet practice_axe practice_mace practice_longsword practice_spear practice_bow practice_club practice_crook practice_gnarled_staff Updated mount statues DFN (dfndata/items/misc/mount-statues.dfn) and JS (js/npc/pets/*.js) files to include pet control slot related stuff Pets now inherit the karma of their owners, but revert to their original karma upon release Pets and hirelings will no longer follow the ghosts of their dead owners, but stay to guard their corpse Added optional 9th parameter for JS Function CreateDFNItem to specify a color for item created. This comes before the other optional parameters - worldNumber and instanceID (which are only used if character is NULL): CreateDFNItem( mSock, mChar, sectionName, inPack, iAmount, itemType, iColor, worldNumber, instanceID ) Added ID of Giant Beetle to various pack animal checks Pack animals will now drop any newbie/blessed items stored in their packs upon death Added new NPC properties to track pet loyalty, and exposed these as Character JS properties, and NPC DFN tags: JS Properties .maxLoyalty // Defaults to 100 .loyalty // Starts at 25 DFN Tags MAXLOYALTY=# // Defaults to 100 LOYALTY=# // Starts at 25 Updated TriggerEvent JS function to support return values (int, bool, string, object) from called script Updated various JS scripts to make use of new TriggerEvent functionality and reduce reliance on custom tags: js/item/archerybutte.js js/item/trainingdummy.js js/server/data/combatanims.js js/server/data/weapontypes.js Updated archerybutte script to use dictionary for system and text messages Updated archerybutte script to support increased range, distance penalty and dex/str bonuses when calculating score Added new UOX.INI settings under [pets and hirelings] section related to pet control and loyalty: CHECKPETCONTROLDIFFICULTY=1 // Enable/Disable pet control difficulty system PETLOYALTYGAINONSUCCESS=1 // Amount of pet loyalty gained on successful pet command use PETLOYALTYLOSSONFAILURE=3 // Amount of pet loyalty lost on failed pet command use PETLOYALTYRATE=900 // Amount of seconds between each time pet loyalty is automatically reduced by 1. Takes 25 hours to deplete completely from max Added new persistent NPC property that keeps track of the difficulty of taming and controlling a pet, and exposed it as a Character JS property: .orneriness Every time a tamed pet is released or goes wild, its "orneriness" increases, making it more difficult for other players to tame, and more difficult for anyone to control. Updated CBasePetResponse::canControlPet() function to use pet control difficulty system if enabled, which checks player's animal taming/animal lore skill vs a pet's "orneriness" to determine chance of pet accepting a given pet command On successful use of pet command, increases pet loyalty by value defined in PETLOYALTYGAINONSUCCESS ini setting On failed use of pet command, decreases pet loyalty by value defined in PETLOYALTYLOSSONFAILURE ini setting Added new Character JS Method to calculate chance of a player successfully controlling the pet: .CalculateControlChance( mChar ) // Returns value between 0 and 1000 indicating chance of success Feeding a pet will now restore its loyalty to maximum Pets will now lose loyalty on hunger checks when at maximum hunger Pets that are maximum hungry will now only have a chance to go wild if loyalty has dropped to zero Added new DFN tag for creatures.dfn - TYPE - which contains a string describing the type of creature Added secure pet trading. Players who trade pets will now see a pet transfer deed appear in a secure trade window with the name and type of creature, and upon completion of the trade the associated pet will be instantly transferred to the other player Updated resource JS scripts (js/server/resource/*) to use dictionaries for all system messages Updated skill JS scripts (js/skill/*) to use dictionaries for all system messages Updated housing JS scripts (js/server/house/*) to use dictionaries for all system messages Updated item JS scripts (js/item/*) to use dictionaries for all system messages Updated magic JS scripts (js/magic/*) to use dictionaries for all system messages Updated NPC AI JS scripts (js/npc/ai/*) to use dictionaries for all system messages Updated command JS scripts (js/commands/*) to use dictionaries for all system messages, gump tooltips, etc Updated code to use dictionaries for all system messages Fixed incorrect spelling for UOX.INI setting HIDEW(H)ILEMOUNTED and updated hiding skill (js/skill/hiding.js) to actually allow/disallow hiding while mounted based on this setting Added new Character JS Method to make it easier to make one NPC initiate combat with another: .InitiateCombat( targetChar ) // Character attempts to initiate combat with target character Updated parrying portion of combat code to be in line with Pub15/pre-AoS parrying mechanics. High AR shields now absorb more damage on a successful parry, while low AR shields have a higher chance of parrying. Shields are also now more effective against archery attacks (full absorption potential) than melee attacks (half absorption potential). Updated combat damage calculations to be in line with Pub15/pre-AoS damage calculations Adjusted default value of COMBATNPCDAMAGERATE ini setting (damage divisor when target is a player) from 2 to 1 to account for these changes. Removed dictionary.UNK, and made dictionary.ZRO the default dictionary used for all unsupported languages Added dictionary support for additional languages: Portuguese, Italian, Czech Updated default dictionaries for the following languages: English, French Added default dictionaries for the following languages: German, Spanish, Portuguese, Italian, Czech (note that translations have been provided by automatic services and will contain inaccuracies!) Added new UOX.INI setting to allow specifying a default dictionary language for server, which if set will force that language for all dictionary messages, regardless of client settings: SERVERLANGUAGE=0 // Set default server dictionary language. Supported languages: 0 - None/language used by each client, 1 - English, 2 - German, 3 - Spanish, 5 - French, 6 - Portuguese, 7 - Italian, 8 - Czech Added new function in combat.cpp - AdjustArmorClassDamage() - which adjusts the damage dealt in combat based on whether armour class (AC DFN tag or .ac JS property) of weapon and armour equipped on hit location of target match up. A weapon with armour class 1 would essentially be doubly effective against armour of armour class 1. Allows setting up things like piercing weapons being better against some armor types than mace weapons, etc. Added new UOX.INI setting under [combat] to enable/disable double damage from armour class bonuses: ARMORCLASSDAMAGEBONUS=0/1 //defaults to 0)
2021-07-28 16:02:56 +08:00
break;
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
case CCP_ISMEDITATING: gPriv->SetMeditating( encaps.toBool() ); break;
case CCP_ISGM: gPriv->SetGM( encaps.toBool() ); break;
2025-03-08 16:34:37 -06:00
case CCP_TITHING: gPriv->SetTithing( static_cast<SI32>( encaps.toInt() )); break;
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
case CCP_CANBROADCAST: gPriv->SetBroadcast( encaps.toBool() ); break;
case CCP_SINGCLICKSER: gPriv->SetSingClickSer( encaps.toBool() ); break;
case CCP_NOSKILLTITLES: gPriv->SetSkillTitles( encaps.toBool() ); break;
case CCP_ISGMPAGEABLE: gPriv->SetGMPageable( encaps.toBool() ); break;
case CCP_CANSNOOP: gPriv->SetSnoop( encaps.toBool() ); break;
case CCP_ISCOUNSELOR: gPriv->SetCounselor( encaps.toBool() ); break;
case CCP_NONEEDMANA: gPriv->SetNoNeedMana( encaps.toBool() ); break;
case CCP_ISDISPELLABLE: gPriv->SetDispellable( encaps.toBool() ); break;
case CCP_NONEEDREAGS: gPriv->SetNoNeedReags( encaps.toBool() ); break;
case CCP_ORGID: gPriv->SetOrgId( static_cast<UI16>( encaps.toInt() )); break;
case CCP_ORGSKIN: gPriv->SetOrgSkin( static_cast<UI16>( encaps.toInt() )); break;
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
case CCP_NPCFLAG:
gPriv->SetNPCFlag( static_cast<cNPC_FLAG>( encaps.toInt() ));
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
UpdateFlag( gPriv );
break;
Thief Revamp - 0.99.6-RC5 Added script for NPC guildmasters (js/npc/ai/guildmaster.js). Only one NPC guild has been setup in the script so far (more can be easily added) - the Thieves Guild - which if joined grants players the ability to steal from other players and to buy disguise kits Added two new NPCs, which there will now spawn one of in a random location in each city in Britannia (felucca facet): m_thief_guildmaster (dfndata/npc/male_human.dfn) f_thief_guildmaster (dfndata/npc/female_Human.dfn) Added two new character properties to keep track of which NPC guild a player (or NPC) belongs to. These properties have been exposed as the following Character JS properties: .npcGuild // ID of NPC guild, as defined in script .npcGuildJoined // Timestamp for when player joined NPC guild Added script for Disguise Kits (js/item/disguisekit.js). These allow members of the Thieves Guild to disguise themselves from the prying eyes of other players. Added two new character properties: .isDisguised // true/false flag for character being disguised .origName // used to store character's original name before disguise went into effect Moved implementation of Stealing skill from code to script (js/skill/stealing.js) and revamped it completely in the process. Changes include: New features: Town rare stealing - any item marked as "special stealable" with new item property .stealable can be stolen, even if it's locked down by a GM on the ground, or inside a container When stealing from item piles, thief can potentially steal the amount of items that makes up the max weight limit for what they can steal, from those piles Chance to successfully steal is now affected by whether there are any characters (NPCs or Players) that witness the attempt. Depends on distance to character, and direction character is facing Players now become "permagrey" when successfully stealing from another player, regardless of whether it's witnessed Players now receive a "stealing" flag when stealing from another player, regardless of whether it's witnessed Stolen items cannot be removed from thief's backpack for 30 seconds following the theft of the item (AoS core shard era and above) Optional AoS feature to steal special consumable items from monsters Updated default stealing rules: Updated calculations to determine chance of success when stealing Players cannot steal while engaged in combat Players are revealed if hidden as soon as they use the stealing skill Players can no longer steal items in the secure trade window Players can no longer steal items from NPC shopkeepers Both hands must be free to steal Stealing now checks line of sight to target player/object Only members of Thieves Guild (NPC guild) can now steal from other players, unless they are guild enemies Players can no longer steal from NPC guards by default Players can no longer steal from the same NPC monster more than once Only gold and gems can be stolen from innocent players in dungeon/ll areas of Felucca, if core shard era is set to AoS or higher Players can no longer steal items held on cursor by other players Orcish masks now eplode if player steals from orcs while wearing it If core shard era is set to LBR or lower, player is marked as an aggressor if they steal from another player Guards can only be called on players that are flagged as criminals within the first 10 seconds of them being flagged Stealing script options: Allow stealing entire containers (off by default pre-AoS) Return stolen items on thief death (off by default) Temporarily make stolen items immovable in thief's backpack (on by default post-AoS) Temporarily protect traded items (on by default) Let dexterity affect chance for successful theft (off by default) Let light level affect chance for successful theft (off by default) Allow stealing from NPC Guards (off by default) Allow stealing special loot from monsters (on by default post-ml) Moved implementation of Snooping skill from code to script (js/skill/snooping.js), with some changes: Players cannot snoop pack animals from inside a house, if the animal is outside The deeper inside main backpack a container sits, the harder it becomes to snoop inside it Included an optional feature that lets targets of snooping gradually become more aware, increasing the difficulty of succeeding. This awareness fades over time. Players have a chance to stay hidden while snooping, based on their Hiding skill Karma is now lowered by snooping regardless of success or failure Added tracking system for "aggressors" in combat. A player attacking someone (regardless of flag status) will be marked as aggressor to that someone for 2 minutes Added tracking system for "permagrey" flags - these are stored on a per-target basis, so a player can be flagged visibly as permagrey to multiple other players. Persists until player dies. Player combat targets and war mode are now cleared on logout Players will now be unable to hide if within visual distance and in line of sight of their attacker or current target in combat Server leave-announcement now only happens after the logout timer has expired, instead of the exact moment the player presses the logout button Fixed an issue that could cause swimming NPCs to swim on land NPCs now have the ability to temporarily ignore unreachable targets in combat. If attacked by someone they are ignoring, they will enter evade state and try to move away from that someone. SpawnRegions now support NPCLISTS with weighted entries. Example of an NPCLIST with 75% chance of spawning some kind of orc, and 25% chance of spawning a ratman archer: [NPCLIST example] { 75|NPCLIST=allorc 25|ratman } Added 3 additional "all purpose" item properties (.more0, .more1 and .more2) and exposed those to JS engine. These work the same as more/morex/morey/morez Mark spell now stores a 4th property on recall runes - instanceID. This is stored in the rune's .more0 property. Recall and Gate spells now check the recall rune (or runebook)'s 4th location property - instanceID - to determine where the player ends up Fixed a server crash related to equipment being automatically unequipped if character is no longer strong enough to have it equipped Added new JS Function to check if any characters at specified location potentially block movement: DoesCharacterBlock( x, y, z, worldNum, instanceID ) // returns true if a character exists at given coordinate (within z +/- 4)
2023-06-20 02:21:16 +08:00
case CCP_NPCGUILD: gPriv->SetNPCGuild( static_cast<UI16>( encaps.toInt() )); break;
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
case CCP_ISSHOP:
if( encaps.toBool() )
{
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
MakeShop( gPriv );
}
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
else
{
gPriv->SetShop( false );
2021-06-12 07:30:23 -04:00
CItem *tPack = nullptr;
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
for( UI08 i = IL_SELLCONTAINER; i <= IL_BUYCONTAINER; ++i )
{
tPack = gPriv->GetItemAtLayer( static_cast<ItemLayers>( i ));
if( ValidateObject( tPack ))
{
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
tPack->Delete();
}
}
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
gPriv->Update();
}
break;
case CCP_MAXLOYALTY: gPriv->SetMaxLoyalty( static_cast<UI16>( encaps.toInt() )); break;
case CCP_LOYALTY: gPriv->SetLoyalty( static_cast<UI16>( encaps.toInt() )); break;
0.99.4x Fixed an issue where the color of NPC corpse names would not always match up with the NPC's flag color Fixed a bug where the baseRange and maxRange properties of ranged weapons would not get saved to world files. These values are now saved in the format of RANGE=baseRange,maxRange Changed the way items are added to containers, to ensure that the order in which the items are displayed to the player always reflects the order in which they were added; now the most recent item added/moved in a container will always be rendered on top of older items. Made adjustments to how items are randomly added to containers; should use more of a given container gump's available area now Exposed Item property to JS engine, which contains serial of the creator of an item: .creator // contains serial of the creator of an item. If set, maker's marks will show up in the item's tooltip Fixed an issue where JS engine would lose track of script context if one script used CreateDFNItem() or SpawnNPC() functions and the new objects had events that triggered upon creation. UOX3 now restores the original script context at the tail end of these functions. Added new JS Event to allow inserting custom tooltip text for objects, which will be displayed in tooltips right after the object name. Any text returned from the event will be displayed, and the text can make use of the same HTML tags as gumps to make changes to color, font, etc. onTooltip( myObj ) // Triggers for objects right before the object's tooltip properties are sent to client Updated 'tweak and 'set commands to refresh item being modified if movable state of item changes, so the change is reflected in nearby clients Fixed an issue with NPC vendors and items bought from players not being properly removed from the vendor's "bought container" when players buy them again Ported Item Identification skill from code to JS (js/skill/itemid.js) and removed hard-coded version Implemented magic item generator in JS (js/item/magic_item.js). When this script is attached to an NPC, it has a chance to generate magic weapons, armors, wands/staffs and rings as loot on the NPC's corpse when slain. The chance of getting quality magical items increases with the fame level of the NPC in question. The types of magical items generated follows the pattern of such items as implemented in UO prior to the AoS expansion. Examples: exceedingly accurate war hammer of vanquishing substantial, accurate axe of power and Daemon's Breath silver long sword massive platemail arms of Protection metal shield of defense durable ringmail tunic of guarding All magic items have a chance to have spell effects attached (with rings/wands being guaranteed to have these), with a limited amount of charges available. For weapons, these effects activate on successful hits in combat, while for armors they activate on equip, and then periodically as long as the item is worn. Rings and wands/staffs have to be manually activated and targeted - with the exception of rings of invisibility, which activate the moment you equip them! Related scripts: js/item/magic_armor_equipeffects.js js/item/magic_weapon_accbonus.js js/item/magic_weapon_equip.js js/item/magic_weapon_spell_attack.js The magic item loot generation script has been attached to a number of different NPCs, all of which now have a chance to drop magic items as loot when defeated. A bonus magical item - the glacial staff - has also been implemented (js/item/magic_glacial_staff.js), and has a chance to drop as loot from Giant Ice Serpents! Fixed an issue with CustomTarget where the target message would not be displayed if the cursorType parameter was provided Fixed bug with 'rename command, which referenced a non-existing variable that caused a script crash Added additional object properties to 'get and 'set commands: .shouldSave // Determines if an item should be saved in worldfiles or not .baseRange // Determines the base range of a ranged weapon, less than which it becomes less effective .maxRange // Determines the max range of a ranged weapon, beyond which it cannot reach its target The feature that allows stats like Strength, Dexterity and Intelligence to provide bonuses to skill checks has been turned into a UOX.INI setting, which is disabled by default. The bonuses have also been nerfed; they will no longer contribute more to the success of a skill check than the actual skill being checked! STATSAFFECTSKILLCHECKS=0/1 // If enabled, stats can provide bonuses to skill checks based on the weighting for those stats as setup in dfndata/skills/skills.dfn Updated damage tracking code to include the type of damage that was dealt (PHYSICAl vs HEAT vs COLD, etc) Updated Character JS Method Damage() to include a new parameter that can specify the type of damage that was dealt to the character. The new parameter must always be included if other optional parameters are used. Note that updates might be required for scripts making use of this method.Updated syntax: .Damage( amount ) .Damage( amount, damageType ) .Damage( amount, damageType, attacker ) .Damage( amount, damageType, attacker, doRepsys ) Supported damageTypes: PHYSICAL = 1 LIGHT = 2 RAIN = 3 COLD = 4 HEAT = 5 LIGHTNING = 6 // magic damage POISON = 7 SNOW = 8 Updated JS Event OnDamage to include an additional parameter that describes the type of damage that was dealt. New syntax: onDamage( damaged, attacker, damageValue, damageType ) Updated JS Event OnSpellTarget to allow rejecting a spell being cast on a target by returning a value of 2 from the script Split the character priv flag for magic reflection into a temporary one (one-time magic reflection spell) and a permanent one (innate permanent reflection ability). The temporary effect is put in place by Magic Reflection spell, and is removed after a successful spell reflect. The permanent one is an innate ability of a character and is not removed even after a spell is reflected. Added new Character JS property to get/set state of a character's permanent magic reflect ability: .permanentMagicReflect // 0 = disable, 1 = enable Added special abilities/effects for the following NPCs: Acid Elementals now have a chance to damage the melee weapons of their attackers Dull Copper Elementals now explode on death Shadow Iron Elemental is immune to targeted spell damage Copper Elementals have permanent magic reflect, and reflect some physical damage back at their attacker Bronze Elementals deal passive area damage to nearby players every 5 to 10 seconds Valorite Elementals have permanent magic reflect, reflect some physical damage back at their attacker Snow/Ice Elementals deal passive area damage to nearby players every 5 to 10 seconds Lava Serpents deal passive area damage to nearby players every 5 to 10 seconds Phoenixes deal passive area damage to nearby players every 5 to 10 seconds Pixies have a chance to cast a random spell upon receiving a death blow: Bless (target) Curse (target) Explosion (target) Greater Poison (target) Greater Heal (self, prevents death) Ethereal Warriors will now resurrect dead players with positive karma Ethereal Warriors now have a chance to drain target's health, stamina or mana on hit Fire Breath special ability added to the following NPCs, with the random ability damage scaling with the NPCs current health: Hell Cat, 5 to 8 dmg at max health Fire Steed, 6 to 9 dmg at max health Hell Hounds, 8 to 11 dmg at max health Lava Lizard, 8 to 11 dmg at max health Predator Hell Cat, 9 to 14 dmg at max health Sea Serpent, 11 to 17 dmg at max health Swamp Dragon, 15 to 22 dmg at max health Armored Swamp Dragon, 15 to 22 dmg at max health Fire Gargoyle, 20 to 30 dmg at max health Deep Sea Serpent, 21 to 32 dmg at max health Serpentine Dragon, 22 to 32 dmg at max health Drake (Gray), 22 to 32 dmg at max health Drake (Red), 22 to 32 dmg at max health Nightmare, 26 to 39 dmg at max health Dark Steed, 26 to 39 dmg at max health Silver Steed, 26 to 39 dmg at max health Kraken, 39 to 59 dmg at max health Dragon (Red), 41 to 62 dmg at max health Dragon (Gray), 41 to 62 dmg at max health Shadow Wyrm, 50 to 75 dmg at max health Reptalon, 51 to 77 dmg at max health Skeletal Dragon, 52 to 77 dmg at max health Ancient Wyrm, 60 to 90 dmg at max health Update stats, skills and loot for all currently implemented NPCs Removed an ancient piece of code that prevented corpses from being generated for various elementals and blade spirits on death. This was originally put in place because these creatures had no corpses, and would replace it with a backpack instead, but these creatures now all have corpses in all client versions supported by UOX3 Updated potions script (js/item/potion.js) with updated formula for amount of hitpoints healed by healing potions, and added restrictions for using them when at full health and/or if poisoned (Dragon Slayer) Fixed a bug where creatures (and humans, if FORCENEWANIMATIONPACKET was disabled in uox.ini) would play animations with wrong frame count, causing the animations to either freeze for a few frames at the end, or get cut off a couple of frames early Implemented bonus hit chance for Archery skill, based on mention of such a bonus in Publish 5 patch notes and related UO House of Commons chat. This has been exposed as a UOX.INI setting where this bonus can be tweaked: ARCHERYHITBONUS=10 // Bonus hit chance for Archery skill added to regular hit chance in combat. Defaults to 10% Implemented optional extra delay between moving and being able to shoot with ranged weapons in combat (in addition to whatever delay is there due to speed of the ranged weapon). This is exposed as a UOX.INI setting: ARCHERYSHOOTDELAY=0.5 // Minimum delay in seconds from a player stops moving until they can start to fire their ranged weapon. Defaults to 0.5s Fixed a bug where players who never entered combat mode could fire ranged weapons while moving Updated Add-menu with some improvements for usability: Menu now directly on the Objects (previously "Shard") tab for quicker access, with a small welcome text and quick-link button for UOX3 docs Settings tab contains some (persistent, will be saved with character) options for how the Add-menu behaves, along with a few quick-access buttons to some useful commands. Available options: Option to add chosen item at specific location instead of in GM's backpack Option to add chosen item repeatedly until cancelled Option to automatically reopen Add-menu on last menu that was open when a selection is made Option to force decayable state of all added items to either off (doesn't decay), on (decays) or nothing (use item default) Option to force movable state of all added items to either off (not movable), on (movable) or nothing (use item default) Added a Home button at the bottom of the menu, that takes the user back to the front page of the Add-menu regardless of which menu page they're on Updated Character/Socket JS Method SysMessage() with an optional parameter to specify the color used to display the system message. Updated syntax: .SysMessage( "Text" ) // Display "Text" to user as a system message with default system message color from ini .SysMessage( "Text %s %s", txtArg1, txtArg2 ) // Display "Text" to player with string arguments injected into text .SysMessage( txtColor, "Text" ) // Display "Text" to user with a specified color .SysMessage( txtColor, "Text %s %s", txtArg1, txtArg2 ) // Combination of text color, text and string arguments Fixed a bug where hair/beard items could show up inside corpses Fixed a bug where items could sometimes vanish (visually) from containers when bouncing back because player was not able to pick them up Fixed a bug where players would be unable to pick up a freely movable item from a locked down container Updated handling of item bouncing on pickup to use UOX3 dictionary messages instead of hard-coded client messages Added support for new Dictionary language: dictionary.POL - Polish (SERVERLANGUAGE=8 in uox.ini, or client language 83 if SERVERLANGUAGE is set to 0) Added taming restrictions for Unicorn, Ki-Rin and Cu Sidhe (js/skill/taming.js) Added modification of some creatures stats after they've been tamed (js/skill/taming.js) Added restrictions for who can ride certain creatures (Unicorn, Ki-Rin, Cu Sidhe) Updated words of power for Meteor Swarm spell to follow the same logic as other spells using Kal (Summon): Kal Des Flam Ylem Added new Item/Character JS Methods to get/set temporary custom tags which don't persist across worldsaves (or across reconnects, for players): .GetTempTag( "tagName" ) .SetTempTag( "tagName", tagValue ) When applying HPMAX, STAMINAMAX AND MANAMAX DFN tags to new NPCs, their current HP, STAMINA and MANA properties will now be automatically updated to match Fixed a server crash caused by empty speech messages sent from certain clients Fixed a bug that prevented teleport locations in Felucca/Trammel from working properly Updated calculations in code for duration and damage of existing poison strengths (1 - Lesser, 2 - Normal, 3 - Greater, 4 - Deadly) to match with ~Publish 15 (LBR/pre-AoS), and added another poison strength for monster usage (5 - Lethal) The strength of the Poison and Poison Field spells is now based on the average of the caster's Magery and Poisoning skills, the distance from the target (Poison spell only) and the target's Resisting Spells skill. If caster is further away than 2 tiles from target, the poison strength always equals Lesser Poison, otherwise the following rules apply: If caster's combined skill is higher than 100.0, poison strength equals Greater Poison, with 5% chance of Deadly Poison (if Poison spell) or Deadly Poison (if Poison Field spell) If caster's combined skill is higher than 70.2, poison strength equals Greater Poison If caster's combined skill is higher than 30.2, poison strength equals Normal Poison If caster's combined skill is 30.2 or lower, poison strength equals Lesser Poison If target resists spell, poison strength is reduced by 1 level, unless it's already at the lowest level Fixed an issue that would would let players move faster than they should have been allowed to Fixed misc issues with Party System: Mana and Stamina should now update for Party Members when added to the party, when going in/out of range and when their stats update while in range Players who get disconnected or relog should now find themselves back in the same party they were in previously Added system messages to inform party members about updates to their party, and to let invited players know they've successfully joined a party (or rejoined, if relogging) World saves now operate on the principle of only saving changes done since the last world save. Combined with the fact that NPCs in UOX3 are only active if there are players in the same/neighbouring map regions, shard owners may expect to see a decrease in world save times ranging from ~11% to ~99%, depending on how active and how spread out their player base is. If no changes have taken place since last save, saves are virtually instantaneous!
2021-09-20 21:35:17 +08:00
case CCP_SHOULDSAVE: gPriv->ShouldSave( encaps.toBool() ); break;
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
case CCP_PARTYLOOTABLE:
{
Party *toGet = PartyFactory::GetSingleton().Get( gPriv );
2021-06-12 07:30:23 -04:00
if( toGet != nullptr )
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
{
CPartyEntry *toScan = toGet->Find( gPriv );
2021-06-12 07:30:23 -04:00
if( toScan != nullptr )
{
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
toScan->IsLootable( encaps.toBool() );
}
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
}
break;
}
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
default:
break;
}
}
UOX3 0.99.6-RC4 Fixed an issue that prevented onBuyFromVendor() and onBoughtFromVendor() JS Events from triggering when attached to NPC shopkeepers Fixed an issue with help gump that prevented password management section from working as intended (js/server/misc/helpgump.js) Fixed an issue where UOX3 would fail to load pre-HS multi.mul files Added chess board to Misc->Games add menu (dfndata/items/ItemMenu.bulk.dfn) Fixed an issue with 'move (alias for 'telestuff) command that referenced the wrong variable name (js/commands/targeting/tele.js) When a player is teleported via the GM 'wholist menu, any pets within range are now also brought along for the ride Consolidated error-reporting for JS Functions, Object Methods and Object Properties to provide more context (scriptID, filename, line number) when something goes wrong Added some missing shield IDs (0xA649, 0xA64A, 0xA831, 0xA832) to IsShieldType() function MAXRANGE item property previously only worked for ranged weapons; now it works for melee weapons too, and potentially allows melee weapons with combat range longer than 1 tile MAXRANGE item property can now be used to define max combat range for melee weapons Fixed an issue (non-critical) with .PlaceInPack() JS Method that would cause UOX3 to try adding items marked for deletion to refreshQueue and spam console with errors Added missing AI scripts to summoned Blade Spirits and Energy Vortexes (dfndata/npc/magicsummon.dfn) Fixed an issue with weight calculation for hireling backpacks (js/npc/ai/hireling.js) Fixed an issue with the 'fix command, which would in most cases set character's Z to -1 regardless of location, but now adheres to map elevation instead Fixed an issue with Pack AI (js/npc/ai/pack_ai.js) that prevented pack members from attacking target correctly (thanks Dragon Slayer) Fixed an issue with DoesMapBlock JS Function that incorrectly checked for 6 function arguments, when it actually requires 8 Fixed an issue with DoesDynamicBlock JS Function that incorrectly checked for 8 function arguments, when it actually requires 9 Fixed an issue with runebook script (js/item/runebook.js) that prevented players from being able to use recall charges without having spellbook with spell in inventory Fixed issues with placement of tall items on ground/floor, and with stacking of items in houses Fixed incorrect alias for woodland armor (dfndata/items/gear/armor/other/armor/wood.dfn - thanks Dragon Slayer) Fixed a critical issue with script context sometimes changing while executing a script, because of events in other scripts being triggered. Affected scripts can be safeguarded against this by the addition of a dummy callback function anywhere in the script: function _restorecontext_() {} Fixed an issue with non-animal pets not gaining loyalty when being fed (thanks Dragon Slayer) Added new JS Object Methods for Chars/Items/Multis to fetch list of custom tags associated with object: .GetTagMap() // Gets list of persistent custom tags associated with object .GetTempTagMap() // Gets list of temporary custom tags associated with object Added new JS commands ('GETTAGMAP and 'GETTEMPTAGMAP) that spits out details of custom tags associated with targeted object (js/commands/custom/misc-cmd.js) Added new JS command ('USEITEM) that acts as a short-cut for double-clicking on targeted item (js/commands/custom/misc-cmd.js) Updated 'ADD # and 'ADD ITEM # JS commands to support targeting a container directly and adding the new item inside (js/commands/targeting/add.js) Updated axe script to only perform lumberjacking skill-check when there's still wood available in a given area, and to play appropriate animations for Gargoyle players (js/item/axe.js) Updated script for gameboards to make generated pieces newbiefied so they won't appear on ground if board decays (js/item/gameboards.js) Updated script for stablemasters to avoid relying on global variables (js/npc/ai/stablemaster.js) Updated names of items crafted with runic hammers to include the material name of the hammers used to craft them (js/skill/craft/crafting_complete.js) Fixed a small issue with Detect Hidden skill that would return the wrong message if players found anyone hiding nearby (js/skill/detecthidden.js) Fixed an issue that prevented tile overrides in dfndata/maps/tiles.dfn from loading properly Added entries for a couple of walls with missing no-shoot flags to tile overrides in dfndata/maps/tiles.dfn Updated JS Method .SoundEffect() to support optional third argument (creatureSoundNum) to play creature-defined sounds from dfndata/creatures/creatures.dfn. New syntax: .SoundEffect( soundID, allHear[, creatureSoundNum] ) // 0=SOUND_STARTATTACK, 1=SOUND_IDLE, 2=SOUND_ATTACK, 3=SOUND_DEFEND, 4=SOUND_DIE Added new Character JS Methods: .SetRandomName( nameListID ) // apply a random name from specified namelist to character .FindItemSection( sectionID ) // find item in player's backpack with specified sectionID Added new Socket JS Method: .OpenContainer() // Opens specified container for socket
2023-05-30 01:47:26 +08:00
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
return JS_TRUE;
}
2025-03-28 13:23:59 +10:00
JSBool CRegionProps_getProperty( JSContext *cx, JSObject *obj, jsid id, jsval *vp )
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
{
CTownRegion *gPriv = static_cast<CTownRegion *>( JS_GetPrivate( cx, obj ));
2021-06-12 07:30:23 -04:00
if( gPriv == nullptr )
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
return JS_FALSE;
UI16 propID = getScriptID( cx, id, JSP_REGION );
if( propID != 0xFFFF )
{
2021-06-12 07:30:23 -04:00
JSString *tString = nullptr;
switch( propID )
{
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
case CREGP_NAME:
tString = JS_NewStringCopyZ( cx, gPriv->GetName().c_str() );
*vp = STRING_TO_JSVAL( tString );
break;
case CREGP_MAYOR:
CChar *tempMayor;
tempMayor = gPriv->GetMayor();
2002-04-07 20:53:41 +00:00
if( !ValidateObject( tempMayor ))
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
*vp = JSVAL_NULL;
else
{
// Otherwise Acquire an object
JSObject *myChar = JSEngine->AcquireObject( IUE_CHAR, tempMayor, JSEngine->FindActiveRuntime( JS_GetRuntime( cx )));
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
*vp = OBJECT_TO_JSVAL( myChar );
}
break;
case CREGP_RACE: *vp = INT_TO_JSVAL( gPriv->GetRace() ); break;
case CREGP_TAX: *vp = INT_TO_JSVAL( gPriv->TaxedAmount() ); break;
case CREGP_TAXRESOURCE: *vp = INT_TO_JSVAL( gPriv->GetResourceId() ); break;
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
case CREGP_CANMARK: *vp = BOOLEAN_TO_JSVAL( gPriv->CanMark() ); break;
case CREGP_CANRECALL: *vp = BOOLEAN_TO_JSVAL( gPriv->CanRecall() ); break;
case CREGP_CANGATE: *vp = BOOLEAN_TO_JSVAL( gPriv->CanGate() ); break;
case CREGP_CANTELEPORT: *vp = BOOLEAN_TO_JSVAL( gPriv->CanTeleport() ); break;
0.99.4d Added new option in UOX.INI under [settings] section: MAPDIFFSENABLED=0/1 // If enabled, server will attempt to load diff files, and send "Enable Map-diff files" packet to client to also load these. Disabled by default. Server no longer loads map/statics diff files by default, nor does it send packet to client to request loading these files, as only client versions below 7.0.8.2 will actively load these files. Can be re-enabled with new UOX.INI setting mentioned above! Fixed incorrect ID for gargish dagger in CHandleCombat::getWeaponType() Added missing weapon entries in CHandleCombat::getWeaponType(): bladed whip, barbed whip, spiked whip, gargish talwar Fixed an issue that would show the end part of some tiledata names as garbled text instead of cutting off the text(!) at 20 characters Fixed an issue with advanced character creation template when using ClassicUO client, which sends a profession value of 255 instead of 0 when no profession template has been selected. Fixed an issue where clones of NPCs that can split in combat didn't get the NPC flag correctly set Guild titles are now removed for players who leave their guilds Enabled closing some hard-coded gump menus using right-click (howto, guild, towns, wholist, addmenu, craftmenu, info) Fixed an issue where adding base items using 'add [itemID] would sometimes get false positive hits from harditems.dfn, depending on the length of the itemID Fixed an issue where items added using 'add [itemID] would not get names applied properly from harditems.dfn Item/NPC DFN tag GET can now inherit a random parent by adding additional values separated by spaces. Syntax: GET=parent1 parent2 parent3 (etc) Fixed an issue where NPC backpacks would not have the max item capacity set properly Added new properties for CItem objects (also exposed as JS Item Properties): maxRange // max distance a ranged weapon can fire at (replaces ARCHERRANGE ini setting) baseRange // base distance throwing weapons (when implemented) can be used at Added support for new Item DFN tag that replaces global UOX.INI setting ARCHERRANGE: MAXRANGE=# // Specifies max range of ranged weapon Added support for new Item/NPC DFN tags to support randomizing elemental resistances: RESISTFIRE=#/# # // Set NPC's poison resistance; fixed or random value RESISTCOLD=#/# # // Set NPC's poison resistance; fixed or random value RESISTLIGHTNING=#/# # // Set NPC's poison resistance; fixed or random value RESISTPOISON=#/# # // Set NPC's poison resistance; fixed or random value Added support for two new DFN tags in dfndata/race/races.dfn that can be used to allow/ban lists of equipment for specific races ALLOWEQUIPLIST=# BANEQUIPLIST=# Added support for new section in dfndata/race/races.dfn - [EQUIPLIST #], which can be used to define lists of equipment that is whitelisted or banned for specific races. Fixed a bug that would report incorrect weight in tooltips for Item/NPC spawner objects ScriptSections are now reapplied for items bought by players from NPC vendors Fixed an issue where players could drop an item on the ground and other players would still see the item after it was picked up, because of a failed distance check vs old location coordinates (in pack) instead of vs current location on ground Fixed a bug with players being able to use last-target macro to target objects picked up and held by other players on their cursor Updated all references to "devinelock" to be "divinelock" instead - this includes the name of the JS Item property Fixed house commands triggering (useless) targeting cursors for players onboard boats Changed default statcap in UOX.INI from 325 to 225 Fixed a out-of-range error for players attempting to combine ore inside their own backpack Fixed various issues with distance checks and container checks when using/target objects Added optional 4th "hue" parameter to AddGump JS method Added JS Function to get total amount of accounts on server - GetAccountCount() Added JS Function to get total amount of players online - GetPlayerCount() onSwing JS Event can now trigger in scripts attached to items, not just items attached to characters Added some JS Functions to expose some hard-coded constants to JS scripts: BASEITEMSERIAL() // Base item serial INVALIDSERIAL() // Invalid serial INVALIDID() // Invalid ID INVALIDCOLOUR() // Invalid colour Fixed an issue where JS character property .colour would modify origSkin property instead of colour Fixed an issue where JS character property .guildTitle returned the name of the character instead of the guild title Character JS property .poison can now also be used to set a character's poisoned level, not just read it Exposed Item property to JS engine: .ac // armour class for item (0-128). Primarily used for setting race-restrictions for equippable items, i.e. race X cannot equip items of armour class Y. .def // defensive value of item (Physical resistance post-AoS, AR in older UO) // NOTE: The following properties don't actually do anything yet, but can still be used in custom JS scripts if desired .resistCold // Cold resistance of item 0-1000, where 1000 equals 100.0% .resistHeat // Heat/Fire resistance of item 0-1000, where 1000 equals 100.0% .resistLight // Light resistance of item 0-1000, where 1000 equals 100.0% .resistLightning // Energy/Lightning resistance of item 0-1000, where 1000 equals 100.0% .resistPoison // Poison resistance of item 0-1000, where 1000 equals 100.0% .resistRain // Rain resistance of item 0-1000, where 1000 equals 100.0% .resistSnow // Snow resistance of item 0-1000, where 1000 equals 100.0% .damageHeat // Weapon deals Heat/Fire elemental damage (true/false) .damageCold // Weapon deals Cold elemental damage (true/false) .damageLight // Weapon deals Light elemental damage (true/false) .damageLightning // Weapon deals Lightning elemental damage (true/false) .damagePoison // Weapon deals Poison elemental damage (true/false) .damageRain // Weapon deals Rain/Water elemental damage (true/false) .damageSnow // Weapon deals Snow/Ice elemental damage (true/false) Added new UOX.INI setting under [server] to enable/disable shard response to ConnectUO server polling (disabled by default) Sub-commands are no longer included when registering packets to be overloaded via RegisterPacket function, as that part was never fully implemented. Packet-hook scripts can be setup for specific packet IDs, but any sub-command checking will need to be done in the script itself JS Packet Method GetDWord() now uses JS_NewNumberValue instead of INT_TO_JSVAL to read from the socket buffer, to better handle large numbers, which could previously be returned with wrong values. JS Function CalcItemFromSer() now uses a JS_GetStringBytes() and str_value() combo instead of JSVAL_TO_INT() to read the data provided in the function argument. This allows JS scripts to provide item serials to the function directly without needing to split it into four parts first (though that still works) Fixed issue where JS properties for multis didn't always return correct values The 'set command can now be used to set the armour class of items ('set ac #) Reimplemented 'tweak command in JS engine (js/commands/targeting/tweak.js) - can be used to view and modify properties of characters, character skills, items, multis and regions (target ground) Added placeholder packet-hook script (js/server/network/0xf1_connectUoServerPoll.js) to handle responses to ConnectUO server polling. By default this script does nothing, but serves as a placeholder for drop-in replacement scripts generated specifically for each shard by the ConnectUO service. Updated some commands to support an alternate STATIC keyword (can also be ommitted) to add base items: 'add static itemID 'tile static itemID Updated some commands with support for randomization. Provided itemID will be randomized based on provided rndValue: /js/commands/targeting/add.js: 'add itemID rndValue cmdtable.cpp and targeting.cpp: 'tile itemID rndValue 'tile itemID x1 x2 y1 y2 z rndValue Updated js/commands/custom/repeatingcmds.js to support 'm delete as an alias for 'rremove Added 'props as an alias for the 'tweak command Added 'teleport as an alias for the 'tele command (js/commands/targeting/tele.js) Added 'shavehair and 'shavebeard as aliases for 'kill hair and 'kill beard (js/commands/targeting/kill.js) Added 'noinvul and 'mortal aliases for the 'invul false command (js/commands/custom/misc-cmds.js) Added 'immortal and 'invul (without parameter) as aliases for the 'invul true command Added 'bringtopack as an alias of 'movetobag command (js/commands/targeting/movetobag.js) Updated check for cancelling of target cursor in various JS scripts Minor updates to various JS scripts Fixed issue where some item definitions in dfndata/harditems/harditems.dfn and dfndata/items/building/lighting.dfn used comma instead of space as delimiter for the VALUE tag, which thus never got applied Updated all NPC definitions to let NPCs spawn facing in random directions
2021-03-22 05:59:20 +08:00
case CREGP_CANPLACEHOUSE: *vp = BOOLEAN_TO_JSVAL( gPriv->CanPlaceHouse() ); break;
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
case CREGP_ISGUARDED: *vp = BOOLEAN_TO_JSVAL( gPriv->IsGuarded() ); break;
case CREGP_WORLDNUMBER: *vp = INT_TO_JSVAL( gPriv->WorldNumber() ); break;
case CREGP_INSTANCEID: *vp = INT_TO_JSVAL( gPriv->GetInstanceId() ); break;
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
case CREGP_CANCASTAGGRESSIVE: *vp = BOOLEAN_TO_JSVAL( gPriv->CanCastAggressive() ); break;
case CREGP_ISSAFEZONE: *vp = BOOLEAN_TO_JSVAL( gPriv->IsSafeZone() ); break;
case CREGP_HEALTH: *vp = INT_TO_JSVAL( gPriv->GetHealth() ); break;
case CREGP_ISDUNGEON: *vp = BOOLEAN_TO_JSVAL( gPriv->IsDungeon() ); break;
Misc Fixes and Updates Added support for MAXWEIGHTBONUS DFN tag for races, to allow increasing weight that can be carried by specific race, and a new GetWeightMax() code function to do the necessary calculations on demand Updated [default race bonuses] UOX.INI section with the following new settings for the 3 default playable races (only used if nothing else specified in races.dfn): HUMANMAXWEIGHTBONUS=0 ELFMAXWEIGHTBONUS=0 GARGOYLEMAXWEIGHTBONUS=0 Added support for ALLSKILLSG and ALLSKILLSL DFN tags for races, which allow defining skill bonus or loss across all skills for a given race Added new Character JS Method for adding skill points without triggering skillchange JS Events: .AddSkill( skillID, skillAmt, triggerEvents[true/false] ) Added new Boat JS Property to allow getting/setting movement types for Boats via scripts: .moveType // See UOX3 JS Engine Docs > JS Object Properties > Multi Properties for a detailed list of all supported movement types Added new Boat JS Method to allow turning boats via scripts: .TurnBoat( turnDir ) // 0 = straight (no turning), 1 = turn left, 2 = turn right, 3 = flip around Updated IterateOver/OnIterate JS Function/Event to support passing in optional socket parameter. New syntax: IterateOver( objectType[, socket ]); .OnIterate( sourceObject, targetObject, socket ) Updated Character/Item JS Method .Refresh() to support an optional socket argument, to specify which player to refresh the object for. New syntax: .Refresh( [socket] ) Added support for new region setting that can define a region as disabled/enabled via DFN (tag) or script (JS property). Disabled regions will be ignored by UOX3: DISABLED=0/1 // Region DFN tag .isDisabled // Region JS Property Fixed issue where JS tags and temporary JS tags would not be copied over when duplicating a character or item Removed strength requirements from base shield definitions - stats like these are handled per era (dfndata/items/gear/armor/base_armor.dfn) Fixed an issue where necromancer newbie armor would incorrectly inherit base versions of leather armor without stats (dfndata/items/gear/armor/leather_armor/leather.dfn) Fixed an issue where players would not correctly leave combat after hiding (js/skill/hiding.js) Fixed an issue with Healing skill where skill-checks for healing/veterinary would fail due to a misspelled variable (js/skill/healing.js) Updated smart-turn furniture script to prevent players from being able to turn furnitures that are occupied by characters (js/server/misc/furniture_smartturn.js) Updated Buff-bar script to only add buffs for client versions higher than 5.0.2, the client patch where this feature was added (js/server/network/0xDF_buffBar.js) Updated Vendor BDO Dispenser script to add alternative reward-table for AoS era (js/npc/ai/vendor_bdo_dispenser.js) Cleaned up some code (spaces to tabs, indentation, spacing)
2025-04-23 00:01:53 +08:00
case CREGP_ISDISABLED: *vp = BOOLEAN_TO_JSVAL( gPriv->IsDisabled() ); break;
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
case CREGP_CHANCEBIGORE: *vp = INT_TO_JSVAL( gPriv->GetChanceBigOre() ); break;
case CREGP_NUMOREPREFERENCES: *vp = INT_TO_JSVAL( gPriv->GetNumOrePreferences() ); break;
case CREGP_POPULATION: *vp = INT_TO_JSVAL( gPriv->GetPopulation() ); break;
case CREGP_MEMBERS:
tString = JS_NewStringCopyZ( cx, gPriv->GetTownMemberSerials().c_str() );
*vp = STRING_TO_JSVAL( tString );
break;
case CREGP_ID: *vp = INT_TO_JSVAL( gPriv->GetRegionNum() ); break;
case CREGP_NUMGUARDS: *vp = INT_TO_JSVAL( gPriv->NumGuards() ); break;
Minor JS revamp - multiple scripts per object! Added TryParseJSVal() helper function in cScript.cpp, used to parse jsval values returned from script events. Provides results matching 0 (0, false), 1 (1, true) or any specific int value returned from script. JS events updated to use new TryParseJSVal helper function (no change in behaviour): onDecay, onResurrect, onCommand, onBuyFromVendor, onSellToVendor, onPickup, onCharDoubleClick, onSkillGump, onUseBandageMacro, onCombatStart, onCombatEnd, onDeathBlow, onBuy, onSell JS events with slight change of behaviour after update to use TryParseJSVal: onDrop, onDropItemOnItem, onDropItemOnNpc - previously, a blank or non-existent return value would be treated the same as a return true. This will now be treated as a return false. Update scripts accordingly! JS events updated to support return values from scripts: onCollide, onTalk, onSnooped, OnHungerChange Return false or nothing to prevent hard code from running Return true to allow hard code to run like normal onStolenFrom, onAISliver, onLightChange, onVirtueGumpPress, onQuestGump, onSpecialMove, onSwing, onClick, onHouseCommand, onSellToVendor, onSkillCheck, onSpellGain, onSpellLoss Return false to allow hard code and other scripts with event to run like normal Return true to prevent hard code and other scripts with event from running onSteal Return false or nothing to allow hard code and other scripts with event to run like normal Return true to prevent hard code and onStolenFrom event from running (theft failed?) Return 2 to prevent hard code, but allow onStolenFrom event to run (theft succeeded, but handled in script?) onLeaving, onEntrance, onEquip, onUnequip, onEnterEvadeState, onSoldToVendor, onBoughtFromVendor, onSpellSuccess, onSpellTarget, onFlagChange, onDeath Return false or nothing to allow other scripts with event to run like normal Return true to prevent other scripts with event from running Added new JS events that run prior to items being equipped/unequipped, with support for return values: onEquipAttempt( pEquipper, iEquipping ) onUnequipAttempt( pEquipper, iUnequipping ) Return false or nothing to reject attempt to equip/unequip item, and prevent hard-code or other scripts with event from running Return true to allow hard code to run like normal Added new JS event that runs prior to onSnooped event, for character doing the snooping: onSnoopAttempt( snooped, snooper ) Return false or nothing to prevent hard code and other snooping-related events from running Return true to allow hard code and other snooping-related events to run like normal Updated onSnooped JS event to accept return values: Return true when success state is true to prevent other scripts with event from running Return true when success state is false to prevent hard code and other scripts with event from running Updated onClick JS event to also run for characters with event attached (return 1 to prevent showing hard-coded name for whatever object is clicked) Updated onSteal JS event to include a third parameter, an object reference for the target of the theft Added support for assigning multiple JS scripts per object (item, multi, char, region). Any time a scriptID is added to an object, the list of such IDs for that object will be sorted from lowest to highest scriptID, which also determines the execution order for the scripts. Note that if the same JS event is present in several scripts assigned to an object, each of those events will trigger, unless the rules about return values for said event prevent this DFNs for Items, Multis, Characters and Regions can now contain multiple SCRIPT=scriptID tags per definition. Each such SCRIPT tag will be applied to the object in question, then sorted from lowest to highest scriptID by server. Added new JS property for Items, Multis, Characters and Regions: .scriptTriggers // If used to get property, will return array object with all script IDs assigned to object. If used to set property, will add script ID to existing list of script IDs for object. Modified JS property for Items, Multis, Characters and Regions, which for backwards compatibility functions similar to in older versions: .scripttrigger // If used to get property, will return last script ID in list of script IDs assigned to object. If used to set property, will clear list of script IDs and assign only the new ID Added new JS Methods for Items, Multis, Characters and Regions: .AddScriptTrigger( scriptID ) // Adds a new scriptID to list of scripts assigned to object .RemoveScriptTrigger( scriptID ) // Remove a specific scriptID from object (0 = remove all) Moved SETSCPTRIG command from code to JS (js/commands/targeting/scptrig.js), and supplemented it with some additional commands: GETSCPTRIG // List out all scriptIDs assigned to object SETSCPTRIG scriptID // Clears list of scriptIDs for object, then assigns the specified scriptID ADDSCPTRIG scriptID // Adds specified scriptID to list of scriptsIDs assigned to object REMOVESCPTRIG scriptID // Removes specified scriptID from list of scriptIDs assigned to object (0 = remove all)
2021-05-25 19:37:52 +08:00
case CREGP_SCRIPTTRIGGER:
{
// For backwards compatibility, get last scripttrigger from vector
// For older worldfiles, this will be the only scripttrigger added to the vector after load
std::vector<UI16> scriptTriggers = gPriv->GetScriptTriggers();
UI16 lastScriptTrigger = 0;
auto numberOfTriggers = scriptTriggers.size();
if( numberOfTriggers > 0 )
{
lastScriptTrigger = scriptTriggers[numberOfTriggers - 1];
Minor JS revamp - multiple scripts per object! Added TryParseJSVal() helper function in cScript.cpp, used to parse jsval values returned from script events. Provides results matching 0 (0, false), 1 (1, true) or any specific int value returned from script. JS events updated to use new TryParseJSVal helper function (no change in behaviour): onDecay, onResurrect, onCommand, onBuyFromVendor, onSellToVendor, onPickup, onCharDoubleClick, onSkillGump, onUseBandageMacro, onCombatStart, onCombatEnd, onDeathBlow, onBuy, onSell JS events with slight change of behaviour after update to use TryParseJSVal: onDrop, onDropItemOnItem, onDropItemOnNpc - previously, a blank or non-existent return value would be treated the same as a return true. This will now be treated as a return false. Update scripts accordingly! JS events updated to support return values from scripts: onCollide, onTalk, onSnooped, OnHungerChange Return false or nothing to prevent hard code from running Return true to allow hard code to run like normal onStolenFrom, onAISliver, onLightChange, onVirtueGumpPress, onQuestGump, onSpecialMove, onSwing, onClick, onHouseCommand, onSellToVendor, onSkillCheck, onSpellGain, onSpellLoss Return false to allow hard code and other scripts with event to run like normal Return true to prevent hard code and other scripts with event from running onSteal Return false or nothing to allow hard code and other scripts with event to run like normal Return true to prevent hard code and onStolenFrom event from running (theft failed?) Return 2 to prevent hard code, but allow onStolenFrom event to run (theft succeeded, but handled in script?) onLeaving, onEntrance, onEquip, onUnequip, onEnterEvadeState, onSoldToVendor, onBoughtFromVendor, onSpellSuccess, onSpellTarget, onFlagChange, onDeath Return false or nothing to allow other scripts with event to run like normal Return true to prevent other scripts with event from running Added new JS events that run prior to items being equipped/unequipped, with support for return values: onEquipAttempt( pEquipper, iEquipping ) onUnequipAttempt( pEquipper, iUnequipping ) Return false or nothing to reject attempt to equip/unequip item, and prevent hard-code or other scripts with event from running Return true to allow hard code to run like normal Added new JS event that runs prior to onSnooped event, for character doing the snooping: onSnoopAttempt( snooped, snooper ) Return false or nothing to prevent hard code and other snooping-related events from running Return true to allow hard code and other snooping-related events to run like normal Updated onSnooped JS event to accept return values: Return true when success state is true to prevent other scripts with event from running Return true when success state is false to prevent hard code and other scripts with event from running Updated onClick JS event to also run for characters with event attached (return 1 to prevent showing hard-coded name for whatever object is clicked) Updated onSteal JS event to include a third parameter, an object reference for the target of the theft Added support for assigning multiple JS scripts per object (item, multi, char, region). Any time a scriptID is added to an object, the list of such IDs for that object will be sorted from lowest to highest scriptID, which also determines the execution order for the scripts. Note that if the same JS event is present in several scripts assigned to an object, each of those events will trigger, unless the rules about return values for said event prevent this DFNs for Items, Multis, Characters and Regions can now contain multiple SCRIPT=scriptID tags per definition. Each such SCRIPT tag will be applied to the object in question, then sorted from lowest to highest scriptID by server. Added new JS property for Items, Multis, Characters and Regions: .scriptTriggers // If used to get property, will return array object with all script IDs assigned to object. If used to set property, will add script ID to existing list of script IDs for object. Modified JS property for Items, Multis, Characters and Regions, which for backwards compatibility functions similar to in older versions: .scripttrigger // If used to get property, will return last script ID in list of script IDs assigned to object. If used to set property, will clear list of script IDs and assign only the new ID Added new JS Methods for Items, Multis, Characters and Regions: .AddScriptTrigger( scriptID ) // Adds a new scriptID to list of scripts assigned to object .RemoveScriptTrigger( scriptID ) // Remove a specific scriptID from object (0 = remove all) Moved SETSCPTRIG command from code to JS (js/commands/targeting/scptrig.js), and supplemented it with some additional commands: GETSCPTRIG // List out all scriptIDs assigned to object SETSCPTRIG scriptID // Clears list of scriptIDs for object, then assigns the specified scriptID ADDSCPTRIG scriptID // Adds specified scriptID to list of scriptsIDs assigned to object REMOVESCPTRIG scriptID // Removes specified scriptID from list of scriptIDs assigned to object (0 = remove all)
2021-05-25 19:37:52 +08:00
}
Minor JS revamp - multiple scripts per object! Added TryParseJSVal() helper function in cScript.cpp, used to parse jsval values returned from script events. Provides results matching 0 (0, false), 1 (1, true) or any specific int value returned from script. JS events updated to use new TryParseJSVal helper function (no change in behaviour): onDecay, onResurrect, onCommand, onBuyFromVendor, onSellToVendor, onPickup, onCharDoubleClick, onSkillGump, onUseBandageMacro, onCombatStart, onCombatEnd, onDeathBlow, onBuy, onSell JS events with slight change of behaviour after update to use TryParseJSVal: onDrop, onDropItemOnItem, onDropItemOnNpc - previously, a blank or non-existent return value would be treated the same as a return true. This will now be treated as a return false. Update scripts accordingly! JS events updated to support return values from scripts: onCollide, onTalk, onSnooped, OnHungerChange Return false or nothing to prevent hard code from running Return true to allow hard code to run like normal onStolenFrom, onAISliver, onLightChange, onVirtueGumpPress, onQuestGump, onSpecialMove, onSwing, onClick, onHouseCommand, onSellToVendor, onSkillCheck, onSpellGain, onSpellLoss Return false to allow hard code and other scripts with event to run like normal Return true to prevent hard code and other scripts with event from running onSteal Return false or nothing to allow hard code and other scripts with event to run like normal Return true to prevent hard code and onStolenFrom event from running (theft failed?) Return 2 to prevent hard code, but allow onStolenFrom event to run (theft succeeded, but handled in script?) onLeaving, onEntrance, onEquip, onUnequip, onEnterEvadeState, onSoldToVendor, onBoughtFromVendor, onSpellSuccess, onSpellTarget, onFlagChange, onDeath Return false or nothing to allow other scripts with event to run like normal Return true to prevent other scripts with event from running Added new JS events that run prior to items being equipped/unequipped, with support for return values: onEquipAttempt( pEquipper, iEquipping ) onUnequipAttempt( pEquipper, iUnequipping ) Return false or nothing to reject attempt to equip/unequip item, and prevent hard-code or other scripts with event from running Return true to allow hard code to run like normal Added new JS event that runs prior to onSnooped event, for character doing the snooping: onSnoopAttempt( snooped, snooper ) Return false or nothing to prevent hard code and other snooping-related events from running Return true to allow hard code and other snooping-related events to run like normal Updated onSnooped JS event to accept return values: Return true when success state is true to prevent other scripts with event from running Return true when success state is false to prevent hard code and other scripts with event from running Updated onClick JS event to also run for characters with event attached (return 1 to prevent showing hard-coded name for whatever object is clicked) Updated onSteal JS event to include a third parameter, an object reference for the target of the theft Added support for assigning multiple JS scripts per object (item, multi, char, region). Any time a scriptID is added to an object, the list of such IDs for that object will be sorted from lowest to highest scriptID, which also determines the execution order for the scripts. Note that if the same JS event is present in several scripts assigned to an object, each of those events will trigger, unless the rules about return values for said event prevent this DFNs for Items, Multis, Characters and Regions can now contain multiple SCRIPT=scriptID tags per definition. Each such SCRIPT tag will be applied to the object in question, then sorted from lowest to highest scriptID by server. Added new JS property for Items, Multis, Characters and Regions: .scriptTriggers // If used to get property, will return array object with all script IDs assigned to object. If used to set property, will add script ID to existing list of script IDs for object. Modified JS property for Items, Multis, Characters and Regions, which for backwards compatibility functions similar to in older versions: .scripttrigger // If used to get property, will return last script ID in list of script IDs assigned to object. If used to set property, will clear list of script IDs and assign only the new ID Added new JS Methods for Items, Multis, Characters and Regions: .AddScriptTrigger( scriptID ) // Adds a new scriptID to list of scripts assigned to object .RemoveScriptTrigger( scriptID ) // Remove a specific scriptID from object (0 = remove all) Moved SETSCPTRIG command from code to JS (js/commands/targeting/scptrig.js), and supplemented it with some additional commands: GETSCPTRIG // List out all scriptIDs assigned to object SETSCPTRIG scriptID // Clears list of scriptIDs for object, then assigns the specified scriptID ADDSCPTRIG scriptID // Adds specified scriptID to list of scriptsIDs assigned to object REMOVESCPTRIG scriptID // Removes specified scriptID from list of scriptIDs assigned to object (0 = remove all)
2021-05-25 19:37:52 +08:00
*vp = INT_TO_JSVAL( lastScriptTrigger );
break;
Minor JS revamp - multiple scripts per object! Added TryParseJSVal() helper function in cScript.cpp, used to parse jsval values returned from script events. Provides results matching 0 (0, false), 1 (1, true) or any specific int value returned from script. JS events updated to use new TryParseJSVal helper function (no change in behaviour): onDecay, onResurrect, onCommand, onBuyFromVendor, onSellToVendor, onPickup, onCharDoubleClick, onSkillGump, onUseBandageMacro, onCombatStart, onCombatEnd, onDeathBlow, onBuy, onSell JS events with slight change of behaviour after update to use TryParseJSVal: onDrop, onDropItemOnItem, onDropItemOnNpc - previously, a blank or non-existent return value would be treated the same as a return true. This will now be treated as a return false. Update scripts accordingly! JS events updated to support return values from scripts: onCollide, onTalk, onSnooped, OnHungerChange Return false or nothing to prevent hard code from running Return true to allow hard code to run like normal onStolenFrom, onAISliver, onLightChange, onVirtueGumpPress, onQuestGump, onSpecialMove, onSwing, onClick, onHouseCommand, onSellToVendor, onSkillCheck, onSpellGain, onSpellLoss Return false to allow hard code and other scripts with event to run like normal Return true to prevent hard code and other scripts with event from running onSteal Return false or nothing to allow hard code and other scripts with event to run like normal Return true to prevent hard code and onStolenFrom event from running (theft failed?) Return 2 to prevent hard code, but allow onStolenFrom event to run (theft succeeded, but handled in script?) onLeaving, onEntrance, onEquip, onUnequip, onEnterEvadeState, onSoldToVendor, onBoughtFromVendor, onSpellSuccess, onSpellTarget, onFlagChange, onDeath Return false or nothing to allow other scripts with event to run like normal Return true to prevent other scripts with event from running Added new JS events that run prior to items being equipped/unequipped, with support for return values: onEquipAttempt( pEquipper, iEquipping ) onUnequipAttempt( pEquipper, iUnequipping ) Return false or nothing to reject attempt to equip/unequip item, and prevent hard-code or other scripts with event from running Return true to allow hard code to run like normal Added new JS event that runs prior to onSnooped event, for character doing the snooping: onSnoopAttempt( snooped, snooper ) Return false or nothing to prevent hard code and other snooping-related events from running Return true to allow hard code and other snooping-related events to run like normal Updated onSnooped JS event to accept return values: Return true when success state is true to prevent other scripts with event from running Return true when success state is false to prevent hard code and other scripts with event from running Updated onClick JS event to also run for characters with event attached (return 1 to prevent showing hard-coded name for whatever object is clicked) Updated onSteal JS event to include a third parameter, an object reference for the target of the theft Added support for assigning multiple JS scripts per object (item, multi, char, region). Any time a scriptID is added to an object, the list of such IDs for that object will be sorted from lowest to highest scriptID, which also determines the execution order for the scripts. Note that if the same JS event is present in several scripts assigned to an object, each of those events will trigger, unless the rules about return values for said event prevent this DFNs for Items, Multis, Characters and Regions can now contain multiple SCRIPT=scriptID tags per definition. Each such SCRIPT tag will be applied to the object in question, then sorted from lowest to highest scriptID by server. Added new JS property for Items, Multis, Characters and Regions: .scriptTriggers // If used to get property, will return array object with all script IDs assigned to object. If used to set property, will add script ID to existing list of script IDs for object. Modified JS property for Items, Multis, Characters and Regions, which for backwards compatibility functions similar to in older versions: .scripttrigger // If used to get property, will return last script ID in list of script IDs assigned to object. If used to set property, will clear list of script IDs and assign only the new ID Added new JS Methods for Items, Multis, Characters and Regions: .AddScriptTrigger( scriptID ) // Adds a new scriptID to list of scripts assigned to object .RemoveScriptTrigger( scriptID ) // Remove a specific scriptID from object (0 = remove all) Moved SETSCPTRIG command from code to JS (js/commands/targeting/scptrig.js), and supplemented it with some additional commands: GETSCPTRIG // List out all scriptIDs assigned to object SETSCPTRIG scriptID // Clears list of scriptIDs for object, then assigns the specified scriptID ADDSCPTRIG scriptID // Adds specified scriptID to list of scriptsIDs assigned to object REMOVESCPTRIG scriptID // Removes specified scriptID from list of scriptIDs assigned to object (0 = remove all)
2021-05-25 19:37:52 +08:00
}
case CREGP_SCRIPTTRIGGERS:
{
jsval scriptId;
JSObject *scriptTriggersJS = JS_NewArrayObject( cx, 0, nullptr );
Minor JS revamp - multiple scripts per object! Added TryParseJSVal() helper function in cScript.cpp, used to parse jsval values returned from script events. Provides results matching 0 (0, false), 1 (1, true) or any specific int value returned from script. JS events updated to use new TryParseJSVal helper function (no change in behaviour): onDecay, onResurrect, onCommand, onBuyFromVendor, onSellToVendor, onPickup, onCharDoubleClick, onSkillGump, onUseBandageMacro, onCombatStart, onCombatEnd, onDeathBlow, onBuy, onSell JS events with slight change of behaviour after update to use TryParseJSVal: onDrop, onDropItemOnItem, onDropItemOnNpc - previously, a blank or non-existent return value would be treated the same as a return true. This will now be treated as a return false. Update scripts accordingly! JS events updated to support return values from scripts: onCollide, onTalk, onSnooped, OnHungerChange Return false or nothing to prevent hard code from running Return true to allow hard code to run like normal onStolenFrom, onAISliver, onLightChange, onVirtueGumpPress, onQuestGump, onSpecialMove, onSwing, onClick, onHouseCommand, onSellToVendor, onSkillCheck, onSpellGain, onSpellLoss Return false to allow hard code and other scripts with event to run like normal Return true to prevent hard code and other scripts with event from running onSteal Return false or nothing to allow hard code and other scripts with event to run like normal Return true to prevent hard code and onStolenFrom event from running (theft failed?) Return 2 to prevent hard code, but allow onStolenFrom event to run (theft succeeded, but handled in script?) onLeaving, onEntrance, onEquip, onUnequip, onEnterEvadeState, onSoldToVendor, onBoughtFromVendor, onSpellSuccess, onSpellTarget, onFlagChange, onDeath Return false or nothing to allow other scripts with event to run like normal Return true to prevent other scripts with event from running Added new JS events that run prior to items being equipped/unequipped, with support for return values: onEquipAttempt( pEquipper, iEquipping ) onUnequipAttempt( pEquipper, iUnequipping ) Return false or nothing to reject attempt to equip/unequip item, and prevent hard-code or other scripts with event from running Return true to allow hard code to run like normal Added new JS event that runs prior to onSnooped event, for character doing the snooping: onSnoopAttempt( snooped, snooper ) Return false or nothing to prevent hard code and other snooping-related events from running Return true to allow hard code and other snooping-related events to run like normal Updated onSnooped JS event to accept return values: Return true when success state is true to prevent other scripts with event from running Return true when success state is false to prevent hard code and other scripts with event from running Updated onClick JS event to also run for characters with event attached (return 1 to prevent showing hard-coded name for whatever object is clicked) Updated onSteal JS event to include a third parameter, an object reference for the target of the theft Added support for assigning multiple JS scripts per object (item, multi, char, region). Any time a scriptID is added to an object, the list of such IDs for that object will be sorted from lowest to highest scriptID, which also determines the execution order for the scripts. Note that if the same JS event is present in several scripts assigned to an object, each of those events will trigger, unless the rules about return values for said event prevent this DFNs for Items, Multis, Characters and Regions can now contain multiple SCRIPT=scriptID tags per definition. Each such SCRIPT tag will be applied to the object in question, then sorted from lowest to highest scriptID by server. Added new JS property for Items, Multis, Characters and Regions: .scriptTriggers // If used to get property, will return array object with all script IDs assigned to object. If used to set property, will add script ID to existing list of script IDs for object. Modified JS property for Items, Multis, Characters and Regions, which for backwards compatibility functions similar to in older versions: .scripttrigger // If used to get property, will return last script ID in list of script IDs assigned to object. If used to set property, will clear list of script IDs and assign only the new ID Added new JS Methods for Items, Multis, Characters and Regions: .AddScriptTrigger( scriptID ) // Adds a new scriptID to list of scripts assigned to object .RemoveScriptTrigger( scriptID ) // Remove a specific scriptID from object (0 = remove all) Moved SETSCPTRIG command from code to JS (js/commands/targeting/scptrig.js), and supplemented it with some additional commands: GETSCPTRIG // List out all scriptIDs assigned to object SETSCPTRIG scriptID // Clears list of scriptIDs for object, then assigns the specified scriptID ADDSCPTRIG scriptID // Adds specified scriptID to list of scriptsIDs assigned to object REMOVESCPTRIG scriptID // Removes specified scriptID from list of scriptIDs assigned to object (0 = remove all)
2021-05-25 19:37:52 +08:00
std::vector<UI16> scriptTriggers = gPriv->GetScriptTriggers();
for( auto i = 0; i < static_cast<int>( scriptTriggers.size() ); i++ )
Minor JS revamp - multiple scripts per object! Added TryParseJSVal() helper function in cScript.cpp, used to parse jsval values returned from script events. Provides results matching 0 (0, false), 1 (1, true) or any specific int value returned from script. JS events updated to use new TryParseJSVal helper function (no change in behaviour): onDecay, onResurrect, onCommand, onBuyFromVendor, onSellToVendor, onPickup, onCharDoubleClick, onSkillGump, onUseBandageMacro, onCombatStart, onCombatEnd, onDeathBlow, onBuy, onSell JS events with slight change of behaviour after update to use TryParseJSVal: onDrop, onDropItemOnItem, onDropItemOnNpc - previously, a blank or non-existent return value would be treated the same as a return true. This will now be treated as a return false. Update scripts accordingly! JS events updated to support return values from scripts: onCollide, onTalk, onSnooped, OnHungerChange Return false or nothing to prevent hard code from running Return true to allow hard code to run like normal onStolenFrom, onAISliver, onLightChange, onVirtueGumpPress, onQuestGump, onSpecialMove, onSwing, onClick, onHouseCommand, onSellToVendor, onSkillCheck, onSpellGain, onSpellLoss Return false to allow hard code and other scripts with event to run like normal Return true to prevent hard code and other scripts with event from running onSteal Return false or nothing to allow hard code and other scripts with event to run like normal Return true to prevent hard code and onStolenFrom event from running (theft failed?) Return 2 to prevent hard code, but allow onStolenFrom event to run (theft succeeded, but handled in script?) onLeaving, onEntrance, onEquip, onUnequip, onEnterEvadeState, onSoldToVendor, onBoughtFromVendor, onSpellSuccess, onSpellTarget, onFlagChange, onDeath Return false or nothing to allow other scripts with event to run like normal Return true to prevent other scripts with event from running Added new JS events that run prior to items being equipped/unequipped, with support for return values: onEquipAttempt( pEquipper, iEquipping ) onUnequipAttempt( pEquipper, iUnequipping ) Return false or nothing to reject attempt to equip/unequip item, and prevent hard-code or other scripts with event from running Return true to allow hard code to run like normal Added new JS event that runs prior to onSnooped event, for character doing the snooping: onSnoopAttempt( snooped, snooper ) Return false or nothing to prevent hard code and other snooping-related events from running Return true to allow hard code and other snooping-related events to run like normal Updated onSnooped JS event to accept return values: Return true when success state is true to prevent other scripts with event from running Return true when success state is false to prevent hard code and other scripts with event from running Updated onClick JS event to also run for characters with event attached (return 1 to prevent showing hard-coded name for whatever object is clicked) Updated onSteal JS event to include a third parameter, an object reference for the target of the theft Added support for assigning multiple JS scripts per object (item, multi, char, region). Any time a scriptID is added to an object, the list of such IDs for that object will be sorted from lowest to highest scriptID, which also determines the execution order for the scripts. Note that if the same JS event is present in several scripts assigned to an object, each of those events will trigger, unless the rules about return values for said event prevent this DFNs for Items, Multis, Characters and Regions can now contain multiple SCRIPT=scriptID tags per definition. Each such SCRIPT tag will be applied to the object in question, then sorted from lowest to highest scriptID by server. Added new JS property for Items, Multis, Characters and Regions: .scriptTriggers // If used to get property, will return array object with all script IDs assigned to object. If used to set property, will add script ID to existing list of script IDs for object. Modified JS property for Items, Multis, Characters and Regions, which for backwards compatibility functions similar to in older versions: .scripttrigger // If used to get property, will return last script ID in list of script IDs assigned to object. If used to set property, will clear list of script IDs and assign only the new ID Added new JS Methods for Items, Multis, Characters and Regions: .AddScriptTrigger( scriptID ) // Adds a new scriptID to list of scripts assigned to object .RemoveScriptTrigger( scriptID ) // Remove a specific scriptID from object (0 = remove all) Moved SETSCPTRIG command from code to JS (js/commands/targeting/scptrig.js), and supplemented it with some additional commands: GETSCPTRIG // List out all scriptIDs assigned to object SETSCPTRIG scriptID // Clears list of scriptIDs for object, then assigns the specified scriptID ADDSCPTRIG scriptID // Adds specified scriptID to list of scriptsIDs assigned to object REMOVESCPTRIG scriptID // Removes specified scriptID from list of scriptIDs assigned to object (0 = remove all)
2021-05-25 19:37:52 +08:00
{
scriptId = INT_TO_JSVAL( scriptTriggers[i] );
JS_SetElement( cx, scriptTriggersJS, i, &scriptId );
Minor JS revamp - multiple scripts per object! Added TryParseJSVal() helper function in cScript.cpp, used to parse jsval values returned from script events. Provides results matching 0 (0, false), 1 (1, true) or any specific int value returned from script. JS events updated to use new TryParseJSVal helper function (no change in behaviour): onDecay, onResurrect, onCommand, onBuyFromVendor, onSellToVendor, onPickup, onCharDoubleClick, onSkillGump, onUseBandageMacro, onCombatStart, onCombatEnd, onDeathBlow, onBuy, onSell JS events with slight change of behaviour after update to use TryParseJSVal: onDrop, onDropItemOnItem, onDropItemOnNpc - previously, a blank or non-existent return value would be treated the same as a return true. This will now be treated as a return false. Update scripts accordingly! JS events updated to support return values from scripts: onCollide, onTalk, onSnooped, OnHungerChange Return false or nothing to prevent hard code from running Return true to allow hard code to run like normal onStolenFrom, onAISliver, onLightChange, onVirtueGumpPress, onQuestGump, onSpecialMove, onSwing, onClick, onHouseCommand, onSellToVendor, onSkillCheck, onSpellGain, onSpellLoss Return false to allow hard code and other scripts with event to run like normal Return true to prevent hard code and other scripts with event from running onSteal Return false or nothing to allow hard code and other scripts with event to run like normal Return true to prevent hard code and onStolenFrom event from running (theft failed?) Return 2 to prevent hard code, but allow onStolenFrom event to run (theft succeeded, but handled in script?) onLeaving, onEntrance, onEquip, onUnequip, onEnterEvadeState, onSoldToVendor, onBoughtFromVendor, onSpellSuccess, onSpellTarget, onFlagChange, onDeath Return false or nothing to allow other scripts with event to run like normal Return true to prevent other scripts with event from running Added new JS events that run prior to items being equipped/unequipped, with support for return values: onEquipAttempt( pEquipper, iEquipping ) onUnequipAttempt( pEquipper, iUnequipping ) Return false or nothing to reject attempt to equip/unequip item, and prevent hard-code or other scripts with event from running Return true to allow hard code to run like normal Added new JS event that runs prior to onSnooped event, for character doing the snooping: onSnoopAttempt( snooped, snooper ) Return false or nothing to prevent hard code and other snooping-related events from running Return true to allow hard code and other snooping-related events to run like normal Updated onSnooped JS event to accept return values: Return true when success state is true to prevent other scripts with event from running Return true when success state is false to prevent hard code and other scripts with event from running Updated onClick JS event to also run for characters with event attached (return 1 to prevent showing hard-coded name for whatever object is clicked) Updated onSteal JS event to include a third parameter, an object reference for the target of the theft Added support for assigning multiple JS scripts per object (item, multi, char, region). Any time a scriptID is added to an object, the list of such IDs for that object will be sorted from lowest to highest scriptID, which also determines the execution order for the scripts. Note that if the same JS event is present in several scripts assigned to an object, each of those events will trigger, unless the rules about return values for said event prevent this DFNs for Items, Multis, Characters and Regions can now contain multiple SCRIPT=scriptID tags per definition. Each such SCRIPT tag will be applied to the object in question, then sorted from lowest to highest scriptID by server. Added new JS property for Items, Multis, Characters and Regions: .scriptTriggers // If used to get property, will return array object with all script IDs assigned to object. If used to set property, will add script ID to existing list of script IDs for object. Modified JS property for Items, Multis, Characters and Regions, which for backwards compatibility functions similar to in older versions: .scripttrigger // If used to get property, will return last script ID in list of script IDs assigned to object. If used to set property, will clear list of script IDs and assign only the new ID Added new JS Methods for Items, Multis, Characters and Regions: .AddScriptTrigger( scriptID ) // Adds a new scriptID to list of scripts assigned to object .RemoveScriptTrigger( scriptID ) // Remove a specific scriptID from object (0 = remove all) Moved SETSCPTRIG command from code to JS (js/commands/targeting/scptrig.js), and supplemented it with some additional commands: GETSCPTRIG // List out all scriptIDs assigned to object SETSCPTRIG scriptID // Clears list of scriptIDs for object, then assigns the specified scriptID ADDSCPTRIG scriptID // Adds specified scriptID to list of scriptsIDs assigned to object REMOVESCPTRIG scriptID // Removes specified scriptID from list of scriptIDs assigned to object (0 = remove all)
2021-05-25 19:37:52 +08:00
}
*vp = OBJECT_TO_JSVAL( scriptTriggersJS );
break;
}
case CREGP_TAXES: *vp = INT_TO_JSVAL( gPriv->GetTaxes() ); break;
case CREGP_RESERVES: *vp = INT_TO_JSVAL( gPriv->GetReserves() ); break;
case CREGP_APPEARANCE: *vp = INT_TO_JSVAL( gPriv->GetAppearance() ); break;
case CREGP_MUSIC: *vp = INT_TO_JSVAL( gPriv->GetMusicList() ); break;
case CREGP_WEATHER: *vp = INT_TO_JSVAL( gPriv->GetWeather() ); break;
case CREGP_OWNER:
tString = JS_NewStringCopyZ( cx, gPriv->GetOwner().c_str() );
*vp = STRING_TO_JSVAL( tString );
break;
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
default:
break;
}
}
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
return JS_TRUE;
}
JSBool CRegionProps_setProperty( JSContext* cx, JSObject* obj, jsid id, JSBool strict, jsval* vp )
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
{
CTownRegion *gPriv = static_cast<CTownRegion *>( JS_GetPrivate( cx, obj ));
2021-06-12 07:30:23 -04:00
if( gPriv == nullptr )
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
return JS_FALSE;
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
JSEncapsulate encaps( cx, vp );
2025-04-07 14:11:13 +10:00
UI16 propID = getScriptID( cx, id, JSP_REGION );
if( propID != 0xFFFF )
{
2025-04-07 14:11:13 +10:00
switch( propID )
{
case CREGP_NAME: gPriv->SetName( encaps.toString() ); break;
case CREGP_MAYOR: gPriv->SetMayorSerial( static_cast<UI32>( encaps.toInt() )); break;
case CREGP_RACE: gPriv->SetRace( static_cast<RACEID>( encaps.toInt() )); break;
case CREGP_TAX: gPriv->TaxedAmount( static_cast<SI16>( encaps.toInt() )); break;
case CREGP_TAXRESOURCE: gPriv->SetResourceId( static_cast<UI16>( encaps.toInt() )); break;
case CREGP_CANMARK: gPriv->CanMark( encaps.toBool() ); break;
case CREGP_CANRECALL: gPriv->CanRecall( encaps.toBool() ); break;
case CREGP_CANGATE: gPriv->CanGate( encaps.toBool() ); break;
case CREGP_CANTELEPORT: gPriv->CanTeleport( encaps.toBool() ); break;
case CREGP_CANPLACEHOUSE: gPriv->CanPlaceHouse( encaps.toBool() ); break;
case CREGP_ISGUARDED: gPriv->IsGuarded( encaps.toBool() ); break;
case CREGP_CANCASTAGGRESSIVE: gPriv->CanCastAggressive( encaps.toBool() ); break;
case CREGP_ISSAFEZONE: gPriv->IsSafeZone( encaps.toBool() ); break;
case CREGP_HEALTH: gPriv->SetHealth( static_cast<SI16>( encaps.toInt() )); break;
case CREGP_ISDUNGEON: gPriv->IsDungeon( encaps.toBool() ); break;
Misc Fixes and Updates Added support for MAXWEIGHTBONUS DFN tag for races, to allow increasing weight that can be carried by specific race, and a new GetWeightMax() code function to do the necessary calculations on demand Updated [default race bonuses] UOX.INI section with the following new settings for the 3 default playable races (only used if nothing else specified in races.dfn): HUMANMAXWEIGHTBONUS=0 ELFMAXWEIGHTBONUS=0 GARGOYLEMAXWEIGHTBONUS=0 Added support for ALLSKILLSG and ALLSKILLSL DFN tags for races, which allow defining skill bonus or loss across all skills for a given race Added new Character JS Method for adding skill points without triggering skillchange JS Events: .AddSkill( skillID, skillAmt, triggerEvents[true/false] ) Added new Boat JS Property to allow getting/setting movement types for Boats via scripts: .moveType // See UOX3 JS Engine Docs > JS Object Properties > Multi Properties for a detailed list of all supported movement types Added new Boat JS Method to allow turning boats via scripts: .TurnBoat( turnDir ) // 0 = straight (no turning), 1 = turn left, 2 = turn right, 3 = flip around Updated IterateOver/OnIterate JS Function/Event to support passing in optional socket parameter. New syntax: IterateOver( objectType[, socket ]); .OnIterate( sourceObject, targetObject, socket ) Updated Character/Item JS Method .Refresh() to support an optional socket argument, to specify which player to refresh the object for. New syntax: .Refresh( [socket] ) Added support for new region setting that can define a region as disabled/enabled via DFN (tag) or script (JS property). Disabled regions will be ignored by UOX3: DISABLED=0/1 // Region DFN tag .isDisabled // Region JS Property Fixed issue where JS tags and temporary JS tags would not be copied over when duplicating a character or item Removed strength requirements from base shield definitions - stats like these are handled per era (dfndata/items/gear/armor/base_armor.dfn) Fixed an issue where necromancer newbie armor would incorrectly inherit base versions of leather armor without stats (dfndata/items/gear/armor/leather_armor/leather.dfn) Fixed an issue where players would not correctly leave combat after hiding (js/skill/hiding.js) Fixed an issue with Healing skill where skill-checks for healing/veterinary would fail due to a misspelled variable (js/skill/healing.js) Updated smart-turn furniture script to prevent players from being able to turn furnitures that are occupied by characters (js/server/misc/furniture_smartturn.js) Updated Buff-bar script to only add buffs for client versions higher than 5.0.2, the client patch where this feature was added (js/server/network/0xDF_buffBar.js) Updated Vendor BDO Dispenser script to add alternative reward-table for AoS era (js/npc/ai/vendor_bdo_dispenser.js) Cleaned up some code (spaces to tabs, indentation, spacing)
2025-04-23 00:01:53 +08:00
case CREGP_ISDISABLED: gPriv->IsDisabled( encaps.toBool() ); break;
case CREGP_CHANCEBIGORE: gPriv->SetChanceBigOre( static_cast<UI08>( encaps.toInt() )); break;
case CREGP_NUMGUARDS: gPriv->SetNumGuards( static_cast<UI16>( encaps.toInt() )); break;
Minor JS revamp - multiple scripts per object! Added TryParseJSVal() helper function in cScript.cpp, used to parse jsval values returned from script events. Provides results matching 0 (0, false), 1 (1, true) or any specific int value returned from script. JS events updated to use new TryParseJSVal helper function (no change in behaviour): onDecay, onResurrect, onCommand, onBuyFromVendor, onSellToVendor, onPickup, onCharDoubleClick, onSkillGump, onUseBandageMacro, onCombatStart, onCombatEnd, onDeathBlow, onBuy, onSell JS events with slight change of behaviour after update to use TryParseJSVal: onDrop, onDropItemOnItem, onDropItemOnNpc - previously, a blank or non-existent return value would be treated the same as a return true. This will now be treated as a return false. Update scripts accordingly! JS events updated to support return values from scripts: onCollide, onTalk, onSnooped, OnHungerChange Return false or nothing to prevent hard code from running Return true to allow hard code to run like normal onStolenFrom, onAISliver, onLightChange, onVirtueGumpPress, onQuestGump, onSpecialMove, onSwing, onClick, onHouseCommand, onSellToVendor, onSkillCheck, onSpellGain, onSpellLoss Return false to allow hard code and other scripts with event to run like normal Return true to prevent hard code and other scripts with event from running onSteal Return false or nothing to allow hard code and other scripts with event to run like normal Return true to prevent hard code and onStolenFrom event from running (theft failed?) Return 2 to prevent hard code, but allow onStolenFrom event to run (theft succeeded, but handled in script?) onLeaving, onEntrance, onEquip, onUnequip, onEnterEvadeState, onSoldToVendor, onBoughtFromVendor, onSpellSuccess, onSpellTarget, onFlagChange, onDeath Return false or nothing to allow other scripts with event to run like normal Return true to prevent other scripts with event from running Added new JS events that run prior to items being equipped/unequipped, with support for return values: onEquipAttempt( pEquipper, iEquipping ) onUnequipAttempt( pEquipper, iUnequipping ) Return false or nothing to reject attempt to equip/unequip item, and prevent hard-code or other scripts with event from running Return true to allow hard code to run like normal Added new JS event that runs prior to onSnooped event, for character doing the snooping: onSnoopAttempt( snooped, snooper ) Return false or nothing to prevent hard code and other snooping-related events from running Return true to allow hard code and other snooping-related events to run like normal Updated onSnooped JS event to accept return values: Return true when success state is true to prevent other scripts with event from running Return true when success state is false to prevent hard code and other scripts with event from running Updated onClick JS event to also run for characters with event attached (return 1 to prevent showing hard-coded name for whatever object is clicked) Updated onSteal JS event to include a third parameter, an object reference for the target of the theft Added support for assigning multiple JS scripts per object (item, multi, char, region). Any time a scriptID is added to an object, the list of such IDs for that object will be sorted from lowest to highest scriptID, which also determines the execution order for the scripts. Note that if the same JS event is present in several scripts assigned to an object, each of those events will trigger, unless the rules about return values for said event prevent this DFNs for Items, Multis, Characters and Regions can now contain multiple SCRIPT=scriptID tags per definition. Each such SCRIPT tag will be applied to the object in question, then sorted from lowest to highest scriptID by server. Added new JS property for Items, Multis, Characters and Regions: .scriptTriggers // If used to get property, will return array object with all script IDs assigned to object. If used to set property, will add script ID to existing list of script IDs for object. Modified JS property for Items, Multis, Characters and Regions, which for backwards compatibility functions similar to in older versions: .scripttrigger // If used to get property, will return last script ID in list of script IDs assigned to object. If used to set property, will clear list of script IDs and assign only the new ID Added new JS Methods for Items, Multis, Characters and Regions: .AddScriptTrigger( scriptID ) // Adds a new scriptID to list of scripts assigned to object .RemoveScriptTrigger( scriptID ) // Remove a specific scriptID from object (0 = remove all) Moved SETSCPTRIG command from code to JS (js/commands/targeting/scptrig.js), and supplemented it with some additional commands: GETSCPTRIG // List out all scriptIDs assigned to object SETSCPTRIG scriptID // Clears list of scriptIDs for object, then assigns the specified scriptID ADDSCPTRIG scriptID // Adds specified scriptID to list of scriptsIDs assigned to object REMOVESCPTRIG scriptID // Removes specified scriptID from list of scriptIDs assigned to object (0 = remove all)
2021-05-25 19:37:52 +08:00
case CREGP_SCRIPTTRIGGER:
{
// For backwards compatibility; clears out other scripts and assigns a specific script
2022-10-24 23:42:16 +08:00
UI16 scriptId = static_cast<UI16>( encaps.toInt() );
cScript *toExecute = JSMapping->GetScript( scriptId );
2021-06-12 07:30:23 -04:00
if( toExecute == nullptr )
Minor JS revamp - multiple scripts per object! Added TryParseJSVal() helper function in cScript.cpp, used to parse jsval values returned from script events. Provides results matching 0 (0, false), 1 (1, true) or any specific int value returned from script. JS events updated to use new TryParseJSVal helper function (no change in behaviour): onDecay, onResurrect, onCommand, onBuyFromVendor, onSellToVendor, onPickup, onCharDoubleClick, onSkillGump, onUseBandageMacro, onCombatStart, onCombatEnd, onDeathBlow, onBuy, onSell JS events with slight change of behaviour after update to use TryParseJSVal: onDrop, onDropItemOnItem, onDropItemOnNpc - previously, a blank or non-existent return value would be treated the same as a return true. This will now be treated as a return false. Update scripts accordingly! JS events updated to support return values from scripts: onCollide, onTalk, onSnooped, OnHungerChange Return false or nothing to prevent hard code from running Return true to allow hard code to run like normal onStolenFrom, onAISliver, onLightChange, onVirtueGumpPress, onQuestGump, onSpecialMove, onSwing, onClick, onHouseCommand, onSellToVendor, onSkillCheck, onSpellGain, onSpellLoss Return false to allow hard code and other scripts with event to run like normal Return true to prevent hard code and other scripts with event from running onSteal Return false or nothing to allow hard code and other scripts with event to run like normal Return true to prevent hard code and onStolenFrom event from running (theft failed?) Return 2 to prevent hard code, but allow onStolenFrom event to run (theft succeeded, but handled in script?) onLeaving, onEntrance, onEquip, onUnequip, onEnterEvadeState, onSoldToVendor, onBoughtFromVendor, onSpellSuccess, onSpellTarget, onFlagChange, onDeath Return false or nothing to allow other scripts with event to run like normal Return true to prevent other scripts with event from running Added new JS events that run prior to items being equipped/unequipped, with support for return values: onEquipAttempt( pEquipper, iEquipping ) onUnequipAttempt( pEquipper, iUnequipping ) Return false or nothing to reject attempt to equip/unequip item, and prevent hard-code or other scripts with event from running Return true to allow hard code to run like normal Added new JS event that runs prior to onSnooped event, for character doing the snooping: onSnoopAttempt( snooped, snooper ) Return false or nothing to prevent hard code and other snooping-related events from running Return true to allow hard code and other snooping-related events to run like normal Updated onSnooped JS event to accept return values: Return true when success state is true to prevent other scripts with event from running Return true when success state is false to prevent hard code and other scripts with event from running Updated onClick JS event to also run for characters with event attached (return 1 to prevent showing hard-coded name for whatever object is clicked) Updated onSteal JS event to include a third parameter, an object reference for the target of the theft Added support for assigning multiple JS scripts per object (item, multi, char, region). Any time a scriptID is added to an object, the list of such IDs for that object will be sorted from lowest to highest scriptID, which also determines the execution order for the scripts. Note that if the same JS event is present in several scripts assigned to an object, each of those events will trigger, unless the rules about return values for said event prevent this DFNs for Items, Multis, Characters and Regions can now contain multiple SCRIPT=scriptID tags per definition. Each such SCRIPT tag will be applied to the object in question, then sorted from lowest to highest scriptID by server. Added new JS property for Items, Multis, Characters and Regions: .scriptTriggers // If used to get property, will return array object with all script IDs assigned to object. If used to set property, will add script ID to existing list of script IDs for object. Modified JS property for Items, Multis, Characters and Regions, which for backwards compatibility functions similar to in older versions: .scripttrigger // If used to get property, will return last script ID in list of script IDs assigned to object. If used to set property, will clear list of script IDs and assign only the new ID Added new JS Methods for Items, Multis, Characters and Regions: .AddScriptTrigger( scriptID ) // Adds a new scriptID to list of scripts assigned to object .RemoveScriptTrigger( scriptID ) // Remove a specific scriptID from object (0 = remove all) Moved SETSCPTRIG command from code to JS (js/commands/targeting/scptrig.js), and supplemented it with some additional commands: GETSCPTRIG // List out all scriptIDs assigned to object SETSCPTRIG scriptID // Clears list of scriptIDs for object, then assigns the specified scriptID ADDSCPTRIG scriptID // Adds specified scriptID to list of scriptsIDs assigned to object REMOVESCPTRIG scriptID // Removes specified scriptID from list of scriptIDs assigned to object (0 = remove all)
2021-05-25 19:37:52 +08:00
{
ScriptError( cx, oldstrutil::format( "Unable to assign script trigger - script ID (%i) not found in jse_fileassociations.scp!", scriptId ).c_str() );
Minor JS revamp - multiple scripts per object! Added TryParseJSVal() helper function in cScript.cpp, used to parse jsval values returned from script events. Provides results matching 0 (0, false), 1 (1, true) or any specific int value returned from script. JS events updated to use new TryParseJSVal helper function (no change in behaviour): onDecay, onResurrect, onCommand, onBuyFromVendor, onSellToVendor, onPickup, onCharDoubleClick, onSkillGump, onUseBandageMacro, onCombatStart, onCombatEnd, onDeathBlow, onBuy, onSell JS events with slight change of behaviour after update to use TryParseJSVal: onDrop, onDropItemOnItem, onDropItemOnNpc - previously, a blank or non-existent return value would be treated the same as a return true. This will now be treated as a return false. Update scripts accordingly! JS events updated to support return values from scripts: onCollide, onTalk, onSnooped, OnHungerChange Return false or nothing to prevent hard code from running Return true to allow hard code to run like normal onStolenFrom, onAISliver, onLightChange, onVirtueGumpPress, onQuestGump, onSpecialMove, onSwing, onClick, onHouseCommand, onSellToVendor, onSkillCheck, onSpellGain, onSpellLoss Return false to allow hard code and other scripts with event to run like normal Return true to prevent hard code and other scripts with event from running onSteal Return false or nothing to allow hard code and other scripts with event to run like normal Return true to prevent hard code and onStolenFrom event from running (theft failed?) Return 2 to prevent hard code, but allow onStolenFrom event to run (theft succeeded, but handled in script?) onLeaving, onEntrance, onEquip, onUnequip, onEnterEvadeState, onSoldToVendor, onBoughtFromVendor, onSpellSuccess, onSpellTarget, onFlagChange, onDeath Return false or nothing to allow other scripts with event to run like normal Return true to prevent other scripts with event from running Added new JS events that run prior to items being equipped/unequipped, with support for return values: onEquipAttempt( pEquipper, iEquipping ) onUnequipAttempt( pEquipper, iUnequipping ) Return false or nothing to reject attempt to equip/unequip item, and prevent hard-code or other scripts with event from running Return true to allow hard code to run like normal Added new JS event that runs prior to onSnooped event, for character doing the snooping: onSnoopAttempt( snooped, snooper ) Return false or nothing to prevent hard code and other snooping-related events from running Return true to allow hard code and other snooping-related events to run like normal Updated onSnooped JS event to accept return values: Return true when success state is true to prevent other scripts with event from running Return true when success state is false to prevent hard code and other scripts with event from running Updated onClick JS event to also run for characters with event attached (return 1 to prevent showing hard-coded name for whatever object is clicked) Updated onSteal JS event to include a third parameter, an object reference for the target of the theft Added support for assigning multiple JS scripts per object (item, multi, char, region). Any time a scriptID is added to an object, the list of such IDs for that object will be sorted from lowest to highest scriptID, which also determines the execution order for the scripts. Note that if the same JS event is present in several scripts assigned to an object, each of those events will trigger, unless the rules about return values for said event prevent this DFNs for Items, Multis, Characters and Regions can now contain multiple SCRIPT=scriptID tags per definition. Each such SCRIPT tag will be applied to the object in question, then sorted from lowest to highest scriptID by server. Added new JS property for Items, Multis, Characters and Regions: .scriptTriggers // If used to get property, will return array object with all script IDs assigned to object. If used to set property, will add script ID to existing list of script IDs for object. Modified JS property for Items, Multis, Characters and Regions, which for backwards compatibility functions similar to in older versions: .scripttrigger // If used to get property, will return last script ID in list of script IDs assigned to object. If used to set property, will clear list of script IDs and assign only the new ID Added new JS Methods for Items, Multis, Characters and Regions: .AddScriptTrigger( scriptID ) // Adds a new scriptID to list of scripts assigned to object .RemoveScriptTrigger( scriptID ) // Remove a specific scriptID from object (0 = remove all) Moved SETSCPTRIG command from code to JS (js/commands/targeting/scptrig.js), and supplemented it with some additional commands: GETSCPTRIG // List out all scriptIDs assigned to object SETSCPTRIG scriptID // Clears list of scriptIDs for object, then assigns the specified scriptID ADDSCPTRIG scriptID // Adds specified scriptID to list of scriptsIDs assigned to object REMOVESCPTRIG scriptID // Removes specified scriptID from list of scriptIDs assigned to object (0 = remove all)
2021-05-25 19:37:52 +08:00
}
else
{
gPriv->ClearScriptTriggers();
gPriv->AddScriptTrigger( scriptId );
Minor JS revamp - multiple scripts per object! Added TryParseJSVal() helper function in cScript.cpp, used to parse jsval values returned from script events. Provides results matching 0 (0, false), 1 (1, true) or any specific int value returned from script. JS events updated to use new TryParseJSVal helper function (no change in behaviour): onDecay, onResurrect, onCommand, onBuyFromVendor, onSellToVendor, onPickup, onCharDoubleClick, onSkillGump, onUseBandageMacro, onCombatStart, onCombatEnd, onDeathBlow, onBuy, onSell JS events with slight change of behaviour after update to use TryParseJSVal: onDrop, onDropItemOnItem, onDropItemOnNpc - previously, a blank or non-existent return value would be treated the same as a return true. This will now be treated as a return false. Update scripts accordingly! JS events updated to support return values from scripts: onCollide, onTalk, onSnooped, OnHungerChange Return false or nothing to prevent hard code from running Return true to allow hard code to run like normal onStolenFrom, onAISliver, onLightChange, onVirtueGumpPress, onQuestGump, onSpecialMove, onSwing, onClick, onHouseCommand, onSellToVendor, onSkillCheck, onSpellGain, onSpellLoss Return false to allow hard code and other scripts with event to run like normal Return true to prevent hard code and other scripts with event from running onSteal Return false or nothing to allow hard code and other scripts with event to run like normal Return true to prevent hard code and onStolenFrom event from running (theft failed?) Return 2 to prevent hard code, but allow onStolenFrom event to run (theft succeeded, but handled in script?) onLeaving, onEntrance, onEquip, onUnequip, onEnterEvadeState, onSoldToVendor, onBoughtFromVendor, onSpellSuccess, onSpellTarget, onFlagChange, onDeath Return false or nothing to allow other scripts with event to run like normal Return true to prevent other scripts with event from running Added new JS events that run prior to items being equipped/unequipped, with support for return values: onEquipAttempt( pEquipper, iEquipping ) onUnequipAttempt( pEquipper, iUnequipping ) Return false or nothing to reject attempt to equip/unequip item, and prevent hard-code or other scripts with event from running Return true to allow hard code to run like normal Added new JS event that runs prior to onSnooped event, for character doing the snooping: onSnoopAttempt( snooped, snooper ) Return false or nothing to prevent hard code and other snooping-related events from running Return true to allow hard code and other snooping-related events to run like normal Updated onSnooped JS event to accept return values: Return true when success state is true to prevent other scripts with event from running Return true when success state is false to prevent hard code and other scripts with event from running Updated onClick JS event to also run for characters with event attached (return 1 to prevent showing hard-coded name for whatever object is clicked) Updated onSteal JS event to include a third parameter, an object reference for the target of the theft Added support for assigning multiple JS scripts per object (item, multi, char, region). Any time a scriptID is added to an object, the list of such IDs for that object will be sorted from lowest to highest scriptID, which also determines the execution order for the scripts. Note that if the same JS event is present in several scripts assigned to an object, each of those events will trigger, unless the rules about return values for said event prevent this DFNs for Items, Multis, Characters and Regions can now contain multiple SCRIPT=scriptID tags per definition. Each such SCRIPT tag will be applied to the object in question, then sorted from lowest to highest scriptID by server. Added new JS property for Items, Multis, Characters and Regions: .scriptTriggers // If used to get property, will return array object with all script IDs assigned to object. If used to set property, will add script ID to existing list of script IDs for object. Modified JS property for Items, Multis, Characters and Regions, which for backwards compatibility functions similar to in older versions: .scripttrigger // If used to get property, will return last script ID in list of script IDs assigned to object. If used to set property, will clear list of script IDs and assign only the new ID Added new JS Methods for Items, Multis, Characters and Regions: .AddScriptTrigger( scriptID ) // Adds a new scriptID to list of scripts assigned to object .RemoveScriptTrigger( scriptID ) // Remove a specific scriptID from object (0 = remove all) Moved SETSCPTRIG command from code to JS (js/commands/targeting/scptrig.js), and supplemented it with some additional commands: GETSCPTRIG // List out all scriptIDs assigned to object SETSCPTRIG scriptID // Clears list of scriptIDs for object, then assigns the specified scriptID ADDSCPTRIG scriptID // Adds specified scriptID to list of scriptsIDs assigned to object REMOVESCPTRIG scriptID // Removes specified scriptID from list of scriptIDs assigned to object (0 = remove all)
2021-05-25 19:37:52 +08:00
}
break;
}
case CREGP_SCRIPTTRIGGERS:
{
if( *vp != JSVAL_NULL )
{
2022-10-24 23:42:16 +08:00
UI16 scriptId = static_cast<UI16>( encaps.toInt() );
cScript *toExecute = JSMapping->GetScript( scriptId );
2021-06-12 07:30:23 -04:00
if( toExecute == nullptr )
Minor JS revamp - multiple scripts per object! Added TryParseJSVal() helper function in cScript.cpp, used to parse jsval values returned from script events. Provides results matching 0 (0, false), 1 (1, true) or any specific int value returned from script. JS events updated to use new TryParseJSVal helper function (no change in behaviour): onDecay, onResurrect, onCommand, onBuyFromVendor, onSellToVendor, onPickup, onCharDoubleClick, onSkillGump, onUseBandageMacro, onCombatStart, onCombatEnd, onDeathBlow, onBuy, onSell JS events with slight change of behaviour after update to use TryParseJSVal: onDrop, onDropItemOnItem, onDropItemOnNpc - previously, a blank or non-existent return value would be treated the same as a return true. This will now be treated as a return false. Update scripts accordingly! JS events updated to support return values from scripts: onCollide, onTalk, onSnooped, OnHungerChange Return false or nothing to prevent hard code from running Return true to allow hard code to run like normal onStolenFrom, onAISliver, onLightChange, onVirtueGumpPress, onQuestGump, onSpecialMove, onSwing, onClick, onHouseCommand, onSellToVendor, onSkillCheck, onSpellGain, onSpellLoss Return false to allow hard code and other scripts with event to run like normal Return true to prevent hard code and other scripts with event from running onSteal Return false or nothing to allow hard code and other scripts with event to run like normal Return true to prevent hard code and onStolenFrom event from running (theft failed?) Return 2 to prevent hard code, but allow onStolenFrom event to run (theft succeeded, but handled in script?) onLeaving, onEntrance, onEquip, onUnequip, onEnterEvadeState, onSoldToVendor, onBoughtFromVendor, onSpellSuccess, onSpellTarget, onFlagChange, onDeath Return false or nothing to allow other scripts with event to run like normal Return true to prevent other scripts with event from running Added new JS events that run prior to items being equipped/unequipped, with support for return values: onEquipAttempt( pEquipper, iEquipping ) onUnequipAttempt( pEquipper, iUnequipping ) Return false or nothing to reject attempt to equip/unequip item, and prevent hard-code or other scripts with event from running Return true to allow hard code to run like normal Added new JS event that runs prior to onSnooped event, for character doing the snooping: onSnoopAttempt( snooped, snooper ) Return false or nothing to prevent hard code and other snooping-related events from running Return true to allow hard code and other snooping-related events to run like normal Updated onSnooped JS event to accept return values: Return true when success state is true to prevent other scripts with event from running Return true when success state is false to prevent hard code and other scripts with event from running Updated onClick JS event to also run for characters with event attached (return 1 to prevent showing hard-coded name for whatever object is clicked) Updated onSteal JS event to include a third parameter, an object reference for the target of the theft Added support for assigning multiple JS scripts per object (item, multi, char, region). Any time a scriptID is added to an object, the list of such IDs for that object will be sorted from lowest to highest scriptID, which also determines the execution order for the scripts. Note that if the same JS event is present in several scripts assigned to an object, each of those events will trigger, unless the rules about return values for said event prevent this DFNs for Items, Multis, Characters and Regions can now contain multiple SCRIPT=scriptID tags per definition. Each such SCRIPT tag will be applied to the object in question, then sorted from lowest to highest scriptID by server. Added new JS property for Items, Multis, Characters and Regions: .scriptTriggers // If used to get property, will return array object with all script IDs assigned to object. If used to set property, will add script ID to existing list of script IDs for object. Modified JS property for Items, Multis, Characters and Regions, which for backwards compatibility functions similar to in older versions: .scripttrigger // If used to get property, will return last script ID in list of script IDs assigned to object. If used to set property, will clear list of script IDs and assign only the new ID Added new JS Methods for Items, Multis, Characters and Regions: .AddScriptTrigger( scriptID ) // Adds a new scriptID to list of scripts assigned to object .RemoveScriptTrigger( scriptID ) // Remove a specific scriptID from object (0 = remove all) Moved SETSCPTRIG command from code to JS (js/commands/targeting/scptrig.js), and supplemented it with some additional commands: GETSCPTRIG // List out all scriptIDs assigned to object SETSCPTRIG scriptID // Clears list of scriptIDs for object, then assigns the specified scriptID ADDSCPTRIG scriptID // Adds specified scriptID to list of scriptsIDs assigned to object REMOVESCPTRIG scriptID // Removes specified scriptID from list of scriptIDs assigned to object (0 = remove all)
2021-05-25 19:37:52 +08:00
{
ScriptError( cx, oldstrutil::format( "Unable to assign script trigger - script ID (%i) not found in jse_fileassociations.scp!", scriptId ).c_str() );
Minor JS revamp - multiple scripts per object! Added TryParseJSVal() helper function in cScript.cpp, used to parse jsval values returned from script events. Provides results matching 0 (0, false), 1 (1, true) or any specific int value returned from script. JS events updated to use new TryParseJSVal helper function (no change in behaviour): onDecay, onResurrect, onCommand, onBuyFromVendor, onSellToVendor, onPickup, onCharDoubleClick, onSkillGump, onUseBandageMacro, onCombatStart, onCombatEnd, onDeathBlow, onBuy, onSell JS events with slight change of behaviour after update to use TryParseJSVal: onDrop, onDropItemOnItem, onDropItemOnNpc - previously, a blank or non-existent return value would be treated the same as a return true. This will now be treated as a return false. Update scripts accordingly! JS events updated to support return values from scripts: onCollide, onTalk, onSnooped, OnHungerChange Return false or nothing to prevent hard code from running Return true to allow hard code to run like normal onStolenFrom, onAISliver, onLightChange, onVirtueGumpPress, onQuestGump, onSpecialMove, onSwing, onClick, onHouseCommand, onSellToVendor, onSkillCheck, onSpellGain, onSpellLoss Return false to allow hard code and other scripts with event to run like normal Return true to prevent hard code and other scripts with event from running onSteal Return false or nothing to allow hard code and other scripts with event to run like normal Return true to prevent hard code and onStolenFrom event from running (theft failed?) Return 2 to prevent hard code, but allow onStolenFrom event to run (theft succeeded, but handled in script?) onLeaving, onEntrance, onEquip, onUnequip, onEnterEvadeState, onSoldToVendor, onBoughtFromVendor, onSpellSuccess, onSpellTarget, onFlagChange, onDeath Return false or nothing to allow other scripts with event to run like normal Return true to prevent other scripts with event from running Added new JS events that run prior to items being equipped/unequipped, with support for return values: onEquipAttempt( pEquipper, iEquipping ) onUnequipAttempt( pEquipper, iUnequipping ) Return false or nothing to reject attempt to equip/unequip item, and prevent hard-code or other scripts with event from running Return true to allow hard code to run like normal Added new JS event that runs prior to onSnooped event, for character doing the snooping: onSnoopAttempt( snooped, snooper ) Return false or nothing to prevent hard code and other snooping-related events from running Return true to allow hard code and other snooping-related events to run like normal Updated onSnooped JS event to accept return values: Return true when success state is true to prevent other scripts with event from running Return true when success state is false to prevent hard code and other scripts with event from running Updated onClick JS event to also run for characters with event attached (return 1 to prevent showing hard-coded name for whatever object is clicked) Updated onSteal JS event to include a third parameter, an object reference for the target of the theft Added support for assigning multiple JS scripts per object (item, multi, char, region). Any time a scriptID is added to an object, the list of such IDs for that object will be sorted from lowest to highest scriptID, which also determines the execution order for the scripts. Note that if the same JS event is present in several scripts assigned to an object, each of those events will trigger, unless the rules about return values for said event prevent this DFNs for Items, Multis, Characters and Regions can now contain multiple SCRIPT=scriptID tags per definition. Each such SCRIPT tag will be applied to the object in question, then sorted from lowest to highest scriptID by server. Added new JS property for Items, Multis, Characters and Regions: .scriptTriggers // If used to get property, will return array object with all script IDs assigned to object. If used to set property, will add script ID to existing list of script IDs for object. Modified JS property for Items, Multis, Characters and Regions, which for backwards compatibility functions similar to in older versions: .scripttrigger // If used to get property, will return last script ID in list of script IDs assigned to object. If used to set property, will clear list of script IDs and assign only the new ID Added new JS Methods for Items, Multis, Characters and Regions: .AddScriptTrigger( scriptID ) // Adds a new scriptID to list of scripts assigned to object .RemoveScriptTrigger( scriptID ) // Remove a specific scriptID from object (0 = remove all) Moved SETSCPTRIG command from code to JS (js/commands/targeting/scptrig.js), and supplemented it with some additional commands: GETSCPTRIG // List out all scriptIDs assigned to object SETSCPTRIG scriptID // Clears list of scriptIDs for object, then assigns the specified scriptID ADDSCPTRIG scriptID // Adds specified scriptID to list of scriptsIDs assigned to object REMOVESCPTRIG scriptID // Removes specified scriptID from list of scriptIDs assigned to object (0 = remove all)
2021-05-25 19:37:52 +08:00
}
else
{
gPriv->AddScriptTrigger( scriptId );
Minor JS revamp - multiple scripts per object! Added TryParseJSVal() helper function in cScript.cpp, used to parse jsval values returned from script events. Provides results matching 0 (0, false), 1 (1, true) or any specific int value returned from script. JS events updated to use new TryParseJSVal helper function (no change in behaviour): onDecay, onResurrect, onCommand, onBuyFromVendor, onSellToVendor, onPickup, onCharDoubleClick, onSkillGump, onUseBandageMacro, onCombatStart, onCombatEnd, onDeathBlow, onBuy, onSell JS events with slight change of behaviour after update to use TryParseJSVal: onDrop, onDropItemOnItem, onDropItemOnNpc - previously, a blank or non-existent return value would be treated the same as a return true. This will now be treated as a return false. Update scripts accordingly! JS events updated to support return values from scripts: onCollide, onTalk, onSnooped, OnHungerChange Return false or nothing to prevent hard code from running Return true to allow hard code to run like normal onStolenFrom, onAISliver, onLightChange, onVirtueGumpPress, onQuestGump, onSpecialMove, onSwing, onClick, onHouseCommand, onSellToVendor, onSkillCheck, onSpellGain, onSpellLoss Return false to allow hard code and other scripts with event to run like normal Return true to prevent hard code and other scripts with event from running onSteal Return false or nothing to allow hard code and other scripts with event to run like normal Return true to prevent hard code and onStolenFrom event from running (theft failed?) Return 2 to prevent hard code, but allow onStolenFrom event to run (theft succeeded, but handled in script?) onLeaving, onEntrance, onEquip, onUnequip, onEnterEvadeState, onSoldToVendor, onBoughtFromVendor, onSpellSuccess, onSpellTarget, onFlagChange, onDeath Return false or nothing to allow other scripts with event to run like normal Return true to prevent other scripts with event from running Added new JS events that run prior to items being equipped/unequipped, with support for return values: onEquipAttempt( pEquipper, iEquipping ) onUnequipAttempt( pEquipper, iUnequipping ) Return false or nothing to reject attempt to equip/unequip item, and prevent hard-code or other scripts with event from running Return true to allow hard code to run like normal Added new JS event that runs prior to onSnooped event, for character doing the snooping: onSnoopAttempt( snooped, snooper ) Return false or nothing to prevent hard code and other snooping-related events from running Return true to allow hard code and other snooping-related events to run like normal Updated onSnooped JS event to accept return values: Return true when success state is true to prevent other scripts with event from running Return true when success state is false to prevent hard code and other scripts with event from running Updated onClick JS event to also run for characters with event attached (return 1 to prevent showing hard-coded name for whatever object is clicked) Updated onSteal JS event to include a third parameter, an object reference for the target of the theft Added support for assigning multiple JS scripts per object (item, multi, char, region). Any time a scriptID is added to an object, the list of such IDs for that object will be sorted from lowest to highest scriptID, which also determines the execution order for the scripts. Note that if the same JS event is present in several scripts assigned to an object, each of those events will trigger, unless the rules about return values for said event prevent this DFNs for Items, Multis, Characters and Regions can now contain multiple SCRIPT=scriptID tags per definition. Each such SCRIPT tag will be applied to the object in question, then sorted from lowest to highest scriptID by server. Added new JS property for Items, Multis, Characters and Regions: .scriptTriggers // If used to get property, will return array object with all script IDs assigned to object. If used to set property, will add script ID to existing list of script IDs for object. Modified JS property for Items, Multis, Characters and Regions, which for backwards compatibility functions similar to in older versions: .scripttrigger // If used to get property, will return last script ID in list of script IDs assigned to object. If used to set property, will clear list of script IDs and assign only the new ID Added new JS Methods for Items, Multis, Characters and Regions: .AddScriptTrigger( scriptID ) // Adds a new scriptID to list of scripts assigned to object .RemoveScriptTrigger( scriptID ) // Remove a specific scriptID from object (0 = remove all) Moved SETSCPTRIG command from code to JS (js/commands/targeting/scptrig.js), and supplemented it with some additional commands: GETSCPTRIG // List out all scriptIDs assigned to object SETSCPTRIG scriptID // Clears list of scriptIDs for object, then assigns the specified scriptID ADDSCPTRIG scriptID // Adds specified scriptID to list of scriptsIDs assigned to object REMOVESCPTRIG scriptID // Removes specified scriptID from list of scriptIDs assigned to object (0 = remove all)
2021-05-25 19:37:52 +08:00
}
}
else
{
// If null value was provided, clear script triggers on object
gPriv->ClearScriptTriggers();
}
break;
}
case CREGP_TAXES: gPriv->SetTaxesLeft( static_cast<UI32>( encaps.toInt() )); break;
case CREGP_RESERVES: gPriv->SetReserves( static_cast<UI32>( encaps.toInt() )); break;
case CREGP_APPEARANCE: gPriv->SetAppearance( static_cast<WorldType>( encaps.toInt() )); break;
case CREGP_MUSIC: gPriv->SetMusicList( static_cast<UI16>( encaps.toInt() )); break;
case CREGP_WEATHER: gPriv->SetWeather( static_cast<WEATHID>( encaps.toInt() )); break;
case CREGP_WORLDNUMBER: gPriv->WorldNumber( static_cast<UI08>( encaps.toInt() )); break;
case CREGP_INSTANCEID: gPriv->SetInstanceId( static_cast<UI16>( encaps.toInt() )); break;
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
case CREGP_MEMBERS:
break;
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
default:
break;
}
}
UOX3 0.99.6-RC4 Fixed an issue that prevented onBuyFromVendor() and onBoughtFromVendor() JS Events from triggering when attached to NPC shopkeepers Fixed an issue with help gump that prevented password management section from working as intended (js/server/misc/helpgump.js) Fixed an issue where UOX3 would fail to load pre-HS multi.mul files Added chess board to Misc->Games add menu (dfndata/items/ItemMenu.bulk.dfn) Fixed an issue with 'move (alias for 'telestuff) command that referenced the wrong variable name (js/commands/targeting/tele.js) When a player is teleported via the GM 'wholist menu, any pets within range are now also brought along for the ride Consolidated error-reporting for JS Functions, Object Methods and Object Properties to provide more context (scriptID, filename, line number) when something goes wrong Added some missing shield IDs (0xA649, 0xA64A, 0xA831, 0xA832) to IsShieldType() function MAXRANGE item property previously only worked for ranged weapons; now it works for melee weapons too, and potentially allows melee weapons with combat range longer than 1 tile MAXRANGE item property can now be used to define max combat range for melee weapons Fixed an issue (non-critical) with .PlaceInPack() JS Method that would cause UOX3 to try adding items marked for deletion to refreshQueue and spam console with errors Added missing AI scripts to summoned Blade Spirits and Energy Vortexes (dfndata/npc/magicsummon.dfn) Fixed an issue with weight calculation for hireling backpacks (js/npc/ai/hireling.js) Fixed an issue with the 'fix command, which would in most cases set character's Z to -1 regardless of location, but now adheres to map elevation instead Fixed an issue with Pack AI (js/npc/ai/pack_ai.js) that prevented pack members from attacking target correctly (thanks Dragon Slayer) Fixed an issue with DoesMapBlock JS Function that incorrectly checked for 6 function arguments, when it actually requires 8 Fixed an issue with DoesDynamicBlock JS Function that incorrectly checked for 8 function arguments, when it actually requires 9 Fixed an issue with runebook script (js/item/runebook.js) that prevented players from being able to use recall charges without having spellbook with spell in inventory Fixed issues with placement of tall items on ground/floor, and with stacking of items in houses Fixed incorrect alias for woodland armor (dfndata/items/gear/armor/other/armor/wood.dfn - thanks Dragon Slayer) Fixed a critical issue with script context sometimes changing while executing a script, because of events in other scripts being triggered. Affected scripts can be safeguarded against this by the addition of a dummy callback function anywhere in the script: function _restorecontext_() {} Fixed an issue with non-animal pets not gaining loyalty when being fed (thanks Dragon Slayer) Added new JS Object Methods for Chars/Items/Multis to fetch list of custom tags associated with object: .GetTagMap() // Gets list of persistent custom tags associated with object .GetTempTagMap() // Gets list of temporary custom tags associated with object Added new JS commands ('GETTAGMAP and 'GETTEMPTAGMAP) that spits out details of custom tags associated with targeted object (js/commands/custom/misc-cmd.js) Added new JS command ('USEITEM) that acts as a short-cut for double-clicking on targeted item (js/commands/custom/misc-cmd.js) Updated 'ADD # and 'ADD ITEM # JS commands to support targeting a container directly and adding the new item inside (js/commands/targeting/add.js) Updated axe script to only perform lumberjacking skill-check when there's still wood available in a given area, and to play appropriate animations for Gargoyle players (js/item/axe.js) Updated script for gameboards to make generated pieces newbiefied so they won't appear on ground if board decays (js/item/gameboards.js) Updated script for stablemasters to avoid relying on global variables (js/npc/ai/stablemaster.js) Updated names of items crafted with runic hammers to include the material name of the hammers used to craft them (js/skill/craft/crafting_complete.js) Fixed a small issue with Detect Hidden skill that would return the wrong message if players found anyone hiding nearby (js/skill/detecthidden.js) Fixed an issue that prevented tile overrides in dfndata/maps/tiles.dfn from loading properly Added entries for a couple of walls with missing no-shoot flags to tile overrides in dfndata/maps/tiles.dfn Updated JS Method .SoundEffect() to support optional third argument (creatureSoundNum) to play creature-defined sounds from dfndata/creatures/creatures.dfn. New syntax: .SoundEffect( soundID, allHear[, creatureSoundNum] ) // 0=SOUND_STARTATTACK, 1=SOUND_IDLE, 2=SOUND_ATTACK, 3=SOUND_DEFEND, 4=SOUND_DIE Added new Character JS Methods: .SetRandomName( nameListID ) // apply a random name from specified namelist to character .FindItemSection( sectionID ) // find item in player's backpack with specified sectionID Added new Socket JS Method: .OpenContainer() // Opens specified container for socket
2023-05-30 01:47:26 +08:00
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
return JS_TRUE;
}
2025-03-28 13:23:59 +10:00
JSBool CSpawnRegionProps_getProperty( JSContext *cx, JSObject *obj, jsid id, jsval *vp )
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
{
CSpawnRegion *gPriv = static_cast<CSpawnRegion *>( JS_GetPrivate( cx, obj ));
Instance-support and misc code cleanup Misc code and documentation cleanup: Updated and standardized function comment blocks throughout entire codebase Grouped getters and setters together in pairs and documented them as one Removed empty and/or non-useful information from comment blocks Removed unused function from cItem.cpp/h - IncID() - formerly used to change IDs for doors Added new feature - Instances Objects (characters, items, multis, spawnregions) can now make use of a 5th parameter to determine their location in the game world. In addition to the traditional X, Y, Z and WORLDNUMBER parameters, a new one has been added - INSTANCEID - that allows objects to exist at the same coordinates in the same world, but in different "dimensions". Code has been updated in multiple places to support this, and a default instanceID of 0 is assumed if nothing else is specified. Added support for new DFN tag in town regions, spawn regions and locations - INSTANCEID (defaults to 0 if not present) Added support for another start location parameter after worldNum in UOX.INI representing instanceID (defaults to 0 if not present) Updated TWEAK menu to include WorldNumber and instanceID Fixed BaseWeight option in TWEAK menu Updated CBase_Teleport - now takes an optional 5th parameter instanceID Updated SE_SpawnNPC now takes an optional 5th parameter - instanceID Updated SE_FindMulti now takes an optional 5th parameter - instanceID Updated SE_GetItem now takes an optional 5th parameter - instanceID Updated SE_FindItem now takes an optional 6th parameter - instanceID Added new JS property for Items, Characters, Regions: .instanceID Added JS property for Regions: .members - returns comma-separated list of town member serials Updated JS scripts making use of the above-mentioned JS Methods/Functions Updated dictionaries with new tweak menu entry texts Exposed SpawnRegions to JS engine, and updated JS docs with details: SpawnRegion JS Functions IterateOverSpawnRegions() GetSpawnRegion( spawnRegNum ) GetSpawnRegionCount() SpawnRegion JS Properties name regionNum itemList npcList item npc maxItems maxNpcs itemCount npcCount onlyOutside prefZ x1 y1 x2 y2 world instanceID minTime maxTime call
2020-08-08 13:57:15 +08:00
2021-06-12 07:30:23 -04:00
if( gPriv == nullptr )
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
return JS_FALSE;
Instance-support and misc code cleanup Misc code and documentation cleanup: Updated and standardized function comment blocks throughout entire codebase Grouped getters and setters together in pairs and documented them as one Removed empty and/or non-useful information from comment blocks Removed unused function from cItem.cpp/h - IncID() - formerly used to change IDs for doors Added new feature - Instances Objects (characters, items, multis, spawnregions) can now make use of a 5th parameter to determine their location in the game world. In addition to the traditional X, Y, Z and WORLDNUMBER parameters, a new one has been added - INSTANCEID - that allows objects to exist at the same coordinates in the same world, but in different "dimensions". Code has been updated in multiple places to support this, and a default instanceID of 0 is assumed if nothing else is specified. Added support for new DFN tag in town regions, spawn regions and locations - INSTANCEID (defaults to 0 if not present) Added support for another start location parameter after worldNum in UOX.INI representing instanceID (defaults to 0 if not present) Updated TWEAK menu to include WorldNumber and instanceID Fixed BaseWeight option in TWEAK menu Updated CBase_Teleport - now takes an optional 5th parameter instanceID Updated SE_SpawnNPC now takes an optional 5th parameter - instanceID Updated SE_FindMulti now takes an optional 5th parameter - instanceID Updated SE_GetItem now takes an optional 5th parameter - instanceID Updated SE_FindItem now takes an optional 6th parameter - instanceID Added new JS property for Items, Characters, Regions: .instanceID Added JS property for Regions: .members - returns comma-separated list of town member serials Updated JS scripts making use of the above-mentioned JS Methods/Functions Updated dictionaries with new tweak menu entry texts Exposed SpawnRegions to JS engine, and updated JS docs with details: SpawnRegion JS Functions IterateOverSpawnRegions() GetSpawnRegion( spawnRegNum ) GetSpawnRegionCount() SpawnRegion JS Properties name regionNum itemList npcList item npc maxItems maxNpcs itemCount npcCount onlyOutside prefZ x1 y1 x2 y2 world instanceID minTime maxTime call
2020-08-08 13:57:15 +08:00
UI16 propID = getScriptID( cx, id, JSP_SPAWNREGION );
if( propID != 0xFFFF )
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
{
2021-06-12 07:30:23 -04:00
JSString *tString = nullptr;
switch( propID )
Instance-support and misc code cleanup Misc code and documentation cleanup: Updated and standardized function comment blocks throughout entire codebase Grouped getters and setters together in pairs and documented them as one Removed empty and/or non-useful information from comment blocks Removed unused function from cItem.cpp/h - IncID() - formerly used to change IDs for doors Added new feature - Instances Objects (characters, items, multis, spawnregions) can now make use of a 5th parameter to determine their location in the game world. In addition to the traditional X, Y, Z and WORLDNUMBER parameters, a new one has been added - INSTANCEID - that allows objects to exist at the same coordinates in the same world, but in different "dimensions". Code has been updated in multiple places to support this, and a default instanceID of 0 is assumed if nothing else is specified. Added support for new DFN tag in town regions, spawn regions and locations - INSTANCEID (defaults to 0 if not present) Added support for another start location parameter after worldNum in UOX.INI representing instanceID (defaults to 0 if not present) Updated TWEAK menu to include WorldNumber and instanceID Fixed BaseWeight option in TWEAK menu Updated CBase_Teleport - now takes an optional 5th parameter instanceID Updated SE_SpawnNPC now takes an optional 5th parameter - instanceID Updated SE_FindMulti now takes an optional 5th parameter - instanceID Updated SE_GetItem now takes an optional 5th parameter - instanceID Updated SE_FindItem now takes an optional 6th parameter - instanceID Added new JS property for Items, Characters, Regions: .instanceID Added JS property for Regions: .members - returns comma-separated list of town member serials Updated JS scripts making use of the above-mentioned JS Methods/Functions Updated dictionaries with new tweak menu entry texts Exposed SpawnRegions to JS engine, and updated JS docs with details: SpawnRegion JS Functions IterateOverSpawnRegions() GetSpawnRegion( spawnRegNum ) GetSpawnRegionCount() SpawnRegion JS Properties name regionNum itemList npcList item npc maxItems maxNpcs itemCount npcCount onlyOutside prefZ x1 y1 x2 y2 world instanceID minTime maxTime call
2020-08-08 13:57:15 +08:00
{
case CSPAWNREGP_NAME:
tString = JS_NewStringCopyZ( cx, gPriv->GetName().c_str() );
*vp = STRING_TO_JSVAL( tString );
break;
case CSPAWNREGP_REGIONNUM: *vp = INT_TO_JSVAL( gPriv->GetRegionNum() ); break;
Instance-support and misc code cleanup Misc code and documentation cleanup: Updated and standardized function comment blocks throughout entire codebase Grouped getters and setters together in pairs and documented them as one Removed empty and/or non-useful information from comment blocks Removed unused function from cItem.cpp/h - IncID() - formerly used to change IDs for doors Added new feature - Instances Objects (characters, items, multis, spawnregions) can now make use of a 5th parameter to determine their location in the game world. In addition to the traditional X, Y, Z and WORLDNUMBER parameters, a new one has been added - INSTANCEID - that allows objects to exist at the same coordinates in the same world, but in different "dimensions". Code has been updated in multiple places to support this, and a default instanceID of 0 is assumed if nothing else is specified. Added support for new DFN tag in town regions, spawn regions and locations - INSTANCEID (defaults to 0 if not present) Added support for another start location parameter after worldNum in UOX.INI representing instanceID (defaults to 0 if not present) Updated TWEAK menu to include WorldNumber and instanceID Fixed BaseWeight option in TWEAK menu Updated CBase_Teleport - now takes an optional 5th parameter instanceID Updated SE_SpawnNPC now takes an optional 5th parameter - instanceID Updated SE_FindMulti now takes an optional 5th parameter - instanceID Updated SE_GetItem now takes an optional 5th parameter - instanceID Updated SE_FindItem now takes an optional 6th parameter - instanceID Added new JS property for Items, Characters, Regions: .instanceID Added JS property for Regions: .members - returns comma-separated list of town member serials Updated JS scripts making use of the above-mentioned JS Methods/Functions Updated dictionaries with new tweak menu entry texts Exposed SpawnRegions to JS engine, and updated JS docs with details: SpawnRegion JS Functions IterateOverSpawnRegions() GetSpawnRegion( spawnRegNum ) GetSpawnRegionCount() SpawnRegion JS Properties name regionNum itemList npcList item npc maxItems maxNpcs itemCount npcCount onlyOutside prefZ x1 y1 x2 y2 world instanceID minTime maxTime call
2020-08-08 13:57:15 +08:00
case CSPAWNREGP_ITEM:
case CSPAWNREGP_ITEMLIST:
{
// This could potentially be a list of item ids - let's convert it to a comma-separated string!
auto itemList = gPriv->GetItem();
Instance-support and misc code cleanup Misc code and documentation cleanup: Updated and standardized function comment blocks throughout entire codebase Grouped getters and setters together in pairs and documented them as one Removed empty and/or non-useful information from comment blocks Removed unused function from cItem.cpp/h - IncID() - formerly used to change IDs for doors Added new feature - Instances Objects (characters, items, multis, spawnregions) can now make use of a 5th parameter to determine their location in the game world. In addition to the traditional X, Y, Z and WORLDNUMBER parameters, a new one has been added - INSTANCEID - that allows objects to exist at the same coordinates in the same world, but in different "dimensions". Code has been updated in multiple places to support this, and a default instanceID of 0 is assumed if nothing else is specified. Added support for new DFN tag in town regions, spawn regions and locations - INSTANCEID (defaults to 0 if not present) Added support for another start location parameter after worldNum in UOX.INI representing instanceID (defaults to 0 if not present) Updated TWEAK menu to include WorldNumber and instanceID Fixed BaseWeight option in TWEAK menu Updated CBase_Teleport - now takes an optional 5th parameter instanceID Updated SE_SpawnNPC now takes an optional 5th parameter - instanceID Updated SE_FindMulti now takes an optional 5th parameter - instanceID Updated SE_GetItem now takes an optional 5th parameter - instanceID Updated SE_FindItem now takes an optional 6th parameter - instanceID Added new JS property for Items, Characters, Regions: .instanceID Added JS property for Regions: .members - returns comma-separated list of town member serials Updated JS scripts making use of the above-mentioned JS Methods/Functions Updated dictionaries with new tweak menu entry texts Exposed SpawnRegions to JS engine, and updated JS docs with details: SpawnRegion JS Functions IterateOverSpawnRegions() GetSpawnRegion( spawnRegNum ) GetSpawnRegionCount() SpawnRegion JS Properties name regionNum itemList npcList item npc maxItems maxNpcs itemCount npcCount onlyOutside prefZ x1 y1 x2 y2 world instanceID minTime maxTime call
2020-08-08 13:57:15 +08:00
std::string s;
for( const auto &piece : itemList )
{
if( s.empty() )
{
Instance-support and misc code cleanup Misc code and documentation cleanup: Updated and standardized function comment blocks throughout entire codebase Grouped getters and setters together in pairs and documented them as one Removed empty and/or non-useful information from comment blocks Removed unused function from cItem.cpp/h - IncID() - formerly used to change IDs for doors Added new feature - Instances Objects (characters, items, multis, spawnregions) can now make use of a 5th parameter to determine their location in the game world. In addition to the traditional X, Y, Z and WORLDNUMBER parameters, a new one has been added - INSTANCEID - that allows objects to exist at the same coordinates in the same world, but in different "dimensions". Code has been updated in multiple places to support this, and a default instanceID of 0 is assumed if nothing else is specified. Added support for new DFN tag in town regions, spawn regions and locations - INSTANCEID (defaults to 0 if not present) Added support for another start location parameter after worldNum in UOX.INI representing instanceID (defaults to 0 if not present) Updated TWEAK menu to include WorldNumber and instanceID Fixed BaseWeight option in TWEAK menu Updated CBase_Teleport - now takes an optional 5th parameter instanceID Updated SE_SpawnNPC now takes an optional 5th parameter - instanceID Updated SE_FindMulti now takes an optional 5th parameter - instanceID Updated SE_GetItem now takes an optional 5th parameter - instanceID Updated SE_FindItem now takes an optional 6th parameter - instanceID Added new JS property for Items, Characters, Regions: .instanceID Added JS property for Regions: .members - returns comma-separated list of town member serials Updated JS scripts making use of the above-mentioned JS Methods/Functions Updated dictionaries with new tweak menu entry texts Exposed SpawnRegions to JS engine, and updated JS docs with details: SpawnRegion JS Functions IterateOverSpawnRegions() GetSpawnRegion( spawnRegNum ) GetSpawnRegionCount() SpawnRegion JS Properties name regionNum itemList npcList item npc maxItems maxNpcs itemCount npcCount onlyOutside prefZ x1 y1 x2 y2 world instanceID minTime maxTime call
2020-08-08 13:57:15 +08:00
s += piece;
}
Instance-support and misc code cleanup Misc code and documentation cleanup: Updated and standardized function comment blocks throughout entire codebase Grouped getters and setters together in pairs and documented them as one Removed empty and/or non-useful information from comment blocks Removed unused function from cItem.cpp/h - IncID() - formerly used to change IDs for doors Added new feature - Instances Objects (characters, items, multis, spawnregions) can now make use of a 5th parameter to determine their location in the game world. In addition to the traditional X, Y, Z and WORLDNUMBER parameters, a new one has been added - INSTANCEID - that allows objects to exist at the same coordinates in the same world, but in different "dimensions". Code has been updated in multiple places to support this, and a default instanceID of 0 is assumed if nothing else is specified. Added support for new DFN tag in town regions, spawn regions and locations - INSTANCEID (defaults to 0 if not present) Added support for another start location parameter after worldNum in UOX.INI representing instanceID (defaults to 0 if not present) Updated TWEAK menu to include WorldNumber and instanceID Fixed BaseWeight option in TWEAK menu Updated CBase_Teleport - now takes an optional 5th parameter instanceID Updated SE_SpawnNPC now takes an optional 5th parameter - instanceID Updated SE_FindMulti now takes an optional 5th parameter - instanceID Updated SE_GetItem now takes an optional 5th parameter - instanceID Updated SE_FindItem now takes an optional 6th parameter - instanceID Added new JS property for Items, Characters, Regions: .instanceID Added JS property for Regions: .members - returns comma-separated list of town member serials Updated JS scripts making use of the above-mentioned JS Methods/Functions Updated dictionaries with new tweak menu entry texts Exposed SpawnRegions to JS engine, and updated JS docs with details: SpawnRegion JS Functions IterateOverSpawnRegions() GetSpawnRegion( spawnRegNum ) GetSpawnRegionCount() SpawnRegion JS Properties name regionNum itemList npcList item npc maxItems maxNpcs itemCount npcCount onlyOutside prefZ x1 y1 x2 y2 world instanceID minTime maxTime call
2020-08-08 13:57:15 +08:00
else
{
Instance-support and misc code cleanup Misc code and documentation cleanup: Updated and standardized function comment blocks throughout entire codebase Grouped getters and setters together in pairs and documented them as one Removed empty and/or non-useful information from comment blocks Removed unused function from cItem.cpp/h - IncID() - formerly used to change IDs for doors Added new feature - Instances Objects (characters, items, multis, spawnregions) can now make use of a 5th parameter to determine their location in the game world. In addition to the traditional X, Y, Z and WORLDNUMBER parameters, a new one has been added - INSTANCEID - that allows objects to exist at the same coordinates in the same world, but in different "dimensions". Code has been updated in multiple places to support this, and a default instanceID of 0 is assumed if nothing else is specified. Added support for new DFN tag in town regions, spawn regions and locations - INSTANCEID (defaults to 0 if not present) Added support for another start location parameter after worldNum in UOX.INI representing instanceID (defaults to 0 if not present) Updated TWEAK menu to include WorldNumber and instanceID Fixed BaseWeight option in TWEAK menu Updated CBase_Teleport - now takes an optional 5th parameter instanceID Updated SE_SpawnNPC now takes an optional 5th parameter - instanceID Updated SE_FindMulti now takes an optional 5th parameter - instanceID Updated SE_GetItem now takes an optional 5th parameter - instanceID Updated SE_FindItem now takes an optional 6th parameter - instanceID Added new JS property for Items, Characters, Regions: .instanceID Added JS property for Regions: .members - returns comma-separated list of town member serials Updated JS scripts making use of the above-mentioned JS Methods/Functions Updated dictionaries with new tweak menu entry texts Exposed SpawnRegions to JS engine, and updated JS docs with details: SpawnRegion JS Functions IterateOverSpawnRegions() GetSpawnRegion( spawnRegNum ) GetSpawnRegionCount() SpawnRegion JS Properties name regionNum itemList npcList item npc maxItems maxNpcs itemCount npcCount onlyOutside prefZ x1 y1 x2 y2 world instanceID minTime maxTime call
2020-08-08 13:57:15 +08:00
s += ( "," + piece );
}
Instance-support and misc code cleanup Misc code and documentation cleanup: Updated and standardized function comment blocks throughout entire codebase Grouped getters and setters together in pairs and documented them as one Removed empty and/or non-useful information from comment blocks Removed unused function from cItem.cpp/h - IncID() - formerly used to change IDs for doors Added new feature - Instances Objects (characters, items, multis, spawnregions) can now make use of a 5th parameter to determine their location in the game world. In addition to the traditional X, Y, Z and WORLDNUMBER parameters, a new one has been added - INSTANCEID - that allows objects to exist at the same coordinates in the same world, but in different "dimensions". Code has been updated in multiple places to support this, and a default instanceID of 0 is assumed if nothing else is specified. Added support for new DFN tag in town regions, spawn regions and locations - INSTANCEID (defaults to 0 if not present) Added support for another start location parameter after worldNum in UOX.INI representing instanceID (defaults to 0 if not present) Updated TWEAK menu to include WorldNumber and instanceID Fixed BaseWeight option in TWEAK menu Updated CBase_Teleport - now takes an optional 5th parameter instanceID Updated SE_SpawnNPC now takes an optional 5th parameter - instanceID Updated SE_FindMulti now takes an optional 5th parameter - instanceID Updated SE_GetItem now takes an optional 5th parameter - instanceID Updated SE_FindItem now takes an optional 6th parameter - instanceID Added new JS property for Items, Characters, Regions: .instanceID Added JS property for Regions: .members - returns comma-separated list of town member serials Updated JS scripts making use of the above-mentioned JS Methods/Functions Updated dictionaries with new tweak menu entry texts Exposed SpawnRegions to JS engine, and updated JS docs with details: SpawnRegion JS Functions IterateOverSpawnRegions() GetSpawnRegion( spawnRegNum ) GetSpawnRegionCount() SpawnRegion JS Properties name regionNum itemList npcList item npc maxItems maxNpcs itemCount npcCount onlyOutside prefZ x1 y1 x2 y2 world instanceID minTime maxTime call
2020-08-08 13:57:15 +08:00
}
tString = JS_NewStringCopyZ( cx, s.c_str() );
*vp = STRING_TO_JSVAL( tString );
}
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
break;
Instance-support and misc code cleanup Misc code and documentation cleanup: Updated and standardized function comment blocks throughout entire codebase Grouped getters and setters together in pairs and documented them as one Removed empty and/or non-useful information from comment blocks Removed unused function from cItem.cpp/h - IncID() - formerly used to change IDs for doors Added new feature - Instances Objects (characters, items, multis, spawnregions) can now make use of a 5th parameter to determine their location in the game world. In addition to the traditional X, Y, Z and WORLDNUMBER parameters, a new one has been added - INSTANCEID - that allows objects to exist at the same coordinates in the same world, but in different "dimensions". Code has been updated in multiple places to support this, and a default instanceID of 0 is assumed if nothing else is specified. Added support for new DFN tag in town regions, spawn regions and locations - INSTANCEID (defaults to 0 if not present) Added support for another start location parameter after worldNum in UOX.INI representing instanceID (defaults to 0 if not present) Updated TWEAK menu to include WorldNumber and instanceID Fixed BaseWeight option in TWEAK menu Updated CBase_Teleport - now takes an optional 5th parameter instanceID Updated SE_SpawnNPC now takes an optional 5th parameter - instanceID Updated SE_FindMulti now takes an optional 5th parameter - instanceID Updated SE_GetItem now takes an optional 5th parameter - instanceID Updated SE_FindItem now takes an optional 6th parameter - instanceID Added new JS property for Items, Characters, Regions: .instanceID Added JS property for Regions: .members - returns comma-separated list of town member serials Updated JS scripts making use of the above-mentioned JS Methods/Functions Updated dictionaries with new tweak menu entry texts Exposed SpawnRegions to JS engine, and updated JS docs with details: SpawnRegion JS Functions IterateOverSpawnRegions() GetSpawnRegion( spawnRegNum ) GetSpawnRegionCount() SpawnRegion JS Properties name regionNum itemList npcList item npc maxItems maxNpcs itemCount npcCount onlyOutside prefZ x1 y1 x2 y2 world instanceID minTime maxTime call
2020-08-08 13:57:15 +08:00
case CSPAWNREGP_NPC:
case CSPAWNREGP_NPCLIST:
{
// This could potentially be a list of NPC ids - let's convert it to a comma-separated string!
auto npcList = gPriv->GetNPC();
Instance-support and misc code cleanup Misc code and documentation cleanup: Updated and standardized function comment blocks throughout entire codebase Grouped getters and setters together in pairs and documented them as one Removed empty and/or non-useful information from comment blocks Removed unused function from cItem.cpp/h - IncID() - formerly used to change IDs for doors Added new feature - Instances Objects (characters, items, multis, spawnregions) can now make use of a 5th parameter to determine their location in the game world. In addition to the traditional X, Y, Z and WORLDNUMBER parameters, a new one has been added - INSTANCEID - that allows objects to exist at the same coordinates in the same world, but in different "dimensions". Code has been updated in multiple places to support this, and a default instanceID of 0 is assumed if nothing else is specified. Added support for new DFN tag in town regions, spawn regions and locations - INSTANCEID (defaults to 0 if not present) Added support for another start location parameter after worldNum in UOX.INI representing instanceID (defaults to 0 if not present) Updated TWEAK menu to include WorldNumber and instanceID Fixed BaseWeight option in TWEAK menu Updated CBase_Teleport - now takes an optional 5th parameter instanceID Updated SE_SpawnNPC now takes an optional 5th parameter - instanceID Updated SE_FindMulti now takes an optional 5th parameter - instanceID Updated SE_GetItem now takes an optional 5th parameter - instanceID Updated SE_FindItem now takes an optional 6th parameter - instanceID Added new JS property for Items, Characters, Regions: .instanceID Added JS property for Regions: .members - returns comma-separated list of town member serials Updated JS scripts making use of the above-mentioned JS Methods/Functions Updated dictionaries with new tweak menu entry texts Exposed SpawnRegions to JS engine, and updated JS docs with details: SpawnRegion JS Functions IterateOverSpawnRegions() GetSpawnRegion( spawnRegNum ) GetSpawnRegionCount() SpawnRegion JS Properties name regionNum itemList npcList item npc maxItems maxNpcs itemCount npcCount onlyOutside prefZ x1 y1 x2 y2 world instanceID minTime maxTime call
2020-08-08 13:57:15 +08:00
std::string s;
for( const auto &piece : npcList )
{
if( s.empty() )
{
Instance-support and misc code cleanup Misc code and documentation cleanup: Updated and standardized function comment blocks throughout entire codebase Grouped getters and setters together in pairs and documented them as one Removed empty and/or non-useful information from comment blocks Removed unused function from cItem.cpp/h - IncID() - formerly used to change IDs for doors Added new feature - Instances Objects (characters, items, multis, spawnregions) can now make use of a 5th parameter to determine their location in the game world. In addition to the traditional X, Y, Z and WORLDNUMBER parameters, a new one has been added - INSTANCEID - that allows objects to exist at the same coordinates in the same world, but in different "dimensions". Code has been updated in multiple places to support this, and a default instanceID of 0 is assumed if nothing else is specified. Added support for new DFN tag in town regions, spawn regions and locations - INSTANCEID (defaults to 0 if not present) Added support for another start location parameter after worldNum in UOX.INI representing instanceID (defaults to 0 if not present) Updated TWEAK menu to include WorldNumber and instanceID Fixed BaseWeight option in TWEAK menu Updated CBase_Teleport - now takes an optional 5th parameter instanceID Updated SE_SpawnNPC now takes an optional 5th parameter - instanceID Updated SE_FindMulti now takes an optional 5th parameter - instanceID Updated SE_GetItem now takes an optional 5th parameter - instanceID Updated SE_FindItem now takes an optional 6th parameter - instanceID Added new JS property for Items, Characters, Regions: .instanceID Added JS property for Regions: .members - returns comma-separated list of town member serials Updated JS scripts making use of the above-mentioned JS Methods/Functions Updated dictionaries with new tweak menu entry texts Exposed SpawnRegions to JS engine, and updated JS docs with details: SpawnRegion JS Functions IterateOverSpawnRegions() GetSpawnRegion( spawnRegNum ) GetSpawnRegionCount() SpawnRegion JS Properties name regionNum itemList npcList item npc maxItems maxNpcs itemCount npcCount onlyOutside prefZ x1 y1 x2 y2 world instanceID minTime maxTime call
2020-08-08 13:57:15 +08:00
s += piece;
}
Instance-support and misc code cleanup Misc code and documentation cleanup: Updated and standardized function comment blocks throughout entire codebase Grouped getters and setters together in pairs and documented them as one Removed empty and/or non-useful information from comment blocks Removed unused function from cItem.cpp/h - IncID() - formerly used to change IDs for doors Added new feature - Instances Objects (characters, items, multis, spawnregions) can now make use of a 5th parameter to determine their location in the game world. In addition to the traditional X, Y, Z and WORLDNUMBER parameters, a new one has been added - INSTANCEID - that allows objects to exist at the same coordinates in the same world, but in different "dimensions". Code has been updated in multiple places to support this, and a default instanceID of 0 is assumed if nothing else is specified. Added support for new DFN tag in town regions, spawn regions and locations - INSTANCEID (defaults to 0 if not present) Added support for another start location parameter after worldNum in UOX.INI representing instanceID (defaults to 0 if not present) Updated TWEAK menu to include WorldNumber and instanceID Fixed BaseWeight option in TWEAK menu Updated CBase_Teleport - now takes an optional 5th parameter instanceID Updated SE_SpawnNPC now takes an optional 5th parameter - instanceID Updated SE_FindMulti now takes an optional 5th parameter - instanceID Updated SE_GetItem now takes an optional 5th parameter - instanceID Updated SE_FindItem now takes an optional 6th parameter - instanceID Added new JS property for Items, Characters, Regions: .instanceID Added JS property for Regions: .members - returns comma-separated list of town member serials Updated JS scripts making use of the above-mentioned JS Methods/Functions Updated dictionaries with new tweak menu entry texts Exposed SpawnRegions to JS engine, and updated JS docs with details: SpawnRegion JS Functions IterateOverSpawnRegions() GetSpawnRegion( spawnRegNum ) GetSpawnRegionCount() SpawnRegion JS Properties name regionNum itemList npcList item npc maxItems maxNpcs itemCount npcCount onlyOutside prefZ x1 y1 x2 y2 world instanceID minTime maxTime call
2020-08-08 13:57:15 +08:00
else
{
Instance-support and misc code cleanup Misc code and documentation cleanup: Updated and standardized function comment blocks throughout entire codebase Grouped getters and setters together in pairs and documented them as one Removed empty and/or non-useful information from comment blocks Removed unused function from cItem.cpp/h - IncID() - formerly used to change IDs for doors Added new feature - Instances Objects (characters, items, multis, spawnregions) can now make use of a 5th parameter to determine their location in the game world. In addition to the traditional X, Y, Z and WORLDNUMBER parameters, a new one has been added - INSTANCEID - that allows objects to exist at the same coordinates in the same world, but in different "dimensions". Code has been updated in multiple places to support this, and a default instanceID of 0 is assumed if nothing else is specified. Added support for new DFN tag in town regions, spawn regions and locations - INSTANCEID (defaults to 0 if not present) Added support for another start location parameter after worldNum in UOX.INI representing instanceID (defaults to 0 if not present) Updated TWEAK menu to include WorldNumber and instanceID Fixed BaseWeight option in TWEAK menu Updated CBase_Teleport - now takes an optional 5th parameter instanceID Updated SE_SpawnNPC now takes an optional 5th parameter - instanceID Updated SE_FindMulti now takes an optional 5th parameter - instanceID Updated SE_GetItem now takes an optional 5th parameter - instanceID Updated SE_FindItem now takes an optional 6th parameter - instanceID Added new JS property for Items, Characters, Regions: .instanceID Added JS property for Regions: .members - returns comma-separated list of town member serials Updated JS scripts making use of the above-mentioned JS Methods/Functions Updated dictionaries with new tweak menu entry texts Exposed SpawnRegions to JS engine, and updated JS docs with details: SpawnRegion JS Functions IterateOverSpawnRegions() GetSpawnRegion( spawnRegNum ) GetSpawnRegionCount() SpawnRegion JS Properties name regionNum itemList npcList item npc maxItems maxNpcs itemCount npcCount onlyOutside prefZ x1 y1 x2 y2 world instanceID minTime maxTime call
2020-08-08 13:57:15 +08:00
s += ( "," + piece );
}
Instance-support and misc code cleanup Misc code and documentation cleanup: Updated and standardized function comment blocks throughout entire codebase Grouped getters and setters together in pairs and documented them as one Removed empty and/or non-useful information from comment blocks Removed unused function from cItem.cpp/h - IncID() - formerly used to change IDs for doors Added new feature - Instances Objects (characters, items, multis, spawnregions) can now make use of a 5th parameter to determine their location in the game world. In addition to the traditional X, Y, Z and WORLDNUMBER parameters, a new one has been added - INSTANCEID - that allows objects to exist at the same coordinates in the same world, but in different "dimensions". Code has been updated in multiple places to support this, and a default instanceID of 0 is assumed if nothing else is specified. Added support for new DFN tag in town regions, spawn regions and locations - INSTANCEID (defaults to 0 if not present) Added support for another start location parameter after worldNum in UOX.INI representing instanceID (defaults to 0 if not present) Updated TWEAK menu to include WorldNumber and instanceID Fixed BaseWeight option in TWEAK menu Updated CBase_Teleport - now takes an optional 5th parameter instanceID Updated SE_SpawnNPC now takes an optional 5th parameter - instanceID Updated SE_FindMulti now takes an optional 5th parameter - instanceID Updated SE_GetItem now takes an optional 5th parameter - instanceID Updated SE_FindItem now takes an optional 6th parameter - instanceID Added new JS property for Items, Characters, Regions: .instanceID Added JS property for Regions: .members - returns comma-separated list of town member serials Updated JS scripts making use of the above-mentioned JS Methods/Functions Updated dictionaries with new tweak menu entry texts Exposed SpawnRegions to JS engine, and updated JS docs with details: SpawnRegion JS Functions IterateOverSpawnRegions() GetSpawnRegion( spawnRegNum ) GetSpawnRegionCount() SpawnRegion JS Properties name regionNum itemList npcList item npc maxItems maxNpcs itemCount npcCount onlyOutside prefZ x1 y1 x2 y2 world instanceID minTime maxTime call
2020-08-08 13:57:15 +08:00
}
tString = JS_NewStringCopyZ( cx, s.c_str() );
*vp = STRING_TO_JSVAL( tString );
}
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
break;
Instance-support and misc code cleanup Misc code and documentation cleanup: Updated and standardized function comment blocks throughout entire codebase Grouped getters and setters together in pairs and documented them as one Removed empty and/or non-useful information from comment blocks Removed unused function from cItem.cpp/h - IncID() - formerly used to change IDs for doors Added new feature - Instances Objects (characters, items, multis, spawnregions) can now make use of a 5th parameter to determine their location in the game world. In addition to the traditional X, Y, Z and WORLDNUMBER parameters, a new one has been added - INSTANCEID - that allows objects to exist at the same coordinates in the same world, but in different "dimensions". Code has been updated in multiple places to support this, and a default instanceID of 0 is assumed if nothing else is specified. Added support for new DFN tag in town regions, spawn regions and locations - INSTANCEID (defaults to 0 if not present) Added support for another start location parameter after worldNum in UOX.INI representing instanceID (defaults to 0 if not present) Updated TWEAK menu to include WorldNumber and instanceID Fixed BaseWeight option in TWEAK menu Updated CBase_Teleport - now takes an optional 5th parameter instanceID Updated SE_SpawnNPC now takes an optional 5th parameter - instanceID Updated SE_FindMulti now takes an optional 5th parameter - instanceID Updated SE_GetItem now takes an optional 5th parameter - instanceID Updated SE_FindItem now takes an optional 6th parameter - instanceID Added new JS property for Items, Characters, Regions: .instanceID Added JS property for Regions: .members - returns comma-separated list of town member serials Updated JS scripts making use of the above-mentioned JS Methods/Functions Updated dictionaries with new tweak menu entry texts Exposed SpawnRegions to JS engine, and updated JS docs with details: SpawnRegion JS Functions IterateOverSpawnRegions() GetSpawnRegion( spawnRegNum ) GetSpawnRegionCount() SpawnRegion JS Properties name regionNum itemList npcList item npc maxItems maxNpcs itemCount npcCount onlyOutside prefZ x1 y1 x2 y2 world instanceID minTime maxTime call
2020-08-08 13:57:15 +08:00
case CSPAWNREGP_ITEMCOUNT: *vp = INT_TO_JSVAL( gPriv->GetCurrentItemAmt() ); break;
case CSPAWNREGP_NPCCOUNT: *vp = INT_TO_JSVAL( gPriv->GetCurrentCharAmt() ); break;
case CSPAWNREGP_MAXITEMS: *vp = INT_TO_JSVAL( gPriv->GetMaxItemSpawn() ); break;
case CSPAWNREGP_MAXNPCS: *vp = INT_TO_JSVAL( gPriv->GetMaxCharSpawn() ); break;
case CSPAWNREGP_MINTIME: *vp = INT_TO_JSVAL( gPriv->GetMinTime() ); break;
case CSPAWNREGP_MAXTIME: *vp = INT_TO_JSVAL( gPriv->GetMaxTime() ); break;
case CSPAWNREGP_ONLYOUTSIDE: *vp = BOOLEAN_TO_JSVAL( gPriv->GetOnlyOutside() ); break;
0.99.4z+++ Added new JS Item Methods to get/set the value (0-255) for specific parts (1-4) of temp variables ("more", "morex", "morey", "morez"): .GetMoreVar( moreVarName, moreVarPart ) .SetMoreVar( moreVarName, moreVarPart, moreVarValue ) Updated Remove Trap script (js/skill/removetrap.js) to make use of GetMoreVar() and SetMoreVar methods Updated inRange JS event to also trigger for Items with this event attached, when player characters come within update range. Updated syntax: inRange( srcItem, pCharInRange ) inRange( srcChar, objInRange ) When UOX3 retrieves data from the onToolTip() JS event to potentially display custom object tooltips, it will use the ID specified in a temporary JS tag ("tooltipCliloc") on the object as the clilocID being sent to the client with the tooltip text returned from the script. If no such tag exists on the object, it defaults to cliloc ID 1042971. Added new JS event that triggers _after_ an item has been removed from a container (no return values supported): onContRemoveItem( iCont, objRemoved, pChar ) The JS Function SpawnNPC() can now spawn NPCs from NPCLISTS if provided with a boolean parameter flag (useNpcList). Updated syntax: CChar SpawnNPC( npcSection/npclist, x, y, z, worldnumber, instanceID, useNpcList ) Added new JS Event to allow detection of movement near an object (items only, for now). Distance at which it triggers determined by part 1 of the item's MORE property. Use long ranges with care! Syntax: onMoveDetect( srcObj, pChar, rangeToChar, oldCharX, oldCharY ) Added new JS script (js/server/misc/dungeon_traps.js) for handling trap mechanics in (primarily) dungeons. The traps all trigger on collision, and use different parts of the "morez" property to determine enabled/disabled status, damage, min skill required to disarm, max skill at which player can still gain skill from disarming. Disarming renders trap inactive for 60 seconds. Implemented trap types: Spike Traps // Active for ~5 seconds after triggered, deals damage every 1 second. Giant Spike Trap // Active for ~1 second after triggered, deals high instant damage one time Saw Traps // Active for ~5 seconds after triggered, deals damage every 1 second. Gas Traps // Active for ~5 seconds after triggered, applies poison to target every 1 second Fire Column Trap // Active for ~5 seconds after triggered, deals damage every 1 second after initial delay of 1 second Stone Face Traps // Active for ~3 seconds after triggered, deals damage every 1 second after initial delay of 1 second Mushroom Trap // Active for ~2 seconds after triggered, applies poison to target every 1 second after an initial delay of 1 second Added dungeon traps to 'add menu, under Buildings > Decs > Dungeon Traps Added new commands to make modifying IDs of items (and NPCs) easier: 'incid # // Increment/decrement ID of target by specified amount 'rincid # // Repeatedly increment/decrement ID of target/multiple targets by specified amount Updated 'add and 'radd commands with new, optional syntax to make adding trees easier (potentially with GM tools/macros), as it will add both trunk and leaf at same location with a single command: 'add tree [trunkID] [leafID] 'radd tree [trunkID] [leafID] Updated AreaCommand GM command to include support for setting the .decayable property on multiple items at once. Also updated the script with appropriate system messages throughout, which now also show how many items were affected by use of the command Added new item script (js/item/gate_opener.js) that can be used to make switches/levers raise/lower multiple nearby gates. See script comments for details on setup Updated various JS scripts that used GetSByte() to retrieve Z of last targeted location from Socket to manually add height of targeted tile for client version below 7.0.9 only Fixed an issue where items created with 'decorate load command could be set as decayable Fixed an issue where multiple timers could be running on a single door by manually opening and closing it repeatedly. Closing a door will now kill the associated timer on said door. Fixed incorrect IDs for secret doors in Item DFNs (they were off by 1, so would not work properly) Updated name of all secret doors in dfndata/items/building/doors.dfn to inherit name from tiledata instead Added secret door IDs to dfndata/harditems/harditems.dfn Item and NPC definitions can now make use of randomization for the ID tag, for more variety. Syntax: id=[id1] [id2] [etc] // Example: id=0x0e42 0x0e43 Fixed MORE values of "hard scripted" books in dfndata/items/misc/books.dfn Added Ice and Fire dungeon locations (dfndata/location/location.dfn) and added these to the GM travel menu (dfndata/item/travelmenu.dfn/travelmenu.bulk.dfn) Fixed body ID for ancient wyrm NPCs, which also fixes their name (dfndata/npc/dragons.dfn) Added more pre-defined books to dfndata/misc/books.dfn (and dfndata/items/misc/books.dfn): Quest of the Virtues – Volume 1 // [quest_of_the_virtues_vol1] Fropoz's Journal // [fropoz_journal] Translated Gargoyle Journal // [translated_gargoyle_journal] Kabur's Journal // [kaburs_journal] Updated code for spawn containers to allow spawning more than one item per container; by default, a spawn container will now spawn every item from an itemlist if set as the spawnobjlist property for that spawn container. These itemlists can contain direct item references, references to other itemlists or even lootlists Added 4 levels of dungeon treasure chests that can be placed out as spawn objects in dungeons, with items and valuables spawning inside on a regular interval. These can be found in dfndata/items/gmmenu/dungeon_treasure_spawners.dfn, with associated itemlists being found in dfndata/items/itemlists/itemlists.dfn (dungeontreasureloot1, dungeontreasureloot2, dungeontreasureloot3 and dungeontreasureloot4). They can also be located in the 'add menu under GM Menu > Dungeon Treasures Added spawn regions for dungeon treasure chests in the following areas: Covetous, Deceit, Despise, Destard, Fire, Hythloth, Ice, Shame, Wrong, Yew Crypts, Daemon Temple, Trinsic Passage, Cove Orc Fort, Terathan Keep, Vesper Bank, Trinsic Bank Updated Lockpicking skill to check for the existence of skill difficulty on locks, and use those to perform skill checks when attempting to pick those locks. Difficulty on a lock can be setup using the morey property using this syntax: morey=[0x00] [0x00/0x01] [0x##] [0x##] // the first part is unused, the second is used with Unlock spell, the third and fourth are the minimum skill to unlock and the max skill that can be gained from picking the lock Updated Unlock spell to check for existence of morey property value on lock. If there's a value, and the second part of the value is not 0x01, Unlock cannot be used to unlock the lock. By default, dungeon treasure containers level 1 and 2 are unlockable with the Unlock spell, while levels 3 and 4 are not, and require Lockpicking skill to unlock. Fixed an issue where player characters would "skip a step" when moving under certain circumstances (like coming out of hiding) Added new decorations in default world templates for the following areas: Covetous, Deceit, Despise, Destard, Fire, Hythloth, Ice, Shame, Wrong, Hedge Maze, Wind (city), Terathan Keep, Orc Caves, Ilshenar facet, Ilshenar dungeons Updated decorations in default world templates for the following areas: All cities in Britannia and the Lost Lands Updated decorations in default world templates to address issues like missing water/swamp tiles, floor/roof tiles, etc. in various places Added special behaviours in some areas: Lever puzzle in Covetous Monster-spawning brazier in Deceit Switch/portcullis behaviour in Hedge Maze Updated teleport.scp with teleport locations for: Hedge maze, Hythloth lvl 2 teleport maze, Wrong dungeon, Buccaneer's Den to/from mainland, various Ilshenar teleport locations Players flagged as criminals or non-innocent aggressors in PvP combat can no longer use public moongates Pets will now teleport along with the player both when using moongates (public or spell-based), recall, object-based teleporters or hard-defined teleport locations from teleport.scp
2021-11-26 02:19:03 +08:00
case CSPAWNREGP_ISSPAWNER: *vp = BOOLEAN_TO_JSVAL( gPriv->IsSpawner() ); break;
Small update Fixed an issue with an internal movement check that prevented characters from moving in valid map areas in Felucca/Trammel from X 6144 to X 7168 Fixed an issue where .instanceID property was misspelled in 'xgo GM command script, causing characters to be teleported to an out of bounds area where they would no longer be saved (js/commands/targeting/x.js) Added some additional error-checking to .Teleport()/.SetLocation() JS Method to prevent script-accidents from sending characters out of bounds. Updated Poisoning skill to add poison-charges to weapons being poisoned. Charges are consumed when applying poison in combat (js/skill/poisoning.js) Updated combat code to consume poison-charges if a poisoned weapon is used to poison an opponent Updated shoplists for Blacksmiths and Weaponsmiths - they now buy/sell longswords (dfndata/items/shoplist.dfn) Updated MageShopping shoplist for mage vendors - they now buy/sell mass curse scrolls (dfndata/items/shoplist.dfn) Added new Spawn Region DFN tag that can specify which era or eras of UO (Multiple comma-separated entries supported) a given spawn region is valid for. Spawn region not valid for core shard era will be ignored. Syntax: ERAS=UO,T2A,UOR,LBR,AOS,SE,ML,SA,HS,TOL Added new Spawn Region DFN tag that allows using another spawn region as a "parent". All properties of this parent will be inherited except for these, which are ignored: ERAS, NPCLIST, ITEMLIST, NPC and ITEM. Syntax for new tag: GET=# // Inherit a specified spawn region Added spawn region for animal trainer vendor in Vesper stable Added spawn region for fur trader/tanner vendors in The Best Hides of Britain Added spawn region for spinner vendor in The Lord's Clothier's and The Right Fit shops in Britain Added spawn region for tanner NPC to Nujel'm Tannery (and fixed leatherworker spawn region for same area) Added spawn regions for banker NPCs in East Bank of Britain, First Bank of Moonglow, Jhelom Bank and Jeweler, Bank of Skara Brae Added spawn regions for stables, tailor and blacksmith inside Castle British Added spawn regions for mage shops, mage guilds and farm houses in Moonglow Added spawn regions for misc vendors and townfolk in multiple cities Added spawn regions for Fire Island Updated spawn regions for Dagger Isle/Ice Island Added spawn regions for forests and jungles in southern Britannia and on various islands including Bucc's Den, Moonglow, Serpent's Hold, and misc unpopulated islands Added spawn regions for area east of Skara Brae, around Hedge Maze and south of Britain Added spawn regions for wandering healers outside every dungeon entrance in Britannia and Lost Lands Re-integrated ocean spawn regions for ocean creatures (dolphin, walrus, water elemental, sea serpent) from the original community-based spawn file Added reagent spawns in overworld spawn regions in Britannia/Lost Lands Added special reagent spawns in swamp areas Added additional overworld spawn regions in Britannia/Lost Lands Added spawn regions for Khaldun dungeon that spawn some new and some old NPCs: Old: Zombies, skeletons, skeletal mages, skeletal knights, ancient liches New: Cursed (and named) NPCs, shadowfiends, zealots of khaldun (knights/summoners), tentacles of the harrower Updated size and positions of some existing overworld spawn regions Fixed incorrect spawn region size for small island south of Trinsic Added switch/door puzzle functionality in Khaldun dungeon using new switch/door combo script (js/item/dungeons/switch_door_combo.js) Added "smart objects" in Khaldun dungeon that activate when you come close enough (js/item/dungeons/smart_activate_item.js) Added teleport locations within Khaldun dungeon (js/teleport.scp) Added custom AIs to existing NPC spawning in Khaldun dungeon: Ancient Lich (summons other undead, and can turn into one of them for disguise) Added DFN entries for new NPCs spawning in Khaldun dungeon, some with custom AIs: [tentacles_of_the_harrower] -> Tentacles of the Harrower (life steal) [shadowfiend] -> Shadowfiends (seek out and reveal hidden players) [zealot_knight]/[zealot_summoner] -> Zealots of Khaldun (turn into undead on death, male/female variants) [cursed] -> Cursed (male/female variants) [spectralarmor] -> Spectral Armor Added DFN entries for new (named) NPCs spawning in Khaldun dungeon: [lysander_gathenwale] -> Lysander Gathenwale [grimmoch_drummel] -> Grimmoch Drummel [morg_bergen] -> Morg Bergen [tavara_sewel] -> Tavara Sewel Added new NPC DFN entries: [leatherworker] -> alias for male/female leatherworker vendors [mapmaker] -> alias for male/female mapmaker vendors Added new Race DFN entries: [RACE 29] -> Cursed (enemies of RACE 30) [RACE 30] -> Zealots (enemies of RACE 29) Added new book DFN entries for Khaldun journals of Lysander, Tavara and Grimmoch - available as loot from the respective NPCs (dfndata/misc/books.dfn and dfndata/items/misc/books.dfn) Added 25% chance for hit-animations and hit-SFX to play for targets in combat, instead of playing every time - can get very spammy Monsters with actual weapons equipped (like Ophidian Enforcer with Halberd/Bardiche) will now get appropriate combat SFX for hitting with that weapon Updated Healing skill to base cure/resurrection skill requirements on the calculated skill, rather than base skill (js/skill/healing.js) Fixed an issue where healing with bandages and dying in the process would not properly reset the healing-related tags and skills used Updated healing script to show a resurrection confirmation menu for players targeted with bandages for resurrect (js/skill/healing.js) All skill usage states now reset on death, to prevent cases of players being "busy" while trying to use skills that got stuck due to script bugs. The 'regspawn GM command now supports a new parameter called "max". Updated command syntax: 'regspawn # // perform a single respawn cycle in a specific spawn region 'regspawn all // perform a single respawn cycle across all spawn regions 'regspawn max // respawn ALL spawn regions to MAX capacity in one go Added new UOX.INI setting that determines the maximum range at which NPCs can initiate attacks on players/NPCs (the old MAXRANGE=10 setting now instead defines max range at which players can initiate attacks on players/NPCs): MAXNPCAGGRORANGE=10 Optimized performance by significantly reducing the number of line-of-sight checks performed by characters, especially in combat scenarios, or when evaluating potential targets for NPC AIs. The amount of checks done is also affected by the new ini setting for max aggro range. Fixed an issue where both NPC and player characters would instantly drop one hunger level (from 6 to 5) upon creation since hungerrate was not initialized until after first hunger-event Updated character priv property from UI16 to UI32, and added a new flag that determines if fame/karma title is hidden for character: HIDEFAMEKARMATITLE (0x10000) NPCs will no longer aggro other NPCs if the Z difference between them is greater or equal to 20 (i.e. they're on different floors), unless both are using ranged weapons and both are in range Fixed an issue where players could get discounts from shopkeepers even though neither player nor shopkeeper were members of a NPC guild (js/npc/ai/shopkeeper.js) Fixed an issue where the "premium" a player would get when selling items to a shopkeeper in the same NPC guild as them would be 110% extra on top of the item's value, instead of the intended 10% (js/npc/ai/shopkeeper.js) (Thanks, cobrag0318!) Added missing tall straw hat to tailoring crafting scripts (Thanks, Dragon Slayer!) Improved error reporting during compilation of individual scripts being reloaded - will now show more context and line number onCombatEnd JS Event now also triggers when NPCs ignore their target and/or evade during combat Updated 'decorate command to support saving/loading custom tags on items for world templates. These are stored after a @ symbol in the world template, each custom tag separated by a | symbol, and with each custom tag saved using this syntax: key$type$value Updated resource-harvesting scripts to use script-specific global (const) variables, to avoid interference between different scripts (js/server/resource/*) Added new resource-harvesting scripts and added spawn regions for these in fields on farms all over Britannia/Lost Lands cabbages (js/server/resource/cabbages.js) canteloupes (js/server/resource/canteloupes.js) carrots (js/server/resource/carrots.js) garlic (js/server/resource/garlic.js) gourds (js/server/resource/gourds.js) honeydew melons (js/server/resource/honeydewmelon.js) onions (js/server/resource/onions.js) pumpkins (js/server/resource/pumpkins.js) squashes (js/server/resource/squashes.js) turnips (js/server/resource/turnips.js) watermelons (js/server/resource/watermelon.js) Updated CSpawnRegion::FindItemSpotToSpawn() function in cSpawnRegion.cpp to prevent duplicate spawning of exact same item in exact same location Updated sectionid of all potion and scroll aliases to match main item, so they'll get correctly picked up by NPC shopkeepers (dfndata/items/magic/potions.dfn and scrolls.dfn) Specified sectionid for backpacks, so it also gets applied to packs added using the alias [backpack] (dfndata/items/misc/provisions.dfn) Fixed a code issue that prevented players from selling empty containers to NPC shopkeepers willing to buy such containers Fixed an issue where field-spells (wall of stone, poison field, etc) would ignore dynamic/static items that should block these Fixed an issue where field-spells could be cast into houses from the outside by standing next to a wall and targeting self Fixed a War/Peace-mode desync between client and server by having server always notify client (using war-toggle packet) when the "at war" flag is toggled for player character Fixed an issue with hiding skill that wouldn't allow player to hide after having acquired self as target in combat (through spellcasting, for instance) (Thanks, Dragon Slayer!) Fixed an issue where mana/reagents were consumed and skillcheck performed before all spellcast-validations had succeeded, resulting in the occasional loss of reagents/mana when spellcasting was disallowed (code and js/magic/clumsy.js and level1targ.js) Fixed an issue with lack of criminal-flagging for casting of hostile spells scripted in JS (clumsy, magic arrow, feeblemind) vs blue targets (js/magic/clumsy.js and level1targ.js) Fixed some issues with Line-of-Sight checking code that returned incorrect results, which amongst other things affected spellcasting in areas with uneven terrain Fixed some issues with movement code and climbing of ladders, in particular the rope ladder in the 2-story log cabin. Code now sets a "is climbing" flag when character steps onto a rope ladder, and uses that to help resolve some edge cases, and then unsets it when they step off. Renamed section headers of some map-items in DFNs from "locationname" to "locationnamemap" for clarity (example: "britain" to "britainmap") Fixed broken "map wrapping" when sailing to edges of map in Felucca or Trammel Fixed a server crash related to attempts at reading data from invalid map tiles
2025-06-27 08:40:02 +08:00
case CSPAWNREGP_FORCESPAWN: *vp = BOOLEAN_TO_JSVAL( gPriv->GetForceSpawn() ); break;
Instance-support and misc code cleanup Misc code and documentation cleanup: Updated and standardized function comment blocks throughout entire codebase Grouped getters and setters together in pairs and documented them as one Removed empty and/or non-useful information from comment blocks Removed unused function from cItem.cpp/h - IncID() - formerly used to change IDs for doors Added new feature - Instances Objects (characters, items, multis, spawnregions) can now make use of a 5th parameter to determine their location in the game world. In addition to the traditional X, Y, Z and WORLDNUMBER parameters, a new one has been added - INSTANCEID - that allows objects to exist at the same coordinates in the same world, but in different "dimensions". Code has been updated in multiple places to support this, and a default instanceID of 0 is assumed if nothing else is specified. Added support for new DFN tag in town regions, spawn regions and locations - INSTANCEID (defaults to 0 if not present) Added support for another start location parameter after worldNum in UOX.INI representing instanceID (defaults to 0 if not present) Updated TWEAK menu to include WorldNumber and instanceID Fixed BaseWeight option in TWEAK menu Updated CBase_Teleport - now takes an optional 5th parameter instanceID Updated SE_SpawnNPC now takes an optional 5th parameter - instanceID Updated SE_FindMulti now takes an optional 5th parameter - instanceID Updated SE_GetItem now takes an optional 5th parameter - instanceID Updated SE_FindItem now takes an optional 6th parameter - instanceID Added new JS property for Items, Characters, Regions: .instanceID Added JS property for Regions: .members - returns comma-separated list of town member serials Updated JS scripts making use of the above-mentioned JS Methods/Functions Updated dictionaries with new tweak menu entry texts Exposed SpawnRegions to JS engine, and updated JS docs with details: SpawnRegion JS Functions IterateOverSpawnRegions() GetSpawnRegion( spawnRegNum ) GetSpawnRegionCount() SpawnRegion JS Properties name regionNum itemList npcList item npc maxItems maxNpcs itemCount npcCount onlyOutside prefZ x1 y1 x2 y2 world instanceID minTime maxTime call
2020-08-08 13:57:15 +08:00
case CSPAWNREGP_X1: *vp = INT_TO_JSVAL( gPriv->GetX1() ); break;
case CSPAWNREGP_Y1: *vp = INT_TO_JSVAL( gPriv->GetY1() ); break;
case CSPAWNREGP_X2: *vp = INT_TO_JSVAL( gPriv->GetX2() ); break;
case CSPAWNREGP_Y2: *vp = INT_TO_JSVAL( gPriv->GetY2() ); break;
case CSPAWNREGP_DEFZ: *vp = INT_TO_JSVAL( gPriv->GetDefZ() ); break;
Instance-support and misc code cleanup Misc code and documentation cleanup: Updated and standardized function comment blocks throughout entire codebase Grouped getters and setters together in pairs and documented them as one Removed empty and/or non-useful information from comment blocks Removed unused function from cItem.cpp/h - IncID() - formerly used to change IDs for doors Added new feature - Instances Objects (characters, items, multis, spawnregions) can now make use of a 5th parameter to determine their location in the game world. In addition to the traditional X, Y, Z and WORLDNUMBER parameters, a new one has been added - INSTANCEID - that allows objects to exist at the same coordinates in the same world, but in different "dimensions". Code has been updated in multiple places to support this, and a default instanceID of 0 is assumed if nothing else is specified. Added support for new DFN tag in town regions, spawn regions and locations - INSTANCEID (defaults to 0 if not present) Added support for another start location parameter after worldNum in UOX.INI representing instanceID (defaults to 0 if not present) Updated TWEAK menu to include WorldNumber and instanceID Fixed BaseWeight option in TWEAK menu Updated CBase_Teleport - now takes an optional 5th parameter instanceID Updated SE_SpawnNPC now takes an optional 5th parameter - instanceID Updated SE_FindMulti now takes an optional 5th parameter - instanceID Updated SE_GetItem now takes an optional 5th parameter - instanceID Updated SE_FindItem now takes an optional 6th parameter - instanceID Added new JS property for Items, Characters, Regions: .instanceID Added JS property for Regions: .members - returns comma-separated list of town member serials Updated JS scripts making use of the above-mentioned JS Methods/Functions Updated dictionaries with new tweak menu entry texts Exposed SpawnRegions to JS engine, and updated JS docs with details: SpawnRegion JS Functions IterateOverSpawnRegions() GetSpawnRegion( spawnRegNum ) GetSpawnRegionCount() SpawnRegion JS Properties name regionNum itemList npcList item npc maxItems maxNpcs itemCount npcCount onlyOutside prefZ x1 y1 x2 y2 world instanceID minTime maxTime call
2020-08-08 13:57:15 +08:00
case CSPAWNREGP_PREFZ: *vp = INT_TO_JSVAL( gPriv->GetPrefZ() ); break;
case CSPAWNREGP_WORLD: *vp = INT_TO_JSVAL( gPriv->WorldNumber() ); break;
case CSPAWNREGP_INSTANCEID: *vp = INT_TO_JSVAL( gPriv->GetInstanceId() ); break;
Instance-support and misc code cleanup Misc code and documentation cleanup: Updated and standardized function comment blocks throughout entire codebase Grouped getters and setters together in pairs and documented them as one Removed empty and/or non-useful information from comment blocks Removed unused function from cItem.cpp/h - IncID() - formerly used to change IDs for doors Added new feature - Instances Objects (characters, items, multis, spawnregions) can now make use of a 5th parameter to determine their location in the game world. In addition to the traditional X, Y, Z and WORLDNUMBER parameters, a new one has been added - INSTANCEID - that allows objects to exist at the same coordinates in the same world, but in different "dimensions". Code has been updated in multiple places to support this, and a default instanceID of 0 is assumed if nothing else is specified. Added support for new DFN tag in town regions, spawn regions and locations - INSTANCEID (defaults to 0 if not present) Added support for another start location parameter after worldNum in UOX.INI representing instanceID (defaults to 0 if not present) Updated TWEAK menu to include WorldNumber and instanceID Fixed BaseWeight option in TWEAK menu Updated CBase_Teleport - now takes an optional 5th parameter instanceID Updated SE_SpawnNPC now takes an optional 5th parameter - instanceID Updated SE_FindMulti now takes an optional 5th parameter - instanceID Updated SE_GetItem now takes an optional 5th parameter - instanceID Updated SE_FindItem now takes an optional 6th parameter - instanceID Added new JS property for Items, Characters, Regions: .instanceID Added JS property for Regions: .members - returns comma-separated list of town member serials Updated JS scripts making use of the above-mentioned JS Methods/Functions Updated dictionaries with new tweak menu entry texts Exposed SpawnRegions to JS engine, and updated JS docs with details: SpawnRegion JS Functions IterateOverSpawnRegions() GetSpawnRegion( spawnRegNum ) GetSpawnRegionCount() SpawnRegion JS Properties name regionNum itemList npcList item npc maxItems maxNpcs itemCount npcCount onlyOutside prefZ x1 y1 x2 y2 world instanceID minTime maxTime call
2020-08-08 13:57:15 +08:00
case CSPAWNREGP_CALL: *vp = INT_TO_JSVAL( gPriv->GetCall() ); break;
default:
break;
}
}
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
return JS_TRUE;
}
JSBool CSpawnRegionProps_setProperty( JSContext* cx, JSObject* obj, jsid id, JSBool strict, jsval* vp )
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
{
CSpawnRegion *gPriv = static_cast<CSpawnRegion *>( JS_GetPrivate( cx, obj ));
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
2021-06-12 07:30:23 -04:00
if( gPriv == nullptr )
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
return JS_FALSE;
Instance-support and misc code cleanup Misc code and documentation cleanup: Updated and standardized function comment blocks throughout entire codebase Grouped getters and setters together in pairs and documented them as one Removed empty and/or non-useful information from comment blocks Removed unused function from cItem.cpp/h - IncID() - formerly used to change IDs for doors Added new feature - Instances Objects (characters, items, multis, spawnregions) can now make use of a 5th parameter to determine their location in the game world. In addition to the traditional X, Y, Z and WORLDNUMBER parameters, a new one has been added - INSTANCEID - that allows objects to exist at the same coordinates in the same world, but in different "dimensions". Code has been updated in multiple places to support this, and a default instanceID of 0 is assumed if nothing else is specified. Added support for new DFN tag in town regions, spawn regions and locations - INSTANCEID (defaults to 0 if not present) Added support for another start location parameter after worldNum in UOX.INI representing instanceID (defaults to 0 if not present) Updated TWEAK menu to include WorldNumber and instanceID Fixed BaseWeight option in TWEAK menu Updated CBase_Teleport - now takes an optional 5th parameter instanceID Updated SE_SpawnNPC now takes an optional 5th parameter - instanceID Updated SE_FindMulti now takes an optional 5th parameter - instanceID Updated SE_GetItem now takes an optional 5th parameter - instanceID Updated SE_FindItem now takes an optional 6th parameter - instanceID Added new JS property for Items, Characters, Regions: .instanceID Added JS property for Regions: .members - returns comma-separated list of town member serials Updated JS scripts making use of the above-mentioned JS Methods/Functions Updated dictionaries with new tweak menu entry texts Exposed SpawnRegions to JS engine, and updated JS docs with details: SpawnRegion JS Functions IterateOverSpawnRegions() GetSpawnRegion( spawnRegNum ) GetSpawnRegionCount() SpawnRegion JS Properties name regionNum itemList npcList item npc maxItems maxNpcs itemCount npcCount onlyOutside prefZ x1 y1 x2 y2 world instanceID minTime maxTime call
2020-08-08 13:57:15 +08:00
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
JSEncapsulate encaps( cx, vp );
2025-04-07 14:11:13 +10:00
UI16 propID = getScriptID( cx, id, JSP_SPAWNREGION );
if( propID != 0xFFFF )
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
{
2025-04-07 14:11:13 +10:00
switch( propID )
Instance-support and misc code cleanup Misc code and documentation cleanup: Updated and standardized function comment blocks throughout entire codebase Grouped getters and setters together in pairs and documented them as one Removed empty and/or non-useful information from comment blocks Removed unused function from cItem.cpp/h - IncID() - formerly used to change IDs for doors Added new feature - Instances Objects (characters, items, multis, spawnregions) can now make use of a 5th parameter to determine their location in the game world. In addition to the traditional X, Y, Z and WORLDNUMBER parameters, a new one has been added - INSTANCEID - that allows objects to exist at the same coordinates in the same world, but in different "dimensions". Code has been updated in multiple places to support this, and a default instanceID of 0 is assumed if nothing else is specified. Added support for new DFN tag in town regions, spawn regions and locations - INSTANCEID (defaults to 0 if not present) Added support for another start location parameter after worldNum in UOX.INI representing instanceID (defaults to 0 if not present) Updated TWEAK menu to include WorldNumber and instanceID Fixed BaseWeight option in TWEAK menu Updated CBase_Teleport - now takes an optional 5th parameter instanceID Updated SE_SpawnNPC now takes an optional 5th parameter - instanceID Updated SE_FindMulti now takes an optional 5th parameter - instanceID Updated SE_GetItem now takes an optional 5th parameter - instanceID Updated SE_FindItem now takes an optional 6th parameter - instanceID Added new JS property for Items, Characters, Regions: .instanceID Added JS property for Regions: .members - returns comma-separated list of town member serials Updated JS scripts making use of the above-mentioned JS Methods/Functions Updated dictionaries with new tweak menu entry texts Exposed SpawnRegions to JS engine, and updated JS docs with details: SpawnRegion JS Functions IterateOverSpawnRegions() GetSpawnRegion( spawnRegNum ) GetSpawnRegionCount() SpawnRegion JS Properties name regionNum itemList npcList item npc maxItems maxNpcs itemCount npcCount onlyOutside prefZ x1 y1 x2 y2 world instanceID minTime maxTime call
2020-08-08 13:57:15 +08:00
{
case CSPAWNREGP_NAME: gPriv->SetName( encaps.toString() ); break;
case CSPAWNREGP_ITEM: gPriv->SetItem( encaps.toString() ); break;
case CSPAWNREGP_ITEMLIST: gPriv->SetItemList( encaps.toString() ); break;
case CSPAWNREGP_NPC: gPriv->SetNPC( encaps.toString() ); break;
case CSPAWNREGP_NPCLIST: gPriv->SetNPCList( encaps.toString() ); break;
case CSPAWNREGP_REGIONNUM: gPriv->SetRegionNum( static_cast<UI16>( encaps.toInt() )); break;
case CSPAWNREGP_MAXITEMS: gPriv->SetMaxItemSpawn( encaps.toInt() ); break;
case CSPAWNREGP_MAXNPCS: gPriv->SetMaxCharSpawn( encaps.toInt() ); break;
case CSPAWNREGP_MINTIME: gPriv->SetMinTime( static_cast<UI08>( encaps.toInt() )); break;
case CSPAWNREGP_MAXTIME: gPriv->SetMaxTime( static_cast<UI08>( encaps.toInt() )); break;
case CSPAWNREGP_ONLYOUTSIDE: gPriv->SetOnlyOutside( encaps.toBool() ); break;
case CSPAWNREGP_ISSPAWNER: gPriv->IsSpawner( encaps.toBool() ); break;
Small update Fixed an issue with an internal movement check that prevented characters from moving in valid map areas in Felucca/Trammel from X 6144 to X 7168 Fixed an issue where .instanceID property was misspelled in 'xgo GM command script, causing characters to be teleported to an out of bounds area where they would no longer be saved (js/commands/targeting/x.js) Added some additional error-checking to .Teleport()/.SetLocation() JS Method to prevent script-accidents from sending characters out of bounds. Updated Poisoning skill to add poison-charges to weapons being poisoned. Charges are consumed when applying poison in combat (js/skill/poisoning.js) Updated combat code to consume poison-charges if a poisoned weapon is used to poison an opponent Updated shoplists for Blacksmiths and Weaponsmiths - they now buy/sell longswords (dfndata/items/shoplist.dfn) Updated MageShopping shoplist for mage vendors - they now buy/sell mass curse scrolls (dfndata/items/shoplist.dfn) Added new Spawn Region DFN tag that can specify which era or eras of UO (Multiple comma-separated entries supported) a given spawn region is valid for. Spawn region not valid for core shard era will be ignored. Syntax: ERAS=UO,T2A,UOR,LBR,AOS,SE,ML,SA,HS,TOL Added new Spawn Region DFN tag that allows using another spawn region as a "parent". All properties of this parent will be inherited except for these, which are ignored: ERAS, NPCLIST, ITEMLIST, NPC and ITEM. Syntax for new tag: GET=# // Inherit a specified spawn region Added spawn region for animal trainer vendor in Vesper stable Added spawn region for fur trader/tanner vendors in The Best Hides of Britain Added spawn region for spinner vendor in The Lord's Clothier's and The Right Fit shops in Britain Added spawn region for tanner NPC to Nujel'm Tannery (and fixed leatherworker spawn region for same area) Added spawn regions for banker NPCs in East Bank of Britain, First Bank of Moonglow, Jhelom Bank and Jeweler, Bank of Skara Brae Added spawn regions for stables, tailor and blacksmith inside Castle British Added spawn regions for mage shops, mage guilds and farm houses in Moonglow Added spawn regions for misc vendors and townfolk in multiple cities Added spawn regions for Fire Island Updated spawn regions for Dagger Isle/Ice Island Added spawn regions for forests and jungles in southern Britannia and on various islands including Bucc's Den, Moonglow, Serpent's Hold, and misc unpopulated islands Added spawn regions for area east of Skara Brae, around Hedge Maze and south of Britain Added spawn regions for wandering healers outside every dungeon entrance in Britannia and Lost Lands Re-integrated ocean spawn regions for ocean creatures (dolphin, walrus, water elemental, sea serpent) from the original community-based spawn file Added reagent spawns in overworld spawn regions in Britannia/Lost Lands Added special reagent spawns in swamp areas Added additional overworld spawn regions in Britannia/Lost Lands Added spawn regions for Khaldun dungeon that spawn some new and some old NPCs: Old: Zombies, skeletons, skeletal mages, skeletal knights, ancient liches New: Cursed (and named) NPCs, shadowfiends, zealots of khaldun (knights/summoners), tentacles of the harrower Updated size and positions of some existing overworld spawn regions Fixed incorrect spawn region size for small island south of Trinsic Added switch/door puzzle functionality in Khaldun dungeon using new switch/door combo script (js/item/dungeons/switch_door_combo.js) Added "smart objects" in Khaldun dungeon that activate when you come close enough (js/item/dungeons/smart_activate_item.js) Added teleport locations within Khaldun dungeon (js/teleport.scp) Added custom AIs to existing NPC spawning in Khaldun dungeon: Ancient Lich (summons other undead, and can turn into one of them for disguise) Added DFN entries for new NPCs spawning in Khaldun dungeon, some with custom AIs: [tentacles_of_the_harrower] -> Tentacles of the Harrower (life steal) [shadowfiend] -> Shadowfiends (seek out and reveal hidden players) [zealot_knight]/[zealot_summoner] -> Zealots of Khaldun (turn into undead on death, male/female variants) [cursed] -> Cursed (male/female variants) [spectralarmor] -> Spectral Armor Added DFN entries for new (named) NPCs spawning in Khaldun dungeon: [lysander_gathenwale] -> Lysander Gathenwale [grimmoch_drummel] -> Grimmoch Drummel [morg_bergen] -> Morg Bergen [tavara_sewel] -> Tavara Sewel Added new NPC DFN entries: [leatherworker] -> alias for male/female leatherworker vendors [mapmaker] -> alias for male/female mapmaker vendors Added new Race DFN entries: [RACE 29] -> Cursed (enemies of RACE 30) [RACE 30] -> Zealots (enemies of RACE 29) Added new book DFN entries for Khaldun journals of Lysander, Tavara and Grimmoch - available as loot from the respective NPCs (dfndata/misc/books.dfn and dfndata/items/misc/books.dfn) Added 25% chance for hit-animations and hit-SFX to play for targets in combat, instead of playing every time - can get very spammy Monsters with actual weapons equipped (like Ophidian Enforcer with Halberd/Bardiche) will now get appropriate combat SFX for hitting with that weapon Updated Healing skill to base cure/resurrection skill requirements on the calculated skill, rather than base skill (js/skill/healing.js) Fixed an issue where healing with bandages and dying in the process would not properly reset the healing-related tags and skills used Updated healing script to show a resurrection confirmation menu for players targeted with bandages for resurrect (js/skill/healing.js) All skill usage states now reset on death, to prevent cases of players being "busy" while trying to use skills that got stuck due to script bugs. The 'regspawn GM command now supports a new parameter called "max". Updated command syntax: 'regspawn # // perform a single respawn cycle in a specific spawn region 'regspawn all // perform a single respawn cycle across all spawn regions 'regspawn max // respawn ALL spawn regions to MAX capacity in one go Added new UOX.INI setting that determines the maximum range at which NPCs can initiate attacks on players/NPCs (the old MAXRANGE=10 setting now instead defines max range at which players can initiate attacks on players/NPCs): MAXNPCAGGRORANGE=10 Optimized performance by significantly reducing the number of line-of-sight checks performed by characters, especially in combat scenarios, or when evaluating potential targets for NPC AIs. The amount of checks done is also affected by the new ini setting for max aggro range. Fixed an issue where both NPC and player characters would instantly drop one hunger level (from 6 to 5) upon creation since hungerrate was not initialized until after first hunger-event Updated character priv property from UI16 to UI32, and added a new flag that determines if fame/karma title is hidden for character: HIDEFAMEKARMATITLE (0x10000) NPCs will no longer aggro other NPCs if the Z difference between them is greater or equal to 20 (i.e. they're on different floors), unless both are using ranged weapons and both are in range Fixed an issue where players could get discounts from shopkeepers even though neither player nor shopkeeper were members of a NPC guild (js/npc/ai/shopkeeper.js) Fixed an issue where the "premium" a player would get when selling items to a shopkeeper in the same NPC guild as them would be 110% extra on top of the item's value, instead of the intended 10% (js/npc/ai/shopkeeper.js) (Thanks, cobrag0318!) Added missing tall straw hat to tailoring crafting scripts (Thanks, Dragon Slayer!) Improved error reporting during compilation of individual scripts being reloaded - will now show more context and line number onCombatEnd JS Event now also triggers when NPCs ignore their target and/or evade during combat Updated 'decorate command to support saving/loading custom tags on items for world templates. These are stored after a @ symbol in the world template, each custom tag separated by a | symbol, and with each custom tag saved using this syntax: key$type$value Updated resource-harvesting scripts to use script-specific global (const) variables, to avoid interference between different scripts (js/server/resource/*) Added new resource-harvesting scripts and added spawn regions for these in fields on farms all over Britannia/Lost Lands cabbages (js/server/resource/cabbages.js) canteloupes (js/server/resource/canteloupes.js) carrots (js/server/resource/carrots.js) garlic (js/server/resource/garlic.js) gourds (js/server/resource/gourds.js) honeydew melons (js/server/resource/honeydewmelon.js) onions (js/server/resource/onions.js) pumpkins (js/server/resource/pumpkins.js) squashes (js/server/resource/squashes.js) turnips (js/server/resource/turnips.js) watermelons (js/server/resource/watermelon.js) Updated CSpawnRegion::FindItemSpotToSpawn() function in cSpawnRegion.cpp to prevent duplicate spawning of exact same item in exact same location Updated sectionid of all potion and scroll aliases to match main item, so they'll get correctly picked up by NPC shopkeepers (dfndata/items/magic/potions.dfn and scrolls.dfn) Specified sectionid for backpacks, so it also gets applied to packs added using the alias [backpack] (dfndata/items/misc/provisions.dfn) Fixed a code issue that prevented players from selling empty containers to NPC shopkeepers willing to buy such containers Fixed an issue where field-spells (wall of stone, poison field, etc) would ignore dynamic/static items that should block these Fixed an issue where field-spells could be cast into houses from the outside by standing next to a wall and targeting self Fixed a War/Peace-mode desync between client and server by having server always notify client (using war-toggle packet) when the "at war" flag is toggled for player character Fixed an issue with hiding skill that wouldn't allow player to hide after having acquired self as target in combat (through spellcasting, for instance) (Thanks, Dragon Slayer!) Fixed an issue where mana/reagents were consumed and skillcheck performed before all spellcast-validations had succeeded, resulting in the occasional loss of reagents/mana when spellcasting was disallowed (code and js/magic/clumsy.js and level1targ.js) Fixed an issue with lack of criminal-flagging for casting of hostile spells scripted in JS (clumsy, magic arrow, feeblemind) vs blue targets (js/magic/clumsy.js and level1targ.js) Fixed some issues with Line-of-Sight checking code that returned incorrect results, which amongst other things affected spellcasting in areas with uneven terrain Fixed some issues with movement code and climbing of ladders, in particular the rope ladder in the 2-story log cabin. Code now sets a "is climbing" flag when character steps onto a rope ladder, and uses that to help resolve some edge cases, and then unsets it when they step off. Renamed section headers of some map-items in DFNs from "locationname" to "locationnamemap" for clarity (example: "britain" to "britainmap") Fixed broken "map wrapping" when sailing to edges of map in Felucca or Trammel Fixed a server crash related to attempts at reading data from invalid map tiles
2025-06-27 08:40:02 +08:00
case CSPAWNREGP_FORCESPAWN: gPriv->SetForceSpawn( encaps.toBool() ); break;
case CSPAWNREGP_X1: gPriv->SetX1( static_cast<SI16>( encaps.toInt() )); break;
case CSPAWNREGP_Y1: gPriv->SetY1( static_cast<SI16>( encaps.toInt() )); break;
case CSPAWNREGP_X2: gPriv->SetX2( static_cast<SI16>( encaps.toInt() )); break;
case CSPAWNREGP_Y2: gPriv->SetY2( static_cast<SI16>( encaps.toInt() )); break;
case CSPAWNREGP_DEFZ: gPriv->SetDefZ( static_cast<SI08>( encaps.toInt() )); break;
case CSPAWNREGP_PREFZ: gPriv->SetPrefZ( static_cast<SI08>( encaps.toInt() )); break;
case CSPAWNREGP_WORLD: gPriv->WorldNumber( static_cast<UI08>( encaps.toInt() )); break;
case CSPAWNREGP_INSTANCEID: gPriv->SetInstanceId( static_cast<UI08>( encaps.toInt() )); break;
case CSPAWNREGP_CALL: gPriv->SetCall( static_cast<UI16>( encaps.toInt() )); break;
Instance-support and misc code cleanup Misc code and documentation cleanup: Updated and standardized function comment blocks throughout entire codebase Grouped getters and setters together in pairs and documented them as one Removed empty and/or non-useful information from comment blocks Removed unused function from cItem.cpp/h - IncID() - formerly used to change IDs for doors Added new feature - Instances Objects (characters, items, multis, spawnregions) can now make use of a 5th parameter to determine their location in the game world. In addition to the traditional X, Y, Z and WORLDNUMBER parameters, a new one has been added - INSTANCEID - that allows objects to exist at the same coordinates in the same world, but in different "dimensions". Code has been updated in multiple places to support this, and a default instanceID of 0 is assumed if nothing else is specified. Added support for new DFN tag in town regions, spawn regions and locations - INSTANCEID (defaults to 0 if not present) Added support for another start location parameter after worldNum in UOX.INI representing instanceID (defaults to 0 if not present) Updated TWEAK menu to include WorldNumber and instanceID Fixed BaseWeight option in TWEAK menu Updated CBase_Teleport - now takes an optional 5th parameter instanceID Updated SE_SpawnNPC now takes an optional 5th parameter - instanceID Updated SE_FindMulti now takes an optional 5th parameter - instanceID Updated SE_GetItem now takes an optional 5th parameter - instanceID Updated SE_FindItem now takes an optional 6th parameter - instanceID Added new JS property for Items, Characters, Regions: .instanceID Added JS property for Regions: .members - returns comma-separated list of town member serials Updated JS scripts making use of the above-mentioned JS Methods/Functions Updated dictionaries with new tweak menu entry texts Exposed SpawnRegions to JS engine, and updated JS docs with details: SpawnRegion JS Functions IterateOverSpawnRegions() GetSpawnRegion( spawnRegNum ) GetSpawnRegionCount() SpawnRegion JS Properties name regionNum itemList npcList item npc maxItems maxNpcs itemCount npcCount onlyOutside prefZ x1 y1 x2 y2 world instanceID minTime maxTime call
2020-08-08 13:57:15 +08:00
default:
break;
}
}
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
return JS_TRUE;
}
2025-03-28 13:23:59 +10:00
JSBool CGuildProps_getProperty( JSContext *cx, JSObject *obj, jsid id, jsval *vp )
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
{
CGuild *gPriv = static_cast<CGuild *>( JS_GetPrivate( cx, obj ));
2021-06-12 07:30:23 -04:00
if( gPriv == nullptr )
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
return JS_FALSE;
UI16 propID = getScriptID( cx, id, JSP_GUILD );
if( propID != 0xFFFF )
{
2021-06-12 07:30:23 -04:00
JSString *tString = nullptr;
switch( propID )
{
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
case CGP_NAME:
tString = JS_NewStringCopyZ( cx, gPriv->Name().c_str() );
*vp = STRING_TO_JSVAL( tString );
break;
Guild-specific updates - [ADD] Integrated FindGuildId( const CGuild* ) in guild relation functions for better JS mapping (Thanks to Xuri for the base implementation) - [ADD] Added new JS Function: - CreateNewGuild() // Returns the guild object for further setup - [ADD] Added new Guild JS Methods: .AddMember( targChar ), .AddRecruit( targChar ), .RemoveRecruit( targChar ), .RemoveMember( targChar ), .RecruitToMember( targChar ), .IsAtWar( targetGuild ), .IsAlly( targetGuild ), IsNeutral( targetGuild ) Added documentation entries for all new guild/character functions and methods - [ADD] New JS Event that triggers when GUILD button in paperdoll is pressed: - onGuildButton( mChar ) - [ADD] Added new Guild JS Property: .id (guild number) - [ADD] Added new Character JS Property: .guildNumber - [UPD] Updated Guild JS Methods and renamed them: - Renamed .NewMember( trgChar ) to .AddMember( trgChar ) - Renamed .NewRecruit( trgChar ) to .AddRecruit( trgChar ) - Renamed .GuildIsAtWar( targetGuild ) to .IsAtWar( targetGuild ) - Renamed .GuildIsAlly( targetGuild) to .IsAlly( targetGuild ) - Renamed .GuildIsNeutral( targetGuild ) to .IsNeutral( targetGuild ) - [UPD] Removed Character JS Method .CheckGuild(). Can be checked via .guild and/or .guildNumber properties - [UPD] 'get command can now be used to fetch guild information for characters. Example: 'get guild / 'get guildnumber - [UPD] Updated 'add item sectionID command to support optional amount. New syntax: 'add item sectionID amount - [FIX] Fixed an issue with 'wholist command where characters with serials in the millions would not show up in the list
2025-08-05 04:05:43 +08:00
case CGP_ID:
{
GUILDID guildId = GuildSys->FindGuildId( gPriv );
*vp = INT_TO_JSVAL( guildId );
break;
}
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
case CGP_TYPE: *vp = INT_TO_JSVAL( gPriv->Type() ); break;
case CGP_MASTER:
CChar *gMaster;
gMaster = CalcCharObjFromSer( gPriv->Master() );
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
if( !ValidateObject( gMaster ))
{
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
*vp = JSVAL_NULL;
}
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
else
{
// Otherwise Acquire an object
JSObject *myChar = JSEngine->AcquireObject( IUE_CHAR, gMaster, JSEngine->FindActiveRuntime( JS_GetRuntime( cx )));
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
*vp = OBJECT_TO_JSVAL( myChar );
}
break;
case CGP_STONE:
CItem *gStone;
gStone = CalcItemObjFromSer( gPriv->Stone() );
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
if( !ValidateObject( gStone ))
{
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
*vp = JSVAL_NULL;
}
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
else
{
// Otherwise Acquire an object
JSObject *myItem = JSEngine->AcquireObject( IUE_ITEM, gStone, JSEngine->FindActiveRuntime( JS_GetRuntime( cx )));
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
*vp = OBJECT_TO_JSVAL( myItem );
}
break;
case CGP_NUMMEMBERS: *vp = INT_TO_JSVAL( gPriv->NumMembers() ); break;
case CGP_NUMRECRUITS: *vp = INT_TO_JSVAL( gPriv->NumRecruits() ); break;
case CGP_CHARTER:
tString = JS_NewStringCopyZ( cx, gPriv->Charter().c_str() );
*vp = STRING_TO_JSVAL( tString );
break;
case CGP_ABBREVIATION:
2022-06-15 19:19:40 -04:00
tString = JS_NewStringCopyZ( cx, gPriv->Abbreviation().c_str() );
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
*vp = STRING_TO_JSVAL( tString );
break;
case CGP_WEBPAGE:
tString = JS_NewStringCopyZ( cx, gPriv->Webpage().c_str() );
*vp = STRING_TO_JSVAL( tString );
break;
default:
break;
}
}
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
return JS_TRUE;
}
JSBool CGuildProps_setProperty( JSContext* cx, JSObject* obj, jsid id, JSBool strict, jsval* vp )
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
{
CGuild *gPriv = static_cast<CGuild *>( JS_GetPrivate( cx, obj ));
2021-06-12 07:30:23 -04:00
if( gPriv == nullptr )
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
return JS_FALSE;
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
JSEncapsulate encaps( cx, vp );
2025-04-07 14:11:13 +10:00
UI16 propID = getScriptID( cx, id, JSP_GUILD );
if( propID != 0xFFFF )
{
2025-04-07 14:11:13 +10:00
switch( propID )
{
case CGP_NAME: gPriv->Name( encaps.toString() ); break;
Guild-specific updates - [ADD] Integrated FindGuildId( const CGuild* ) in guild relation functions for better JS mapping (Thanks to Xuri for the base implementation) - [ADD] Added new JS Function: - CreateNewGuild() // Returns the guild object for further setup - [ADD] Added new Guild JS Methods: .AddMember( targChar ), .AddRecruit( targChar ), .RemoveRecruit( targChar ), .RemoveMember( targChar ), .RecruitToMember( targChar ), .IsAtWar( targetGuild ), .IsAlly( targetGuild ), IsNeutral( targetGuild ) Added documentation entries for all new guild/character functions and methods - [ADD] New JS Event that triggers when GUILD button in paperdoll is pressed: - onGuildButton( mChar ) - [ADD] Added new Guild JS Property: .id (guild number) - [ADD] Added new Character JS Property: .guildNumber - [UPD] Updated Guild JS Methods and renamed them: - Renamed .NewMember( trgChar ) to .AddMember( trgChar ) - Renamed .NewRecruit( trgChar ) to .AddRecruit( trgChar ) - Renamed .GuildIsAtWar( targetGuild ) to .IsAtWar( targetGuild ) - Renamed .GuildIsAlly( targetGuild) to .IsAlly( targetGuild ) - Renamed .GuildIsNeutral( targetGuild ) to .IsNeutral( targetGuild ) - [UPD] Removed Character JS Method .CheckGuild(). Can be checked via .guild and/or .guildNumber properties - [UPD] 'get command can now be used to fetch guild information for characters. Example: 'get guild / 'get guildnumber - [UPD] Updated 'add item sectionID command to support optional amount. New syntax: 'add item sectionID amount - [FIX] Fixed an issue with 'wholist command where characters with serials in the millions would not show up in the list
2025-08-05 04:05:43 +08:00
case CGP_ID:
break;
case CGP_TYPE: gPriv->Type( static_cast<GuildType>( encaps.toInt() )); break;
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
case CGP_MASTER:
if( *vp != JSVAL_NULL )
{
CChar *myChar = static_cast<CChar*>( encaps.toObject() );
if( !ValidateObject( myChar ))
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
break;
gPriv->Master(( *myChar ));
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
}
else
{
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
gPriv->Master( INVALIDSERIAL );
}
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
break;
case CGP_STONE:
if( *vp != JSVAL_NULL )
{
CItem *myItem = static_cast<CItem *>( encaps.toObject() );
if( !ValidateObject( myItem ))
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
break;
gPriv->Stone(( *myItem ));
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
}
else
{
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
gPriv->Stone( INVALIDSERIAL );
}
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
break;
case CGP_CHARTER: gPriv->Charter( encaps.toString() ); break;
case CGP_ABBREVIATION: gPriv->Abbreviation( encaps.toString().c_str() ); break;
case CGP_WEBPAGE: gPriv->Webpage( encaps.toString() ); break;
default:
break;
}
}
UOX3 0.99.6-RC4 Fixed an issue that prevented onBuyFromVendor() and onBoughtFromVendor() JS Events from triggering when attached to NPC shopkeepers Fixed an issue with help gump that prevented password management section from working as intended (js/server/misc/helpgump.js) Fixed an issue where UOX3 would fail to load pre-HS multi.mul files Added chess board to Misc->Games add menu (dfndata/items/ItemMenu.bulk.dfn) Fixed an issue with 'move (alias for 'telestuff) command that referenced the wrong variable name (js/commands/targeting/tele.js) When a player is teleported via the GM 'wholist menu, any pets within range are now also brought along for the ride Consolidated error-reporting for JS Functions, Object Methods and Object Properties to provide more context (scriptID, filename, line number) when something goes wrong Added some missing shield IDs (0xA649, 0xA64A, 0xA831, 0xA832) to IsShieldType() function MAXRANGE item property previously only worked for ranged weapons; now it works for melee weapons too, and potentially allows melee weapons with combat range longer than 1 tile MAXRANGE item property can now be used to define max combat range for melee weapons Fixed an issue (non-critical) with .PlaceInPack() JS Method that would cause UOX3 to try adding items marked for deletion to refreshQueue and spam console with errors Added missing AI scripts to summoned Blade Spirits and Energy Vortexes (dfndata/npc/magicsummon.dfn) Fixed an issue with weight calculation for hireling backpacks (js/npc/ai/hireling.js) Fixed an issue with the 'fix command, which would in most cases set character's Z to -1 regardless of location, but now adheres to map elevation instead Fixed an issue with Pack AI (js/npc/ai/pack_ai.js) that prevented pack members from attacking target correctly (thanks Dragon Slayer) Fixed an issue with DoesMapBlock JS Function that incorrectly checked for 6 function arguments, when it actually requires 8 Fixed an issue with DoesDynamicBlock JS Function that incorrectly checked for 8 function arguments, when it actually requires 9 Fixed an issue with runebook script (js/item/runebook.js) that prevented players from being able to use recall charges without having spellbook with spell in inventory Fixed issues with placement of tall items on ground/floor, and with stacking of items in houses Fixed incorrect alias for woodland armor (dfndata/items/gear/armor/other/armor/wood.dfn - thanks Dragon Slayer) Fixed a critical issue with script context sometimes changing while executing a script, because of events in other scripts being triggered. Affected scripts can be safeguarded against this by the addition of a dummy callback function anywhere in the script: function _restorecontext_() {} Fixed an issue with non-animal pets not gaining loyalty when being fed (thanks Dragon Slayer) Added new JS Object Methods for Chars/Items/Multis to fetch list of custom tags associated with object: .GetTagMap() // Gets list of persistent custom tags associated with object .GetTempTagMap() // Gets list of temporary custom tags associated with object Added new JS commands ('GETTAGMAP and 'GETTEMPTAGMAP) that spits out details of custom tags associated with targeted object (js/commands/custom/misc-cmd.js) Added new JS command ('USEITEM) that acts as a short-cut for double-clicking on targeted item (js/commands/custom/misc-cmd.js) Updated 'ADD # and 'ADD ITEM # JS commands to support targeting a container directly and adding the new item inside (js/commands/targeting/add.js) Updated axe script to only perform lumberjacking skill-check when there's still wood available in a given area, and to play appropriate animations for Gargoyle players (js/item/axe.js) Updated script for gameboards to make generated pieces newbiefied so they won't appear on ground if board decays (js/item/gameboards.js) Updated script for stablemasters to avoid relying on global variables (js/npc/ai/stablemaster.js) Updated names of items crafted with runic hammers to include the material name of the hammers used to craft them (js/skill/craft/crafting_complete.js) Fixed a small issue with Detect Hidden skill that would return the wrong message if players found anyone hiding nearby (js/skill/detecthidden.js) Fixed an issue that prevented tile overrides in dfndata/maps/tiles.dfn from loading properly Added entries for a couple of walls with missing no-shoot flags to tile overrides in dfndata/maps/tiles.dfn Updated JS Method .SoundEffect() to support optional third argument (creatureSoundNum) to play creature-defined sounds from dfndata/creatures/creatures.dfn. New syntax: .SoundEffect( soundID, allHear[, creatureSoundNum] ) // 0=SOUND_STARTATTACK, 1=SOUND_IDLE, 2=SOUND_ATTACK, 3=SOUND_DEFEND, 4=SOUND_DIE Added new Character JS Methods: .SetRandomName( nameListID ) // apply a random name from specified namelist to character .FindItemSection( sectionID ) // find item in player's backpack with specified sectionID Added new Socket JS Method: .OpenContainer() // Opens specified container for socket
2023-05-30 01:47:26 +08:00
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
return JS_TRUE;
}
2025-03-28 13:23:59 +10:00
JSBool CRaceProps_getProperty( JSContext *cx, JSObject *obj, jsid id, jsval *vp )
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
{
CRace *gPriv = static_cast<CRace *>( JS_GetPrivate( cx, obj ));
2002-04-07 20:53:41 +00:00
2021-06-12 07:30:23 -04:00
if( gPriv == nullptr )
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
return JS_FALSE;
UI16 propID = getScriptID( cx, id, JSP_RACE );
if( propID != 0xFFFF )
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
{
2021-06-12 07:30:23 -04:00
JSString *tString = nullptr;
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
UI08 TempRace = 0;
switch( propID )
{
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
case CRP_ID:
Rework of passive stat regeneration Updated code calculating passive health, stamina and mana regeneration for characters, based on new UOX.INI settings and bonuses from characters/items/races Added three new Character/Item/Race DFN tags to grant bonus health/stamina/mana regeneration: HEALTHREGENBONUS=# // 10 bonus points equates to 0.01 extra hp regen per second, independent of era STAMINAREGENBONUS=# // 10 bonus points equates to 0.05 extra stamina regen per second MANAREGENBONUS=# // 10 bonus point equates to 0.1 extra mana regen per second ...also available as JS Properties: .healthRegenBonus .staminaRegenBonus .manaRegenBonus Updated get/set JS commands to allow getting/setting regen bonuses for health, stamina and mana Updated races.dfn to include default +2 health regen bonus for humans, and +2 mana regen bonus for gargoyles. Added new UOX.INI settings under [Skills and Stats] section: HEALTHREGENMODE=1 // 0 = no passive health regen, 1 = default passive health regen STAMINAREGENMODE=1 // 0 = no passive stamina regen, 1 = default passive stamina regen (LBR or below), 2 = AoS or beyond, 3 = SA and beyond MANAREGENMODE=1 // 0 = no passive mana regen, 1 = default passive mana regen (LBR or below), 2 = AoS (Pub17), 3 = AoS/SE (Pub18 and beyond), 4 = ML, 5 = KR, 6 = SA and beyond HEALTHREGENCAP=# // Max cap for Health Regeneration Bonus stat per character STAMINAREGENCAP=# // Max cap for Stamina Regeneration Bonus stat per character MANAREGENCAP=# // Max cap for Mana Regeneration Bonus stat per character Added new UOX.INI section ([default race bonuses]) with the following new settings for the 3 default playable races (only used if nothing else specified in races.dfn): HUMANHEALTHREGENBONUS=0 // default health regen bonus for human race (2 from ML expansion onwards) HUMANSTAMINAREGENBONUS=0 // default stamina regen bonus for human race HUMANMANAREGENBONUS=0 // default mana regen bonus for human race ELFHEALTHREGENBONUS=0 // default health regen bonus for elf race ELFSTAMINAREGENBONUS=0 // default stamina regen bonus for elf race ELFMANAREGENBONUS=0 // default mana regen bonus for elf race GARGOYLEHEALTHREGENBONUS=0 // default health regen bonus for gargoyle race GARGOYLESTAMINAREGENBONUS=0 // default stamina regen bonus for gargoyle race GARGOYLEMANAREGENBONUS=0 // default mana regen bonus for gargoyle race (2 from SA expansion onwards) Updated UOX3 Documentation with new feature section on Stat Regeneration with details on stat regeneration rules and recommended settings per UO era Added support for Medable armors (have no effect on meditation skill and/or passive regen of mana when worn) and Mage Armors (can turn non-medable armor into medable armor) These properties are defined per armor piece using the first and second bits of the MORE property: MORE=0x1 0x0 0x0 0x0 // Medable Armor MORE=0x0 0x1 0x0 0x0 // Mage Armor The following armor types have been marked as medable by default: leather armor, leather ninja armor, leather samurai armor, leaf armor, gargish cloth armor, gargish leather armor and all hats and masks Updated JS Method .Defense() to support optional fourth and fifth parameters - excludeMedableArmor (true/false) and includeShield (true/false) Updated CalfDef function to support including shields in the calculations, and updated mana regen code to include shields when checking for equipped armor Updated Meditation skill JS script to exclude medable armor from armor check, include shields, and apply different rules for active meditation depending on mana regen mode Updated stat window to include defensive rating of shields (based on Parrying skill) and/or elemental resistances (if enabled in ini) Added a new property to CRace class, which is automatically set and incremented as UOX3 loads in races from races.dfn: raceID Added new Getters/Setters for CRace class to retrieve ID of a specific Race object Updated JS property .id for Race JS Object to return new race ID instead of iterating through list of races to compare race object and return index Reloading DFNs now also reloads Races
2025-04-20 06:05:44 +08:00
*vp = INT_TO_JSVAL( gPriv->GetRaceID() );
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
break;
case CRP_NAME:
tString = JS_NewStringCopyZ( cx, gPriv->Name().c_str() );
*vp = STRING_TO_JSVAL( tString );
break;
case CRP_REQUIRESBEARD: *vp = BOOLEAN_TO_JSVAL( gPriv->RequiresBeard() ); break;
case CRP_REQUIRESNOBEARD: *vp = BOOLEAN_TO_JSVAL( gPriv->NoBeard() ); break;
case CRP_ISPLAYERRACE: *vp = BOOLEAN_TO_JSVAL( gPriv->IsPlayerRace() ); break;
case CRP_GENDERRESTRICT: *vp = INT_TO_JSVAL( gPriv->GenderRestriction() ); break;
case CRP_ARMOURCLASS: *vp = INT_TO_JSVAL( gPriv->ArmourClassRestriction() ); break;
case CRP_LANGUAGESKILLMIN: *vp = INT_TO_JSVAL( gPriv->LanguageMin() ); break;
08/08/2021 - Xuri (0.99.4w) Added support for new Skills DFN tag: SKILLDELAY=# // Delay in seconds before another skill can be used after using this skill. Overrides global delay from UOX.INI Updated skill cSkills::SkillUse() to use skill-specific skill delays if set for a given skill, or global delay from ini if not. Also added a check to see if skill delay timer has been modified by onSkill JS event before attempting to set a default timer Updated skill delays to better match ~pub15 era: Reduced global SKILLDELAY setting in UOX.INI from 2 to 1 second Detecting Hidden skill now has a default skill delay of 10 seconds Herding skill now has a default skill delay of 10 seconds Hiding skill now has a default skill delay of 10 seconds, with shorter delays (global skill delay) for trying to hide while in combat or for successfully hiding Meditation skill now has a default skill delay of 10 seconds, with shorter delays (global skill delay) for failing due to hands being occupied or already being at max mana Peacemaking skill now has a default skill delay of 10 seconds for failed skill checks, and 5 seconds delay for successful ones Poisoning skill now has a default skill delay of 10 seconds Provocation skill now has a default skill delay of 10 seconds Remove Trap skill now has a default skill delay of 10 seconds Stealing skill now has a default skill delay of 10 seconds Stealth skill now has a default skill delay of 10 seconds Tracking skill now has a default skill delay of 10 seconds Veterinary skill now has a default skill delay of 10 seconds Fixed an issue with global JS Timer object that would reference the wrong timerIDs Extended global JS timer object to include timers from socket as well (marked with SOCK_ prefix): .SOCK_SKILLDELAY // Delay before the next time player can use another skill .SOCK_OBJDELAY // Delay before next time player can use another object .SOCK_SPIRITSPEAK // Timer that tracks remaining duration of player's Spirit Speak .SOCK_TRACKING // Timer that tracks remaining duration for player's Tracking skill .SOCK_FISHING // Timer that tracks remaining duration for player's Fishing skill .SOCK_MUTETIME // Timer that tracks remaining duration a player remains muted .SOCK_TRACKINGDISPLAY // Timer that tracks interval between each time tracking display is updated Updated various JS scripts to use the new Timer.TIMERNAME with .GetTimer()/.SetTimer() JS Methods for Characters and Sockets Updated Persecution ability for player ghosts to use the skill delay of the Spirit Speak skill, if set Updated Persecution ability to base mana damage primarily on player's Spirit Speak skill rather than their Intelligence In order to cut down on the amount of messages sent from server to players trying to spam-use objects/skills, UOX3 now only sends a maximum of one message for object use delay and one message for skill use delay while the delay timers for these are in effect. This resets on the next successful use of an object or skill. This is tracked via bools in cSocket class: bool objDelayMsgShown bool skillDelayMsgShown Converted DELAY tag in spells.dfn to use seconds (with decimals) instead of tenths of a second, which was not precise enough. This controls the cast time of spells. What would previously say DELAY=10 (10/10ths of a second) now says DELAY=1.0 (1 second) Added support for new Spells DFN tag to control delay until damage takes place after casting a spell, replacing UOX.INI setting COMBATEXPLODEDELAY, which is no longer used: DAMAGEDELAY=# // Delay in seconds (decimal) until a direct damage spell deals its damage Added support for a new Spells DFN tag to control cast recovery time, during which additional spells cannot be cast: RECOVERYDELAY=# // Delay in seconds (decimal) until player can cast another spell Added new setting in UOX.INI to control whether player spellcasting gets interrupted upon equipping/picking up items: ITEMSINTERRUPTCASTING=1 // If enabled, spellcasting gets interrupted by equipping/picking up items. Defaults to enabled. All direct damage spells by default have a 1.0s delay before damage (and VFX) is applied, except Explosion which has a 2.5s delay All spells by default have a cast recovery duration of 1.0s; from the moment a spellcast is completed/moment targeting cursor appears, the player will be unable to cast any other spell for the duration of the cast recovery Reagent checks and skill-check now take place AFTER the spellcast animation, not before! Spell cast times now follow this formula, though values set per spell and can be modified: 0.25 + ( spellCircle * 0.25 ) Overhauled spell sound FX and VFX for for all spells Players can no longer cast spells while holding items on the cursor Fixed Magic Trap, Magic Untrap, Magic Lock and Magic Unlock not being usable on containers in one's own backpack Fixed an issue that caused Magic Trap to deal between 50 to 100 damage to the player. New damage: 5 to 10, depending on Magery skill Fixed an issue where Magic Untrap spell would completely remove traps from spawn containers instead of disable them Fixed an issue where Telekinesis spell would not set off traps on containers properly Added additional FX for Teleport spell played at player's original location before the teleport took place Fixed a bug where creatures summoned with the Summon Creature spell were not dispellable Fixed an issue where the Reveal spell would not reveal players hidden using the Hiding skill Dispel and Mass Dispel spells are no longer guaranteed to succeed at dispelling summoned creatures. Instead, the chance to dispel is based on the following simple formula, with dispelChance capped at 95% to always leave some chance for a creature to resist a dispel: dispelChance = ( 50 - ( targetResistSkill - casterMagerySkill )) / 1.5 The targetResistSkill is based on the highest value of the summoned creature's spell resistance skill and the spell resistance skill of its summoner Fixed an issue where the Create Food spell attempted to create an invalid item Fixed issue where code that checked for valid drop locations for items didn't allow negative z values (Dragon Slayer) Fixed issue where players could drop items on blocking map tiles like water or mountains (Dragon Slayer) Fixed issue where some JS functions like CheckStaticFlag, CheckDynamicFlag, DoesStaticBlock, DoesDynamicBlock and DoesMapBlock would not work correctly when passed negative Z values Fixed issue where context menu were listing skills to train from NPCs based on effective skill rather than base skill Fixed issue where NPCs would offer skills for training even if those skills were not above the minimum 60 skillpoints Updated clilocID used for Gump JS Method AddToolTip - as well as for some item/character tooltip data - from 1050045 to 1042971 for improved client compatibility Human/Elf/Gargoyle NPCs with spellcasting capabilities will now play a casting animation and briefly stop moving when they cast spells Updated NPC spellcasting code to help NPCs make a bit better choices of what spells to cast during combat. Now they take their own health percentage into account, and cast more offensive spells when at near full health vs more defensive spells as their health drops Fixed an issue where Hirelings wouldn't always immediately start following their new owners Fixed a bug where the Earthquake spell could incorrectly add NPC characters marked for deletion to the refresh queue Updated skills and stats of all implemented human NPCs (including vendors) to better match the state of those NPCs around the time of Pub15 Fixed SPATTACK values for a couple of NPCs that were still using values based on spell bitmask instead of spell circle value Updated stats of Jukan and Meer NPCs (dfndata/npc/lbrraces.dfn) to match stats from official LBR guide Added support for an optional third parameter for Character/Socket JS Method .CustomTarget() to allow highlighting targeting cursors as neutral (0, default aura), harmful (1, red aura), helpful (2, blue aura). A value of 3 will cancel the currently active targeting cursor. New syntax: myChar/mySock.CustomTarget( targetID, txtToSay, cursorType ) // supported cursorTypes: 0 = neutral, 1 = harmful, 2 = helpful, 3 = cancel current target cursor Various target cursors triggered by code (like hard-coded spells, some pet commands) also make use of these cursorTypes
2021-08-08 01:57:25 +08:00
case CRP_POISONRESISTANCE: JS_NewNumberValue( cx, gPriv->PoisonResistance(), vp ); break;
case CRP_MAGICRESISTANCE: JS_NewNumberValue( cx, gPriv->MagicResistance(), vp ); break;
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
case CRP_VISIBLEDISTANCE: *vp = INT_TO_JSVAL( gPriv->VisibilityRange() ); break;
case CRP_NIGHTVISION: *vp = INT_TO_JSVAL( gPriv->NightVision() ); break;
default:
break;
}
}
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
return JS_TRUE;
}
JSBool CRaceProps_setProperty( JSContext* cx, JSObject* obj, jsid id, JSBool strict, jsval* vp )
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
{
CRace *gPriv = static_cast<CRace *>( JS_GetPrivate( cx, obj ));
2021-06-12 07:30:23 -04:00
if( gPriv == nullptr )
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
return JS_FALSE;
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
JSEncapsulate encaps( cx, vp );
2025-04-07 14:11:13 +10:00
UI16 propID = getScriptID( cx, id, JSP_RACE );
if( propID != 0xFFFF )
{
2025-04-07 14:11:13 +10:00
switch( propID )
{
case CRP_NAME: gPriv->Name( encaps.toString() ); break;
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
case CRP_REQUIRESBEARD: gPriv->RequiresBeard( encaps.toBool() ); break;
case CRP_REQUIRESNOBEARD: gPriv->NoBeard( encaps.toBool() ); break;
case CRP_ISPLAYERRACE: gPriv->IsPlayerRace( encaps.toBool() ); break;
case CRP_GENDERRESTRICT: gPriv->GenderRestriction( static_cast<GENDER>( encaps.toInt() )); break;
case CRP_ARMOURCLASS: gPriv->ArmourClassRestriction( static_cast<UI08>( encaps.toInt() )); break;
case CRP_LANGUAGESKILLMIN: gPriv->LanguageMin( static_cast<UI16>( encaps.toInt() )); break;
case CRP_POISONRESISTANCE: gPriv->PoisonResistance( encaps.toFloat() ); break;
case CRP_MAGICRESISTANCE: gPriv->MagicResistance( encaps.toFloat() ); break;
case CRP_VISIBLEDISTANCE: gPriv->VisibilityRange( static_cast<SI08>( encaps.toInt() )); break;
case CRP_NIGHTVISION: gPriv->NightVision( static_cast<UI08>( encaps.toInt() )); break;
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
default:
break;
}
}
UOX3 0.99.6-RC4 Fixed an issue that prevented onBuyFromVendor() and onBoughtFromVendor() JS Events from triggering when attached to NPC shopkeepers Fixed an issue with help gump that prevented password management section from working as intended (js/server/misc/helpgump.js) Fixed an issue where UOX3 would fail to load pre-HS multi.mul files Added chess board to Misc->Games add menu (dfndata/items/ItemMenu.bulk.dfn) Fixed an issue with 'move (alias for 'telestuff) command that referenced the wrong variable name (js/commands/targeting/tele.js) When a player is teleported via the GM 'wholist menu, any pets within range are now also brought along for the ride Consolidated error-reporting for JS Functions, Object Methods and Object Properties to provide more context (scriptID, filename, line number) when something goes wrong Added some missing shield IDs (0xA649, 0xA64A, 0xA831, 0xA832) to IsShieldType() function MAXRANGE item property previously only worked for ranged weapons; now it works for melee weapons too, and potentially allows melee weapons with combat range longer than 1 tile MAXRANGE item property can now be used to define max combat range for melee weapons Fixed an issue (non-critical) with .PlaceInPack() JS Method that would cause UOX3 to try adding items marked for deletion to refreshQueue and spam console with errors Added missing AI scripts to summoned Blade Spirits and Energy Vortexes (dfndata/npc/magicsummon.dfn) Fixed an issue with weight calculation for hireling backpacks (js/npc/ai/hireling.js) Fixed an issue with the 'fix command, which would in most cases set character's Z to -1 regardless of location, but now adheres to map elevation instead Fixed an issue with Pack AI (js/npc/ai/pack_ai.js) that prevented pack members from attacking target correctly (thanks Dragon Slayer) Fixed an issue with DoesMapBlock JS Function that incorrectly checked for 6 function arguments, when it actually requires 8 Fixed an issue with DoesDynamicBlock JS Function that incorrectly checked for 8 function arguments, when it actually requires 9 Fixed an issue with runebook script (js/item/runebook.js) that prevented players from being able to use recall charges without having spellbook with spell in inventory Fixed issues with placement of tall items on ground/floor, and with stacking of items in houses Fixed incorrect alias for woodland armor (dfndata/items/gear/armor/other/armor/wood.dfn - thanks Dragon Slayer) Fixed a critical issue with script context sometimes changing while executing a script, because of events in other scripts being triggered. Affected scripts can be safeguarded against this by the addition of a dummy callback function anywhere in the script: function _restorecontext_() {} Fixed an issue with non-animal pets not gaining loyalty when being fed (thanks Dragon Slayer) Added new JS Object Methods for Chars/Items/Multis to fetch list of custom tags associated with object: .GetTagMap() // Gets list of persistent custom tags associated with object .GetTempTagMap() // Gets list of temporary custom tags associated with object Added new JS commands ('GETTAGMAP and 'GETTEMPTAGMAP) that spits out details of custom tags associated with targeted object (js/commands/custom/misc-cmd.js) Added new JS command ('USEITEM) that acts as a short-cut for double-clicking on targeted item (js/commands/custom/misc-cmd.js) Updated 'ADD # and 'ADD ITEM # JS commands to support targeting a container directly and adding the new item inside (js/commands/targeting/add.js) Updated axe script to only perform lumberjacking skill-check when there's still wood available in a given area, and to play appropriate animations for Gargoyle players (js/item/axe.js) Updated script for gameboards to make generated pieces newbiefied so they won't appear on ground if board decays (js/item/gameboards.js) Updated script for stablemasters to avoid relying on global variables (js/npc/ai/stablemaster.js) Updated names of items crafted with runic hammers to include the material name of the hammers used to craft them (js/skill/craft/crafting_complete.js) Fixed a small issue with Detect Hidden skill that would return the wrong message if players found anyone hiding nearby (js/skill/detecthidden.js) Fixed an issue that prevented tile overrides in dfndata/maps/tiles.dfn from loading properly Added entries for a couple of walls with missing no-shoot flags to tile overrides in dfndata/maps/tiles.dfn Updated JS Method .SoundEffect() to support optional third argument (creatureSoundNum) to play creature-defined sounds from dfndata/creatures/creatures.dfn. New syntax: .SoundEffect( soundID, allHear[, creatureSoundNum] ) // 0=SOUND_STARTATTACK, 1=SOUND_IDLE, 2=SOUND_ATTACK, 3=SOUND_DEFEND, 4=SOUND_DIE Added new Character JS Methods: .SetRandomName( nameListID ) // apply a random name from specified namelist to character .FindItemSection( sectionID ) // find item in player's backpack with specified sectionID Added new Socket JS Method: .OpenContainer() // Opens specified container for socket
2023-05-30 01:47:26 +08:00
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
return JS_TRUE;
}
2002-04-07 20:53:41 +00:00
JSBool CSocketProps_setProperty( JSContext* cx, JSObject* obj, jsid id, JSBool strict, jsval* vp )
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
{
CSocket *gPriv = static_cast<CSocket *>( JS_GetPrivate( cx, obj ));
2021-06-12 07:30:23 -04:00
if( gPriv == nullptr )
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
return JS_FALSE;
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
JSEncapsulate encaps( cx, vp );
2025-04-07 14:11:13 +10:00
UI16 propID = getScriptID( cx, id, JSP_SOCK );
if( propID != 0xFFFF )
{
2025-04-07 14:11:13 +10:00
switch( propID )
{
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
case CSOCKP_ACCOUNT:
break;
case CSOCKP_CURRENTCHAR:
{
CChar *mChar = static_cast<CChar *>( encaps.toObject() );
if( ValidateObject( mChar ))
{
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
gPriv->CurrcharObj( mChar );
}
2002-04-07 20:53:41 +00:00
}
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
break;
case CSOCKP_IDLETIMEOUT:
break;
case CSOCKP_WASIDLEWARNED: gPriv->WasIdleWarned( encaps.toBool() ); break;
case CSOCKP_TEMPINT: gPriv->TempInt( encaps.toInt() ); break;
Exposed various map and statics related functions to JS engine Updated JS item properties MORE, MOREX, MOREY, MOREZ and SERIAL, and character property SERIAL, to pass values to JS scripts using JS_NewNumberValue() instead of INT_TO_JSVAL if the property value cannot fit inside JSVAL (checked with INT_FITS_IN_JSVAL) Added support in CResponse.cpp for client trigger word for securing containers in houses - TW_HOUSESECURE Updated CMulHandler::CheckStaticFlag() to match with statics that cover/extend across the specified Z coordinate, not just ones that have the same base Z level Updated CMulHandler::DoesMapBlock() to not deem map tiles as blocking if they are more than 16 Z (height of a character) higher than the specified Z coordinate to check Exposed method for finding corners of a multi to JS engine: .GetMultiCorner( cornerID ) - Gets coordinates for specified corner of multi (0 = NW, 1 = NE, 2 = SW, 3 = SE) Exposed various functions related to map, statics and multis to JS engine: CalcMultiFromSer( serial ) - Find a multi from a provided serial GetMapElevation( x, y, z, world) - Returns the map elevation at specified coordinates IsInBuilding( x, y, z, world, instance, checkHeight ) - Returns true if the specified location is inside a static building (underneath static items), or if player is inside a multi. If the checkHeight argument is true, player is only deemed inside a multi if there are multi-items above the player's head. If player is in a courtyard/on a rooftop, they will be deemed to be NOT in the building. checkHeight is not used for the static part of the function. CheckStaticFlag( x, y, z, world, tileFlagID ) - Checks to see if any statics at given coordinates has specified tile flag DoesStaticBlock( x, y, z, world, checkWater ) - Checks if statics at/above given location blocks characters DoesDynamicBlock( x, y, z, world, instance, checkWater, waterWalk ) - Checks if dynamics at/above given location blocks characters DoesMapBlock( x, y, z, world, checkWater, waterWalk ) - Checks if map tile at/above given location blocks characters
2020-10-05 23:12:34 +08:00
case CSOCKP_TEMPINT2: gPriv->TempInt2( encaps.toInt() ); break; // Reserved for JS usage
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
case CSOCKP_TEMPOBJ:
if( *vp == JSVAL_NULL )
{
2021-06-12 07:30:23 -04:00
gPriv->TempObj( nullptr );
}
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
else
{
2022-11-27 17:13:18 -05:00
gPriv->TempObj( static_cast<CBaseObject *>( encaps.toObject() ));
}
2022-11-27 17:13:18 -05:00
break;
Exposed various map and statics related functions to JS engine Updated JS item properties MORE, MOREX, MOREY, MOREZ and SERIAL, and character property SERIAL, to pass values to JS scripts using JS_NewNumberValue() instead of INT_TO_JSVAL if the property value cannot fit inside JSVAL (checked with INT_FITS_IN_JSVAL) Added support in CResponse.cpp for client trigger word for securing containers in houses - TW_HOUSESECURE Updated CMulHandler::CheckStaticFlag() to match with statics that cover/extend across the specified Z coordinate, not just ones that have the same base Z level Updated CMulHandler::DoesMapBlock() to not deem map tiles as blocking if they are more than 16 Z (height of a character) higher than the specified Z coordinate to check Exposed method for finding corners of a multi to JS engine: .GetMultiCorner( cornerID ) - Gets coordinates for specified corner of multi (0 = NW, 1 = NE, 2 = SW, 3 = SE) Exposed various functions related to map, statics and multis to JS engine: CalcMultiFromSer( serial ) - Find a multi from a provided serial GetMapElevation( x, y, z, world) - Returns the map elevation at specified coordinates IsInBuilding( x, y, z, world, instance, checkHeight ) - Returns true if the specified location is inside a static building (underneath static items), or if player is inside a multi. If the checkHeight argument is true, player is only deemed inside a multi if there are multi-items above the player's head. If player is in a courtyard/on a rooftop, they will be deemed to be NOT in the building. checkHeight is not used for the static part of the function. CheckStaticFlag( x, y, z, world, tileFlagID ) - Checks to see if any statics at given coordinates has specified tile flag DoesStaticBlock( x, y, z, world, checkWater ) - Checks if statics at/above given location blocks characters DoesDynamicBlock( x, y, z, world, instance, checkWater, waterWalk ) - Checks if dynamics at/above given location blocks characters DoesMapBlock( x, y, z, world, checkWater, waterWalk ) - Checks if map tile at/above given location blocks characters
2020-10-05 23:12:34 +08:00
case CSOCKP_TEMPOBJ2: // Reserved for JS usage
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
if( *vp == JSVAL_NULL )
{
2021-06-12 07:30:23 -04:00
gPriv->TempObj2( nullptr );
}
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
else
{
2022-11-27 17:13:18 -05:00
gPriv->TempObj2( static_cast<CBaseObject *>( encaps.toObject() ));
}
2022-11-27 17:13:18 -05:00
break;
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
case CSOCKP_XTEXT: gPriv->XText( encaps.toString() ); break;
UOX3 0.99.6-RC4 Fixed an issue that prevented onBuyFromVendor() and onBoughtFromVendor() JS Events from triggering when attached to NPC shopkeepers Fixed an issue with help gump that prevented password management section from working as intended (js/server/misc/helpgump.js) Fixed an issue where UOX3 would fail to load pre-HS multi.mul files Added chess board to Misc->Games add menu (dfndata/items/ItemMenu.bulk.dfn) Fixed an issue with 'move (alias for 'telestuff) command that referenced the wrong variable name (js/commands/targeting/tele.js) When a player is teleported via the GM 'wholist menu, any pets within range are now also brought along for the ride Consolidated error-reporting for JS Functions, Object Methods and Object Properties to provide more context (scriptID, filename, line number) when something goes wrong Added some missing shield IDs (0xA649, 0xA64A, 0xA831, 0xA832) to IsShieldType() function MAXRANGE item property previously only worked for ranged weapons; now it works for melee weapons too, and potentially allows melee weapons with combat range longer than 1 tile MAXRANGE item property can now be used to define max combat range for melee weapons Fixed an issue (non-critical) with .PlaceInPack() JS Method that would cause UOX3 to try adding items marked for deletion to refreshQueue and spam console with errors Added missing AI scripts to summoned Blade Spirits and Energy Vortexes (dfndata/npc/magicsummon.dfn) Fixed an issue with weight calculation for hireling backpacks (js/npc/ai/hireling.js) Fixed an issue with the 'fix command, which would in most cases set character's Z to -1 regardless of location, but now adheres to map elevation instead Fixed an issue with Pack AI (js/npc/ai/pack_ai.js) that prevented pack members from attacking target correctly (thanks Dragon Slayer) Fixed an issue with DoesMapBlock JS Function that incorrectly checked for 6 function arguments, when it actually requires 8 Fixed an issue with DoesDynamicBlock JS Function that incorrectly checked for 8 function arguments, when it actually requires 9 Fixed an issue with runebook script (js/item/runebook.js) that prevented players from being able to use recall charges without having spellbook with spell in inventory Fixed issues with placement of tall items on ground/floor, and with stacking of items in houses Fixed incorrect alias for woodland armor (dfndata/items/gear/armor/other/armor/wood.dfn - thanks Dragon Slayer) Fixed a critical issue with script context sometimes changing while executing a script, because of events in other scripts being triggered. Affected scripts can be safeguarded against this by the addition of a dummy callback function anywhere in the script: function _restorecontext_() {} Fixed an issue with non-animal pets not gaining loyalty when being fed (thanks Dragon Slayer) Added new JS Object Methods for Chars/Items/Multis to fetch list of custom tags associated with object: .GetTagMap() // Gets list of persistent custom tags associated with object .GetTempTagMap() // Gets list of temporary custom tags associated with object Added new JS commands ('GETTAGMAP and 'GETTEMPTAGMAP) that spits out details of custom tags associated with targeted object (js/commands/custom/misc-cmd.js) Added new JS command ('USEITEM) that acts as a short-cut for double-clicking on targeted item (js/commands/custom/misc-cmd.js) Updated 'ADD # and 'ADD ITEM # JS commands to support targeting a container directly and adding the new item inside (js/commands/targeting/add.js) Updated axe script to only perform lumberjacking skill-check when there's still wood available in a given area, and to play appropriate animations for Gargoyle players (js/item/axe.js) Updated script for gameboards to make generated pieces newbiefied so they won't appear on ground if board decays (js/item/gameboards.js) Updated script for stablemasters to avoid relying on global variables (js/npc/ai/stablemaster.js) Updated names of items crafted with runic hammers to include the material name of the hammers used to craft them (js/skill/craft/crafting_complete.js) Fixed a small issue with Detect Hidden skill that would return the wrong message if players found anyone hiding nearby (js/skill/detecthidden.js) Fixed an issue that prevented tile overrides in dfndata/maps/tiles.dfn from loading properly Added entries for a couple of walls with missing no-shoot flags to tile overrides in dfndata/maps/tiles.dfn Updated JS Method .SoundEffect() to support optional third argument (creatureSoundNum) to play creature-defined sounds from dfndata/creatures/creatures.dfn. New syntax: .SoundEffect( soundID, allHear[, creatureSoundNum] ) // 0=SOUND_STARTATTACK, 1=SOUND_IDLE, 2=SOUND_ATTACK, 3=SOUND_DEFEND, 4=SOUND_DIE Added new Character JS Methods: .SetRandomName( nameListID ) // apply a random name from specified namelist to character .FindItemSection( sectionID ) // find item in player's backpack with specified sectionID Added new Socket JS Method: .OpenContainer() // Opens specified container for socket
2023-05-30 01:47:26 +08:00
case CSOCKP_XTEXT2: gPriv->XText2( encaps.toString() ); break;
case CSOCKP_CLICKZ: gPriv->ClickZ( static_cast<SI08>( encaps.toInt() )); break;
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
case CSOCKP_NEWCLIENT: gPriv->NewClient( encaps.toBool() ); break;
case CSOCKP_FIRSTPACKET: gPriv->FirstPacket( encaps.toBool() ); break;
case CSOCKP_CRYPTCLIENT: gPriv->CryptClient( encaps.toBool() ); break;
case CSOCKP_WALKSEQUENCE: gPriv->WalkSequence( static_cast<SI16>( encaps.toInt() )); break;
case CSOCKP_CURRENTSPELLTYPE: gPriv->CurrentSpellType( static_cast<SI08>( encaps.toInt() )); break;
case CSOCKP_LOGGING: gPriv->Logging( encaps.toBool() ); break;
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
case CSOCKP_BYTESSENT:
case CSOCKP_BYTESRECEIVED:
break;
case CSOCKP_TARGETOK: gPriv->TargetOK( encaps.toBool() ); break;
case CSOCKP_CLICKX: gPriv->ClickX( static_cast<SI16>( encaps.toInt() )); break;
case CSOCKP_CLICKY: gPriv->ClickY( static_cast<SI16>( encaps.toInt() )); break;
case CSOCKP_PICKUPX: gPriv->PickupX( static_cast<SI16>( encaps.toInt() )); break;
case CSOCKP_PICKUPY: gPriv->PickupY( static_cast<SI16>( encaps.toInt() )); break;
case CSOCKP_PICKUPZ: gPriv->PickupZ( static_cast<SI08>( encaps.toInt() )); break;
case CSOCKP_PICKUPSPOT: gPriv->PickupSpot( static_cast<PickupLocations>( encaps.toInt() )); break;
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
case CSOCKP_PICKUPSERIAL:
break;
case CSOCKP_LANGUAGE: gPriv->Language( static_cast<UnicodeTypes>( encaps.toInt() )); break;
case CSOCKP_CLIENTMAJORVER: gPriv->ClientVersionMajor( static_cast<UI08>( encaps.toInt() )); break;
case CSOCKP_CLIENTMINORVER: gPriv->ClientVersionMinor( static_cast<UI08>( encaps.toInt() )); break;
case CSOCKP_CLIENTSUBVER: gPriv->ClientVersionSub( static_cast<UI08>( encaps.toInt() )); break;
case CSOCKP_CLIENTLETTERVER: gPriv->ClientVersionLetter( static_cast<UI08>( encaps.toInt() )); break;
case CSOCKP_CLIENTTYPE: gPriv->ClientType( static_cast<ClientTypes>( encaps.toInt() )); break;
Implementation of speedhack anti-cheat system - [ADD] Introduction of speedhack anti-cheat system which can detect when players are moving faster than intended and throttle them (default) while also allowing custom reactions via JS events. This system is governed by the following new settings in [anticheat] section of uox.ini: - SPEEDHACKDETECTION=1 // Enables/disables speedhack detection system - SPEEDHACKTHROTTLEPENALTY=2000 // Movement throttle penalty (in ms) applied when speedhack is detected - SPEEDHACKMAXDEBT=350 // Max movement debt (in ms) player can accumulate before throttling occurs - SPEEDHACKMAXDEBTAVG=0.5 // Max (moving) average debt as a factor of SPEEDHACKMAXDEBT player can accumulate before triggering logging for suspicious activity - SPEEDHACKMAXCREDIT=-75 // Movement credit (in ms) that acts as buffer for regular players against jitter, lag, etc - SPEEDHACKGRACETHRESHOLD=2000 // Grace threshold to handle large server/network lag spikes. - [ADD] Added new JS Events that allow reactions to detection/suspicion of speedhacking: - onSpeedHackDetection( pChar, deltaTime ) // Triggers when a player has crossed max threshold for speedhack detection - onSpeedHackSuspicion( pChar, rawMoveDebt, deltaTime ) // Triggers when a player has consistently crossed threshold for speedhack suspicion - [ADD] New JS Socket Properties: - .moveDebt // Accumulated time debt in ms indicating whether player's movement packets arrive early (potential speeding) or late (lag) - .moveDebtAvg // Accumulated time debt in ms, on average over at least 100 samples - .moveBurstAllowance // Number of upcoming movement steps that will be processed without incurring debt or penalty - .nextMoveTime // Timestamp in ms for when next valid movement packet is expected to arrive - [ADD] Added new system timers for Sockets and exposed to JS: - TIMER.SPEEDHACKPENALTY // Time until next time player is allowed to move after getting throttled by anti-cheat - TIMER.SPEEDHACKLOGGED // Time until next time suspicious speed-hack related behavior is logged - [FIX] Fixed a 20+ year old movement desynch bug that would cause players to start rubberbanding after taking ~255 steps - [UPD] Updated UOX3 and JS documentation with entries related to the new anti-cheat system, - [UPD] Updated dictionary files with new system message for anticheat, and addressed some duplicate ID issues
2025-12-13 01:31:17 +08:00
case CSOCKP_MOVEDEBT: gPriv->MovementDebt( static_cast<SI32>( encaps.toInt() )); break;
case CSOCKP_MOVEDEBTAVG: gPriv->MovementDebtAverage( static_cast<SI32>( encaps.toInt() )); break;
case CSOCKP_MOVEBURSTALLOWANCE: gPriv->MovementBurstAllowance( static_cast<UI08>( encaps.toInt() ));break;
case CSOCKP_NEXTMOVETIME:
{
jsdouble newTime_double;
JS_ValueToNumber( cx, *vp, &newTime_double );
gPriv->NextMovementTime( static_cast<TIMERVAL>( newTime_double ));
break;
}
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
default:
break;
2002-04-07 20:53:41 +00:00
}
}
UOX3 0.99.6-RC4 Fixed an issue that prevented onBuyFromVendor() and onBoughtFromVendor() JS Events from triggering when attached to NPC shopkeepers Fixed an issue with help gump that prevented password management section from working as intended (js/server/misc/helpgump.js) Fixed an issue where UOX3 would fail to load pre-HS multi.mul files Added chess board to Misc->Games add menu (dfndata/items/ItemMenu.bulk.dfn) Fixed an issue with 'move (alias for 'telestuff) command that referenced the wrong variable name (js/commands/targeting/tele.js) When a player is teleported via the GM 'wholist menu, any pets within range are now also brought along for the ride Consolidated error-reporting for JS Functions, Object Methods and Object Properties to provide more context (scriptID, filename, line number) when something goes wrong Added some missing shield IDs (0xA649, 0xA64A, 0xA831, 0xA832) to IsShieldType() function MAXRANGE item property previously only worked for ranged weapons; now it works for melee weapons too, and potentially allows melee weapons with combat range longer than 1 tile MAXRANGE item property can now be used to define max combat range for melee weapons Fixed an issue (non-critical) with .PlaceInPack() JS Method that would cause UOX3 to try adding items marked for deletion to refreshQueue and spam console with errors Added missing AI scripts to summoned Blade Spirits and Energy Vortexes (dfndata/npc/magicsummon.dfn) Fixed an issue with weight calculation for hireling backpacks (js/npc/ai/hireling.js) Fixed an issue with the 'fix command, which would in most cases set character's Z to -1 regardless of location, but now adheres to map elevation instead Fixed an issue with Pack AI (js/npc/ai/pack_ai.js) that prevented pack members from attacking target correctly (thanks Dragon Slayer) Fixed an issue with DoesMapBlock JS Function that incorrectly checked for 6 function arguments, when it actually requires 8 Fixed an issue with DoesDynamicBlock JS Function that incorrectly checked for 8 function arguments, when it actually requires 9 Fixed an issue with runebook script (js/item/runebook.js) that prevented players from being able to use recall charges without having spellbook with spell in inventory Fixed issues with placement of tall items on ground/floor, and with stacking of items in houses Fixed incorrect alias for woodland armor (dfndata/items/gear/armor/other/armor/wood.dfn - thanks Dragon Slayer) Fixed a critical issue with script context sometimes changing while executing a script, because of events in other scripts being triggered. Affected scripts can be safeguarded against this by the addition of a dummy callback function anywhere in the script: function _restorecontext_() {} Fixed an issue with non-animal pets not gaining loyalty when being fed (thanks Dragon Slayer) Added new JS Object Methods for Chars/Items/Multis to fetch list of custom tags associated with object: .GetTagMap() // Gets list of persistent custom tags associated with object .GetTempTagMap() // Gets list of temporary custom tags associated with object Added new JS commands ('GETTAGMAP and 'GETTEMPTAGMAP) that spits out details of custom tags associated with targeted object (js/commands/custom/misc-cmd.js) Added new JS command ('USEITEM) that acts as a short-cut for double-clicking on targeted item (js/commands/custom/misc-cmd.js) Updated 'ADD # and 'ADD ITEM # JS commands to support targeting a container directly and adding the new item inside (js/commands/targeting/add.js) Updated axe script to only perform lumberjacking skill-check when there's still wood available in a given area, and to play appropriate animations for Gargoyle players (js/item/axe.js) Updated script for gameboards to make generated pieces newbiefied so they won't appear on ground if board decays (js/item/gameboards.js) Updated script for stablemasters to avoid relying on global variables (js/npc/ai/stablemaster.js) Updated names of items crafted with runic hammers to include the material name of the hammers used to craft them (js/skill/craft/crafting_complete.js) Fixed a small issue with Detect Hidden skill that would return the wrong message if players found anyone hiding nearby (js/skill/detecthidden.js) Fixed an issue that prevented tile overrides in dfndata/maps/tiles.dfn from loading properly Added entries for a couple of walls with missing no-shoot flags to tile overrides in dfndata/maps/tiles.dfn Updated JS Method .SoundEffect() to support optional third argument (creatureSoundNum) to play creature-defined sounds from dfndata/creatures/creatures.dfn. New syntax: .SoundEffect( soundID, allHear[, creatureSoundNum] ) // 0=SOUND_STARTATTACK, 1=SOUND_IDLE, 2=SOUND_ATTACK, 3=SOUND_DEFEND, 4=SOUND_DIE Added new Character JS Methods: .SetRandomName( nameListID ) // apply a random name from specified namelist to character .FindItemSection( sectionID ) // find item in player's backpack with specified sectionID Added new Socket JS Method: .OpenContainer() // Opens specified container for socket
2023-05-30 01:47:26 +08:00
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
return JS_TRUE;
}
2002-04-07 20:53:41 +00:00
2025-03-28 10:23:27 +10:00
JSBool CSocketProps_getProperty( JSContext *cx, JSObject *obj, jsid id, jsval *vp )
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
{
CSocket *gPriv = static_cast<CSocket *>( JS_GetPrivate( cx, obj ));
2021-06-12 07:30:23 -04:00
if( gPriv == nullptr )
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
return JS_FALSE;
UI16 propID = getScriptID( cx, id, JSP_SOCK );
if( propID != 0xFFFF )
2002-04-07 20:53:41 +00:00
{
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
CChar *myChar;
2021-06-12 07:30:23 -04:00
JSString *tString = nullptr;
switch( propID )
2002-04-07 20:53:41 +00:00
{
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
case CSOCKP_ACCOUNT:
{
CAccountBlock_st *accountBlock = &gPriv->GetAccount();
if( accountBlock == nullptr )
{
*vp = JSVAL_NULL;
}
else
{ // Otherwise Acquire an object
JSObject *accountObj = JSEngine->AcquireObject( IUE_ACCOUNT, accountBlock, JSEngine->FindActiveRuntime( JS_GetRuntime( cx )));
*vp = OBJECT_TO_JSVAL( accountObj );
}
break;
}
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
case CSOCKP_CURRENTCHAR:
{
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
myChar = gPriv->CurrcharObj();
if( !ValidateObject( myChar ))
{
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
*vp = JSVAL_NULL;
}
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
else
{
JSObject *myObj = JSEngine->AcquireObject( IUE_CHAR, myChar, JSEngine->FindActiveRuntime( JS_GetRuntime( cx )));
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
*vp = OBJECT_TO_JSVAL( myObj );
}
break;
}
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
case CSOCKP_IDLETIMEOUT:
break;
case CSOCKP_WASIDLEWARNED: *vp = BOOLEAN_TO_JSVAL( gPriv->WasIdleWarned() ); break;
case CSOCKP_TEMPINT: *vp = INT_TO_JSVAL( gPriv->TempInt() ); break;
case CSOCKP_TEMPINT2: *vp = INT_TO_JSVAL( gPriv->TempInt2() ); break;
case CSOCKP_TEMPOBJ:
2002-04-07 20:53:41 +00:00
{
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
CBaseObject *mObj = gPriv->TempObj();
if( !ValidateObject( mObj ))
{
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
*vp = JSVAL_NULL;
}
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
else
{
2021-06-12 07:30:23 -04:00
JSObject *myObj = nullptr;
if( mObj->CanBeObjType( OT_ITEM ))
{
myObj = JSEngine->AcquireObject( IUE_ITEM, mObj, JSEngine->FindActiveRuntime( JS_GetRuntime( cx )));
}
else
{
myObj = JSEngine->AcquireObject( IUE_CHAR, mObj, JSEngine->FindActiveRuntime( JS_GetRuntime( cx )));
}
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
*vp = OBJECT_TO_JSVAL( myObj );
}
break;
}
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
case CSOCKP_TEMPOBJ2:
{
CBaseObject *mObj = gPriv->TempObj2();
if( !ValidateObject( mObj ))
{
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
*vp = JSVAL_NULL;
}
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
else
{
2021-06-12 07:30:23 -04:00
JSObject *myObj = nullptr;
if( mObj->CanBeObjType( OT_ITEM ))
{
myObj = JSEngine->AcquireObject( IUE_ITEM, mObj, JSEngine->FindActiveRuntime( JS_GetRuntime( cx )));
}
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
else
{
myObj = JSEngine->AcquireObject( IUE_CHAR, mObj, JSEngine->FindActiveRuntime( JS_GetRuntime( cx )));
}
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
*vp = OBJECT_TO_JSVAL( myObj );
}
}
break;
case CSOCKP_XTEXT:
tString = JS_NewStringCopyZ( cx, gPriv->XText().c_str() );
*vp = STRING_TO_JSVAL( tString ); break;
UOX3 0.99.6-RC4 Fixed an issue that prevented onBuyFromVendor() and onBoughtFromVendor() JS Events from triggering when attached to NPC shopkeepers Fixed an issue with help gump that prevented password management section from working as intended (js/server/misc/helpgump.js) Fixed an issue where UOX3 would fail to load pre-HS multi.mul files Added chess board to Misc->Games add menu (dfndata/items/ItemMenu.bulk.dfn) Fixed an issue with 'move (alias for 'telestuff) command that referenced the wrong variable name (js/commands/targeting/tele.js) When a player is teleported via the GM 'wholist menu, any pets within range are now also brought along for the ride Consolidated error-reporting for JS Functions, Object Methods and Object Properties to provide more context (scriptID, filename, line number) when something goes wrong Added some missing shield IDs (0xA649, 0xA64A, 0xA831, 0xA832) to IsShieldType() function MAXRANGE item property previously only worked for ranged weapons; now it works for melee weapons too, and potentially allows melee weapons with combat range longer than 1 tile MAXRANGE item property can now be used to define max combat range for melee weapons Fixed an issue (non-critical) with .PlaceInPack() JS Method that would cause UOX3 to try adding items marked for deletion to refreshQueue and spam console with errors Added missing AI scripts to summoned Blade Spirits and Energy Vortexes (dfndata/npc/magicsummon.dfn) Fixed an issue with weight calculation for hireling backpacks (js/npc/ai/hireling.js) Fixed an issue with the 'fix command, which would in most cases set character's Z to -1 regardless of location, but now adheres to map elevation instead Fixed an issue with Pack AI (js/npc/ai/pack_ai.js) that prevented pack members from attacking target correctly (thanks Dragon Slayer) Fixed an issue with DoesMapBlock JS Function that incorrectly checked for 6 function arguments, when it actually requires 8 Fixed an issue with DoesDynamicBlock JS Function that incorrectly checked for 8 function arguments, when it actually requires 9 Fixed an issue with runebook script (js/item/runebook.js) that prevented players from being able to use recall charges without having spellbook with spell in inventory Fixed issues with placement of tall items on ground/floor, and with stacking of items in houses Fixed incorrect alias for woodland armor (dfndata/items/gear/armor/other/armor/wood.dfn - thanks Dragon Slayer) Fixed a critical issue with script context sometimes changing while executing a script, because of events in other scripts being triggered. Affected scripts can be safeguarded against this by the addition of a dummy callback function anywhere in the script: function _restorecontext_() {} Fixed an issue with non-animal pets not gaining loyalty when being fed (thanks Dragon Slayer) Added new JS Object Methods for Chars/Items/Multis to fetch list of custom tags associated with object: .GetTagMap() // Gets list of persistent custom tags associated with object .GetTempTagMap() // Gets list of temporary custom tags associated with object Added new JS commands ('GETTAGMAP and 'GETTEMPTAGMAP) that spits out details of custom tags associated with targeted object (js/commands/custom/misc-cmd.js) Added new JS command ('USEITEM) that acts as a short-cut for double-clicking on targeted item (js/commands/custom/misc-cmd.js) Updated 'ADD # and 'ADD ITEM # JS commands to support targeting a container directly and adding the new item inside (js/commands/targeting/add.js) Updated axe script to only perform lumberjacking skill-check when there's still wood available in a given area, and to play appropriate animations for Gargoyle players (js/item/axe.js) Updated script for gameboards to make generated pieces newbiefied so they won't appear on ground if board decays (js/item/gameboards.js) Updated script for stablemasters to avoid relying on global variables (js/npc/ai/stablemaster.js) Updated names of items crafted with runic hammers to include the material name of the hammers used to craft them (js/skill/craft/crafting_complete.js) Fixed a small issue with Detect Hidden skill that would return the wrong message if players found anyone hiding nearby (js/skill/detecthidden.js) Fixed an issue that prevented tile overrides in dfndata/maps/tiles.dfn from loading properly Added entries for a couple of walls with missing no-shoot flags to tile overrides in dfndata/maps/tiles.dfn Updated JS Method .SoundEffect() to support optional third argument (creatureSoundNum) to play creature-defined sounds from dfndata/creatures/creatures.dfn. New syntax: .SoundEffect( soundID, allHear[, creatureSoundNum] ) // 0=SOUND_STARTATTACK, 1=SOUND_IDLE, 2=SOUND_ATTACK, 3=SOUND_DEFEND, 4=SOUND_DIE Added new Character JS Methods: .SetRandomName( nameListID ) // apply a random name from specified namelist to character .FindItemSection( sectionID ) // find item in player's backpack with specified sectionID Added new Socket JS Method: .OpenContainer() // Opens specified container for socket
2023-05-30 01:47:26 +08:00
case CSOCKP_XTEXT2:
tString = JS_NewStringCopyZ( cx, gPriv->XText2().c_str() );
*vp = STRING_TO_JSVAL( tString ); break;
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
case CSOCKP_CLICKZ: *vp = INT_TO_JSVAL( gPriv->ClickZ() ); break;
case CSOCKP_NEWCLIENT: *vp = BOOLEAN_TO_JSVAL( gPriv->NewClient() ); break;
case CSOCKP_FIRSTPACKET: *vp = BOOLEAN_TO_JSVAL( gPriv->FirstPacket() ); break;
case CSOCKP_CRYPTCLIENT: *vp = BOOLEAN_TO_JSVAL( gPriv->CryptClient() ); break;
case CSOCKP_WALKSEQUENCE: *vp = INT_TO_JSVAL( gPriv->WalkSequence() ); break;
case CSOCKP_CURRENTSPELLTYPE: *vp = INT_TO_JSVAL( gPriv->CurrentSpellType() ); break;
case CSOCKP_LOGGING: *vp = BOOLEAN_TO_JSVAL( gPriv->Logging() ); break;
case CSOCKP_BYTESSENT: *vp = INT_TO_JSVAL( gPriv->BytesSent() ); break;
case CSOCKP_BYTESRECEIVED: *vp = INT_TO_JSVAL( gPriv->BytesReceived() ); break;
case CSOCKP_TARGETOK: *vp = BOOLEAN_TO_JSVAL( gPriv->TargetOK() ); break;
case CSOCKP_CLICKX: *vp = INT_TO_JSVAL( gPriv->ClickX() ); break;
case CSOCKP_CLICKY: *vp = INT_TO_JSVAL( gPriv->ClickY() ); break;
case CSOCKP_PICKUPX: *vp = INT_TO_JSVAL( gPriv->PickupX() ); break;
case CSOCKP_PICKUPY: *vp = INT_TO_JSVAL( gPriv->PickupY() ); break;
case CSOCKP_PICKUPZ: *vp = INT_TO_JSVAL( gPriv->PickupZ() ); break;
case CSOCKP_PICKUPSPOT: *vp = INT_TO_JSVAL( gPriv->PickupSpot() ); break;
case CSOCKP_PICKUPSERIAL:
break;
case CSOCKP_LANGUAGE: *vp = INT_TO_JSVAL( gPriv->Language() ); break;
case CSOCKP_CLIENTMAJORVER: *vp = INT_TO_JSVAL( gPriv->ClientVersionMajor() ); break;
case CSOCKP_CLIENTMINORVER: *vp = INT_TO_JSVAL( gPriv->ClientVersionMinor() ); break;
case CSOCKP_CLIENTSUBVER: *vp = INT_TO_JSVAL( gPriv->ClientVersionSub() ); break;
case CSOCKP_CLIENTLETTERVER: *vp = INT_TO_JSVAL( gPriv->ClientVersionLetter() ); break;
case CSOCKP_CLIENTTYPE: *vp = INT_TO_JSVAL( gPriv->ClientType() ); break;
Implementation of speedhack anti-cheat system - [ADD] Introduction of speedhack anti-cheat system which can detect when players are moving faster than intended and throttle them (default) while also allowing custom reactions via JS events. This system is governed by the following new settings in [anticheat] section of uox.ini: - SPEEDHACKDETECTION=1 // Enables/disables speedhack detection system - SPEEDHACKTHROTTLEPENALTY=2000 // Movement throttle penalty (in ms) applied when speedhack is detected - SPEEDHACKMAXDEBT=350 // Max movement debt (in ms) player can accumulate before throttling occurs - SPEEDHACKMAXDEBTAVG=0.5 // Max (moving) average debt as a factor of SPEEDHACKMAXDEBT player can accumulate before triggering logging for suspicious activity - SPEEDHACKMAXCREDIT=-75 // Movement credit (in ms) that acts as buffer for regular players against jitter, lag, etc - SPEEDHACKGRACETHRESHOLD=2000 // Grace threshold to handle large server/network lag spikes. - [ADD] Added new JS Events that allow reactions to detection/suspicion of speedhacking: - onSpeedHackDetection( pChar, deltaTime ) // Triggers when a player has crossed max threshold for speedhack detection - onSpeedHackSuspicion( pChar, rawMoveDebt, deltaTime ) // Triggers when a player has consistently crossed threshold for speedhack suspicion - [ADD] New JS Socket Properties: - .moveDebt // Accumulated time debt in ms indicating whether player's movement packets arrive early (potential speeding) or late (lag) - .moveDebtAvg // Accumulated time debt in ms, on average over at least 100 samples - .moveBurstAllowance // Number of upcoming movement steps that will be processed without incurring debt or penalty - .nextMoveTime // Timestamp in ms for when next valid movement packet is expected to arrive - [ADD] Added new system timers for Sockets and exposed to JS: - TIMER.SPEEDHACKPENALTY // Time until next time player is allowed to move after getting throttled by anti-cheat - TIMER.SPEEDHACKLOGGED // Time until next time suspicious speed-hack related behavior is logged - [FIX] Fixed a 20+ year old movement desynch bug that would cause players to start rubberbanding after taking ~255 steps - [UPD] Updated UOX3 and JS documentation with entries related to the new anti-cheat system, - [UPD] Updated dictionary files with new system message for anticheat, and addressed some duplicate ID issues
2025-12-13 01:31:17 +08:00
case CSOCKP_MOVEDEBT: *vp = INT_TO_JSVAL( gPriv->MovementDebt() ); break;
case CSOCKP_MOVEDEBTAVG: *vp = INT_TO_JSVAL( gPriv->MovementDebtAverage() ); break;
case CSOCKP_MOVEBURSTALLOWANCE: *vp = INT_TO_JSVAL( gPriv->MovementBurstAllowance() ); break;
case CSOCKP_NEXTMOVETIME: JS_NewNumberValue( cx, gPriv->NextMovementTime(), vp ); break;
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
case CSOCKP_TARGET:
{
SERIAL mySerial = gPriv->GetDWord( 7 );
// Item
if( mySerial >= BASEITEMSERIAL )
{
CItem *myItem = CalcItemObjFromSer( mySerial );
2002-04-07 20:53:41 +00:00
if( !ValidateObject( myItem ))
{
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
*vp = JSVAL_NULL;
return JS_TRUE;
}
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
JSObject *myObj = JSEngine->AcquireObject( IUE_ITEM, myItem, JSEngine->FindActiveRuntime( JS_GetRuntime( cx )));
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
*vp = OBJECT_TO_JSVAL( myObj );
}
// Char
else
{
CChar *myChar = CalcCharObjFromSer( mySerial );
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
if( !ValidateObject( myChar ))
{
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
*vp = JSVAL_NULL;
return JS_TRUE;
}
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
JSObject *myObj = JSEngine->AcquireObject( IUE_CHAR, myChar, JSEngine->FindActiveRuntime( JS_GetRuntime( cx )));
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
*vp = OBJECT_TO_JSVAL( myObj );
}
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
return JS_TRUE;
}
break;
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
default:
break;
}
}
return JS_TRUE;
}
2025-03-28 13:23:59 +10:00
JSBool CSkillsProps_getProperty( JSContext *cx, JSObject *obj, jsid id, jsval *vp )
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
{
JSEncapsulate myClass( cx, obj );
CChar *myChar = static_cast<CChar*>( myClass.toObject() );
if( !ValidateObject( myChar ))
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
return JS_FALSE;
UI08 skillId = static_cast<UI08>( JSID_TO_INT( id ));
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
if( myClass.ClassName() == "UOXSkills" )
{
*vp = INT_TO_JSVAL( myChar->GetSkill( skillId ));
}
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
else if( myClass.ClassName() == "UOXBaseSkills" )
{
*vp = INT_TO_JSVAL( myChar->GetBaseSkill( skillId ));
}
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
else if( myClass.ClassName() == "UOXSkillsUsed" )
{
*vp = BOOLEAN_TO_JSVAL( myChar->SkillUsed( skillId ));
}
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
else if( myClass.ClassName() == "UOXSkillsLock" )
{
*vp = INT_TO_JSVAL( static_cast<UI08>( myChar->GetSkillLock( skillId )));
}
2025-02-10 11:20:47 -06:00
else if( myClass.ClassName() == "UOXSkillsCap" )
{
*vp = INT_TO_JSVAL( myChar->GetSkillCap( skillId ));
}
2002-04-07 20:53:41 +00:00
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
return JS_TRUE;
}
2002-04-07 20:53:41 +00:00
JSBool CSkillsProps_setProperty( JSContext* cx, JSObject* obj, jsid id, JSBool strict, jsval* vp )
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
{
JSEncapsulate myClass( cx, obj );
CChar *myChar = static_cast<CChar*>( myClass.toObject() );
2002-04-07 20:53:41 +00:00
if( !ValidateObject( myChar ))
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
return JS_FALSE;
2002-04-07 20:53:41 +00:00
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
JSEncapsulate encaps( cx, vp );
2025-04-07 14:11:13 +10:00
UI16 propID = getScriptID( cx, id, JSP_GLOBALSKILLS );
UI08 skillId = static_cast<UI08>( propID );
SI16 newSkillValue = static_cast<SI16>( encaps.toInt() );
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
UI08 i = 0;
if( myClass.ClassName() == "UOXSkills" )
{
if( skillId == ALLSKILLS )
{
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
for( i = 0; i < ALLSKILLS; ++i )
2002-04-07 20:53:41 +00:00
{
myChar->SetSkill( newSkillValue, i );
2002-04-07 20:53:41 +00:00
}
}
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
else
{
myChar->SetSkill( newSkillValue, skillId );
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
}
}
else if( myClass.ClassName() == "UOXBaseSkills" )
{
if( skillId == ALLSKILLS )
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
{
for( i = 0; i < ALLSKILLS; ++i )
2002-04-07 20:53:41 +00:00
{
myChar->SetBaseSkill( newSkillValue, i );
Skills->UpdateSkillLevel( myChar, i );
2002-04-07 20:53:41 +00:00
}
}
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
else
2002-04-07 20:53:41 +00:00
{
myChar->SetBaseSkill( newSkillValue, skillId );
Skills->UpdateSkillLevel( myChar, skillId );
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
}
}
else if( myClass.ClassName() == "UOXSkillsUsed" )
{
if( skillId == ALLSKILLS )
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
{
for( i = 0; i < ALLSKILLS; ++i )
2002-04-07 20:53:41 +00:00
{
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
myChar->SkillUsed( encaps.toBool(), i );
2003-03-05 02:29:44 +00:00
}
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
}
else
{
myChar->SkillUsed( encaps.toBool(), skillId );
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
}
}
else if( myClass.ClassName() == "UOXSkillsLock" )
{
if( skillId == ALLSKILLS )
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
{
for( i = 0; i < ALLSKILLS; ++i )
2003-03-05 02:29:44 +00:00
{
myChar->SetSkillLock( static_cast<SkillLock>( newSkillValue ), i );
2002-04-07 20:53:41 +00:00
}
}
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
else
{
myChar->SetSkillLock( static_cast<SkillLock>( newSkillValue ), skillId );
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
}
}
2025-02-10 11:20:47 -06:00
else if( myClass.ClassName() == "UOXSkillsCap" )
{
if( skillId == ALLSKILLS )
{
for( i = 0; i < ALLSKILLS; ++i )
{
myChar->SetSkillCap( newSkillValue, i );
}
}
else
{
myChar->SetSkillCap( newSkillValue, skillId );
}
}
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
if( !myChar->IsNpc() )
{
CSocket *toFind = myChar->GetSocket();
2021-06-12 07:30:23 -04:00
if( toFind != nullptr )
{
if( skillId == ALLSKILLS )
2002-04-07 20:53:41 +00:00
{
for( i = 0; i < ALLSKILLS; ++i )
{
toFind->UpdateSkill( i );
}
2002-04-07 20:53:41 +00:00
}
else
{
toFind->UpdateSkill( skillId );
2002-04-07 20:53:41 +00:00
}
}
}
UOX3 0.99.6-RC4 Fixed an issue that prevented onBuyFromVendor() and onBoughtFromVendor() JS Events from triggering when attached to NPC shopkeepers Fixed an issue with help gump that prevented password management section from working as intended (js/server/misc/helpgump.js) Fixed an issue where UOX3 would fail to load pre-HS multi.mul files Added chess board to Misc->Games add menu (dfndata/items/ItemMenu.bulk.dfn) Fixed an issue with 'move (alias for 'telestuff) command that referenced the wrong variable name (js/commands/targeting/tele.js) When a player is teleported via the GM 'wholist menu, any pets within range are now also brought along for the ride Consolidated error-reporting for JS Functions, Object Methods and Object Properties to provide more context (scriptID, filename, line number) when something goes wrong Added some missing shield IDs (0xA649, 0xA64A, 0xA831, 0xA832) to IsShieldType() function MAXRANGE item property previously only worked for ranged weapons; now it works for melee weapons too, and potentially allows melee weapons with combat range longer than 1 tile MAXRANGE item property can now be used to define max combat range for melee weapons Fixed an issue (non-critical) with .PlaceInPack() JS Method that would cause UOX3 to try adding items marked for deletion to refreshQueue and spam console with errors Added missing AI scripts to summoned Blade Spirits and Energy Vortexes (dfndata/npc/magicsummon.dfn) Fixed an issue with weight calculation for hireling backpacks (js/npc/ai/hireling.js) Fixed an issue with the 'fix command, which would in most cases set character's Z to -1 regardless of location, but now adheres to map elevation instead Fixed an issue with Pack AI (js/npc/ai/pack_ai.js) that prevented pack members from attacking target correctly (thanks Dragon Slayer) Fixed an issue with DoesMapBlock JS Function that incorrectly checked for 6 function arguments, when it actually requires 8 Fixed an issue with DoesDynamicBlock JS Function that incorrectly checked for 8 function arguments, when it actually requires 9 Fixed an issue with runebook script (js/item/runebook.js) that prevented players from being able to use recall charges without having spellbook with spell in inventory Fixed issues with placement of tall items on ground/floor, and with stacking of items in houses Fixed incorrect alias for woodland armor (dfndata/items/gear/armor/other/armor/wood.dfn - thanks Dragon Slayer) Fixed a critical issue with script context sometimes changing while executing a script, because of events in other scripts being triggered. Affected scripts can be safeguarded against this by the addition of a dummy callback function anywhere in the script: function _restorecontext_() {} Fixed an issue with non-animal pets not gaining loyalty when being fed (thanks Dragon Slayer) Added new JS Object Methods for Chars/Items/Multis to fetch list of custom tags associated with object: .GetTagMap() // Gets list of persistent custom tags associated with object .GetTempTagMap() // Gets list of temporary custom tags associated with object Added new JS commands ('GETTAGMAP and 'GETTEMPTAGMAP) that spits out details of custom tags associated with targeted object (js/commands/custom/misc-cmd.js) Added new JS command ('USEITEM) that acts as a short-cut for double-clicking on targeted item (js/commands/custom/misc-cmd.js) Updated 'ADD # and 'ADD ITEM # JS commands to support targeting a container directly and adding the new item inside (js/commands/targeting/add.js) Updated axe script to only perform lumberjacking skill-check when there's still wood available in a given area, and to play appropriate animations for Gargoyle players (js/item/axe.js) Updated script for gameboards to make generated pieces newbiefied so they won't appear on ground if board decays (js/item/gameboards.js) Updated script for stablemasters to avoid relying on global variables (js/npc/ai/stablemaster.js) Updated names of items crafted with runic hammers to include the material name of the hammers used to craft them (js/skill/craft/crafting_complete.js) Fixed a small issue with Detect Hidden skill that would return the wrong message if players found anyone hiding nearby (js/skill/detecthidden.js) Fixed an issue that prevented tile overrides in dfndata/maps/tiles.dfn from loading properly Added entries for a couple of walls with missing no-shoot flags to tile overrides in dfndata/maps/tiles.dfn Updated JS Method .SoundEffect() to support optional third argument (creatureSoundNum) to play creature-defined sounds from dfndata/creatures/creatures.dfn. New syntax: .SoundEffect( soundID, allHear[, creatureSoundNum] ) // 0=SOUND_STARTATTACK, 1=SOUND_IDLE, 2=SOUND_ATTACK, 3=SOUND_DEFEND, 4=SOUND_DIE Added new Character JS Methods: .SetRandomName( nameListID ) // apply a random name from specified namelist to character .FindItemSection( sectionID ) // find item in player's backpack with specified sectionID Added new Socket JS Method: .OpenContainer() // Opens specified container for socket
2023-05-30 01:47:26 +08:00
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
return JS_TRUE;
}
2002-04-07 20:53:41 +00:00
2025-03-28 13:23:59 +10:00
JSBool CGumpDataProps_getProperty( JSContext *cx, JSObject *obj, jsid id, jsval *vp )
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
{
SEGumpData_st *gPriv = static_cast<SEGumpData_st *>( JS_GetPrivate( cx, obj ));
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
2021-06-12 07:30:23 -04:00
if( gPriv == nullptr )
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
return JS_FALSE;
if( JSID_IS_INT( id ))
2002-04-07 20:53:41 +00:00
{
switch( JSID_TO_INT( id ))
2002-04-07 20:53:41 +00:00
{
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
case CGumpData_ID:
*vp = INT_TO_JSVAL( gPriv->nIDs.size() );
break;
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
case CGumpData_Button:
*vp = INT_TO_JSVAL( gPriv->nButtons.size() );
break;
default:
break;
2002-04-07 20:53:41 +00:00
}
}
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
return JS_TRUE;
}
2025-03-28 13:23:59 +10:00
JSBool CAccountProps_getProperty( JSContext *cx, JSObject *obj, jsid id, jsval *vp )
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
{
CAccountBlock_st *myAccount = static_cast<CAccountBlock_st *>( JS_GetPrivate( cx, obj ));
2021-06-12 07:30:23 -04:00
if( myAccount == nullptr )
Fixes for Console behaviour on Linux and Windows, addition of JS properties for user accounts Fixed long-standing issue with UOX3 console not resetting terminal properly after shutdown on Linux, after updating cConsole.cpp/h to conform to standard unix terminal commands/settings for certain features (punt) Fixed an issue that could cause a crash on Windows when attempting to broadcast system messages from the UOX3 console (punt) Fixed an issue that prevented text input in UOX3 console for system broadcasts from being displayed on Linux and MacOS (punt) Added support for new JS Object - IUE_ACCOUNT - which can be accessed via character property .account. The following account properties have been exposed to the JS engine: .id // Account ID (Read-Only) .username // Account Username (Read-Only) .flags // Flags set on account (Read-Only) .comment // Comment/contact info .character1 // Character in account slot 1 (Read-Only) .character2 // Character in account slot 2 (Read-Only) .character3 // Character in account slot 3 (Read-Only) .character4 // Character in account slot 4 (Read-Only) .character5 // Character in account slot 5 (Read-Only) .character6 // Character in account slot 6 (Read-Only) .character7 // Character in account slot 7 (Read-Only) .currentChar // Currently logged in character (if any) (Read-Only) .lastIP // Last IP used to connect to account (Read-Only) // Flag shortcuts .isBanned // Is account banned? .isSuspended // Is account suspended? .isPublic // Is comment/contact info to be considered public info? .isOnline // Is account online? .isSlot1Blocked // Is character slot 1 blocked? .isSlot2Blocked // Is character slot 2 blocked? .isSlot3Blocked // Is character slot 3 blocked? .isSlot4Blocked // Is character slot 4 blocked? .isSlot5Blocked // Is character slot 5 blocked? .isSlot6Blocked // Is character slot 6 blocked? .isSlot7Blocked // Is character slot 7 blocked? .unused9 // Unused flag .unused10 // Unused flag .isSeer // Is account marked as Seer account? .isCounselor // Is account marked as Counselor account? .isGM // Is account marked as GM account? Fixed 'addaccount command - can now once again be used to add a new user account to the server from in-game. See accounts.adm for info on available flags. Syntax: 'addaccount [username] [password] [(optional)flags] Updated 'get command to allow retrieving certain account properties for targeted player characters: username, flags, comment, character1, character2, character3, character4, character5, character6, character7, lastIP, isBanned, isSuspended, isPublic, isOnline, isSlot1Blocked, isSlot2Blocked, isSlot3Blocked, isSlot4Blocked, isSlot5Blocked, isSlot6Blocked, isSlot7Blocked, unused9, unused10, isSeer, isCounselor and isGM Updated 'set command to allow setting certain account properties for targeted player characters: comment, password, isBanned, isSuspended, isPublic, isOnline, isSlot1Blocked, isSlot2Blocked, isSlot3Blocked, isSlot4Blocked, isSlot5Blocked, isSlot6Blocked, isSlot7Blocked, unused9, unused10, isSeer, isCounselor, isGM Updated 'tweak command to allow viewing and modifying of certain account properties for targeted player characters Note that any changes to account properties will not go into effect until a worldsave or manual save of accounts via console has taken place. Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2021-04-16 21:14:50 +08:00
return JS_FALSE;
UI16 propID = getScriptID( cx, id, JSP_ACCOUNT );
if( propID != 0xFFFF )
2002-04-07 20:53:41 +00:00
{
2021-06-12 07:30:23 -04:00
JSString *tString = nullptr;
switch( propID )
Fixes for Console behaviour on Linux and Windows, addition of JS properties for user accounts Fixed long-standing issue with UOX3 console not resetting terminal properly after shutdown on Linux, after updating cConsole.cpp/h to conform to standard unix terminal commands/settings for certain features (punt) Fixed an issue that could cause a crash on Windows when attempting to broadcast system messages from the UOX3 console (punt) Fixed an issue that prevented text input in UOX3 console for system broadcasts from being displayed on Linux and MacOS (punt) Added support for new JS Object - IUE_ACCOUNT - which can be accessed via character property .account. The following account properties have been exposed to the JS engine: .id // Account ID (Read-Only) .username // Account Username (Read-Only) .flags // Flags set on account (Read-Only) .comment // Comment/contact info .character1 // Character in account slot 1 (Read-Only) .character2 // Character in account slot 2 (Read-Only) .character3 // Character in account slot 3 (Read-Only) .character4 // Character in account slot 4 (Read-Only) .character5 // Character in account slot 5 (Read-Only) .character6 // Character in account slot 6 (Read-Only) .character7 // Character in account slot 7 (Read-Only) .currentChar // Currently logged in character (if any) (Read-Only) .lastIP // Last IP used to connect to account (Read-Only) // Flag shortcuts .isBanned // Is account banned? .isSuspended // Is account suspended? .isPublic // Is comment/contact info to be considered public info? .isOnline // Is account online? .isSlot1Blocked // Is character slot 1 blocked? .isSlot2Blocked // Is character slot 2 blocked? .isSlot3Blocked // Is character slot 3 blocked? .isSlot4Blocked // Is character slot 4 blocked? .isSlot5Blocked // Is character slot 5 blocked? .isSlot6Blocked // Is character slot 6 blocked? .isSlot7Blocked // Is character slot 7 blocked? .unused9 // Unused flag .unused10 // Unused flag .isSeer // Is account marked as Seer account? .isCounselor // Is account marked as Counselor account? .isGM // Is account marked as GM account? Fixed 'addaccount command - can now once again be used to add a new user account to the server from in-game. See accounts.adm for info on available flags. Syntax: 'addaccount [username] [password] [(optional)flags] Updated 'get command to allow retrieving certain account properties for targeted player characters: username, flags, comment, character1, character2, character3, character4, character5, character6, character7, lastIP, isBanned, isSuspended, isPublic, isOnline, isSlot1Blocked, isSlot2Blocked, isSlot3Blocked, isSlot4Blocked, isSlot5Blocked, isSlot6Blocked, isSlot7Blocked, unused9, unused10, isSeer, isCounselor and isGM Updated 'set command to allow setting certain account properties for targeted player characters: comment, password, isBanned, isSuspended, isPublic, isOnline, isSlot1Blocked, isSlot2Blocked, isSlot3Blocked, isSlot4Blocked, isSlot5Blocked, isSlot6Blocked, isSlot7Blocked, unused9, unused10, isSeer, isCounselor, isGM Updated 'tweak command to allow viewing and modifying of certain account properties for targeted player characters Note that any changes to account properties will not go into effect until a worldsave or manual save of accounts via console has taken place. Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2021-04-16 21:14:50 +08:00
{
case CACCOUNT_ID: *vp = INT_TO_JSVAL( myAccount->wAccountIndex ); break;
case CACCOUNT_USERNAME:
tString = JS_NewStringCopyZ( cx, ( myAccount->sUsername ).c_str() );
Fixes for Console behaviour on Linux and Windows, addition of JS properties for user accounts Fixed long-standing issue with UOX3 console not resetting terminal properly after shutdown on Linux, after updating cConsole.cpp/h to conform to standard unix terminal commands/settings for certain features (punt) Fixed an issue that could cause a crash on Windows when attempting to broadcast system messages from the UOX3 console (punt) Fixed an issue that prevented text input in UOX3 console for system broadcasts from being displayed on Linux and MacOS (punt) Added support for new JS Object - IUE_ACCOUNT - which can be accessed via character property .account. The following account properties have been exposed to the JS engine: .id // Account ID (Read-Only) .username // Account Username (Read-Only) .flags // Flags set on account (Read-Only) .comment // Comment/contact info .character1 // Character in account slot 1 (Read-Only) .character2 // Character in account slot 2 (Read-Only) .character3 // Character in account slot 3 (Read-Only) .character4 // Character in account slot 4 (Read-Only) .character5 // Character in account slot 5 (Read-Only) .character6 // Character in account slot 6 (Read-Only) .character7 // Character in account slot 7 (Read-Only) .currentChar // Currently logged in character (if any) (Read-Only) .lastIP // Last IP used to connect to account (Read-Only) // Flag shortcuts .isBanned // Is account banned? .isSuspended // Is account suspended? .isPublic // Is comment/contact info to be considered public info? .isOnline // Is account online? .isSlot1Blocked // Is character slot 1 blocked? .isSlot2Blocked // Is character slot 2 blocked? .isSlot3Blocked // Is character slot 3 blocked? .isSlot4Blocked // Is character slot 4 blocked? .isSlot5Blocked // Is character slot 5 blocked? .isSlot6Blocked // Is character slot 6 blocked? .isSlot7Blocked // Is character slot 7 blocked? .unused9 // Unused flag .unused10 // Unused flag .isSeer // Is account marked as Seer account? .isCounselor // Is account marked as Counselor account? .isGM // Is account marked as GM account? Fixed 'addaccount command - can now once again be used to add a new user account to the server from in-game. See accounts.adm for info on available flags. Syntax: 'addaccount [username] [password] [(optional)flags] Updated 'get command to allow retrieving certain account properties for targeted player characters: username, flags, comment, character1, character2, character3, character4, character5, character6, character7, lastIP, isBanned, isSuspended, isPublic, isOnline, isSlot1Blocked, isSlot2Blocked, isSlot3Blocked, isSlot4Blocked, isSlot5Blocked, isSlot6Blocked, isSlot7Blocked, unused9, unused10, isSeer, isCounselor and isGM Updated 'set command to allow setting certain account properties for targeted player characters: comment, password, isBanned, isSuspended, isPublic, isOnline, isSlot1Blocked, isSlot2Blocked, isSlot3Blocked, isSlot4Blocked, isSlot5Blocked, isSlot6Blocked, isSlot7Blocked, unused9, unused10, isSeer, isCounselor, isGM Updated 'tweak command to allow viewing and modifying of certain account properties for targeted player characters Note that any changes to account properties will not go into effect until a worldsave or manual save of accounts via console has taken place. Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2021-04-16 21:14:50 +08:00
*vp = STRING_TO_JSVAL( tString );
break;
Fixes for Console behaviour on Linux and Windows, addition of JS properties for user accounts Fixed long-standing issue with UOX3 console not resetting terminal properly after shutdown on Linux, after updating cConsole.cpp/h to conform to standard unix terminal commands/settings for certain features (punt) Fixed an issue that could cause a crash on Windows when attempting to broadcast system messages from the UOX3 console (punt) Fixed an issue that prevented text input in UOX3 console for system broadcasts from being displayed on Linux and MacOS (punt) Added support for new JS Object - IUE_ACCOUNT - which can be accessed via character property .account. The following account properties have been exposed to the JS engine: .id // Account ID (Read-Only) .username // Account Username (Read-Only) .flags // Flags set on account (Read-Only) .comment // Comment/contact info .character1 // Character in account slot 1 (Read-Only) .character2 // Character in account slot 2 (Read-Only) .character3 // Character in account slot 3 (Read-Only) .character4 // Character in account slot 4 (Read-Only) .character5 // Character in account slot 5 (Read-Only) .character6 // Character in account slot 6 (Read-Only) .character7 // Character in account slot 7 (Read-Only) .currentChar // Currently logged in character (if any) (Read-Only) .lastIP // Last IP used to connect to account (Read-Only) // Flag shortcuts .isBanned // Is account banned? .isSuspended // Is account suspended? .isPublic // Is comment/contact info to be considered public info? .isOnline // Is account online? .isSlot1Blocked // Is character slot 1 blocked? .isSlot2Blocked // Is character slot 2 blocked? .isSlot3Blocked // Is character slot 3 blocked? .isSlot4Blocked // Is character slot 4 blocked? .isSlot5Blocked // Is character slot 5 blocked? .isSlot6Blocked // Is character slot 6 blocked? .isSlot7Blocked // Is character slot 7 blocked? .unused9 // Unused flag .unused10 // Unused flag .isSeer // Is account marked as Seer account? .isCounselor // Is account marked as Counselor account? .isGM // Is account marked as GM account? Fixed 'addaccount command - can now once again be used to add a new user account to the server from in-game. See accounts.adm for info on available flags. Syntax: 'addaccount [username] [password] [(optional)flags] Updated 'get command to allow retrieving certain account properties for targeted player characters: username, flags, comment, character1, character2, character3, character4, character5, character6, character7, lastIP, isBanned, isSuspended, isPublic, isOnline, isSlot1Blocked, isSlot2Blocked, isSlot3Blocked, isSlot4Blocked, isSlot5Blocked, isSlot6Blocked, isSlot7Blocked, unused9, unused10, isSeer, isCounselor and isGM Updated 'set command to allow setting certain account properties for targeted player characters: comment, password, isBanned, isSuspended, isPublic, isOnline, isSlot1Blocked, isSlot2Blocked, isSlot3Blocked, isSlot4Blocked, isSlot5Blocked, isSlot6Blocked, isSlot7Blocked, unused9, unused10, isSeer, isCounselor, isGM Updated 'tweak command to allow viewing and modifying of certain account properties for targeted player characters Note that any changes to account properties will not go into effect until a worldsave or manual save of accounts via console has taken place. Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2021-04-16 21:14:50 +08:00
case CACCOUNT_PASSWORD: // NO.
case CACCOUNT_PATH: // Nah.
break;
case CACCOUNT_FLAGS: *vp = INT_TO_JSVAL(( myAccount->wFlags ).to_ulong() ); break;
Fixes for Console behaviour on Linux and Windows, addition of JS properties for user accounts Fixed long-standing issue with UOX3 console not resetting terminal properly after shutdown on Linux, after updating cConsole.cpp/h to conform to standard unix terminal commands/settings for certain features (punt) Fixed an issue that could cause a crash on Windows when attempting to broadcast system messages from the UOX3 console (punt) Fixed an issue that prevented text input in UOX3 console for system broadcasts from being displayed on Linux and MacOS (punt) Added support for new JS Object - IUE_ACCOUNT - which can be accessed via character property .account. The following account properties have been exposed to the JS engine: .id // Account ID (Read-Only) .username // Account Username (Read-Only) .flags // Flags set on account (Read-Only) .comment // Comment/contact info .character1 // Character in account slot 1 (Read-Only) .character2 // Character in account slot 2 (Read-Only) .character3 // Character in account slot 3 (Read-Only) .character4 // Character in account slot 4 (Read-Only) .character5 // Character in account slot 5 (Read-Only) .character6 // Character in account slot 6 (Read-Only) .character7 // Character in account slot 7 (Read-Only) .currentChar // Currently logged in character (if any) (Read-Only) .lastIP // Last IP used to connect to account (Read-Only) // Flag shortcuts .isBanned // Is account banned? .isSuspended // Is account suspended? .isPublic // Is comment/contact info to be considered public info? .isOnline // Is account online? .isSlot1Blocked // Is character slot 1 blocked? .isSlot2Blocked // Is character slot 2 blocked? .isSlot3Blocked // Is character slot 3 blocked? .isSlot4Blocked // Is character slot 4 blocked? .isSlot5Blocked // Is character slot 5 blocked? .isSlot6Blocked // Is character slot 6 blocked? .isSlot7Blocked // Is character slot 7 blocked? .unused9 // Unused flag .unused10 // Unused flag .isSeer // Is account marked as Seer account? .isCounselor // Is account marked as Counselor account? .isGM // Is account marked as GM account? Fixed 'addaccount command - can now once again be used to add a new user account to the server from in-game. See accounts.adm for info on available flags. Syntax: 'addaccount [username] [password] [(optional)flags] Updated 'get command to allow retrieving certain account properties for targeted player characters: username, flags, comment, character1, character2, character3, character4, character5, character6, character7, lastIP, isBanned, isSuspended, isPublic, isOnline, isSlot1Blocked, isSlot2Blocked, isSlot3Blocked, isSlot4Blocked, isSlot5Blocked, isSlot6Blocked, isSlot7Blocked, unused9, unused10, isSeer, isCounselor and isGM Updated 'set command to allow setting certain account properties for targeted player characters: comment, password, isBanned, isSuspended, isPublic, isOnline, isSlot1Blocked, isSlot2Blocked, isSlot3Blocked, isSlot4Blocked, isSlot5Blocked, isSlot6Blocked, isSlot7Blocked, unused9, unused10, isSeer, isCounselor, isGM Updated 'tweak command to allow viewing and modifying of certain account properties for targeted player characters Note that any changes to account properties will not go into effect until a worldsave or manual save of accounts via console has taken place. Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2021-04-16 21:14:50 +08:00
case CACCOUNT_COMMENT:
tString = JS_NewStringCopyZ( cx, ( myAccount->sContact ).c_str() );
Fixes for Console behaviour on Linux and Windows, addition of JS properties for user accounts Fixed long-standing issue with UOX3 console not resetting terminal properly after shutdown on Linux, after updating cConsole.cpp/h to conform to standard unix terminal commands/settings for certain features (punt) Fixed an issue that could cause a crash on Windows when attempting to broadcast system messages from the UOX3 console (punt) Fixed an issue that prevented text input in UOX3 console for system broadcasts from being displayed on Linux and MacOS (punt) Added support for new JS Object - IUE_ACCOUNT - which can be accessed via character property .account. The following account properties have been exposed to the JS engine: .id // Account ID (Read-Only) .username // Account Username (Read-Only) .flags // Flags set on account (Read-Only) .comment // Comment/contact info .character1 // Character in account slot 1 (Read-Only) .character2 // Character in account slot 2 (Read-Only) .character3 // Character in account slot 3 (Read-Only) .character4 // Character in account slot 4 (Read-Only) .character5 // Character in account slot 5 (Read-Only) .character6 // Character in account slot 6 (Read-Only) .character7 // Character in account slot 7 (Read-Only) .currentChar // Currently logged in character (if any) (Read-Only) .lastIP // Last IP used to connect to account (Read-Only) // Flag shortcuts .isBanned // Is account banned? .isSuspended // Is account suspended? .isPublic // Is comment/contact info to be considered public info? .isOnline // Is account online? .isSlot1Blocked // Is character slot 1 blocked? .isSlot2Blocked // Is character slot 2 blocked? .isSlot3Blocked // Is character slot 3 blocked? .isSlot4Blocked // Is character slot 4 blocked? .isSlot5Blocked // Is character slot 5 blocked? .isSlot6Blocked // Is character slot 6 blocked? .isSlot7Blocked // Is character slot 7 blocked? .unused9 // Unused flag .unused10 // Unused flag .isSeer // Is account marked as Seer account? .isCounselor // Is account marked as Counselor account? .isGM // Is account marked as GM account? Fixed 'addaccount command - can now once again be used to add a new user account to the server from in-game. See accounts.adm for info on available flags. Syntax: 'addaccount [username] [password] [(optional)flags] Updated 'get command to allow retrieving certain account properties for targeted player characters: username, flags, comment, character1, character2, character3, character4, character5, character6, character7, lastIP, isBanned, isSuspended, isPublic, isOnline, isSlot1Blocked, isSlot2Blocked, isSlot3Blocked, isSlot4Blocked, isSlot5Blocked, isSlot6Blocked, isSlot7Blocked, unused9, unused10, isSeer, isCounselor and isGM Updated 'set command to allow setting certain account properties for targeted player characters: comment, password, isBanned, isSuspended, isPublic, isOnline, isSlot1Blocked, isSlot2Blocked, isSlot3Blocked, isSlot4Blocked, isSlot5Blocked, isSlot6Blocked, isSlot7Blocked, unused9, unused10, isSeer, isCounselor, isGM Updated 'tweak command to allow viewing and modifying of certain account properties for targeted player characters Note that any changes to account properties will not go into effect until a worldsave or manual save of accounts via console has taken place. Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2021-04-16 21:14:50 +08:00
*vp = STRING_TO_JSVAL( tString );
break;
UOX3 0.99.6-RC6 Removed arbitrary and hidden restrictions on refreshing list of online players shown with 'wholist command Fixed an issue where player ghosts that get teleported would not see themselves get updated to new location Fixed a server crash from clients disconnecting while running server in debug mode Improved how container updates are sent to players; now only sends to clients that have actually opened the container, and who are still within range Added more information about UO data files being loaded during server startup Enhanced the GM 'add menu to allow clicking directly on images of items/npcs to add them, and adjusted size of menus to accommodate this Fixed an issue with fleeing NPCs that could cause them to attempt to flee across time and space, regardless of distance to target/attacker in combat Added NPC AI that runs away from players if they get too close (even outside combat). Applied to hind, rabbits, squirrels, ferrets and various birds by default: AI_ANIMAL_SCARED (aitype 12) Fixed issues with NPCs fleeing forever, or getting stuck in flee/don't flee loop, by introducing max fleeing distance (50 tiles) and cooldown (30 sec) on fleeing Updated onNameRequest JS Event to include third parameter with origin of name request, so script responses can be tailored appropriately: onNameRequest( myObj, requestedBy, requestSource ) Potential values for requestSource: 0 - Speech/System Messages 1 - Guild Menus 2 - Stat Window (self) 3 - Stat Window (other) 4 - Tooltip 5 - Paperdoll Journal 6 - Paperdoll 7 - Single Click / All-Names 8 - System 9 - Secure Trade Window Added Adaptive Performance System (APS) that dynamically adjust how often NPC AI/movement is checked based on overall shard performance. If performance drops below defined threshold, UOX3 gradually slows down checks for NPC AI/movement to prioritize player movement/speech/command responsiveness. If performance climbs back up above threshold, slowdowns are gradually removed. The following UOX.INI options have been added under [system] category to support this system: APSPERFTHRESHOLD=50 // Performance threshold (measured in simulation cycles/sec) below which the APS kicks in APSINTERVAL=100 // How often (in milliseconds) the APS checks performance and makes adjustments (if needed) to balance out shard performance APSDELAYSTEP=50 // How much the delay timer is modified by (in milliseconds) each time APS makes adjustments APSDELAYMAXCAP=2000 // Max amount of of delay APS can introduce for NPC AI/movement handling when attempting to restore shard performance Added new JS Methods for Region objects: .GetOrePrefs( oreType ) // Get ore preference data for ore type found in town region. Returned as an array containing the following data: orePrefData -> [ oreName, // name of ore color, // color of ore minskill, // min skill to mine ore ingotName, // name of ingot created from ore makemenu, // makemenu entry for crafting something from ingot oreChance, // default global chance of finding this ore type scriptID // script attached to mined ore ], orePrefChance // Chance of finding this ore type in given town region .GetOreChance() // Get base chance of finding any ore in town region Moved Mining skill plus gravedigging feature from hard code to scripts (js/skill/mining.js) to make it easier to maintain and/or customize, and removed hard coded variants Gravedigging now relies on the ore resource system behind the scenes to restrict how often graves in a given area can be dug up Fixed some incorrect references to .worldNumber Character property in misc scripts (should be .worldnumber) Made some "hard-scripted" system messages in misc scripts use dictionary system instead Added spawn region for banker NPCs in Serpent's Hold (dfndata/spawn/felucca/spawn_town_serpents_hold.dfn, dfndata/spawn/trammel/spawn_town_serpents_hold.dfn) Fixed region definition of Ocllo to actually cover the entire town (dfndata/regions/regions.dfn) Added numerous additional locations accessible with 'goplace # command, for key locations in Ilshenar, Malas, Tokuno Islands and Ter Mur (dfndata/location/location.dfn) Revised travel-menu portion of GM menu (shortcut: 'travel) to include more travel options based on new locations (dfndata/items/travelmenu.dfn and travelmenu.bulk.dfn) Fixed an issue where NPCs could attempt to attack targets in other worlds/instances Added new JS Event that triggers for characters who are about to deal damage in combat. Complimentary to onDamage, which triggers for chars receiving damage: onDamageDeal( dmgDealer, dmgReceiver, damageValue, damageType ) Added new JS Event that can trigger in global script upon creation of new player chars. Note that this will trigger in place of onCreateDFN event for player characters: onCreatePlayer( pChar ) Added new JS Event that triggers for characters selecting a target with a spell. Complimentary to onSpellTarget, which triggers for targets selected with a spell: onSpellTargetSelect( caster, target, spellNum ) Updated onCombatStart and onCombatEnd JS Events to also trigger for the other party in combat Updated onPickup JS Event to include a third parameter - the potential container item was picked up from. Event now also triggers event in scripts attached to said containers: onPickup( iPickedUp, pChar, iCont ) Added tracking of total playtime per individual character, and per account across all characters, and exposed these properties to JS engine: .totalPlayTime // Account property, total playtime across all chars .playTime // Character property, total playtime on given character only Added new player-accessible command ('playtime) to spit out the playtime of current character/account as a whole (js/commands/playtime.js) Implemented first version of Young Player System: Replaced the UNUSED9 account flag with YOUNG, to be used by Young/New Player System Added new JS Account property that gets/sets whether player account is considered Young: .isYoung Added new Char timers: TIMER_YOUNGHEAL // Restricts how often Young players are healed by NPC healers TIMER_YOUNGMESSAGE // Restricts how often Young players are warned about dangerous looking monsters in overworld Updated GM commands 'get and 'set to get/set .isYoung property of player's account (js/commands/targeting/get.js and set.js) Added new UOX.INI setting to enable/disable Young Player System (enabled by default): YOUNGPLAYERSYSTEM=1 If Young Player System is enabled, all newly created player accounts are automatically marked with Young flag Added new script to handle various restrictions and functions related to Young characters (js/player/young_player.js): Young characters will have [Young] displayed over their head Young characters will have their Young status checked and verified on every login + every stat/skill gain, to revoke the Young status if any of the following is true: Account has a total playtime of more than 40 hours Any character has more than 350 total (base) skill points Any character has more than 70 skill points in a single skill Any character has more than 150 total stat points Any character has more than 80 stat points in a single stat Young characters can renounce their Young status manually by saying the words "I renounce my young player status" Young characters get two additional items upon creation: a new player ticket (can be combined with any other players new player ticket for both players to get a reward) a sextant (shows Young players directions to nearest moongate/bank regardless of where they are, as long as outdoors) Young characters cannot target other player characters with hostile spells or skills Young characters cannot be the target of other player characters' hostile spells or skills Young characters can only cast beneficial spells upon themselves or other Young characters Young characters can only be the target of beneficial spells from other Young players Young players (and their pets/followers) cannot attack or harm any other players (or their pets/followers), nor themselves be attacked or harmed by any other players (or their pets/followers), whether from combat, spells, skills or items Young players don't lose any of their items on death, and are teleported to the nearest healer upon death with all their items intact Young players receive a warning upon entering dungeons that monsters there will be hostile Updated global script (js/server/global.js) to: Check/Verify Young status of players upon login Attach young player script on login/creation for players on Young accounts Give specific items to Young players upon creation Added new script (js/item/corpse.js) that is assigned to all freshly created corpses. This script handles restrictions related to Young players interactions with corpses, and the interactions of other players with corpses of Young players Updated JS Method .Carve() to return true/false depending on whether carving a corpse was successful Updated Healer AI in code to heal nearby injured Young players Updated Evil AI and Evil Caster AI in code to avoid selecting Young players as targets in combat outside of dungeons Added a new section to UOX.INI - [young player starting locations] - that can be used to define starting locations for Young players. If only one such location is provided, all players start there. Otherwise, it matches the same starting location setup as the regular one - with one entry per town in Britannia. Restricted transferring and/or friending of pets (code) and hirelings (hirelings.js) between Young and non-Young players Restricted Young players from recalling or gating to Felucca facet Young players can instantly logout from anywhere, at any time
2023-07-01 20:02:40 +08:00
case CACCOUNT_TIMEBAN: *vp = INT_TO_JSVAL( myAccount->wTimeBan ); break;
case CACCOUNT_FIRSTLOGIN: *vp = INT_TO_JSVAL( myAccount->wFirstLogin ); break;
case CACCOUNT_TOTALPLAYTIME: *vp = INT_TO_JSVAL( myAccount->wTotalPlayTime ); break;
Fixes for Console behaviour on Linux and Windows, addition of JS properties for user accounts Fixed long-standing issue with UOX3 console not resetting terminal properly after shutdown on Linux, after updating cConsole.cpp/h to conform to standard unix terminal commands/settings for certain features (punt) Fixed an issue that could cause a crash on Windows when attempting to broadcast system messages from the UOX3 console (punt) Fixed an issue that prevented text input in UOX3 console for system broadcasts from being displayed on Linux and MacOS (punt) Added support for new JS Object - IUE_ACCOUNT - which can be accessed via character property .account. The following account properties have been exposed to the JS engine: .id // Account ID (Read-Only) .username // Account Username (Read-Only) .flags // Flags set on account (Read-Only) .comment // Comment/contact info .character1 // Character in account slot 1 (Read-Only) .character2 // Character in account slot 2 (Read-Only) .character3 // Character in account slot 3 (Read-Only) .character4 // Character in account slot 4 (Read-Only) .character5 // Character in account slot 5 (Read-Only) .character6 // Character in account slot 6 (Read-Only) .character7 // Character in account slot 7 (Read-Only) .currentChar // Currently logged in character (if any) (Read-Only) .lastIP // Last IP used to connect to account (Read-Only) // Flag shortcuts .isBanned // Is account banned? .isSuspended // Is account suspended? .isPublic // Is comment/contact info to be considered public info? .isOnline // Is account online? .isSlot1Blocked // Is character slot 1 blocked? .isSlot2Blocked // Is character slot 2 blocked? .isSlot3Blocked // Is character slot 3 blocked? .isSlot4Blocked // Is character slot 4 blocked? .isSlot5Blocked // Is character slot 5 blocked? .isSlot6Blocked // Is character slot 6 blocked? .isSlot7Blocked // Is character slot 7 blocked? .unused9 // Unused flag .unused10 // Unused flag .isSeer // Is account marked as Seer account? .isCounselor // Is account marked as Counselor account? .isGM // Is account marked as GM account? Fixed 'addaccount command - can now once again be used to add a new user account to the server from in-game. See accounts.adm for info on available flags. Syntax: 'addaccount [username] [password] [(optional)flags] Updated 'get command to allow retrieving certain account properties for targeted player characters: username, flags, comment, character1, character2, character3, character4, character5, character6, character7, lastIP, isBanned, isSuspended, isPublic, isOnline, isSlot1Blocked, isSlot2Blocked, isSlot3Blocked, isSlot4Blocked, isSlot5Blocked, isSlot6Blocked, isSlot7Blocked, unused9, unused10, isSeer, isCounselor and isGM Updated 'set command to allow setting certain account properties for targeted player characters: comment, password, isBanned, isSuspended, isPublic, isOnline, isSlot1Blocked, isSlot2Blocked, isSlot3Blocked, isSlot4Blocked, isSlot5Blocked, isSlot6Blocked, isSlot7Blocked, unused9, unused10, isSeer, isCounselor, isGM Updated 'tweak command to allow viewing and modifying of certain account properties for targeted player characters Note that any changes to account properties will not go into effect until a worldsave or manual save of accounts via console has taken place. Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2021-04-16 21:14:50 +08:00
case CACCOUNT_CHARACTER1:
{
if( myAccount->dwCharacters[0] != INVALIDSERIAL )
{
CBaseObject *TempObj = myAccount->lpCharacters[0];
if( !ValidateObject( TempObj ))
{
Fixes for Console behaviour on Linux and Windows, addition of JS properties for user accounts Fixed long-standing issue with UOX3 console not resetting terminal properly after shutdown on Linux, after updating cConsole.cpp/h to conform to standard unix terminal commands/settings for certain features (punt) Fixed an issue that could cause a crash on Windows when attempting to broadcast system messages from the UOX3 console (punt) Fixed an issue that prevented text input in UOX3 console for system broadcasts from being displayed on Linux and MacOS (punt) Added support for new JS Object - IUE_ACCOUNT - which can be accessed via character property .account. The following account properties have been exposed to the JS engine: .id // Account ID (Read-Only) .username // Account Username (Read-Only) .flags // Flags set on account (Read-Only) .comment // Comment/contact info .character1 // Character in account slot 1 (Read-Only) .character2 // Character in account slot 2 (Read-Only) .character3 // Character in account slot 3 (Read-Only) .character4 // Character in account slot 4 (Read-Only) .character5 // Character in account slot 5 (Read-Only) .character6 // Character in account slot 6 (Read-Only) .character7 // Character in account slot 7 (Read-Only) .currentChar // Currently logged in character (if any) (Read-Only) .lastIP // Last IP used to connect to account (Read-Only) // Flag shortcuts .isBanned // Is account banned? .isSuspended // Is account suspended? .isPublic // Is comment/contact info to be considered public info? .isOnline // Is account online? .isSlot1Blocked // Is character slot 1 blocked? .isSlot2Blocked // Is character slot 2 blocked? .isSlot3Blocked // Is character slot 3 blocked? .isSlot4Blocked // Is character slot 4 blocked? .isSlot5Blocked // Is character slot 5 blocked? .isSlot6Blocked // Is character slot 6 blocked? .isSlot7Blocked // Is character slot 7 blocked? .unused9 // Unused flag .unused10 // Unused flag .isSeer // Is account marked as Seer account? .isCounselor // Is account marked as Counselor account? .isGM // Is account marked as GM account? Fixed 'addaccount command - can now once again be used to add a new user account to the server from in-game. See accounts.adm for info on available flags. Syntax: 'addaccount [username] [password] [(optional)flags] Updated 'get command to allow retrieving certain account properties for targeted player characters: username, flags, comment, character1, character2, character3, character4, character5, character6, character7, lastIP, isBanned, isSuspended, isPublic, isOnline, isSlot1Blocked, isSlot2Blocked, isSlot3Blocked, isSlot4Blocked, isSlot5Blocked, isSlot6Blocked, isSlot7Blocked, unused9, unused10, isSeer, isCounselor and isGM Updated 'set command to allow setting certain account properties for targeted player characters: comment, password, isBanned, isSuspended, isPublic, isOnline, isSlot1Blocked, isSlot2Blocked, isSlot3Blocked, isSlot4Blocked, isSlot5Blocked, isSlot6Blocked, isSlot7Blocked, unused9, unused10, isSeer, isCounselor, isGM Updated 'tweak command to allow viewing and modifying of certain account properties for targeted player characters Note that any changes to account properties will not go into effect until a worldsave or manual save of accounts via console has taken place. Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2021-04-16 21:14:50 +08:00
*vp = JSVAL_NULL;
}
Fixes for Console behaviour on Linux and Windows, addition of JS properties for user accounts Fixed long-standing issue with UOX3 console not resetting terminal properly after shutdown on Linux, after updating cConsole.cpp/h to conform to standard unix terminal commands/settings for certain features (punt) Fixed an issue that could cause a crash on Windows when attempting to broadcast system messages from the UOX3 console (punt) Fixed an issue that prevented text input in UOX3 console for system broadcasts from being displayed on Linux and MacOS (punt) Added support for new JS Object - IUE_ACCOUNT - which can be accessed via character property .account. The following account properties have been exposed to the JS engine: .id // Account ID (Read-Only) .username // Account Username (Read-Only) .flags // Flags set on account (Read-Only) .comment // Comment/contact info .character1 // Character in account slot 1 (Read-Only) .character2 // Character in account slot 2 (Read-Only) .character3 // Character in account slot 3 (Read-Only) .character4 // Character in account slot 4 (Read-Only) .character5 // Character in account slot 5 (Read-Only) .character6 // Character in account slot 6 (Read-Only) .character7 // Character in account slot 7 (Read-Only) .currentChar // Currently logged in character (if any) (Read-Only) .lastIP // Last IP used to connect to account (Read-Only) // Flag shortcuts .isBanned // Is account banned? .isSuspended // Is account suspended? .isPublic // Is comment/contact info to be considered public info? .isOnline // Is account online? .isSlot1Blocked // Is character slot 1 blocked? .isSlot2Blocked // Is character slot 2 blocked? .isSlot3Blocked // Is character slot 3 blocked? .isSlot4Blocked // Is character slot 4 blocked? .isSlot5Blocked // Is character slot 5 blocked? .isSlot6Blocked // Is character slot 6 blocked? .isSlot7Blocked // Is character slot 7 blocked? .unused9 // Unused flag .unused10 // Unused flag .isSeer // Is account marked as Seer account? .isCounselor // Is account marked as Counselor account? .isGM // Is account marked as GM account? Fixed 'addaccount command - can now once again be used to add a new user account to the server from in-game. See accounts.adm for info on available flags. Syntax: 'addaccount [username] [password] [(optional)flags] Updated 'get command to allow retrieving certain account properties for targeted player characters: username, flags, comment, character1, character2, character3, character4, character5, character6, character7, lastIP, isBanned, isSuspended, isPublic, isOnline, isSlot1Blocked, isSlot2Blocked, isSlot3Blocked, isSlot4Blocked, isSlot5Blocked, isSlot6Blocked, isSlot7Blocked, unused9, unused10, isSeer, isCounselor and isGM Updated 'set command to allow setting certain account properties for targeted player characters: comment, password, isBanned, isSuspended, isPublic, isOnline, isSlot1Blocked, isSlot2Blocked, isSlot3Blocked, isSlot4Blocked, isSlot5Blocked, isSlot6Blocked, isSlot7Blocked, unused9, unused10, isSeer, isCounselor, isGM Updated 'tweak command to allow viewing and modifying of certain account properties for targeted player characters Note that any changes to account properties will not go into effect until a worldsave or manual save of accounts via console has taken place. Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2021-04-16 21:14:50 +08:00
else
{
// Otherwise Acquire an object
JSObject *myChar = JSEngine->AcquireObject( IUE_CHAR, TempObj, JSEngine->FindActiveRuntime( JS_GetRuntime( cx )));
Fixes for Console behaviour on Linux and Windows, addition of JS properties for user accounts Fixed long-standing issue with UOX3 console not resetting terminal properly after shutdown on Linux, after updating cConsole.cpp/h to conform to standard unix terminal commands/settings for certain features (punt) Fixed an issue that could cause a crash on Windows when attempting to broadcast system messages from the UOX3 console (punt) Fixed an issue that prevented text input in UOX3 console for system broadcasts from being displayed on Linux and MacOS (punt) Added support for new JS Object - IUE_ACCOUNT - which can be accessed via character property .account. The following account properties have been exposed to the JS engine: .id // Account ID (Read-Only) .username // Account Username (Read-Only) .flags // Flags set on account (Read-Only) .comment // Comment/contact info .character1 // Character in account slot 1 (Read-Only) .character2 // Character in account slot 2 (Read-Only) .character3 // Character in account slot 3 (Read-Only) .character4 // Character in account slot 4 (Read-Only) .character5 // Character in account slot 5 (Read-Only) .character6 // Character in account slot 6 (Read-Only) .character7 // Character in account slot 7 (Read-Only) .currentChar // Currently logged in character (if any) (Read-Only) .lastIP // Last IP used to connect to account (Read-Only) // Flag shortcuts .isBanned // Is account banned? .isSuspended // Is account suspended? .isPublic // Is comment/contact info to be considered public info? .isOnline // Is account online? .isSlot1Blocked // Is character slot 1 blocked? .isSlot2Blocked // Is character slot 2 blocked? .isSlot3Blocked // Is character slot 3 blocked? .isSlot4Blocked // Is character slot 4 blocked? .isSlot5Blocked // Is character slot 5 blocked? .isSlot6Blocked // Is character slot 6 blocked? .isSlot7Blocked // Is character slot 7 blocked? .unused9 // Unused flag .unused10 // Unused flag .isSeer // Is account marked as Seer account? .isCounselor // Is account marked as Counselor account? .isGM // Is account marked as GM account? Fixed 'addaccount command - can now once again be used to add a new user account to the server from in-game. See accounts.adm for info on available flags. Syntax: 'addaccount [username] [password] [(optional)flags] Updated 'get command to allow retrieving certain account properties for targeted player characters: username, flags, comment, character1, character2, character3, character4, character5, character6, character7, lastIP, isBanned, isSuspended, isPublic, isOnline, isSlot1Blocked, isSlot2Blocked, isSlot3Blocked, isSlot4Blocked, isSlot5Blocked, isSlot6Blocked, isSlot7Blocked, unused9, unused10, isSeer, isCounselor and isGM Updated 'set command to allow setting certain account properties for targeted player characters: comment, password, isBanned, isSuspended, isPublic, isOnline, isSlot1Blocked, isSlot2Blocked, isSlot3Blocked, isSlot4Blocked, isSlot5Blocked, isSlot6Blocked, isSlot7Blocked, unused9, unused10, isSeer, isCounselor, isGM Updated 'tweak command to allow viewing and modifying of certain account properties for targeted player characters Note that any changes to account properties will not go into effect until a worldsave or manual save of accounts via console has taken place. Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2021-04-16 21:14:50 +08:00
*vp = OBJECT_TO_JSVAL( myChar );
}
}
else
{
Fixes for Console behaviour on Linux and Windows, addition of JS properties for user accounts Fixed long-standing issue with UOX3 console not resetting terminal properly after shutdown on Linux, after updating cConsole.cpp/h to conform to standard unix terminal commands/settings for certain features (punt) Fixed an issue that could cause a crash on Windows when attempting to broadcast system messages from the UOX3 console (punt) Fixed an issue that prevented text input in UOX3 console for system broadcasts from being displayed on Linux and MacOS (punt) Added support for new JS Object - IUE_ACCOUNT - which can be accessed via character property .account. The following account properties have been exposed to the JS engine: .id // Account ID (Read-Only) .username // Account Username (Read-Only) .flags // Flags set on account (Read-Only) .comment // Comment/contact info .character1 // Character in account slot 1 (Read-Only) .character2 // Character in account slot 2 (Read-Only) .character3 // Character in account slot 3 (Read-Only) .character4 // Character in account slot 4 (Read-Only) .character5 // Character in account slot 5 (Read-Only) .character6 // Character in account slot 6 (Read-Only) .character7 // Character in account slot 7 (Read-Only) .currentChar // Currently logged in character (if any) (Read-Only) .lastIP // Last IP used to connect to account (Read-Only) // Flag shortcuts .isBanned // Is account banned? .isSuspended // Is account suspended? .isPublic // Is comment/contact info to be considered public info? .isOnline // Is account online? .isSlot1Blocked // Is character slot 1 blocked? .isSlot2Blocked // Is character slot 2 blocked? .isSlot3Blocked // Is character slot 3 blocked? .isSlot4Blocked // Is character slot 4 blocked? .isSlot5Blocked // Is character slot 5 blocked? .isSlot6Blocked // Is character slot 6 blocked? .isSlot7Blocked // Is character slot 7 blocked? .unused9 // Unused flag .unused10 // Unused flag .isSeer // Is account marked as Seer account? .isCounselor // Is account marked as Counselor account? .isGM // Is account marked as GM account? Fixed 'addaccount command - can now once again be used to add a new user account to the server from in-game. See accounts.adm for info on available flags. Syntax: 'addaccount [username] [password] [(optional)flags] Updated 'get command to allow retrieving certain account properties for targeted player characters: username, flags, comment, character1, character2, character3, character4, character5, character6, character7, lastIP, isBanned, isSuspended, isPublic, isOnline, isSlot1Blocked, isSlot2Blocked, isSlot3Blocked, isSlot4Blocked, isSlot5Blocked, isSlot6Blocked, isSlot7Blocked, unused9, unused10, isSeer, isCounselor and isGM Updated 'set command to allow setting certain account properties for targeted player characters: comment, password, isBanned, isSuspended, isPublic, isOnline, isSlot1Blocked, isSlot2Blocked, isSlot3Blocked, isSlot4Blocked, isSlot5Blocked, isSlot6Blocked, isSlot7Blocked, unused9, unused10, isSeer, isCounselor, isGM Updated 'tweak command to allow viewing and modifying of certain account properties for targeted player characters Note that any changes to account properties will not go into effect until a worldsave or manual save of accounts via console has taken place. Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2021-04-16 21:14:50 +08:00
*vp = JSVAL_NULL;
}
Fixes for Console behaviour on Linux and Windows, addition of JS properties for user accounts Fixed long-standing issue with UOX3 console not resetting terminal properly after shutdown on Linux, after updating cConsole.cpp/h to conform to standard unix terminal commands/settings for certain features (punt) Fixed an issue that could cause a crash on Windows when attempting to broadcast system messages from the UOX3 console (punt) Fixed an issue that prevented text input in UOX3 console for system broadcasts from being displayed on Linux and MacOS (punt) Added support for new JS Object - IUE_ACCOUNT - which can be accessed via character property .account. The following account properties have been exposed to the JS engine: .id // Account ID (Read-Only) .username // Account Username (Read-Only) .flags // Flags set on account (Read-Only) .comment // Comment/contact info .character1 // Character in account slot 1 (Read-Only) .character2 // Character in account slot 2 (Read-Only) .character3 // Character in account slot 3 (Read-Only) .character4 // Character in account slot 4 (Read-Only) .character5 // Character in account slot 5 (Read-Only) .character6 // Character in account slot 6 (Read-Only) .character7 // Character in account slot 7 (Read-Only) .currentChar // Currently logged in character (if any) (Read-Only) .lastIP // Last IP used to connect to account (Read-Only) // Flag shortcuts .isBanned // Is account banned? .isSuspended // Is account suspended? .isPublic // Is comment/contact info to be considered public info? .isOnline // Is account online? .isSlot1Blocked // Is character slot 1 blocked? .isSlot2Blocked // Is character slot 2 blocked? .isSlot3Blocked // Is character slot 3 blocked? .isSlot4Blocked // Is character slot 4 blocked? .isSlot5Blocked // Is character slot 5 blocked? .isSlot6Blocked // Is character slot 6 blocked? .isSlot7Blocked // Is character slot 7 blocked? .unused9 // Unused flag .unused10 // Unused flag .isSeer // Is account marked as Seer account? .isCounselor // Is account marked as Counselor account? .isGM // Is account marked as GM account? Fixed 'addaccount command - can now once again be used to add a new user account to the server from in-game. See accounts.adm for info on available flags. Syntax: 'addaccount [username] [password] [(optional)flags] Updated 'get command to allow retrieving certain account properties for targeted player characters: username, flags, comment, character1, character2, character3, character4, character5, character6, character7, lastIP, isBanned, isSuspended, isPublic, isOnline, isSlot1Blocked, isSlot2Blocked, isSlot3Blocked, isSlot4Blocked, isSlot5Blocked, isSlot6Blocked, isSlot7Blocked, unused9, unused10, isSeer, isCounselor and isGM Updated 'set command to allow setting certain account properties for targeted player characters: comment, password, isBanned, isSuspended, isPublic, isOnline, isSlot1Blocked, isSlot2Blocked, isSlot3Blocked, isSlot4Blocked, isSlot5Blocked, isSlot6Blocked, isSlot7Blocked, unused9, unused10, isSeer, isCounselor, isGM Updated 'tweak command to allow viewing and modifying of certain account properties for targeted player characters Note that any changes to account properties will not go into effect until a worldsave or manual save of accounts via console has taken place. Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2021-04-16 21:14:50 +08:00
break;
}
case CACCOUNT_CHARACTER2:
{
if( myAccount->dwCharacters[1] != INVALIDSERIAL )
{
CBaseObject *TempObj = myAccount->lpCharacters[1];
if( !ValidateObject( TempObj ))
{
Fixes for Console behaviour on Linux and Windows, addition of JS properties for user accounts Fixed long-standing issue with UOX3 console not resetting terminal properly after shutdown on Linux, after updating cConsole.cpp/h to conform to standard unix terminal commands/settings for certain features (punt) Fixed an issue that could cause a crash on Windows when attempting to broadcast system messages from the UOX3 console (punt) Fixed an issue that prevented text input in UOX3 console for system broadcasts from being displayed on Linux and MacOS (punt) Added support for new JS Object - IUE_ACCOUNT - which can be accessed via character property .account. The following account properties have been exposed to the JS engine: .id // Account ID (Read-Only) .username // Account Username (Read-Only) .flags // Flags set on account (Read-Only) .comment // Comment/contact info .character1 // Character in account slot 1 (Read-Only) .character2 // Character in account slot 2 (Read-Only) .character3 // Character in account slot 3 (Read-Only) .character4 // Character in account slot 4 (Read-Only) .character5 // Character in account slot 5 (Read-Only) .character6 // Character in account slot 6 (Read-Only) .character7 // Character in account slot 7 (Read-Only) .currentChar // Currently logged in character (if any) (Read-Only) .lastIP // Last IP used to connect to account (Read-Only) // Flag shortcuts .isBanned // Is account banned? .isSuspended // Is account suspended? .isPublic // Is comment/contact info to be considered public info? .isOnline // Is account online? .isSlot1Blocked // Is character slot 1 blocked? .isSlot2Blocked // Is character slot 2 blocked? .isSlot3Blocked // Is character slot 3 blocked? .isSlot4Blocked // Is character slot 4 blocked? .isSlot5Blocked // Is character slot 5 blocked? .isSlot6Blocked // Is character slot 6 blocked? .isSlot7Blocked // Is character slot 7 blocked? .unused9 // Unused flag .unused10 // Unused flag .isSeer // Is account marked as Seer account? .isCounselor // Is account marked as Counselor account? .isGM // Is account marked as GM account? Fixed 'addaccount command - can now once again be used to add a new user account to the server from in-game. See accounts.adm for info on available flags. Syntax: 'addaccount [username] [password] [(optional)flags] Updated 'get command to allow retrieving certain account properties for targeted player characters: username, flags, comment, character1, character2, character3, character4, character5, character6, character7, lastIP, isBanned, isSuspended, isPublic, isOnline, isSlot1Blocked, isSlot2Blocked, isSlot3Blocked, isSlot4Blocked, isSlot5Blocked, isSlot6Blocked, isSlot7Blocked, unused9, unused10, isSeer, isCounselor and isGM Updated 'set command to allow setting certain account properties for targeted player characters: comment, password, isBanned, isSuspended, isPublic, isOnline, isSlot1Blocked, isSlot2Blocked, isSlot3Blocked, isSlot4Blocked, isSlot5Blocked, isSlot6Blocked, isSlot7Blocked, unused9, unused10, isSeer, isCounselor, isGM Updated 'tweak command to allow viewing and modifying of certain account properties for targeted player characters Note that any changes to account properties will not go into effect until a worldsave or manual save of accounts via console has taken place. Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2021-04-16 21:14:50 +08:00
*vp = JSVAL_NULL;
}
Fixes for Console behaviour on Linux and Windows, addition of JS properties for user accounts Fixed long-standing issue with UOX3 console not resetting terminal properly after shutdown on Linux, after updating cConsole.cpp/h to conform to standard unix terminal commands/settings for certain features (punt) Fixed an issue that could cause a crash on Windows when attempting to broadcast system messages from the UOX3 console (punt) Fixed an issue that prevented text input in UOX3 console for system broadcasts from being displayed on Linux and MacOS (punt) Added support for new JS Object - IUE_ACCOUNT - which can be accessed via character property .account. The following account properties have been exposed to the JS engine: .id // Account ID (Read-Only) .username // Account Username (Read-Only) .flags // Flags set on account (Read-Only) .comment // Comment/contact info .character1 // Character in account slot 1 (Read-Only) .character2 // Character in account slot 2 (Read-Only) .character3 // Character in account slot 3 (Read-Only) .character4 // Character in account slot 4 (Read-Only) .character5 // Character in account slot 5 (Read-Only) .character6 // Character in account slot 6 (Read-Only) .character7 // Character in account slot 7 (Read-Only) .currentChar // Currently logged in character (if any) (Read-Only) .lastIP // Last IP used to connect to account (Read-Only) // Flag shortcuts .isBanned // Is account banned? .isSuspended // Is account suspended? .isPublic // Is comment/contact info to be considered public info? .isOnline // Is account online? .isSlot1Blocked // Is character slot 1 blocked? .isSlot2Blocked // Is character slot 2 blocked? .isSlot3Blocked // Is character slot 3 blocked? .isSlot4Blocked // Is character slot 4 blocked? .isSlot5Blocked // Is character slot 5 blocked? .isSlot6Blocked // Is character slot 6 blocked? .isSlot7Blocked // Is character slot 7 blocked? .unused9 // Unused flag .unused10 // Unused flag .isSeer // Is account marked as Seer account? .isCounselor // Is account marked as Counselor account? .isGM // Is account marked as GM account? Fixed 'addaccount command - can now once again be used to add a new user account to the server from in-game. See accounts.adm for info on available flags. Syntax: 'addaccount [username] [password] [(optional)flags] Updated 'get command to allow retrieving certain account properties for targeted player characters: username, flags, comment, character1, character2, character3, character4, character5, character6, character7, lastIP, isBanned, isSuspended, isPublic, isOnline, isSlot1Blocked, isSlot2Blocked, isSlot3Blocked, isSlot4Blocked, isSlot5Blocked, isSlot6Blocked, isSlot7Blocked, unused9, unused10, isSeer, isCounselor and isGM Updated 'set command to allow setting certain account properties for targeted player characters: comment, password, isBanned, isSuspended, isPublic, isOnline, isSlot1Blocked, isSlot2Blocked, isSlot3Blocked, isSlot4Blocked, isSlot5Blocked, isSlot6Blocked, isSlot7Blocked, unused9, unused10, isSeer, isCounselor, isGM Updated 'tweak command to allow viewing and modifying of certain account properties for targeted player characters Note that any changes to account properties will not go into effect until a worldsave or manual save of accounts via console has taken place. Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2021-04-16 21:14:50 +08:00
else
{
// Otherwise Acquire an object
JSObject *myChar = JSEngine->AcquireObject( IUE_CHAR, TempObj, JSEngine->FindActiveRuntime( JS_GetRuntime( cx )));
Fixes for Console behaviour on Linux and Windows, addition of JS properties for user accounts Fixed long-standing issue with UOX3 console not resetting terminal properly after shutdown on Linux, after updating cConsole.cpp/h to conform to standard unix terminal commands/settings for certain features (punt) Fixed an issue that could cause a crash on Windows when attempting to broadcast system messages from the UOX3 console (punt) Fixed an issue that prevented text input in UOX3 console for system broadcasts from being displayed on Linux and MacOS (punt) Added support for new JS Object - IUE_ACCOUNT - which can be accessed via character property .account. The following account properties have been exposed to the JS engine: .id // Account ID (Read-Only) .username // Account Username (Read-Only) .flags // Flags set on account (Read-Only) .comment // Comment/contact info .character1 // Character in account slot 1 (Read-Only) .character2 // Character in account slot 2 (Read-Only) .character3 // Character in account slot 3 (Read-Only) .character4 // Character in account slot 4 (Read-Only) .character5 // Character in account slot 5 (Read-Only) .character6 // Character in account slot 6 (Read-Only) .character7 // Character in account slot 7 (Read-Only) .currentChar // Currently logged in character (if any) (Read-Only) .lastIP // Last IP used to connect to account (Read-Only) // Flag shortcuts .isBanned // Is account banned? .isSuspended // Is account suspended? .isPublic // Is comment/contact info to be considered public info? .isOnline // Is account online? .isSlot1Blocked // Is character slot 1 blocked? .isSlot2Blocked // Is character slot 2 blocked? .isSlot3Blocked // Is character slot 3 blocked? .isSlot4Blocked // Is character slot 4 blocked? .isSlot5Blocked // Is character slot 5 blocked? .isSlot6Blocked // Is character slot 6 blocked? .isSlot7Blocked // Is character slot 7 blocked? .unused9 // Unused flag .unused10 // Unused flag .isSeer // Is account marked as Seer account? .isCounselor // Is account marked as Counselor account? .isGM // Is account marked as GM account? Fixed 'addaccount command - can now once again be used to add a new user account to the server from in-game. See accounts.adm for info on available flags. Syntax: 'addaccount [username] [password] [(optional)flags] Updated 'get command to allow retrieving certain account properties for targeted player characters: username, flags, comment, character1, character2, character3, character4, character5, character6, character7, lastIP, isBanned, isSuspended, isPublic, isOnline, isSlot1Blocked, isSlot2Blocked, isSlot3Blocked, isSlot4Blocked, isSlot5Blocked, isSlot6Blocked, isSlot7Blocked, unused9, unused10, isSeer, isCounselor and isGM Updated 'set command to allow setting certain account properties for targeted player characters: comment, password, isBanned, isSuspended, isPublic, isOnline, isSlot1Blocked, isSlot2Blocked, isSlot3Blocked, isSlot4Blocked, isSlot5Blocked, isSlot6Blocked, isSlot7Blocked, unused9, unused10, isSeer, isCounselor, isGM Updated 'tweak command to allow viewing and modifying of certain account properties for targeted player characters Note that any changes to account properties will not go into effect until a worldsave or manual save of accounts via console has taken place. Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2021-04-16 21:14:50 +08:00
*vp = OBJECT_TO_JSVAL( myChar );
}
}
else
{
Fixes for Console behaviour on Linux and Windows, addition of JS properties for user accounts Fixed long-standing issue with UOX3 console not resetting terminal properly after shutdown on Linux, after updating cConsole.cpp/h to conform to standard unix terminal commands/settings for certain features (punt) Fixed an issue that could cause a crash on Windows when attempting to broadcast system messages from the UOX3 console (punt) Fixed an issue that prevented text input in UOX3 console for system broadcasts from being displayed on Linux and MacOS (punt) Added support for new JS Object - IUE_ACCOUNT - which can be accessed via character property .account. The following account properties have been exposed to the JS engine: .id // Account ID (Read-Only) .username // Account Username (Read-Only) .flags // Flags set on account (Read-Only) .comment // Comment/contact info .character1 // Character in account slot 1 (Read-Only) .character2 // Character in account slot 2 (Read-Only) .character3 // Character in account slot 3 (Read-Only) .character4 // Character in account slot 4 (Read-Only) .character5 // Character in account slot 5 (Read-Only) .character6 // Character in account slot 6 (Read-Only) .character7 // Character in account slot 7 (Read-Only) .currentChar // Currently logged in character (if any) (Read-Only) .lastIP // Last IP used to connect to account (Read-Only) // Flag shortcuts .isBanned // Is account banned? .isSuspended // Is account suspended? .isPublic // Is comment/contact info to be considered public info? .isOnline // Is account online? .isSlot1Blocked // Is character slot 1 blocked? .isSlot2Blocked // Is character slot 2 blocked? .isSlot3Blocked // Is character slot 3 blocked? .isSlot4Blocked // Is character slot 4 blocked? .isSlot5Blocked // Is character slot 5 blocked? .isSlot6Blocked // Is character slot 6 blocked? .isSlot7Blocked // Is character slot 7 blocked? .unused9 // Unused flag .unused10 // Unused flag .isSeer // Is account marked as Seer account? .isCounselor // Is account marked as Counselor account? .isGM // Is account marked as GM account? Fixed 'addaccount command - can now once again be used to add a new user account to the server from in-game. See accounts.adm for info on available flags. Syntax: 'addaccount [username] [password] [(optional)flags] Updated 'get command to allow retrieving certain account properties for targeted player characters: username, flags, comment, character1, character2, character3, character4, character5, character6, character7, lastIP, isBanned, isSuspended, isPublic, isOnline, isSlot1Blocked, isSlot2Blocked, isSlot3Blocked, isSlot4Blocked, isSlot5Blocked, isSlot6Blocked, isSlot7Blocked, unused9, unused10, isSeer, isCounselor and isGM Updated 'set command to allow setting certain account properties for targeted player characters: comment, password, isBanned, isSuspended, isPublic, isOnline, isSlot1Blocked, isSlot2Blocked, isSlot3Blocked, isSlot4Blocked, isSlot5Blocked, isSlot6Blocked, isSlot7Blocked, unused9, unused10, isSeer, isCounselor, isGM Updated 'tweak command to allow viewing and modifying of certain account properties for targeted player characters Note that any changes to account properties will not go into effect until a worldsave or manual save of accounts via console has taken place. Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2021-04-16 21:14:50 +08:00
*vp = JSVAL_NULL;
}
Fixes for Console behaviour on Linux and Windows, addition of JS properties for user accounts Fixed long-standing issue with UOX3 console not resetting terminal properly after shutdown on Linux, after updating cConsole.cpp/h to conform to standard unix terminal commands/settings for certain features (punt) Fixed an issue that could cause a crash on Windows when attempting to broadcast system messages from the UOX3 console (punt) Fixed an issue that prevented text input in UOX3 console for system broadcasts from being displayed on Linux and MacOS (punt) Added support for new JS Object - IUE_ACCOUNT - which can be accessed via character property .account. The following account properties have been exposed to the JS engine: .id // Account ID (Read-Only) .username // Account Username (Read-Only) .flags // Flags set on account (Read-Only) .comment // Comment/contact info .character1 // Character in account slot 1 (Read-Only) .character2 // Character in account slot 2 (Read-Only) .character3 // Character in account slot 3 (Read-Only) .character4 // Character in account slot 4 (Read-Only) .character5 // Character in account slot 5 (Read-Only) .character6 // Character in account slot 6 (Read-Only) .character7 // Character in account slot 7 (Read-Only) .currentChar // Currently logged in character (if any) (Read-Only) .lastIP // Last IP used to connect to account (Read-Only) // Flag shortcuts .isBanned // Is account banned? .isSuspended // Is account suspended? .isPublic // Is comment/contact info to be considered public info? .isOnline // Is account online? .isSlot1Blocked // Is character slot 1 blocked? .isSlot2Blocked // Is character slot 2 blocked? .isSlot3Blocked // Is character slot 3 blocked? .isSlot4Blocked // Is character slot 4 blocked? .isSlot5Blocked // Is character slot 5 blocked? .isSlot6Blocked // Is character slot 6 blocked? .isSlot7Blocked // Is character slot 7 blocked? .unused9 // Unused flag .unused10 // Unused flag .isSeer // Is account marked as Seer account? .isCounselor // Is account marked as Counselor account? .isGM // Is account marked as GM account? Fixed 'addaccount command - can now once again be used to add a new user account to the server from in-game. See accounts.adm for info on available flags. Syntax: 'addaccount [username] [password] [(optional)flags] Updated 'get command to allow retrieving certain account properties for targeted player characters: username, flags, comment, character1, character2, character3, character4, character5, character6, character7, lastIP, isBanned, isSuspended, isPublic, isOnline, isSlot1Blocked, isSlot2Blocked, isSlot3Blocked, isSlot4Blocked, isSlot5Blocked, isSlot6Blocked, isSlot7Blocked, unused9, unused10, isSeer, isCounselor and isGM Updated 'set command to allow setting certain account properties for targeted player characters: comment, password, isBanned, isSuspended, isPublic, isOnline, isSlot1Blocked, isSlot2Blocked, isSlot3Blocked, isSlot4Blocked, isSlot5Blocked, isSlot6Blocked, isSlot7Blocked, unused9, unused10, isSeer, isCounselor, isGM Updated 'tweak command to allow viewing and modifying of certain account properties for targeted player characters Note that any changes to account properties will not go into effect until a worldsave or manual save of accounts via console has taken place. Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2021-04-16 21:14:50 +08:00
break;
}
case CACCOUNT_CHARACTER3:
{
if( myAccount->dwCharacters[2] != INVALIDSERIAL )
{
CBaseObject *TempObj = myAccount->lpCharacters[2];
if( !ValidateObject( TempObj ))
{
Fixes for Console behaviour on Linux and Windows, addition of JS properties for user accounts Fixed long-standing issue with UOX3 console not resetting terminal properly after shutdown on Linux, after updating cConsole.cpp/h to conform to standard unix terminal commands/settings for certain features (punt) Fixed an issue that could cause a crash on Windows when attempting to broadcast system messages from the UOX3 console (punt) Fixed an issue that prevented text input in UOX3 console for system broadcasts from being displayed on Linux and MacOS (punt) Added support for new JS Object - IUE_ACCOUNT - which can be accessed via character property .account. The following account properties have been exposed to the JS engine: .id // Account ID (Read-Only) .username // Account Username (Read-Only) .flags // Flags set on account (Read-Only) .comment // Comment/contact info .character1 // Character in account slot 1 (Read-Only) .character2 // Character in account slot 2 (Read-Only) .character3 // Character in account slot 3 (Read-Only) .character4 // Character in account slot 4 (Read-Only) .character5 // Character in account slot 5 (Read-Only) .character6 // Character in account slot 6 (Read-Only) .character7 // Character in account slot 7 (Read-Only) .currentChar // Currently logged in character (if any) (Read-Only) .lastIP // Last IP used to connect to account (Read-Only) // Flag shortcuts .isBanned // Is account banned? .isSuspended // Is account suspended? .isPublic // Is comment/contact info to be considered public info? .isOnline // Is account online? .isSlot1Blocked // Is character slot 1 blocked? .isSlot2Blocked // Is character slot 2 blocked? .isSlot3Blocked // Is character slot 3 blocked? .isSlot4Blocked // Is character slot 4 blocked? .isSlot5Blocked // Is character slot 5 blocked? .isSlot6Blocked // Is character slot 6 blocked? .isSlot7Blocked // Is character slot 7 blocked? .unused9 // Unused flag .unused10 // Unused flag .isSeer // Is account marked as Seer account? .isCounselor // Is account marked as Counselor account? .isGM // Is account marked as GM account? Fixed 'addaccount command - can now once again be used to add a new user account to the server from in-game. See accounts.adm for info on available flags. Syntax: 'addaccount [username] [password] [(optional)flags] Updated 'get command to allow retrieving certain account properties for targeted player characters: username, flags, comment, character1, character2, character3, character4, character5, character6, character7, lastIP, isBanned, isSuspended, isPublic, isOnline, isSlot1Blocked, isSlot2Blocked, isSlot3Blocked, isSlot4Blocked, isSlot5Blocked, isSlot6Blocked, isSlot7Blocked, unused9, unused10, isSeer, isCounselor and isGM Updated 'set command to allow setting certain account properties for targeted player characters: comment, password, isBanned, isSuspended, isPublic, isOnline, isSlot1Blocked, isSlot2Blocked, isSlot3Blocked, isSlot4Blocked, isSlot5Blocked, isSlot6Blocked, isSlot7Blocked, unused9, unused10, isSeer, isCounselor, isGM Updated 'tweak command to allow viewing and modifying of certain account properties for targeted player characters Note that any changes to account properties will not go into effect until a worldsave or manual save of accounts via console has taken place. Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2021-04-16 21:14:50 +08:00
*vp = JSVAL_NULL;
}
Fixes for Console behaviour on Linux and Windows, addition of JS properties for user accounts Fixed long-standing issue with UOX3 console not resetting terminal properly after shutdown on Linux, after updating cConsole.cpp/h to conform to standard unix terminal commands/settings for certain features (punt) Fixed an issue that could cause a crash on Windows when attempting to broadcast system messages from the UOX3 console (punt) Fixed an issue that prevented text input in UOX3 console for system broadcasts from being displayed on Linux and MacOS (punt) Added support for new JS Object - IUE_ACCOUNT - which can be accessed via character property .account. The following account properties have been exposed to the JS engine: .id // Account ID (Read-Only) .username // Account Username (Read-Only) .flags // Flags set on account (Read-Only) .comment // Comment/contact info .character1 // Character in account slot 1 (Read-Only) .character2 // Character in account slot 2 (Read-Only) .character3 // Character in account slot 3 (Read-Only) .character4 // Character in account slot 4 (Read-Only) .character5 // Character in account slot 5 (Read-Only) .character6 // Character in account slot 6 (Read-Only) .character7 // Character in account slot 7 (Read-Only) .currentChar // Currently logged in character (if any) (Read-Only) .lastIP // Last IP used to connect to account (Read-Only) // Flag shortcuts .isBanned // Is account banned? .isSuspended // Is account suspended? .isPublic // Is comment/contact info to be considered public info? .isOnline // Is account online? .isSlot1Blocked // Is character slot 1 blocked? .isSlot2Blocked // Is character slot 2 blocked? .isSlot3Blocked // Is character slot 3 blocked? .isSlot4Blocked // Is character slot 4 blocked? .isSlot5Blocked // Is character slot 5 blocked? .isSlot6Blocked // Is character slot 6 blocked? .isSlot7Blocked // Is character slot 7 blocked? .unused9 // Unused flag .unused10 // Unused flag .isSeer // Is account marked as Seer account? .isCounselor // Is account marked as Counselor account? .isGM // Is account marked as GM account? Fixed 'addaccount command - can now once again be used to add a new user account to the server from in-game. See accounts.adm for info on available flags. Syntax: 'addaccount [username] [password] [(optional)flags] Updated 'get command to allow retrieving certain account properties for targeted player characters: username, flags, comment, character1, character2, character3, character4, character5, character6, character7, lastIP, isBanned, isSuspended, isPublic, isOnline, isSlot1Blocked, isSlot2Blocked, isSlot3Blocked, isSlot4Blocked, isSlot5Blocked, isSlot6Blocked, isSlot7Blocked, unused9, unused10, isSeer, isCounselor and isGM Updated 'set command to allow setting certain account properties for targeted player characters: comment, password, isBanned, isSuspended, isPublic, isOnline, isSlot1Blocked, isSlot2Blocked, isSlot3Blocked, isSlot4Blocked, isSlot5Blocked, isSlot6Blocked, isSlot7Blocked, unused9, unused10, isSeer, isCounselor, isGM Updated 'tweak command to allow viewing and modifying of certain account properties for targeted player characters Note that any changes to account properties will not go into effect until a worldsave or manual save of accounts via console has taken place. Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2021-04-16 21:14:50 +08:00
else
{
// Otherwise Acquire an object
JSObject *myChar = JSEngine->AcquireObject( IUE_CHAR, TempObj, JSEngine->FindActiveRuntime( JS_GetRuntime( cx )));
Fixes for Console behaviour on Linux and Windows, addition of JS properties for user accounts Fixed long-standing issue with UOX3 console not resetting terminal properly after shutdown on Linux, after updating cConsole.cpp/h to conform to standard unix terminal commands/settings for certain features (punt) Fixed an issue that could cause a crash on Windows when attempting to broadcast system messages from the UOX3 console (punt) Fixed an issue that prevented text input in UOX3 console for system broadcasts from being displayed on Linux and MacOS (punt) Added support for new JS Object - IUE_ACCOUNT - which can be accessed via character property .account. The following account properties have been exposed to the JS engine: .id // Account ID (Read-Only) .username // Account Username (Read-Only) .flags // Flags set on account (Read-Only) .comment // Comment/contact info .character1 // Character in account slot 1 (Read-Only) .character2 // Character in account slot 2 (Read-Only) .character3 // Character in account slot 3 (Read-Only) .character4 // Character in account slot 4 (Read-Only) .character5 // Character in account slot 5 (Read-Only) .character6 // Character in account slot 6 (Read-Only) .character7 // Character in account slot 7 (Read-Only) .currentChar // Currently logged in character (if any) (Read-Only) .lastIP // Last IP used to connect to account (Read-Only) // Flag shortcuts .isBanned // Is account banned? .isSuspended // Is account suspended? .isPublic // Is comment/contact info to be considered public info? .isOnline // Is account online? .isSlot1Blocked // Is character slot 1 blocked? .isSlot2Blocked // Is character slot 2 blocked? .isSlot3Blocked // Is character slot 3 blocked? .isSlot4Blocked // Is character slot 4 blocked? .isSlot5Blocked // Is character slot 5 blocked? .isSlot6Blocked // Is character slot 6 blocked? .isSlot7Blocked // Is character slot 7 blocked? .unused9 // Unused flag .unused10 // Unused flag .isSeer // Is account marked as Seer account? .isCounselor // Is account marked as Counselor account? .isGM // Is account marked as GM account? Fixed 'addaccount command - can now once again be used to add a new user account to the server from in-game. See accounts.adm for info on available flags. Syntax: 'addaccount [username] [password] [(optional)flags] Updated 'get command to allow retrieving certain account properties for targeted player characters: username, flags, comment, character1, character2, character3, character4, character5, character6, character7, lastIP, isBanned, isSuspended, isPublic, isOnline, isSlot1Blocked, isSlot2Blocked, isSlot3Blocked, isSlot4Blocked, isSlot5Blocked, isSlot6Blocked, isSlot7Blocked, unused9, unused10, isSeer, isCounselor and isGM Updated 'set command to allow setting certain account properties for targeted player characters: comment, password, isBanned, isSuspended, isPublic, isOnline, isSlot1Blocked, isSlot2Blocked, isSlot3Blocked, isSlot4Blocked, isSlot5Blocked, isSlot6Blocked, isSlot7Blocked, unused9, unused10, isSeer, isCounselor, isGM Updated 'tweak command to allow viewing and modifying of certain account properties for targeted player characters Note that any changes to account properties will not go into effect until a worldsave or manual save of accounts via console has taken place. Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2021-04-16 21:14:50 +08:00
*vp = OBJECT_TO_JSVAL( myChar );
}
}
else
{
Fixes for Console behaviour on Linux and Windows, addition of JS properties for user accounts Fixed long-standing issue with UOX3 console not resetting terminal properly after shutdown on Linux, after updating cConsole.cpp/h to conform to standard unix terminal commands/settings for certain features (punt) Fixed an issue that could cause a crash on Windows when attempting to broadcast system messages from the UOX3 console (punt) Fixed an issue that prevented text input in UOX3 console for system broadcasts from being displayed on Linux and MacOS (punt) Added support for new JS Object - IUE_ACCOUNT - which can be accessed via character property .account. The following account properties have been exposed to the JS engine: .id // Account ID (Read-Only) .username // Account Username (Read-Only) .flags // Flags set on account (Read-Only) .comment // Comment/contact info .character1 // Character in account slot 1 (Read-Only) .character2 // Character in account slot 2 (Read-Only) .character3 // Character in account slot 3 (Read-Only) .character4 // Character in account slot 4 (Read-Only) .character5 // Character in account slot 5 (Read-Only) .character6 // Character in account slot 6 (Read-Only) .character7 // Character in account slot 7 (Read-Only) .currentChar // Currently logged in character (if any) (Read-Only) .lastIP // Last IP used to connect to account (Read-Only) // Flag shortcuts .isBanned // Is account banned? .isSuspended // Is account suspended? .isPublic // Is comment/contact info to be considered public info? .isOnline // Is account online? .isSlot1Blocked // Is character slot 1 blocked? .isSlot2Blocked // Is character slot 2 blocked? .isSlot3Blocked // Is character slot 3 blocked? .isSlot4Blocked // Is character slot 4 blocked? .isSlot5Blocked // Is character slot 5 blocked? .isSlot6Blocked // Is character slot 6 blocked? .isSlot7Blocked // Is character slot 7 blocked? .unused9 // Unused flag .unused10 // Unused flag .isSeer // Is account marked as Seer account? .isCounselor // Is account marked as Counselor account? .isGM // Is account marked as GM account? Fixed 'addaccount command - can now once again be used to add a new user account to the server from in-game. See accounts.adm for info on available flags. Syntax: 'addaccount [username] [password] [(optional)flags] Updated 'get command to allow retrieving certain account properties for targeted player characters: username, flags, comment, character1, character2, character3, character4, character5, character6, character7, lastIP, isBanned, isSuspended, isPublic, isOnline, isSlot1Blocked, isSlot2Blocked, isSlot3Blocked, isSlot4Blocked, isSlot5Blocked, isSlot6Blocked, isSlot7Blocked, unused9, unused10, isSeer, isCounselor and isGM Updated 'set command to allow setting certain account properties for targeted player characters: comment, password, isBanned, isSuspended, isPublic, isOnline, isSlot1Blocked, isSlot2Blocked, isSlot3Blocked, isSlot4Blocked, isSlot5Blocked, isSlot6Blocked, isSlot7Blocked, unused9, unused10, isSeer, isCounselor, isGM Updated 'tweak command to allow viewing and modifying of certain account properties for targeted player characters Note that any changes to account properties will not go into effect until a worldsave or manual save of accounts via console has taken place. Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2021-04-16 21:14:50 +08:00
*vp = JSVAL_NULL;
}
Fixes for Console behaviour on Linux and Windows, addition of JS properties for user accounts Fixed long-standing issue with UOX3 console not resetting terminal properly after shutdown on Linux, after updating cConsole.cpp/h to conform to standard unix terminal commands/settings for certain features (punt) Fixed an issue that could cause a crash on Windows when attempting to broadcast system messages from the UOX3 console (punt) Fixed an issue that prevented text input in UOX3 console for system broadcasts from being displayed on Linux and MacOS (punt) Added support for new JS Object - IUE_ACCOUNT - which can be accessed via character property .account. The following account properties have been exposed to the JS engine: .id // Account ID (Read-Only) .username // Account Username (Read-Only) .flags // Flags set on account (Read-Only) .comment // Comment/contact info .character1 // Character in account slot 1 (Read-Only) .character2 // Character in account slot 2 (Read-Only) .character3 // Character in account slot 3 (Read-Only) .character4 // Character in account slot 4 (Read-Only) .character5 // Character in account slot 5 (Read-Only) .character6 // Character in account slot 6 (Read-Only) .character7 // Character in account slot 7 (Read-Only) .currentChar // Currently logged in character (if any) (Read-Only) .lastIP // Last IP used to connect to account (Read-Only) // Flag shortcuts .isBanned // Is account banned? .isSuspended // Is account suspended? .isPublic // Is comment/contact info to be considered public info? .isOnline // Is account online? .isSlot1Blocked // Is character slot 1 blocked? .isSlot2Blocked // Is character slot 2 blocked? .isSlot3Blocked // Is character slot 3 blocked? .isSlot4Blocked // Is character slot 4 blocked? .isSlot5Blocked // Is character slot 5 blocked? .isSlot6Blocked // Is character slot 6 blocked? .isSlot7Blocked // Is character slot 7 blocked? .unused9 // Unused flag .unused10 // Unused flag .isSeer // Is account marked as Seer account? .isCounselor // Is account marked as Counselor account? .isGM // Is account marked as GM account? Fixed 'addaccount command - can now once again be used to add a new user account to the server from in-game. See accounts.adm for info on available flags. Syntax: 'addaccount [username] [password] [(optional)flags] Updated 'get command to allow retrieving certain account properties for targeted player characters: username, flags, comment, character1, character2, character3, character4, character5, character6, character7, lastIP, isBanned, isSuspended, isPublic, isOnline, isSlot1Blocked, isSlot2Blocked, isSlot3Blocked, isSlot4Blocked, isSlot5Blocked, isSlot6Blocked, isSlot7Blocked, unused9, unused10, isSeer, isCounselor and isGM Updated 'set command to allow setting certain account properties for targeted player characters: comment, password, isBanned, isSuspended, isPublic, isOnline, isSlot1Blocked, isSlot2Blocked, isSlot3Blocked, isSlot4Blocked, isSlot5Blocked, isSlot6Blocked, isSlot7Blocked, unused9, unused10, isSeer, isCounselor, isGM Updated 'tweak command to allow viewing and modifying of certain account properties for targeted player characters Note that any changes to account properties will not go into effect until a worldsave or manual save of accounts via console has taken place. Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2021-04-16 21:14:50 +08:00
break;
}
case CACCOUNT_CHARACTER4:
{
if( myAccount->dwCharacters[3] != INVALIDSERIAL )
{
CBaseObject *TempObj = myAccount->lpCharacters[3];
if( !ValidateObject( TempObj ))
{
Fixes for Console behaviour on Linux and Windows, addition of JS properties for user accounts Fixed long-standing issue with UOX3 console not resetting terminal properly after shutdown on Linux, after updating cConsole.cpp/h to conform to standard unix terminal commands/settings for certain features (punt) Fixed an issue that could cause a crash on Windows when attempting to broadcast system messages from the UOX3 console (punt) Fixed an issue that prevented text input in UOX3 console for system broadcasts from being displayed on Linux and MacOS (punt) Added support for new JS Object - IUE_ACCOUNT - which can be accessed via character property .account. The following account properties have been exposed to the JS engine: .id // Account ID (Read-Only) .username // Account Username (Read-Only) .flags // Flags set on account (Read-Only) .comment // Comment/contact info .character1 // Character in account slot 1 (Read-Only) .character2 // Character in account slot 2 (Read-Only) .character3 // Character in account slot 3 (Read-Only) .character4 // Character in account slot 4 (Read-Only) .character5 // Character in account slot 5 (Read-Only) .character6 // Character in account slot 6 (Read-Only) .character7 // Character in account slot 7 (Read-Only) .currentChar // Currently logged in character (if any) (Read-Only) .lastIP // Last IP used to connect to account (Read-Only) // Flag shortcuts .isBanned // Is account banned? .isSuspended // Is account suspended? .isPublic // Is comment/contact info to be considered public info? .isOnline // Is account online? .isSlot1Blocked // Is character slot 1 blocked? .isSlot2Blocked // Is character slot 2 blocked? .isSlot3Blocked // Is character slot 3 blocked? .isSlot4Blocked // Is character slot 4 blocked? .isSlot5Blocked // Is character slot 5 blocked? .isSlot6Blocked // Is character slot 6 blocked? .isSlot7Blocked // Is character slot 7 blocked? .unused9 // Unused flag .unused10 // Unused flag .isSeer // Is account marked as Seer account? .isCounselor // Is account marked as Counselor account? .isGM // Is account marked as GM account? Fixed 'addaccount command - can now once again be used to add a new user account to the server from in-game. See accounts.adm for info on available flags. Syntax: 'addaccount [username] [password] [(optional)flags] Updated 'get command to allow retrieving certain account properties for targeted player characters: username, flags, comment, character1, character2, character3, character4, character5, character6, character7, lastIP, isBanned, isSuspended, isPublic, isOnline, isSlot1Blocked, isSlot2Blocked, isSlot3Blocked, isSlot4Blocked, isSlot5Blocked, isSlot6Blocked, isSlot7Blocked, unused9, unused10, isSeer, isCounselor and isGM Updated 'set command to allow setting certain account properties for targeted player characters: comment, password, isBanned, isSuspended, isPublic, isOnline, isSlot1Blocked, isSlot2Blocked, isSlot3Blocked, isSlot4Blocked, isSlot5Blocked, isSlot6Blocked, isSlot7Blocked, unused9, unused10, isSeer, isCounselor, isGM Updated 'tweak command to allow viewing and modifying of certain account properties for targeted player characters Note that any changes to account properties will not go into effect until a worldsave or manual save of accounts via console has taken place. Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2021-04-16 21:14:50 +08:00
*vp = JSVAL_NULL;
}
Fixes for Console behaviour on Linux and Windows, addition of JS properties for user accounts Fixed long-standing issue with UOX3 console not resetting terminal properly after shutdown on Linux, after updating cConsole.cpp/h to conform to standard unix terminal commands/settings for certain features (punt) Fixed an issue that could cause a crash on Windows when attempting to broadcast system messages from the UOX3 console (punt) Fixed an issue that prevented text input in UOX3 console for system broadcasts from being displayed on Linux and MacOS (punt) Added support for new JS Object - IUE_ACCOUNT - which can be accessed via character property .account. The following account properties have been exposed to the JS engine: .id // Account ID (Read-Only) .username // Account Username (Read-Only) .flags // Flags set on account (Read-Only) .comment // Comment/contact info .character1 // Character in account slot 1 (Read-Only) .character2 // Character in account slot 2 (Read-Only) .character3 // Character in account slot 3 (Read-Only) .character4 // Character in account slot 4 (Read-Only) .character5 // Character in account slot 5 (Read-Only) .character6 // Character in account slot 6 (Read-Only) .character7 // Character in account slot 7 (Read-Only) .currentChar // Currently logged in character (if any) (Read-Only) .lastIP // Last IP used to connect to account (Read-Only) // Flag shortcuts .isBanned // Is account banned? .isSuspended // Is account suspended? .isPublic // Is comment/contact info to be considered public info? .isOnline // Is account online? .isSlot1Blocked // Is character slot 1 blocked? .isSlot2Blocked // Is character slot 2 blocked? .isSlot3Blocked // Is character slot 3 blocked? .isSlot4Blocked // Is character slot 4 blocked? .isSlot5Blocked // Is character slot 5 blocked? .isSlot6Blocked // Is character slot 6 blocked? .isSlot7Blocked // Is character slot 7 blocked? .unused9 // Unused flag .unused10 // Unused flag .isSeer // Is account marked as Seer account? .isCounselor // Is account marked as Counselor account? .isGM // Is account marked as GM account? Fixed 'addaccount command - can now once again be used to add a new user account to the server from in-game. See accounts.adm for info on available flags. Syntax: 'addaccount [username] [password] [(optional)flags] Updated 'get command to allow retrieving certain account properties for targeted player characters: username, flags, comment, character1, character2, character3, character4, character5, character6, character7, lastIP, isBanned, isSuspended, isPublic, isOnline, isSlot1Blocked, isSlot2Blocked, isSlot3Blocked, isSlot4Blocked, isSlot5Blocked, isSlot6Blocked, isSlot7Blocked, unused9, unused10, isSeer, isCounselor and isGM Updated 'set command to allow setting certain account properties for targeted player characters: comment, password, isBanned, isSuspended, isPublic, isOnline, isSlot1Blocked, isSlot2Blocked, isSlot3Blocked, isSlot4Blocked, isSlot5Blocked, isSlot6Blocked, isSlot7Blocked, unused9, unused10, isSeer, isCounselor, isGM Updated 'tweak command to allow viewing and modifying of certain account properties for targeted player characters Note that any changes to account properties will not go into effect until a worldsave or manual save of accounts via console has taken place. Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2021-04-16 21:14:50 +08:00
else
{
// Otherwise Acquire an object
JSObject *myChar = JSEngine->AcquireObject( IUE_CHAR, TempObj, JSEngine->FindActiveRuntime( JS_GetRuntime( cx )));
Fixes for Console behaviour on Linux and Windows, addition of JS properties for user accounts Fixed long-standing issue with UOX3 console not resetting terminal properly after shutdown on Linux, after updating cConsole.cpp/h to conform to standard unix terminal commands/settings for certain features (punt) Fixed an issue that could cause a crash on Windows when attempting to broadcast system messages from the UOX3 console (punt) Fixed an issue that prevented text input in UOX3 console for system broadcasts from being displayed on Linux and MacOS (punt) Added support for new JS Object - IUE_ACCOUNT - which can be accessed via character property .account. The following account properties have been exposed to the JS engine: .id // Account ID (Read-Only) .username // Account Username (Read-Only) .flags // Flags set on account (Read-Only) .comment // Comment/contact info .character1 // Character in account slot 1 (Read-Only) .character2 // Character in account slot 2 (Read-Only) .character3 // Character in account slot 3 (Read-Only) .character4 // Character in account slot 4 (Read-Only) .character5 // Character in account slot 5 (Read-Only) .character6 // Character in account slot 6 (Read-Only) .character7 // Character in account slot 7 (Read-Only) .currentChar // Currently logged in character (if any) (Read-Only) .lastIP // Last IP used to connect to account (Read-Only) // Flag shortcuts .isBanned // Is account banned? .isSuspended // Is account suspended? .isPublic // Is comment/contact info to be considered public info? .isOnline // Is account online? .isSlot1Blocked // Is character slot 1 blocked? .isSlot2Blocked // Is character slot 2 blocked? .isSlot3Blocked // Is character slot 3 blocked? .isSlot4Blocked // Is character slot 4 blocked? .isSlot5Blocked // Is character slot 5 blocked? .isSlot6Blocked // Is character slot 6 blocked? .isSlot7Blocked // Is character slot 7 blocked? .unused9 // Unused flag .unused10 // Unused flag .isSeer // Is account marked as Seer account? .isCounselor // Is account marked as Counselor account? .isGM // Is account marked as GM account? Fixed 'addaccount command - can now once again be used to add a new user account to the server from in-game. See accounts.adm for info on available flags. Syntax: 'addaccount [username] [password] [(optional)flags] Updated 'get command to allow retrieving certain account properties for targeted player characters: username, flags, comment, character1, character2, character3, character4, character5, character6, character7, lastIP, isBanned, isSuspended, isPublic, isOnline, isSlot1Blocked, isSlot2Blocked, isSlot3Blocked, isSlot4Blocked, isSlot5Blocked, isSlot6Blocked, isSlot7Blocked, unused9, unused10, isSeer, isCounselor and isGM Updated 'set command to allow setting certain account properties for targeted player characters: comment, password, isBanned, isSuspended, isPublic, isOnline, isSlot1Blocked, isSlot2Blocked, isSlot3Blocked, isSlot4Blocked, isSlot5Blocked, isSlot6Blocked, isSlot7Blocked, unused9, unused10, isSeer, isCounselor, isGM Updated 'tweak command to allow viewing and modifying of certain account properties for targeted player characters Note that any changes to account properties will not go into effect until a worldsave or manual save of accounts via console has taken place. Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2021-04-16 21:14:50 +08:00
*vp = OBJECT_TO_JSVAL( myChar );
}
}
else
{
Fixes for Console behaviour on Linux and Windows, addition of JS properties for user accounts Fixed long-standing issue with UOX3 console not resetting terminal properly after shutdown on Linux, after updating cConsole.cpp/h to conform to standard unix terminal commands/settings for certain features (punt) Fixed an issue that could cause a crash on Windows when attempting to broadcast system messages from the UOX3 console (punt) Fixed an issue that prevented text input in UOX3 console for system broadcasts from being displayed on Linux and MacOS (punt) Added support for new JS Object - IUE_ACCOUNT - which can be accessed via character property .account. The following account properties have been exposed to the JS engine: .id // Account ID (Read-Only) .username // Account Username (Read-Only) .flags // Flags set on account (Read-Only) .comment // Comment/contact info .character1 // Character in account slot 1 (Read-Only) .character2 // Character in account slot 2 (Read-Only) .character3 // Character in account slot 3 (Read-Only) .character4 // Character in account slot 4 (Read-Only) .character5 // Character in account slot 5 (Read-Only) .character6 // Character in account slot 6 (Read-Only) .character7 // Character in account slot 7 (Read-Only) .currentChar // Currently logged in character (if any) (Read-Only) .lastIP // Last IP used to connect to account (Read-Only) // Flag shortcuts .isBanned // Is account banned? .isSuspended // Is account suspended? .isPublic // Is comment/contact info to be considered public info? .isOnline // Is account online? .isSlot1Blocked // Is character slot 1 blocked? .isSlot2Blocked // Is character slot 2 blocked? .isSlot3Blocked // Is character slot 3 blocked? .isSlot4Blocked // Is character slot 4 blocked? .isSlot5Blocked // Is character slot 5 blocked? .isSlot6Blocked // Is character slot 6 blocked? .isSlot7Blocked // Is character slot 7 blocked? .unused9 // Unused flag .unused10 // Unused flag .isSeer // Is account marked as Seer account? .isCounselor // Is account marked as Counselor account? .isGM // Is account marked as GM account? Fixed 'addaccount command - can now once again be used to add a new user account to the server from in-game. See accounts.adm for info on available flags. Syntax: 'addaccount [username] [password] [(optional)flags] Updated 'get command to allow retrieving certain account properties for targeted player characters: username, flags, comment, character1, character2, character3, character4, character5, character6, character7, lastIP, isBanned, isSuspended, isPublic, isOnline, isSlot1Blocked, isSlot2Blocked, isSlot3Blocked, isSlot4Blocked, isSlot5Blocked, isSlot6Blocked, isSlot7Blocked, unused9, unused10, isSeer, isCounselor and isGM Updated 'set command to allow setting certain account properties for targeted player characters: comment, password, isBanned, isSuspended, isPublic, isOnline, isSlot1Blocked, isSlot2Blocked, isSlot3Blocked, isSlot4Blocked, isSlot5Blocked, isSlot6Blocked, isSlot7Blocked, unused9, unused10, isSeer, isCounselor, isGM Updated 'tweak command to allow viewing and modifying of certain account properties for targeted player characters Note that any changes to account properties will not go into effect until a worldsave or manual save of accounts via console has taken place. Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2021-04-16 21:14:50 +08:00
*vp = JSVAL_NULL;
}
Fixes for Console behaviour on Linux and Windows, addition of JS properties for user accounts Fixed long-standing issue with UOX3 console not resetting terminal properly after shutdown on Linux, after updating cConsole.cpp/h to conform to standard unix terminal commands/settings for certain features (punt) Fixed an issue that could cause a crash on Windows when attempting to broadcast system messages from the UOX3 console (punt) Fixed an issue that prevented text input in UOX3 console for system broadcasts from being displayed on Linux and MacOS (punt) Added support for new JS Object - IUE_ACCOUNT - which can be accessed via character property .account. The following account properties have been exposed to the JS engine: .id // Account ID (Read-Only) .username // Account Username (Read-Only) .flags // Flags set on account (Read-Only) .comment // Comment/contact info .character1 // Character in account slot 1 (Read-Only) .character2 // Character in account slot 2 (Read-Only) .character3 // Character in account slot 3 (Read-Only) .character4 // Character in account slot 4 (Read-Only) .character5 // Character in account slot 5 (Read-Only) .character6 // Character in account slot 6 (Read-Only) .character7 // Character in account slot 7 (Read-Only) .currentChar // Currently logged in character (if any) (Read-Only) .lastIP // Last IP used to connect to account (Read-Only) // Flag shortcuts .isBanned // Is account banned? .isSuspended // Is account suspended? .isPublic // Is comment/contact info to be considered public info? .isOnline // Is account online? .isSlot1Blocked // Is character slot 1 blocked? .isSlot2Blocked // Is character slot 2 blocked? .isSlot3Blocked // Is character slot 3 blocked? .isSlot4Blocked // Is character slot 4 blocked? .isSlot5Blocked // Is character slot 5 blocked? .isSlot6Blocked // Is character slot 6 blocked? .isSlot7Blocked // Is character slot 7 blocked? .unused9 // Unused flag .unused10 // Unused flag .isSeer // Is account marked as Seer account? .isCounselor // Is account marked as Counselor account? .isGM // Is account marked as GM account? Fixed 'addaccount command - can now once again be used to add a new user account to the server from in-game. See accounts.adm for info on available flags. Syntax: 'addaccount [username] [password] [(optional)flags] Updated 'get command to allow retrieving certain account properties for targeted player characters: username, flags, comment, character1, character2, character3, character4, character5, character6, character7, lastIP, isBanned, isSuspended, isPublic, isOnline, isSlot1Blocked, isSlot2Blocked, isSlot3Blocked, isSlot4Blocked, isSlot5Blocked, isSlot6Blocked, isSlot7Blocked, unused9, unused10, isSeer, isCounselor and isGM Updated 'set command to allow setting certain account properties for targeted player characters: comment, password, isBanned, isSuspended, isPublic, isOnline, isSlot1Blocked, isSlot2Blocked, isSlot3Blocked, isSlot4Blocked, isSlot5Blocked, isSlot6Blocked, isSlot7Blocked, unused9, unused10, isSeer, isCounselor, isGM Updated 'tweak command to allow viewing and modifying of certain account properties for targeted player characters Note that any changes to account properties will not go into effect until a worldsave or manual save of accounts via console has taken place. Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2021-04-16 21:14:50 +08:00
break;
}
case CACCOUNT_CHARACTER5:
{
if( myAccount->dwCharacters[4] != INVALIDSERIAL )
{
CBaseObject *TempObj = myAccount->lpCharacters[4];
if( !ValidateObject( TempObj ))
{
Fixes for Console behaviour on Linux and Windows, addition of JS properties for user accounts Fixed long-standing issue with UOX3 console not resetting terminal properly after shutdown on Linux, after updating cConsole.cpp/h to conform to standard unix terminal commands/settings for certain features (punt) Fixed an issue that could cause a crash on Windows when attempting to broadcast system messages from the UOX3 console (punt) Fixed an issue that prevented text input in UOX3 console for system broadcasts from being displayed on Linux and MacOS (punt) Added support for new JS Object - IUE_ACCOUNT - which can be accessed via character property .account. The following account properties have been exposed to the JS engine: .id // Account ID (Read-Only) .username // Account Username (Read-Only) .flags // Flags set on account (Read-Only) .comment // Comment/contact info .character1 // Character in account slot 1 (Read-Only) .character2 // Character in account slot 2 (Read-Only) .character3 // Character in account slot 3 (Read-Only) .character4 // Character in account slot 4 (Read-Only) .character5 // Character in account slot 5 (Read-Only) .character6 // Character in account slot 6 (Read-Only) .character7 // Character in account slot 7 (Read-Only) .currentChar // Currently logged in character (if any) (Read-Only) .lastIP // Last IP used to connect to account (Read-Only) // Flag shortcuts .isBanned // Is account banned? .isSuspended // Is account suspended? .isPublic // Is comment/contact info to be considered public info? .isOnline // Is account online? .isSlot1Blocked // Is character slot 1 blocked? .isSlot2Blocked // Is character slot 2 blocked? .isSlot3Blocked // Is character slot 3 blocked? .isSlot4Blocked // Is character slot 4 blocked? .isSlot5Blocked // Is character slot 5 blocked? .isSlot6Blocked // Is character slot 6 blocked? .isSlot7Blocked // Is character slot 7 blocked? .unused9 // Unused flag .unused10 // Unused flag .isSeer // Is account marked as Seer account? .isCounselor // Is account marked as Counselor account? .isGM // Is account marked as GM account? Fixed 'addaccount command - can now once again be used to add a new user account to the server from in-game. See accounts.adm for info on available flags. Syntax: 'addaccount [username] [password] [(optional)flags] Updated 'get command to allow retrieving certain account properties for targeted player characters: username, flags, comment, character1, character2, character3, character4, character5, character6, character7, lastIP, isBanned, isSuspended, isPublic, isOnline, isSlot1Blocked, isSlot2Blocked, isSlot3Blocked, isSlot4Blocked, isSlot5Blocked, isSlot6Blocked, isSlot7Blocked, unused9, unused10, isSeer, isCounselor and isGM Updated 'set command to allow setting certain account properties for targeted player characters: comment, password, isBanned, isSuspended, isPublic, isOnline, isSlot1Blocked, isSlot2Blocked, isSlot3Blocked, isSlot4Blocked, isSlot5Blocked, isSlot6Blocked, isSlot7Blocked, unused9, unused10, isSeer, isCounselor, isGM Updated 'tweak command to allow viewing and modifying of certain account properties for targeted player characters Note that any changes to account properties will not go into effect until a worldsave or manual save of accounts via console has taken place. Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2021-04-16 21:14:50 +08:00
*vp = JSVAL_NULL;
}
Fixes for Console behaviour on Linux and Windows, addition of JS properties for user accounts Fixed long-standing issue with UOX3 console not resetting terminal properly after shutdown on Linux, after updating cConsole.cpp/h to conform to standard unix terminal commands/settings for certain features (punt) Fixed an issue that could cause a crash on Windows when attempting to broadcast system messages from the UOX3 console (punt) Fixed an issue that prevented text input in UOX3 console for system broadcasts from being displayed on Linux and MacOS (punt) Added support for new JS Object - IUE_ACCOUNT - which can be accessed via character property .account. The following account properties have been exposed to the JS engine: .id // Account ID (Read-Only) .username // Account Username (Read-Only) .flags // Flags set on account (Read-Only) .comment // Comment/contact info .character1 // Character in account slot 1 (Read-Only) .character2 // Character in account slot 2 (Read-Only) .character3 // Character in account slot 3 (Read-Only) .character4 // Character in account slot 4 (Read-Only) .character5 // Character in account slot 5 (Read-Only) .character6 // Character in account slot 6 (Read-Only) .character7 // Character in account slot 7 (Read-Only) .currentChar // Currently logged in character (if any) (Read-Only) .lastIP // Last IP used to connect to account (Read-Only) // Flag shortcuts .isBanned // Is account banned? .isSuspended // Is account suspended? .isPublic // Is comment/contact info to be considered public info? .isOnline // Is account online? .isSlot1Blocked // Is character slot 1 blocked? .isSlot2Blocked // Is character slot 2 blocked? .isSlot3Blocked // Is character slot 3 blocked? .isSlot4Blocked // Is character slot 4 blocked? .isSlot5Blocked // Is character slot 5 blocked? .isSlot6Blocked // Is character slot 6 blocked? .isSlot7Blocked // Is character slot 7 blocked? .unused9 // Unused flag .unused10 // Unused flag .isSeer // Is account marked as Seer account? .isCounselor // Is account marked as Counselor account? .isGM // Is account marked as GM account? Fixed 'addaccount command - can now once again be used to add a new user account to the server from in-game. See accounts.adm for info on available flags. Syntax: 'addaccount [username] [password] [(optional)flags] Updated 'get command to allow retrieving certain account properties for targeted player characters: username, flags, comment, character1, character2, character3, character4, character5, character6, character7, lastIP, isBanned, isSuspended, isPublic, isOnline, isSlot1Blocked, isSlot2Blocked, isSlot3Blocked, isSlot4Blocked, isSlot5Blocked, isSlot6Blocked, isSlot7Blocked, unused9, unused10, isSeer, isCounselor and isGM Updated 'set command to allow setting certain account properties for targeted player characters: comment, password, isBanned, isSuspended, isPublic, isOnline, isSlot1Blocked, isSlot2Blocked, isSlot3Blocked, isSlot4Blocked, isSlot5Blocked, isSlot6Blocked, isSlot7Blocked, unused9, unused10, isSeer, isCounselor, isGM Updated 'tweak command to allow viewing and modifying of certain account properties for targeted player characters Note that any changes to account properties will not go into effect until a worldsave or manual save of accounts via console has taken place. Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2021-04-16 21:14:50 +08:00
else
{
// Otherwise Acquire an object
JSObject *myChar = JSEngine->AcquireObject( IUE_CHAR, TempObj, JSEngine->FindActiveRuntime( JS_GetRuntime( cx )));
Fixes for Console behaviour on Linux and Windows, addition of JS properties for user accounts Fixed long-standing issue with UOX3 console not resetting terminal properly after shutdown on Linux, after updating cConsole.cpp/h to conform to standard unix terminal commands/settings for certain features (punt) Fixed an issue that could cause a crash on Windows when attempting to broadcast system messages from the UOX3 console (punt) Fixed an issue that prevented text input in UOX3 console for system broadcasts from being displayed on Linux and MacOS (punt) Added support for new JS Object - IUE_ACCOUNT - which can be accessed via character property .account. The following account properties have been exposed to the JS engine: .id // Account ID (Read-Only) .username // Account Username (Read-Only) .flags // Flags set on account (Read-Only) .comment // Comment/contact info .character1 // Character in account slot 1 (Read-Only) .character2 // Character in account slot 2 (Read-Only) .character3 // Character in account slot 3 (Read-Only) .character4 // Character in account slot 4 (Read-Only) .character5 // Character in account slot 5 (Read-Only) .character6 // Character in account slot 6 (Read-Only) .character7 // Character in account slot 7 (Read-Only) .currentChar // Currently logged in character (if any) (Read-Only) .lastIP // Last IP used to connect to account (Read-Only) // Flag shortcuts .isBanned // Is account banned? .isSuspended // Is account suspended? .isPublic // Is comment/contact info to be considered public info? .isOnline // Is account online? .isSlot1Blocked // Is character slot 1 blocked? .isSlot2Blocked // Is character slot 2 blocked? .isSlot3Blocked // Is character slot 3 blocked? .isSlot4Blocked // Is character slot 4 blocked? .isSlot5Blocked // Is character slot 5 blocked? .isSlot6Blocked // Is character slot 6 blocked? .isSlot7Blocked // Is character slot 7 blocked? .unused9 // Unused flag .unused10 // Unused flag .isSeer // Is account marked as Seer account? .isCounselor // Is account marked as Counselor account? .isGM // Is account marked as GM account? Fixed 'addaccount command - can now once again be used to add a new user account to the server from in-game. See accounts.adm for info on available flags. Syntax: 'addaccount [username] [password] [(optional)flags] Updated 'get command to allow retrieving certain account properties for targeted player characters: username, flags, comment, character1, character2, character3, character4, character5, character6, character7, lastIP, isBanned, isSuspended, isPublic, isOnline, isSlot1Blocked, isSlot2Blocked, isSlot3Blocked, isSlot4Blocked, isSlot5Blocked, isSlot6Blocked, isSlot7Blocked, unused9, unused10, isSeer, isCounselor and isGM Updated 'set command to allow setting certain account properties for targeted player characters: comment, password, isBanned, isSuspended, isPublic, isOnline, isSlot1Blocked, isSlot2Blocked, isSlot3Blocked, isSlot4Blocked, isSlot5Blocked, isSlot6Blocked, isSlot7Blocked, unused9, unused10, isSeer, isCounselor, isGM Updated 'tweak command to allow viewing and modifying of certain account properties for targeted player characters Note that any changes to account properties will not go into effect until a worldsave or manual save of accounts via console has taken place. Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2021-04-16 21:14:50 +08:00
*vp = OBJECT_TO_JSVAL( myChar );
}
}
else
{
Fixes for Console behaviour on Linux and Windows, addition of JS properties for user accounts Fixed long-standing issue with UOX3 console not resetting terminal properly after shutdown on Linux, after updating cConsole.cpp/h to conform to standard unix terminal commands/settings for certain features (punt) Fixed an issue that could cause a crash on Windows when attempting to broadcast system messages from the UOX3 console (punt) Fixed an issue that prevented text input in UOX3 console for system broadcasts from being displayed on Linux and MacOS (punt) Added support for new JS Object - IUE_ACCOUNT - which can be accessed via character property .account. The following account properties have been exposed to the JS engine: .id // Account ID (Read-Only) .username // Account Username (Read-Only) .flags // Flags set on account (Read-Only) .comment // Comment/contact info .character1 // Character in account slot 1 (Read-Only) .character2 // Character in account slot 2 (Read-Only) .character3 // Character in account slot 3 (Read-Only) .character4 // Character in account slot 4 (Read-Only) .character5 // Character in account slot 5 (Read-Only) .character6 // Character in account slot 6 (Read-Only) .character7 // Character in account slot 7 (Read-Only) .currentChar // Currently logged in character (if any) (Read-Only) .lastIP // Last IP used to connect to account (Read-Only) // Flag shortcuts .isBanned // Is account banned? .isSuspended // Is account suspended? .isPublic // Is comment/contact info to be considered public info? .isOnline // Is account online? .isSlot1Blocked // Is character slot 1 blocked? .isSlot2Blocked // Is character slot 2 blocked? .isSlot3Blocked // Is character slot 3 blocked? .isSlot4Blocked // Is character slot 4 blocked? .isSlot5Blocked // Is character slot 5 blocked? .isSlot6Blocked // Is character slot 6 blocked? .isSlot7Blocked // Is character slot 7 blocked? .unused9 // Unused flag .unused10 // Unused flag .isSeer // Is account marked as Seer account? .isCounselor // Is account marked as Counselor account? .isGM // Is account marked as GM account? Fixed 'addaccount command - can now once again be used to add a new user account to the server from in-game. See accounts.adm for info on available flags. Syntax: 'addaccount [username] [password] [(optional)flags] Updated 'get command to allow retrieving certain account properties for targeted player characters: username, flags, comment, character1, character2, character3, character4, character5, character6, character7, lastIP, isBanned, isSuspended, isPublic, isOnline, isSlot1Blocked, isSlot2Blocked, isSlot3Blocked, isSlot4Blocked, isSlot5Blocked, isSlot6Blocked, isSlot7Blocked, unused9, unused10, isSeer, isCounselor and isGM Updated 'set command to allow setting certain account properties for targeted player characters: comment, password, isBanned, isSuspended, isPublic, isOnline, isSlot1Blocked, isSlot2Blocked, isSlot3Blocked, isSlot4Blocked, isSlot5Blocked, isSlot6Blocked, isSlot7Blocked, unused9, unused10, isSeer, isCounselor, isGM Updated 'tweak command to allow viewing and modifying of certain account properties for targeted player characters Note that any changes to account properties will not go into effect until a worldsave or manual save of accounts via console has taken place. Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2021-04-16 21:14:50 +08:00
*vp = JSVAL_NULL;
}
Fixes for Console behaviour on Linux and Windows, addition of JS properties for user accounts Fixed long-standing issue with UOX3 console not resetting terminal properly after shutdown on Linux, after updating cConsole.cpp/h to conform to standard unix terminal commands/settings for certain features (punt) Fixed an issue that could cause a crash on Windows when attempting to broadcast system messages from the UOX3 console (punt) Fixed an issue that prevented text input in UOX3 console for system broadcasts from being displayed on Linux and MacOS (punt) Added support for new JS Object - IUE_ACCOUNT - which can be accessed via character property .account. The following account properties have been exposed to the JS engine: .id // Account ID (Read-Only) .username // Account Username (Read-Only) .flags // Flags set on account (Read-Only) .comment // Comment/contact info .character1 // Character in account slot 1 (Read-Only) .character2 // Character in account slot 2 (Read-Only) .character3 // Character in account slot 3 (Read-Only) .character4 // Character in account slot 4 (Read-Only) .character5 // Character in account slot 5 (Read-Only) .character6 // Character in account slot 6 (Read-Only) .character7 // Character in account slot 7 (Read-Only) .currentChar // Currently logged in character (if any) (Read-Only) .lastIP // Last IP used to connect to account (Read-Only) // Flag shortcuts .isBanned // Is account banned? .isSuspended // Is account suspended? .isPublic // Is comment/contact info to be considered public info? .isOnline // Is account online? .isSlot1Blocked // Is character slot 1 blocked? .isSlot2Blocked // Is character slot 2 blocked? .isSlot3Blocked // Is character slot 3 blocked? .isSlot4Blocked // Is character slot 4 blocked? .isSlot5Blocked // Is character slot 5 blocked? .isSlot6Blocked // Is character slot 6 blocked? .isSlot7Blocked // Is character slot 7 blocked? .unused9 // Unused flag .unused10 // Unused flag .isSeer // Is account marked as Seer account? .isCounselor // Is account marked as Counselor account? .isGM // Is account marked as GM account? Fixed 'addaccount command - can now once again be used to add a new user account to the server from in-game. See accounts.adm for info on available flags. Syntax: 'addaccount [username] [password] [(optional)flags] Updated 'get command to allow retrieving certain account properties for targeted player characters: username, flags, comment, character1, character2, character3, character4, character5, character6, character7, lastIP, isBanned, isSuspended, isPublic, isOnline, isSlot1Blocked, isSlot2Blocked, isSlot3Blocked, isSlot4Blocked, isSlot5Blocked, isSlot6Blocked, isSlot7Blocked, unused9, unused10, isSeer, isCounselor and isGM Updated 'set command to allow setting certain account properties for targeted player characters: comment, password, isBanned, isSuspended, isPublic, isOnline, isSlot1Blocked, isSlot2Blocked, isSlot3Blocked, isSlot4Blocked, isSlot5Blocked, isSlot6Blocked, isSlot7Blocked, unused9, unused10, isSeer, isCounselor, isGM Updated 'tweak command to allow viewing and modifying of certain account properties for targeted player characters Note that any changes to account properties will not go into effect until a worldsave or manual save of accounts via console has taken place. Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2021-04-16 21:14:50 +08:00
break;
}
case CACCOUNT_CHARACTER6:
{
if( myAccount->dwCharacters[5] != INVALIDSERIAL )
{
CBaseObject *TempObj = myAccount->lpCharacters[5];
if( !ValidateObject( TempObj ))
{
Fixes for Console behaviour on Linux and Windows, addition of JS properties for user accounts Fixed long-standing issue with UOX3 console not resetting terminal properly after shutdown on Linux, after updating cConsole.cpp/h to conform to standard unix terminal commands/settings for certain features (punt) Fixed an issue that could cause a crash on Windows when attempting to broadcast system messages from the UOX3 console (punt) Fixed an issue that prevented text input in UOX3 console for system broadcasts from being displayed on Linux and MacOS (punt) Added support for new JS Object - IUE_ACCOUNT - which can be accessed via character property .account. The following account properties have been exposed to the JS engine: .id // Account ID (Read-Only) .username // Account Username (Read-Only) .flags // Flags set on account (Read-Only) .comment // Comment/contact info .character1 // Character in account slot 1 (Read-Only) .character2 // Character in account slot 2 (Read-Only) .character3 // Character in account slot 3 (Read-Only) .character4 // Character in account slot 4 (Read-Only) .character5 // Character in account slot 5 (Read-Only) .character6 // Character in account slot 6 (Read-Only) .character7 // Character in account slot 7 (Read-Only) .currentChar // Currently logged in character (if any) (Read-Only) .lastIP // Last IP used to connect to account (Read-Only) // Flag shortcuts .isBanned // Is account banned? .isSuspended // Is account suspended? .isPublic // Is comment/contact info to be considered public info? .isOnline // Is account online? .isSlot1Blocked // Is character slot 1 blocked? .isSlot2Blocked // Is character slot 2 blocked? .isSlot3Blocked // Is character slot 3 blocked? .isSlot4Blocked // Is character slot 4 blocked? .isSlot5Blocked // Is character slot 5 blocked? .isSlot6Blocked // Is character slot 6 blocked? .isSlot7Blocked // Is character slot 7 blocked? .unused9 // Unused flag .unused10 // Unused flag .isSeer // Is account marked as Seer account? .isCounselor // Is account marked as Counselor account? .isGM // Is account marked as GM account? Fixed 'addaccount command - can now once again be used to add a new user account to the server from in-game. See accounts.adm for info on available flags. Syntax: 'addaccount [username] [password] [(optional)flags] Updated 'get command to allow retrieving certain account properties for targeted player characters: username, flags, comment, character1, character2, character3, character4, character5, character6, character7, lastIP, isBanned, isSuspended, isPublic, isOnline, isSlot1Blocked, isSlot2Blocked, isSlot3Blocked, isSlot4Blocked, isSlot5Blocked, isSlot6Blocked, isSlot7Blocked, unused9, unused10, isSeer, isCounselor and isGM Updated 'set command to allow setting certain account properties for targeted player characters: comment, password, isBanned, isSuspended, isPublic, isOnline, isSlot1Blocked, isSlot2Blocked, isSlot3Blocked, isSlot4Blocked, isSlot5Blocked, isSlot6Blocked, isSlot7Blocked, unused9, unused10, isSeer, isCounselor, isGM Updated 'tweak command to allow viewing and modifying of certain account properties for targeted player characters Note that any changes to account properties will not go into effect until a worldsave or manual save of accounts via console has taken place. Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2021-04-16 21:14:50 +08:00
*vp = JSVAL_NULL;
}
Fixes for Console behaviour on Linux and Windows, addition of JS properties for user accounts Fixed long-standing issue with UOX3 console not resetting terminal properly after shutdown on Linux, after updating cConsole.cpp/h to conform to standard unix terminal commands/settings for certain features (punt) Fixed an issue that could cause a crash on Windows when attempting to broadcast system messages from the UOX3 console (punt) Fixed an issue that prevented text input in UOX3 console for system broadcasts from being displayed on Linux and MacOS (punt) Added support for new JS Object - IUE_ACCOUNT - which can be accessed via character property .account. The following account properties have been exposed to the JS engine: .id // Account ID (Read-Only) .username // Account Username (Read-Only) .flags // Flags set on account (Read-Only) .comment // Comment/contact info .character1 // Character in account slot 1 (Read-Only) .character2 // Character in account slot 2 (Read-Only) .character3 // Character in account slot 3 (Read-Only) .character4 // Character in account slot 4 (Read-Only) .character5 // Character in account slot 5 (Read-Only) .character6 // Character in account slot 6 (Read-Only) .character7 // Character in account slot 7 (Read-Only) .currentChar // Currently logged in character (if any) (Read-Only) .lastIP // Last IP used to connect to account (Read-Only) // Flag shortcuts .isBanned // Is account banned? .isSuspended // Is account suspended? .isPublic // Is comment/contact info to be considered public info? .isOnline // Is account online? .isSlot1Blocked // Is character slot 1 blocked? .isSlot2Blocked // Is character slot 2 blocked? .isSlot3Blocked // Is character slot 3 blocked? .isSlot4Blocked // Is character slot 4 blocked? .isSlot5Blocked // Is character slot 5 blocked? .isSlot6Blocked // Is character slot 6 blocked? .isSlot7Blocked // Is character slot 7 blocked? .unused9 // Unused flag .unused10 // Unused flag .isSeer // Is account marked as Seer account? .isCounselor // Is account marked as Counselor account? .isGM // Is account marked as GM account? Fixed 'addaccount command - can now once again be used to add a new user account to the server from in-game. See accounts.adm for info on available flags. Syntax: 'addaccount [username] [password] [(optional)flags] Updated 'get command to allow retrieving certain account properties for targeted player characters: username, flags, comment, character1, character2, character3, character4, character5, character6, character7, lastIP, isBanned, isSuspended, isPublic, isOnline, isSlot1Blocked, isSlot2Blocked, isSlot3Blocked, isSlot4Blocked, isSlot5Blocked, isSlot6Blocked, isSlot7Blocked, unused9, unused10, isSeer, isCounselor and isGM Updated 'set command to allow setting certain account properties for targeted player characters: comment, password, isBanned, isSuspended, isPublic, isOnline, isSlot1Blocked, isSlot2Blocked, isSlot3Blocked, isSlot4Blocked, isSlot5Blocked, isSlot6Blocked, isSlot7Blocked, unused9, unused10, isSeer, isCounselor, isGM Updated 'tweak command to allow viewing and modifying of certain account properties for targeted player characters Note that any changes to account properties will not go into effect until a worldsave or manual save of accounts via console has taken place. Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2021-04-16 21:14:50 +08:00
else
{
// Otherwise Acquire an object
JSObject *myChar = JSEngine->AcquireObject( IUE_CHAR, TempObj, JSEngine->FindActiveRuntime( JS_GetRuntime( cx )));
Fixes for Console behaviour on Linux and Windows, addition of JS properties for user accounts Fixed long-standing issue with UOX3 console not resetting terminal properly after shutdown on Linux, after updating cConsole.cpp/h to conform to standard unix terminal commands/settings for certain features (punt) Fixed an issue that could cause a crash on Windows when attempting to broadcast system messages from the UOX3 console (punt) Fixed an issue that prevented text input in UOX3 console for system broadcasts from being displayed on Linux and MacOS (punt) Added support for new JS Object - IUE_ACCOUNT - which can be accessed via character property .account. The following account properties have been exposed to the JS engine: .id // Account ID (Read-Only) .username // Account Username (Read-Only) .flags // Flags set on account (Read-Only) .comment // Comment/contact info .character1 // Character in account slot 1 (Read-Only) .character2 // Character in account slot 2 (Read-Only) .character3 // Character in account slot 3 (Read-Only) .character4 // Character in account slot 4 (Read-Only) .character5 // Character in account slot 5 (Read-Only) .character6 // Character in account slot 6 (Read-Only) .character7 // Character in account slot 7 (Read-Only) .currentChar // Currently logged in character (if any) (Read-Only) .lastIP // Last IP used to connect to account (Read-Only) // Flag shortcuts .isBanned // Is account banned? .isSuspended // Is account suspended? .isPublic // Is comment/contact info to be considered public info? .isOnline // Is account online? .isSlot1Blocked // Is character slot 1 blocked? .isSlot2Blocked // Is character slot 2 blocked? .isSlot3Blocked // Is character slot 3 blocked? .isSlot4Blocked // Is character slot 4 blocked? .isSlot5Blocked // Is character slot 5 blocked? .isSlot6Blocked // Is character slot 6 blocked? .isSlot7Blocked // Is character slot 7 blocked? .unused9 // Unused flag .unused10 // Unused flag .isSeer // Is account marked as Seer account? .isCounselor // Is account marked as Counselor account? .isGM // Is account marked as GM account? Fixed 'addaccount command - can now once again be used to add a new user account to the server from in-game. See accounts.adm for info on available flags. Syntax: 'addaccount [username] [password] [(optional)flags] Updated 'get command to allow retrieving certain account properties for targeted player characters: username, flags, comment, character1, character2, character3, character4, character5, character6, character7, lastIP, isBanned, isSuspended, isPublic, isOnline, isSlot1Blocked, isSlot2Blocked, isSlot3Blocked, isSlot4Blocked, isSlot5Blocked, isSlot6Blocked, isSlot7Blocked, unused9, unused10, isSeer, isCounselor and isGM Updated 'set command to allow setting certain account properties for targeted player characters: comment, password, isBanned, isSuspended, isPublic, isOnline, isSlot1Blocked, isSlot2Blocked, isSlot3Blocked, isSlot4Blocked, isSlot5Blocked, isSlot6Blocked, isSlot7Blocked, unused9, unused10, isSeer, isCounselor, isGM Updated 'tweak command to allow viewing and modifying of certain account properties for targeted player characters Note that any changes to account properties will not go into effect until a worldsave or manual save of accounts via console has taken place. Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2021-04-16 21:14:50 +08:00
*vp = OBJECT_TO_JSVAL( myChar );
}
}
else
{
Fixes for Console behaviour on Linux and Windows, addition of JS properties for user accounts Fixed long-standing issue with UOX3 console not resetting terminal properly after shutdown on Linux, after updating cConsole.cpp/h to conform to standard unix terminal commands/settings for certain features (punt) Fixed an issue that could cause a crash on Windows when attempting to broadcast system messages from the UOX3 console (punt) Fixed an issue that prevented text input in UOX3 console for system broadcasts from being displayed on Linux and MacOS (punt) Added support for new JS Object - IUE_ACCOUNT - which can be accessed via character property .account. The following account properties have been exposed to the JS engine: .id // Account ID (Read-Only) .username // Account Username (Read-Only) .flags // Flags set on account (Read-Only) .comment // Comment/contact info .character1 // Character in account slot 1 (Read-Only) .character2 // Character in account slot 2 (Read-Only) .character3 // Character in account slot 3 (Read-Only) .character4 // Character in account slot 4 (Read-Only) .character5 // Character in account slot 5 (Read-Only) .character6 // Character in account slot 6 (Read-Only) .character7 // Character in account slot 7 (Read-Only) .currentChar // Currently logged in character (if any) (Read-Only) .lastIP // Last IP used to connect to account (Read-Only) // Flag shortcuts .isBanned // Is account banned? .isSuspended // Is account suspended? .isPublic // Is comment/contact info to be considered public info? .isOnline // Is account online? .isSlot1Blocked // Is character slot 1 blocked? .isSlot2Blocked // Is character slot 2 blocked? .isSlot3Blocked // Is character slot 3 blocked? .isSlot4Blocked // Is character slot 4 blocked? .isSlot5Blocked // Is character slot 5 blocked? .isSlot6Blocked // Is character slot 6 blocked? .isSlot7Blocked // Is character slot 7 blocked? .unused9 // Unused flag .unused10 // Unused flag .isSeer // Is account marked as Seer account? .isCounselor // Is account marked as Counselor account? .isGM // Is account marked as GM account? Fixed 'addaccount command - can now once again be used to add a new user account to the server from in-game. See accounts.adm for info on available flags. Syntax: 'addaccount [username] [password] [(optional)flags] Updated 'get command to allow retrieving certain account properties for targeted player characters: username, flags, comment, character1, character2, character3, character4, character5, character6, character7, lastIP, isBanned, isSuspended, isPublic, isOnline, isSlot1Blocked, isSlot2Blocked, isSlot3Blocked, isSlot4Blocked, isSlot5Blocked, isSlot6Blocked, isSlot7Blocked, unused9, unused10, isSeer, isCounselor and isGM Updated 'set command to allow setting certain account properties for targeted player characters: comment, password, isBanned, isSuspended, isPublic, isOnline, isSlot1Blocked, isSlot2Blocked, isSlot3Blocked, isSlot4Blocked, isSlot5Blocked, isSlot6Blocked, isSlot7Blocked, unused9, unused10, isSeer, isCounselor, isGM Updated 'tweak command to allow viewing and modifying of certain account properties for targeted player characters Note that any changes to account properties will not go into effect until a worldsave or manual save of accounts via console has taken place. Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2021-04-16 21:14:50 +08:00
*vp = JSVAL_NULL;
}
Fixes for Console behaviour on Linux and Windows, addition of JS properties for user accounts Fixed long-standing issue with UOX3 console not resetting terminal properly after shutdown on Linux, after updating cConsole.cpp/h to conform to standard unix terminal commands/settings for certain features (punt) Fixed an issue that could cause a crash on Windows when attempting to broadcast system messages from the UOX3 console (punt) Fixed an issue that prevented text input in UOX3 console for system broadcasts from being displayed on Linux and MacOS (punt) Added support for new JS Object - IUE_ACCOUNT - which can be accessed via character property .account. The following account properties have been exposed to the JS engine: .id // Account ID (Read-Only) .username // Account Username (Read-Only) .flags // Flags set on account (Read-Only) .comment // Comment/contact info .character1 // Character in account slot 1 (Read-Only) .character2 // Character in account slot 2 (Read-Only) .character3 // Character in account slot 3 (Read-Only) .character4 // Character in account slot 4 (Read-Only) .character5 // Character in account slot 5 (Read-Only) .character6 // Character in account slot 6 (Read-Only) .character7 // Character in account slot 7 (Read-Only) .currentChar // Currently logged in character (if any) (Read-Only) .lastIP // Last IP used to connect to account (Read-Only) // Flag shortcuts .isBanned // Is account banned? .isSuspended // Is account suspended? .isPublic // Is comment/contact info to be considered public info? .isOnline // Is account online? .isSlot1Blocked // Is character slot 1 blocked? .isSlot2Blocked // Is character slot 2 blocked? .isSlot3Blocked // Is character slot 3 blocked? .isSlot4Blocked // Is character slot 4 blocked? .isSlot5Blocked // Is character slot 5 blocked? .isSlot6Blocked // Is character slot 6 blocked? .isSlot7Blocked // Is character slot 7 blocked? .unused9 // Unused flag .unused10 // Unused flag .isSeer // Is account marked as Seer account? .isCounselor // Is account marked as Counselor account? .isGM // Is account marked as GM account? Fixed 'addaccount command - can now once again be used to add a new user account to the server from in-game. See accounts.adm for info on available flags. Syntax: 'addaccount [username] [password] [(optional)flags] Updated 'get command to allow retrieving certain account properties for targeted player characters: username, flags, comment, character1, character2, character3, character4, character5, character6, character7, lastIP, isBanned, isSuspended, isPublic, isOnline, isSlot1Blocked, isSlot2Blocked, isSlot3Blocked, isSlot4Blocked, isSlot5Blocked, isSlot6Blocked, isSlot7Blocked, unused9, unused10, isSeer, isCounselor and isGM Updated 'set command to allow setting certain account properties for targeted player characters: comment, password, isBanned, isSuspended, isPublic, isOnline, isSlot1Blocked, isSlot2Blocked, isSlot3Blocked, isSlot4Blocked, isSlot5Blocked, isSlot6Blocked, isSlot7Blocked, unused9, unused10, isSeer, isCounselor, isGM Updated 'tweak command to allow viewing and modifying of certain account properties for targeted player characters Note that any changes to account properties will not go into effect until a worldsave or manual save of accounts via console has taken place. Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2021-04-16 21:14:50 +08:00
break;
}
case CACCOUNT_CHARACTER7:
{
if( myAccount->dwCharacters[6] != INVALIDSERIAL )
{
CBaseObject *TempObj = myAccount->lpCharacters[6];
if( !ValidateObject( TempObj ))
{
Fixes for Console behaviour on Linux and Windows, addition of JS properties for user accounts Fixed long-standing issue with UOX3 console not resetting terminal properly after shutdown on Linux, after updating cConsole.cpp/h to conform to standard unix terminal commands/settings for certain features (punt) Fixed an issue that could cause a crash on Windows when attempting to broadcast system messages from the UOX3 console (punt) Fixed an issue that prevented text input in UOX3 console for system broadcasts from being displayed on Linux and MacOS (punt) Added support for new JS Object - IUE_ACCOUNT - which can be accessed via character property .account. The following account properties have been exposed to the JS engine: .id // Account ID (Read-Only) .username // Account Username (Read-Only) .flags // Flags set on account (Read-Only) .comment // Comment/contact info .character1 // Character in account slot 1 (Read-Only) .character2 // Character in account slot 2 (Read-Only) .character3 // Character in account slot 3 (Read-Only) .character4 // Character in account slot 4 (Read-Only) .character5 // Character in account slot 5 (Read-Only) .character6 // Character in account slot 6 (Read-Only) .character7 // Character in account slot 7 (Read-Only) .currentChar // Currently logged in character (if any) (Read-Only) .lastIP // Last IP used to connect to account (Read-Only) // Flag shortcuts .isBanned // Is account banned? .isSuspended // Is account suspended? .isPublic // Is comment/contact info to be considered public info? .isOnline // Is account online? .isSlot1Blocked // Is character slot 1 blocked? .isSlot2Blocked // Is character slot 2 blocked? .isSlot3Blocked // Is character slot 3 blocked? .isSlot4Blocked // Is character slot 4 blocked? .isSlot5Blocked // Is character slot 5 blocked? .isSlot6Blocked // Is character slot 6 blocked? .isSlot7Blocked // Is character slot 7 blocked? .unused9 // Unused flag .unused10 // Unused flag .isSeer // Is account marked as Seer account? .isCounselor // Is account marked as Counselor account? .isGM // Is account marked as GM account? Fixed 'addaccount command - can now once again be used to add a new user account to the server from in-game. See accounts.adm for info on available flags. Syntax: 'addaccount [username] [password] [(optional)flags] Updated 'get command to allow retrieving certain account properties for targeted player characters: username, flags, comment, character1, character2, character3, character4, character5, character6, character7, lastIP, isBanned, isSuspended, isPublic, isOnline, isSlot1Blocked, isSlot2Blocked, isSlot3Blocked, isSlot4Blocked, isSlot5Blocked, isSlot6Blocked, isSlot7Blocked, unused9, unused10, isSeer, isCounselor and isGM Updated 'set command to allow setting certain account properties for targeted player characters: comment, password, isBanned, isSuspended, isPublic, isOnline, isSlot1Blocked, isSlot2Blocked, isSlot3Blocked, isSlot4Blocked, isSlot5Blocked, isSlot6Blocked, isSlot7Blocked, unused9, unused10, isSeer, isCounselor, isGM Updated 'tweak command to allow viewing and modifying of certain account properties for targeted player characters Note that any changes to account properties will not go into effect until a worldsave or manual save of accounts via console has taken place. Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2021-04-16 21:14:50 +08:00
*vp = JSVAL_NULL;
}
Fixes for Console behaviour on Linux and Windows, addition of JS properties for user accounts Fixed long-standing issue with UOX3 console not resetting terminal properly after shutdown on Linux, after updating cConsole.cpp/h to conform to standard unix terminal commands/settings for certain features (punt) Fixed an issue that could cause a crash on Windows when attempting to broadcast system messages from the UOX3 console (punt) Fixed an issue that prevented text input in UOX3 console for system broadcasts from being displayed on Linux and MacOS (punt) Added support for new JS Object - IUE_ACCOUNT - which can be accessed via character property .account. The following account properties have been exposed to the JS engine: .id // Account ID (Read-Only) .username // Account Username (Read-Only) .flags // Flags set on account (Read-Only) .comment // Comment/contact info .character1 // Character in account slot 1 (Read-Only) .character2 // Character in account slot 2 (Read-Only) .character3 // Character in account slot 3 (Read-Only) .character4 // Character in account slot 4 (Read-Only) .character5 // Character in account slot 5 (Read-Only) .character6 // Character in account slot 6 (Read-Only) .character7 // Character in account slot 7 (Read-Only) .currentChar // Currently logged in character (if any) (Read-Only) .lastIP // Last IP used to connect to account (Read-Only) // Flag shortcuts .isBanned // Is account banned? .isSuspended // Is account suspended? .isPublic // Is comment/contact info to be considered public info? .isOnline // Is account online? .isSlot1Blocked // Is character slot 1 blocked? .isSlot2Blocked // Is character slot 2 blocked? .isSlot3Blocked // Is character slot 3 blocked? .isSlot4Blocked // Is character slot 4 blocked? .isSlot5Blocked // Is character slot 5 blocked? .isSlot6Blocked // Is character slot 6 blocked? .isSlot7Blocked // Is character slot 7 blocked? .unused9 // Unused flag .unused10 // Unused flag .isSeer // Is account marked as Seer account? .isCounselor // Is account marked as Counselor account? .isGM // Is account marked as GM account? Fixed 'addaccount command - can now once again be used to add a new user account to the server from in-game. See accounts.adm for info on available flags. Syntax: 'addaccount [username] [password] [(optional)flags] Updated 'get command to allow retrieving certain account properties for targeted player characters: username, flags, comment, character1, character2, character3, character4, character5, character6, character7, lastIP, isBanned, isSuspended, isPublic, isOnline, isSlot1Blocked, isSlot2Blocked, isSlot3Blocked, isSlot4Blocked, isSlot5Blocked, isSlot6Blocked, isSlot7Blocked, unused9, unused10, isSeer, isCounselor and isGM Updated 'set command to allow setting certain account properties for targeted player characters: comment, password, isBanned, isSuspended, isPublic, isOnline, isSlot1Blocked, isSlot2Blocked, isSlot3Blocked, isSlot4Blocked, isSlot5Blocked, isSlot6Blocked, isSlot7Blocked, unused9, unused10, isSeer, isCounselor, isGM Updated 'tweak command to allow viewing and modifying of certain account properties for targeted player characters Note that any changes to account properties will not go into effect until a worldsave or manual save of accounts via console has taken place. Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2021-04-16 21:14:50 +08:00
else
{
// Otherwise Acquire an object
JSObject *myChar = JSEngine->AcquireObject( IUE_CHAR, TempObj, JSEngine->FindActiveRuntime( JS_GetRuntime( cx )));
Fixes for Console behaviour on Linux and Windows, addition of JS properties for user accounts Fixed long-standing issue with UOX3 console not resetting terminal properly after shutdown on Linux, after updating cConsole.cpp/h to conform to standard unix terminal commands/settings for certain features (punt) Fixed an issue that could cause a crash on Windows when attempting to broadcast system messages from the UOX3 console (punt) Fixed an issue that prevented text input in UOX3 console for system broadcasts from being displayed on Linux and MacOS (punt) Added support for new JS Object - IUE_ACCOUNT - which can be accessed via character property .account. The following account properties have been exposed to the JS engine: .id // Account ID (Read-Only) .username // Account Username (Read-Only) .flags // Flags set on account (Read-Only) .comment // Comment/contact info .character1 // Character in account slot 1 (Read-Only) .character2 // Character in account slot 2 (Read-Only) .character3 // Character in account slot 3 (Read-Only) .character4 // Character in account slot 4 (Read-Only) .character5 // Character in account slot 5 (Read-Only) .character6 // Character in account slot 6 (Read-Only) .character7 // Character in account slot 7 (Read-Only) .currentChar // Currently logged in character (if any) (Read-Only) .lastIP // Last IP used to connect to account (Read-Only) // Flag shortcuts .isBanned // Is account banned? .isSuspended // Is account suspended? .isPublic // Is comment/contact info to be considered public info? .isOnline // Is account online? .isSlot1Blocked // Is character slot 1 blocked? .isSlot2Blocked // Is character slot 2 blocked? .isSlot3Blocked // Is character slot 3 blocked? .isSlot4Blocked // Is character slot 4 blocked? .isSlot5Blocked // Is character slot 5 blocked? .isSlot6Blocked // Is character slot 6 blocked? .isSlot7Blocked // Is character slot 7 blocked? .unused9 // Unused flag .unused10 // Unused flag .isSeer // Is account marked as Seer account? .isCounselor // Is account marked as Counselor account? .isGM // Is account marked as GM account? Fixed 'addaccount command - can now once again be used to add a new user account to the server from in-game. See accounts.adm for info on available flags. Syntax: 'addaccount [username] [password] [(optional)flags] Updated 'get command to allow retrieving certain account properties for targeted player characters: username, flags, comment, character1, character2, character3, character4, character5, character6, character7, lastIP, isBanned, isSuspended, isPublic, isOnline, isSlot1Blocked, isSlot2Blocked, isSlot3Blocked, isSlot4Blocked, isSlot5Blocked, isSlot6Blocked, isSlot7Blocked, unused9, unused10, isSeer, isCounselor and isGM Updated 'set command to allow setting certain account properties for targeted player characters: comment, password, isBanned, isSuspended, isPublic, isOnline, isSlot1Blocked, isSlot2Blocked, isSlot3Blocked, isSlot4Blocked, isSlot5Blocked, isSlot6Blocked, isSlot7Blocked, unused9, unused10, isSeer, isCounselor, isGM Updated 'tweak command to allow viewing and modifying of certain account properties for targeted player characters Note that any changes to account properties will not go into effect until a worldsave or manual save of accounts via console has taken place. Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2021-04-16 21:14:50 +08:00
*vp = OBJECT_TO_JSVAL( myChar );
}
}
else
{
Fixes for Console behaviour on Linux and Windows, addition of JS properties for user accounts Fixed long-standing issue with UOX3 console not resetting terminal properly after shutdown on Linux, after updating cConsole.cpp/h to conform to standard unix terminal commands/settings for certain features (punt) Fixed an issue that could cause a crash on Windows when attempting to broadcast system messages from the UOX3 console (punt) Fixed an issue that prevented text input in UOX3 console for system broadcasts from being displayed on Linux and MacOS (punt) Added support for new JS Object - IUE_ACCOUNT - which can be accessed via character property .account. The following account properties have been exposed to the JS engine: .id // Account ID (Read-Only) .username // Account Username (Read-Only) .flags // Flags set on account (Read-Only) .comment // Comment/contact info .character1 // Character in account slot 1 (Read-Only) .character2 // Character in account slot 2 (Read-Only) .character3 // Character in account slot 3 (Read-Only) .character4 // Character in account slot 4 (Read-Only) .character5 // Character in account slot 5 (Read-Only) .character6 // Character in account slot 6 (Read-Only) .character7 // Character in account slot 7 (Read-Only) .currentChar // Currently logged in character (if any) (Read-Only) .lastIP // Last IP used to connect to account (Read-Only) // Flag shortcuts .isBanned // Is account banned? .isSuspended // Is account suspended? .isPublic // Is comment/contact info to be considered public info? .isOnline // Is account online? .isSlot1Blocked // Is character slot 1 blocked? .isSlot2Blocked // Is character slot 2 blocked? .isSlot3Blocked // Is character slot 3 blocked? .isSlot4Blocked // Is character slot 4 blocked? .isSlot5Blocked // Is character slot 5 blocked? .isSlot6Blocked // Is character slot 6 blocked? .isSlot7Blocked // Is character slot 7 blocked? .unused9 // Unused flag .unused10 // Unused flag .isSeer // Is account marked as Seer account? .isCounselor // Is account marked as Counselor account? .isGM // Is account marked as GM account? Fixed 'addaccount command - can now once again be used to add a new user account to the server from in-game. See accounts.adm for info on available flags. Syntax: 'addaccount [username] [password] [(optional)flags] Updated 'get command to allow retrieving certain account properties for targeted player characters: username, flags, comment, character1, character2, character3, character4, character5, character6, character7, lastIP, isBanned, isSuspended, isPublic, isOnline, isSlot1Blocked, isSlot2Blocked, isSlot3Blocked, isSlot4Blocked, isSlot5Blocked, isSlot6Blocked, isSlot7Blocked, unused9, unused10, isSeer, isCounselor and isGM Updated 'set command to allow setting certain account properties for targeted player characters: comment, password, isBanned, isSuspended, isPublic, isOnline, isSlot1Blocked, isSlot2Blocked, isSlot3Blocked, isSlot4Blocked, isSlot5Blocked, isSlot6Blocked, isSlot7Blocked, unused9, unused10, isSeer, isCounselor, isGM Updated 'tweak command to allow viewing and modifying of certain account properties for targeted player characters Note that any changes to account properties will not go into effect until a worldsave or manual save of accounts via console has taken place. Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2021-04-16 21:14:50 +08:00
*vp = JSVAL_NULL;
}
Fixes for Console behaviour on Linux and Windows, addition of JS properties for user accounts Fixed long-standing issue with UOX3 console not resetting terminal properly after shutdown on Linux, after updating cConsole.cpp/h to conform to standard unix terminal commands/settings for certain features (punt) Fixed an issue that could cause a crash on Windows when attempting to broadcast system messages from the UOX3 console (punt) Fixed an issue that prevented text input in UOX3 console for system broadcasts from being displayed on Linux and MacOS (punt) Added support for new JS Object - IUE_ACCOUNT - which can be accessed via character property .account. The following account properties have been exposed to the JS engine: .id // Account ID (Read-Only) .username // Account Username (Read-Only) .flags // Flags set on account (Read-Only) .comment // Comment/contact info .character1 // Character in account slot 1 (Read-Only) .character2 // Character in account slot 2 (Read-Only) .character3 // Character in account slot 3 (Read-Only) .character4 // Character in account slot 4 (Read-Only) .character5 // Character in account slot 5 (Read-Only) .character6 // Character in account slot 6 (Read-Only) .character7 // Character in account slot 7 (Read-Only) .currentChar // Currently logged in character (if any) (Read-Only) .lastIP // Last IP used to connect to account (Read-Only) // Flag shortcuts .isBanned // Is account banned? .isSuspended // Is account suspended? .isPublic // Is comment/contact info to be considered public info? .isOnline // Is account online? .isSlot1Blocked // Is character slot 1 blocked? .isSlot2Blocked // Is character slot 2 blocked? .isSlot3Blocked // Is character slot 3 blocked? .isSlot4Blocked // Is character slot 4 blocked? .isSlot5Blocked // Is character slot 5 blocked? .isSlot6Blocked // Is character slot 6 blocked? .isSlot7Blocked // Is character slot 7 blocked? .unused9 // Unused flag .unused10 // Unused flag .isSeer // Is account marked as Seer account? .isCounselor // Is account marked as Counselor account? .isGM // Is account marked as GM account? Fixed 'addaccount command - can now once again be used to add a new user account to the server from in-game. See accounts.adm for info on available flags. Syntax: 'addaccount [username] [password] [(optional)flags] Updated 'get command to allow retrieving certain account properties for targeted player characters: username, flags, comment, character1, character2, character3, character4, character5, character6, character7, lastIP, isBanned, isSuspended, isPublic, isOnline, isSlot1Blocked, isSlot2Blocked, isSlot3Blocked, isSlot4Blocked, isSlot5Blocked, isSlot6Blocked, isSlot7Blocked, unused9, unused10, isSeer, isCounselor and isGM Updated 'set command to allow setting certain account properties for targeted player characters: comment, password, isBanned, isSuspended, isPublic, isOnline, isSlot1Blocked, isSlot2Blocked, isSlot3Blocked, isSlot4Blocked, isSlot5Blocked, isSlot6Blocked, isSlot7Blocked, unused9, unused10, isSeer, isCounselor, isGM Updated 'tweak command to allow viewing and modifying of certain account properties for targeted player characters Note that any changes to account properties will not go into effect until a worldsave or manual save of accounts via console has taken place. Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2021-04-16 21:14:50 +08:00
break;
}
case CACCOUNT_CURRENTCHAR:
{
if( myAccount->dwInGame != INVALIDSERIAL )
{
CChar *TempObj = CalcCharObjFromSer( myAccount->dwInGame );
Fixes for Console behaviour on Linux and Windows, addition of JS properties for user accounts Fixed long-standing issue with UOX3 console not resetting terminal properly after shutdown on Linux, after updating cConsole.cpp/h to conform to standard unix terminal commands/settings for certain features (punt) Fixed an issue that could cause a crash on Windows when attempting to broadcast system messages from the UOX3 console (punt) Fixed an issue that prevented text input in UOX3 console for system broadcasts from being displayed on Linux and MacOS (punt) Added support for new JS Object - IUE_ACCOUNT - which can be accessed via character property .account. The following account properties have been exposed to the JS engine: .id // Account ID (Read-Only) .username // Account Username (Read-Only) .flags // Flags set on account (Read-Only) .comment // Comment/contact info .character1 // Character in account slot 1 (Read-Only) .character2 // Character in account slot 2 (Read-Only) .character3 // Character in account slot 3 (Read-Only) .character4 // Character in account slot 4 (Read-Only) .character5 // Character in account slot 5 (Read-Only) .character6 // Character in account slot 6 (Read-Only) .character7 // Character in account slot 7 (Read-Only) .currentChar // Currently logged in character (if any) (Read-Only) .lastIP // Last IP used to connect to account (Read-Only) // Flag shortcuts .isBanned // Is account banned? .isSuspended // Is account suspended? .isPublic // Is comment/contact info to be considered public info? .isOnline // Is account online? .isSlot1Blocked // Is character slot 1 blocked? .isSlot2Blocked // Is character slot 2 blocked? .isSlot3Blocked // Is character slot 3 blocked? .isSlot4Blocked // Is character slot 4 blocked? .isSlot5Blocked // Is character slot 5 blocked? .isSlot6Blocked // Is character slot 6 blocked? .isSlot7Blocked // Is character slot 7 blocked? .unused9 // Unused flag .unused10 // Unused flag .isSeer // Is account marked as Seer account? .isCounselor // Is account marked as Counselor account? .isGM // Is account marked as GM account? Fixed 'addaccount command - can now once again be used to add a new user account to the server from in-game. See accounts.adm for info on available flags. Syntax: 'addaccount [username] [password] [(optional)flags] Updated 'get command to allow retrieving certain account properties for targeted player characters: username, flags, comment, character1, character2, character3, character4, character5, character6, character7, lastIP, isBanned, isSuspended, isPublic, isOnline, isSlot1Blocked, isSlot2Blocked, isSlot3Blocked, isSlot4Blocked, isSlot5Blocked, isSlot6Blocked, isSlot7Blocked, unused9, unused10, isSeer, isCounselor and isGM Updated 'set command to allow setting certain account properties for targeted player characters: comment, password, isBanned, isSuspended, isPublic, isOnline, isSlot1Blocked, isSlot2Blocked, isSlot3Blocked, isSlot4Blocked, isSlot5Blocked, isSlot6Blocked, isSlot7Blocked, unused9, unused10, isSeer, isCounselor, isGM Updated 'tweak command to allow viewing and modifying of certain account properties for targeted player characters Note that any changes to account properties will not go into effect until a worldsave or manual save of accounts via console has taken place. Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2021-04-16 21:14:50 +08:00
if( !ValidateObject( TempObj ))
{
Fixes for Console behaviour on Linux and Windows, addition of JS properties for user accounts Fixed long-standing issue with UOX3 console not resetting terminal properly after shutdown on Linux, after updating cConsole.cpp/h to conform to standard unix terminal commands/settings for certain features (punt) Fixed an issue that could cause a crash on Windows when attempting to broadcast system messages from the UOX3 console (punt) Fixed an issue that prevented text input in UOX3 console for system broadcasts from being displayed on Linux and MacOS (punt) Added support for new JS Object - IUE_ACCOUNT - which can be accessed via character property .account. The following account properties have been exposed to the JS engine: .id // Account ID (Read-Only) .username // Account Username (Read-Only) .flags // Flags set on account (Read-Only) .comment // Comment/contact info .character1 // Character in account slot 1 (Read-Only) .character2 // Character in account slot 2 (Read-Only) .character3 // Character in account slot 3 (Read-Only) .character4 // Character in account slot 4 (Read-Only) .character5 // Character in account slot 5 (Read-Only) .character6 // Character in account slot 6 (Read-Only) .character7 // Character in account slot 7 (Read-Only) .currentChar // Currently logged in character (if any) (Read-Only) .lastIP // Last IP used to connect to account (Read-Only) // Flag shortcuts .isBanned // Is account banned? .isSuspended // Is account suspended? .isPublic // Is comment/contact info to be considered public info? .isOnline // Is account online? .isSlot1Blocked // Is character slot 1 blocked? .isSlot2Blocked // Is character slot 2 blocked? .isSlot3Blocked // Is character slot 3 blocked? .isSlot4Blocked // Is character slot 4 blocked? .isSlot5Blocked // Is character slot 5 blocked? .isSlot6Blocked // Is character slot 6 blocked? .isSlot7Blocked // Is character slot 7 blocked? .unused9 // Unused flag .unused10 // Unused flag .isSeer // Is account marked as Seer account? .isCounselor // Is account marked as Counselor account? .isGM // Is account marked as GM account? Fixed 'addaccount command - can now once again be used to add a new user account to the server from in-game. See accounts.adm for info on available flags. Syntax: 'addaccount [username] [password] [(optional)flags] Updated 'get command to allow retrieving certain account properties for targeted player characters: username, flags, comment, character1, character2, character3, character4, character5, character6, character7, lastIP, isBanned, isSuspended, isPublic, isOnline, isSlot1Blocked, isSlot2Blocked, isSlot3Blocked, isSlot4Blocked, isSlot5Blocked, isSlot6Blocked, isSlot7Blocked, unused9, unused10, isSeer, isCounselor and isGM Updated 'set command to allow setting certain account properties for targeted player characters: comment, password, isBanned, isSuspended, isPublic, isOnline, isSlot1Blocked, isSlot2Blocked, isSlot3Blocked, isSlot4Blocked, isSlot5Blocked, isSlot6Blocked, isSlot7Blocked, unused9, unused10, isSeer, isCounselor, isGM Updated 'tweak command to allow viewing and modifying of certain account properties for targeted player characters Note that any changes to account properties will not go into effect until a worldsave or manual save of accounts via console has taken place. Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2021-04-16 21:14:50 +08:00
*vp = JSVAL_NULL;
}
Fixes for Console behaviour on Linux and Windows, addition of JS properties for user accounts Fixed long-standing issue with UOX3 console not resetting terminal properly after shutdown on Linux, after updating cConsole.cpp/h to conform to standard unix terminal commands/settings for certain features (punt) Fixed an issue that could cause a crash on Windows when attempting to broadcast system messages from the UOX3 console (punt) Fixed an issue that prevented text input in UOX3 console for system broadcasts from being displayed on Linux and MacOS (punt) Added support for new JS Object - IUE_ACCOUNT - which can be accessed via character property .account. The following account properties have been exposed to the JS engine: .id // Account ID (Read-Only) .username // Account Username (Read-Only) .flags // Flags set on account (Read-Only) .comment // Comment/contact info .character1 // Character in account slot 1 (Read-Only) .character2 // Character in account slot 2 (Read-Only) .character3 // Character in account slot 3 (Read-Only) .character4 // Character in account slot 4 (Read-Only) .character5 // Character in account slot 5 (Read-Only) .character6 // Character in account slot 6 (Read-Only) .character7 // Character in account slot 7 (Read-Only) .currentChar // Currently logged in character (if any) (Read-Only) .lastIP // Last IP used to connect to account (Read-Only) // Flag shortcuts .isBanned // Is account banned? .isSuspended // Is account suspended? .isPublic // Is comment/contact info to be considered public info? .isOnline // Is account online? .isSlot1Blocked // Is character slot 1 blocked? .isSlot2Blocked // Is character slot 2 blocked? .isSlot3Blocked // Is character slot 3 blocked? .isSlot4Blocked // Is character slot 4 blocked? .isSlot5Blocked // Is character slot 5 blocked? .isSlot6Blocked // Is character slot 6 blocked? .isSlot7Blocked // Is character slot 7 blocked? .unused9 // Unused flag .unused10 // Unused flag .isSeer // Is account marked as Seer account? .isCounselor // Is account marked as Counselor account? .isGM // Is account marked as GM account? Fixed 'addaccount command - can now once again be used to add a new user account to the server from in-game. See accounts.adm for info on available flags. Syntax: 'addaccount [username] [password] [(optional)flags] Updated 'get command to allow retrieving certain account properties for targeted player characters: username, flags, comment, character1, character2, character3, character4, character5, character6, character7, lastIP, isBanned, isSuspended, isPublic, isOnline, isSlot1Blocked, isSlot2Blocked, isSlot3Blocked, isSlot4Blocked, isSlot5Blocked, isSlot6Blocked, isSlot7Blocked, unused9, unused10, isSeer, isCounselor and isGM Updated 'set command to allow setting certain account properties for targeted player characters: comment, password, isBanned, isSuspended, isPublic, isOnline, isSlot1Blocked, isSlot2Blocked, isSlot3Blocked, isSlot4Blocked, isSlot5Blocked, isSlot6Blocked, isSlot7Blocked, unused9, unused10, isSeer, isCounselor, isGM Updated 'tweak command to allow viewing and modifying of certain account properties for targeted player characters Note that any changes to account properties will not go into effect until a worldsave or manual save of accounts via console has taken place. Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2021-04-16 21:14:50 +08:00
else
{
// Otherwise Acquire an object
JSObject *myChar = JSEngine->AcquireObject( IUE_CHAR, TempObj, JSEngine->FindActiveRuntime( JS_GetRuntime( cx )));
Fixes for Console behaviour on Linux and Windows, addition of JS properties for user accounts Fixed long-standing issue with UOX3 console not resetting terminal properly after shutdown on Linux, after updating cConsole.cpp/h to conform to standard unix terminal commands/settings for certain features (punt) Fixed an issue that could cause a crash on Windows when attempting to broadcast system messages from the UOX3 console (punt) Fixed an issue that prevented text input in UOX3 console for system broadcasts from being displayed on Linux and MacOS (punt) Added support for new JS Object - IUE_ACCOUNT - which can be accessed via character property .account. The following account properties have been exposed to the JS engine: .id // Account ID (Read-Only) .username // Account Username (Read-Only) .flags // Flags set on account (Read-Only) .comment // Comment/contact info .character1 // Character in account slot 1 (Read-Only) .character2 // Character in account slot 2 (Read-Only) .character3 // Character in account slot 3 (Read-Only) .character4 // Character in account slot 4 (Read-Only) .character5 // Character in account slot 5 (Read-Only) .character6 // Character in account slot 6 (Read-Only) .character7 // Character in account slot 7 (Read-Only) .currentChar // Currently logged in character (if any) (Read-Only) .lastIP // Last IP used to connect to account (Read-Only) // Flag shortcuts .isBanned // Is account banned? .isSuspended // Is account suspended? .isPublic // Is comment/contact info to be considered public info? .isOnline // Is account online? .isSlot1Blocked // Is character slot 1 blocked? .isSlot2Blocked // Is character slot 2 blocked? .isSlot3Blocked // Is character slot 3 blocked? .isSlot4Blocked // Is character slot 4 blocked? .isSlot5Blocked // Is character slot 5 blocked? .isSlot6Blocked // Is character slot 6 blocked? .isSlot7Blocked // Is character slot 7 blocked? .unused9 // Unused flag .unused10 // Unused flag .isSeer // Is account marked as Seer account? .isCounselor // Is account marked as Counselor account? .isGM // Is account marked as GM account? Fixed 'addaccount command - can now once again be used to add a new user account to the server from in-game. See accounts.adm for info on available flags. Syntax: 'addaccount [username] [password] [(optional)flags] Updated 'get command to allow retrieving certain account properties for targeted player characters: username, flags, comment, character1, character2, character3, character4, character5, character6, character7, lastIP, isBanned, isSuspended, isPublic, isOnline, isSlot1Blocked, isSlot2Blocked, isSlot3Blocked, isSlot4Blocked, isSlot5Blocked, isSlot6Blocked, isSlot7Blocked, unused9, unused10, isSeer, isCounselor and isGM Updated 'set command to allow setting certain account properties for targeted player characters: comment, password, isBanned, isSuspended, isPublic, isOnline, isSlot1Blocked, isSlot2Blocked, isSlot3Blocked, isSlot4Blocked, isSlot5Blocked, isSlot6Blocked, isSlot7Blocked, unused9, unused10, isSeer, isCounselor, isGM Updated 'tweak command to allow viewing and modifying of certain account properties for targeted player characters Note that any changes to account properties will not go into effect until a worldsave or manual save of accounts via console has taken place. Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2021-04-16 21:14:50 +08:00
*vp = OBJECT_TO_JSVAL( myChar );
}
}
else
{
Fixes for Console behaviour on Linux and Windows, addition of JS properties for user accounts Fixed long-standing issue with UOX3 console not resetting terminal properly after shutdown on Linux, after updating cConsole.cpp/h to conform to standard unix terminal commands/settings for certain features (punt) Fixed an issue that could cause a crash on Windows when attempting to broadcast system messages from the UOX3 console (punt) Fixed an issue that prevented text input in UOX3 console for system broadcasts from being displayed on Linux and MacOS (punt) Added support for new JS Object - IUE_ACCOUNT - which can be accessed via character property .account. The following account properties have been exposed to the JS engine: .id // Account ID (Read-Only) .username // Account Username (Read-Only) .flags // Flags set on account (Read-Only) .comment // Comment/contact info .character1 // Character in account slot 1 (Read-Only) .character2 // Character in account slot 2 (Read-Only) .character3 // Character in account slot 3 (Read-Only) .character4 // Character in account slot 4 (Read-Only) .character5 // Character in account slot 5 (Read-Only) .character6 // Character in account slot 6 (Read-Only) .character7 // Character in account slot 7 (Read-Only) .currentChar // Currently logged in character (if any) (Read-Only) .lastIP // Last IP used to connect to account (Read-Only) // Flag shortcuts .isBanned // Is account banned? .isSuspended // Is account suspended? .isPublic // Is comment/contact info to be considered public info? .isOnline // Is account online? .isSlot1Blocked // Is character slot 1 blocked? .isSlot2Blocked // Is character slot 2 blocked? .isSlot3Blocked // Is character slot 3 blocked? .isSlot4Blocked // Is character slot 4 blocked? .isSlot5Blocked // Is character slot 5 blocked? .isSlot6Blocked // Is character slot 6 blocked? .isSlot7Blocked // Is character slot 7 blocked? .unused9 // Unused flag .unused10 // Unused flag .isSeer // Is account marked as Seer account? .isCounselor // Is account marked as Counselor account? .isGM // Is account marked as GM account? Fixed 'addaccount command - can now once again be used to add a new user account to the server from in-game. See accounts.adm for info on available flags. Syntax: 'addaccount [username] [password] [(optional)flags] Updated 'get command to allow retrieving certain account properties for targeted player characters: username, flags, comment, character1, character2, character3, character4, character5, character6, character7, lastIP, isBanned, isSuspended, isPublic, isOnline, isSlot1Blocked, isSlot2Blocked, isSlot3Blocked, isSlot4Blocked, isSlot5Blocked, isSlot6Blocked, isSlot7Blocked, unused9, unused10, isSeer, isCounselor and isGM Updated 'set command to allow setting certain account properties for targeted player characters: comment, password, isBanned, isSuspended, isPublic, isOnline, isSlot1Blocked, isSlot2Blocked, isSlot3Blocked, isSlot4Blocked, isSlot5Blocked, isSlot6Blocked, isSlot7Blocked, unused9, unused10, isSeer, isCounselor, isGM Updated 'tweak command to allow viewing and modifying of certain account properties for targeted player characters Note that any changes to account properties will not go into effect until a worldsave or manual save of accounts via console has taken place. Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2021-04-16 21:14:50 +08:00
*vp = JSVAL_NULL;
}
Fixes for Console behaviour on Linux and Windows, addition of JS properties for user accounts Fixed long-standing issue with UOX3 console not resetting terminal properly after shutdown on Linux, after updating cConsole.cpp/h to conform to standard unix terminal commands/settings for certain features (punt) Fixed an issue that could cause a crash on Windows when attempting to broadcast system messages from the UOX3 console (punt) Fixed an issue that prevented text input in UOX3 console for system broadcasts from being displayed on Linux and MacOS (punt) Added support for new JS Object - IUE_ACCOUNT - which can be accessed via character property .account. The following account properties have been exposed to the JS engine: .id // Account ID (Read-Only) .username // Account Username (Read-Only) .flags // Flags set on account (Read-Only) .comment // Comment/contact info .character1 // Character in account slot 1 (Read-Only) .character2 // Character in account slot 2 (Read-Only) .character3 // Character in account slot 3 (Read-Only) .character4 // Character in account slot 4 (Read-Only) .character5 // Character in account slot 5 (Read-Only) .character6 // Character in account slot 6 (Read-Only) .character7 // Character in account slot 7 (Read-Only) .currentChar // Currently logged in character (if any) (Read-Only) .lastIP // Last IP used to connect to account (Read-Only) // Flag shortcuts .isBanned // Is account banned? .isSuspended // Is account suspended? .isPublic // Is comment/contact info to be considered public info? .isOnline // Is account online? .isSlot1Blocked // Is character slot 1 blocked? .isSlot2Blocked // Is character slot 2 blocked? .isSlot3Blocked // Is character slot 3 blocked? .isSlot4Blocked // Is character slot 4 blocked? .isSlot5Blocked // Is character slot 5 blocked? .isSlot6Blocked // Is character slot 6 blocked? .isSlot7Blocked // Is character slot 7 blocked? .unused9 // Unused flag .unused10 // Unused flag .isSeer // Is account marked as Seer account? .isCounselor // Is account marked as Counselor account? .isGM // Is account marked as GM account? Fixed 'addaccount command - can now once again be used to add a new user account to the server from in-game. See accounts.adm for info on available flags. Syntax: 'addaccount [username] [password] [(optional)flags] Updated 'get command to allow retrieving certain account properties for targeted player characters: username, flags, comment, character1, character2, character3, character4, character5, character6, character7, lastIP, isBanned, isSuspended, isPublic, isOnline, isSlot1Blocked, isSlot2Blocked, isSlot3Blocked, isSlot4Blocked, isSlot5Blocked, isSlot6Blocked, isSlot7Blocked, unused9, unused10, isSeer, isCounselor and isGM Updated 'set command to allow setting certain account properties for targeted player characters: comment, password, isBanned, isSuspended, isPublic, isOnline, isSlot1Blocked, isSlot2Blocked, isSlot3Blocked, isSlot4Blocked, isSlot5Blocked, isSlot6Blocked, isSlot7Blocked, unused9, unused10, isSeer, isCounselor, isGM Updated 'tweak command to allow viewing and modifying of certain account properties for targeted player characters Note that any changes to account properties will not go into effect until a worldsave or manual save of accounts via console has taken place. Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2021-04-16 21:14:50 +08:00
break;
}
case CACCOUNT_LASTIP:
{
std::string ipString = oldstrutil::number( static_cast<SI32>(( myAccount->dwLastIP & 0xFF000000 ) >> 24 ))
+ "." + oldstrutil::number( static_cast<SI32>(( myAccount->dwLastIP & 0x00FF0000 ) >> 16 ))
+ "." + oldstrutil::number( static_cast<SI32>(( myAccount->dwLastIP & 0x0000FF00 ) >> 8 ))
+ "." + oldstrutil::number( static_cast<SI32>(( myAccount->dwLastIP & 0x000000FF ) % 256 ));
Fixes for Console behaviour on Linux and Windows, addition of JS properties for user accounts Fixed long-standing issue with UOX3 console not resetting terminal properly after shutdown on Linux, after updating cConsole.cpp/h to conform to standard unix terminal commands/settings for certain features (punt) Fixed an issue that could cause a crash on Windows when attempting to broadcast system messages from the UOX3 console (punt) Fixed an issue that prevented text input in UOX3 console for system broadcasts from being displayed on Linux and MacOS (punt) Added support for new JS Object - IUE_ACCOUNT - which can be accessed via character property .account. The following account properties have been exposed to the JS engine: .id // Account ID (Read-Only) .username // Account Username (Read-Only) .flags // Flags set on account (Read-Only) .comment // Comment/contact info .character1 // Character in account slot 1 (Read-Only) .character2 // Character in account slot 2 (Read-Only) .character3 // Character in account slot 3 (Read-Only) .character4 // Character in account slot 4 (Read-Only) .character5 // Character in account slot 5 (Read-Only) .character6 // Character in account slot 6 (Read-Only) .character7 // Character in account slot 7 (Read-Only) .currentChar // Currently logged in character (if any) (Read-Only) .lastIP // Last IP used to connect to account (Read-Only) // Flag shortcuts .isBanned // Is account banned? .isSuspended // Is account suspended? .isPublic // Is comment/contact info to be considered public info? .isOnline // Is account online? .isSlot1Blocked // Is character slot 1 blocked? .isSlot2Blocked // Is character slot 2 blocked? .isSlot3Blocked // Is character slot 3 blocked? .isSlot4Blocked // Is character slot 4 blocked? .isSlot5Blocked // Is character slot 5 blocked? .isSlot6Blocked // Is character slot 6 blocked? .isSlot7Blocked // Is character slot 7 blocked? .unused9 // Unused flag .unused10 // Unused flag .isSeer // Is account marked as Seer account? .isCounselor // Is account marked as Counselor account? .isGM // Is account marked as GM account? Fixed 'addaccount command - can now once again be used to add a new user account to the server from in-game. See accounts.adm for info on available flags. Syntax: 'addaccount [username] [password] [(optional)flags] Updated 'get command to allow retrieving certain account properties for targeted player characters: username, flags, comment, character1, character2, character3, character4, character5, character6, character7, lastIP, isBanned, isSuspended, isPublic, isOnline, isSlot1Blocked, isSlot2Blocked, isSlot3Blocked, isSlot4Blocked, isSlot5Blocked, isSlot6Blocked, isSlot7Blocked, unused9, unused10, isSeer, isCounselor and isGM Updated 'set command to allow setting certain account properties for targeted player characters: comment, password, isBanned, isSuspended, isPublic, isOnline, isSlot1Blocked, isSlot2Blocked, isSlot3Blocked, isSlot4Blocked, isSlot5Blocked, isSlot6Blocked, isSlot7Blocked, unused9, unused10, isSeer, isCounselor, isGM Updated 'tweak command to allow viewing and modifying of certain account properties for targeted player characters Note that any changes to account properties will not go into effect until a worldsave or manual save of accounts via console has taken place. Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2021-04-16 21:14:50 +08:00
tString = JS_NewStringCopyZ( cx, ipString.c_str() );
*vp = STRING_TO_JSVAL( tString );
break;
}
case CACCOUNT_BANNED: *vp = BOOLEAN_TO_JSVAL( myAccount->wFlags.test( AB_FLAGS_BANNED )); break;
case CACCOUNT_SUSPENDED: *vp = BOOLEAN_TO_JSVAL( myAccount->wFlags.test( AB_FLAGS_SUSPENDED )); break;
case CACCOUNT_PUBLIC: *vp = BOOLEAN_TO_JSVAL( myAccount->wFlags.test( AB_FLAGS_PUBLIC )); break;
case CACCOUNT_ONLINE: *vp = BOOLEAN_TO_JSVAL( myAccount->wFlags.test( AB_FLAGS_ONLINE )); break;
case CACCOUNT_CHARSLOT1BLOCKED: *vp = BOOLEAN_TO_JSVAL( myAccount->wFlags.test( AB_FLAGS_CHARACTER1 )); break;
case CACCOUNT_CHARSLOT2BLOCKED: *vp = BOOLEAN_TO_JSVAL( myAccount->wFlags.test( AB_FLAGS_CHARACTER2 )); break;
case CACCOUNT_CHARSLOT3BLOCKED: *vp = BOOLEAN_TO_JSVAL( myAccount->wFlags.test( AB_FLAGS_CHARACTER3 )); break;
case CACCOUNT_CHARSLOT4BLOCKED: *vp = BOOLEAN_TO_JSVAL( myAccount->wFlags.test( AB_FLAGS_CHARACTER4 )); break;
case CACCOUNT_CHARSLOT5BLOCKED: *vp = BOOLEAN_TO_JSVAL( myAccount->wFlags.test( AB_FLAGS_CHARACTER5 )); break;
case CACCOUNT_CHARSLOT6BLOCKED: *vp = BOOLEAN_TO_JSVAL( myAccount->wFlags.test( AB_FLAGS_CHARACTER6 )); break;
case CACCOUNT_CHARSLOT7BLOCKED: *vp = BOOLEAN_TO_JSVAL( myAccount->wFlags.test( AB_FLAGS_CHARACTER7 )); break;
UOX3 0.99.6-RC6 Removed arbitrary and hidden restrictions on refreshing list of online players shown with 'wholist command Fixed an issue where player ghosts that get teleported would not see themselves get updated to new location Fixed a server crash from clients disconnecting while running server in debug mode Improved how container updates are sent to players; now only sends to clients that have actually opened the container, and who are still within range Added more information about UO data files being loaded during server startup Enhanced the GM 'add menu to allow clicking directly on images of items/npcs to add them, and adjusted size of menus to accommodate this Fixed an issue with fleeing NPCs that could cause them to attempt to flee across time and space, regardless of distance to target/attacker in combat Added NPC AI that runs away from players if they get too close (even outside combat). Applied to hind, rabbits, squirrels, ferrets and various birds by default: AI_ANIMAL_SCARED (aitype 12) Fixed issues with NPCs fleeing forever, or getting stuck in flee/don't flee loop, by introducing max fleeing distance (50 tiles) and cooldown (30 sec) on fleeing Updated onNameRequest JS Event to include third parameter with origin of name request, so script responses can be tailored appropriately: onNameRequest( myObj, requestedBy, requestSource ) Potential values for requestSource: 0 - Speech/System Messages 1 - Guild Menus 2 - Stat Window (self) 3 - Stat Window (other) 4 - Tooltip 5 - Paperdoll Journal 6 - Paperdoll 7 - Single Click / All-Names 8 - System 9 - Secure Trade Window Added Adaptive Performance System (APS) that dynamically adjust how often NPC AI/movement is checked based on overall shard performance. If performance drops below defined threshold, UOX3 gradually slows down checks for NPC AI/movement to prioritize player movement/speech/command responsiveness. If performance climbs back up above threshold, slowdowns are gradually removed. The following UOX.INI options have been added under [system] category to support this system: APSPERFTHRESHOLD=50 // Performance threshold (measured in simulation cycles/sec) below which the APS kicks in APSINTERVAL=100 // How often (in milliseconds) the APS checks performance and makes adjustments (if needed) to balance out shard performance APSDELAYSTEP=50 // How much the delay timer is modified by (in milliseconds) each time APS makes adjustments APSDELAYMAXCAP=2000 // Max amount of of delay APS can introduce for NPC AI/movement handling when attempting to restore shard performance Added new JS Methods for Region objects: .GetOrePrefs( oreType ) // Get ore preference data for ore type found in town region. Returned as an array containing the following data: orePrefData -> [ oreName, // name of ore color, // color of ore minskill, // min skill to mine ore ingotName, // name of ingot created from ore makemenu, // makemenu entry for crafting something from ingot oreChance, // default global chance of finding this ore type scriptID // script attached to mined ore ], orePrefChance // Chance of finding this ore type in given town region .GetOreChance() // Get base chance of finding any ore in town region Moved Mining skill plus gravedigging feature from hard code to scripts (js/skill/mining.js) to make it easier to maintain and/or customize, and removed hard coded variants Gravedigging now relies on the ore resource system behind the scenes to restrict how often graves in a given area can be dug up Fixed some incorrect references to .worldNumber Character property in misc scripts (should be .worldnumber) Made some "hard-scripted" system messages in misc scripts use dictionary system instead Added spawn region for banker NPCs in Serpent's Hold (dfndata/spawn/felucca/spawn_town_serpents_hold.dfn, dfndata/spawn/trammel/spawn_town_serpents_hold.dfn) Fixed region definition of Ocllo to actually cover the entire town (dfndata/regions/regions.dfn) Added numerous additional locations accessible with 'goplace # command, for key locations in Ilshenar, Malas, Tokuno Islands and Ter Mur (dfndata/location/location.dfn) Revised travel-menu portion of GM menu (shortcut: 'travel) to include more travel options based on new locations (dfndata/items/travelmenu.dfn and travelmenu.bulk.dfn) Fixed an issue where NPCs could attempt to attack targets in other worlds/instances Added new JS Event that triggers for characters who are about to deal damage in combat. Complimentary to onDamage, which triggers for chars receiving damage: onDamageDeal( dmgDealer, dmgReceiver, damageValue, damageType ) Added new JS Event that can trigger in global script upon creation of new player chars. Note that this will trigger in place of onCreateDFN event for player characters: onCreatePlayer( pChar ) Added new JS Event that triggers for characters selecting a target with a spell. Complimentary to onSpellTarget, which triggers for targets selected with a spell: onSpellTargetSelect( caster, target, spellNum ) Updated onCombatStart and onCombatEnd JS Events to also trigger for the other party in combat Updated onPickup JS Event to include a third parameter - the potential container item was picked up from. Event now also triggers event in scripts attached to said containers: onPickup( iPickedUp, pChar, iCont ) Added tracking of total playtime per individual character, and per account across all characters, and exposed these properties to JS engine: .totalPlayTime // Account property, total playtime across all chars .playTime // Character property, total playtime on given character only Added new player-accessible command ('playtime) to spit out the playtime of current character/account as a whole (js/commands/playtime.js) Implemented first version of Young Player System: Replaced the UNUSED9 account flag with YOUNG, to be used by Young/New Player System Added new JS Account property that gets/sets whether player account is considered Young: .isYoung Added new Char timers: TIMER_YOUNGHEAL // Restricts how often Young players are healed by NPC healers TIMER_YOUNGMESSAGE // Restricts how often Young players are warned about dangerous looking monsters in overworld Updated GM commands 'get and 'set to get/set .isYoung property of player's account (js/commands/targeting/get.js and set.js) Added new UOX.INI setting to enable/disable Young Player System (enabled by default): YOUNGPLAYERSYSTEM=1 If Young Player System is enabled, all newly created player accounts are automatically marked with Young flag Added new script to handle various restrictions and functions related to Young characters (js/player/young_player.js): Young characters will have [Young] displayed over their head Young characters will have their Young status checked and verified on every login + every stat/skill gain, to revoke the Young status if any of the following is true: Account has a total playtime of more than 40 hours Any character has more than 350 total (base) skill points Any character has more than 70 skill points in a single skill Any character has more than 150 total stat points Any character has more than 80 stat points in a single stat Young characters can renounce their Young status manually by saying the words "I renounce my young player status" Young characters get two additional items upon creation: a new player ticket (can be combined with any other players new player ticket for both players to get a reward) a sextant (shows Young players directions to nearest moongate/bank regardless of where they are, as long as outdoors) Young characters cannot target other player characters with hostile spells or skills Young characters cannot be the target of other player characters' hostile spells or skills Young characters can only cast beneficial spells upon themselves or other Young characters Young characters can only be the target of beneficial spells from other Young players Young players (and their pets/followers) cannot attack or harm any other players (or their pets/followers), nor themselves be attacked or harmed by any other players (or their pets/followers), whether from combat, spells, skills or items Young players don't lose any of their items on death, and are teleported to the nearest healer upon death with all their items intact Young players receive a warning upon entering dungeons that monsters there will be hostile Updated global script (js/server/global.js) to: Check/Verify Young status of players upon login Attach young player script on login/creation for players on Young accounts Give specific items to Young players upon creation Added new script (js/item/corpse.js) that is assigned to all freshly created corpses. This script handles restrictions related to Young players interactions with corpses, and the interactions of other players with corpses of Young players Updated JS Method .Carve() to return true/false depending on whether carving a corpse was successful Updated Healer AI in code to heal nearby injured Young players Updated Evil AI and Evil Caster AI in code to avoid selecting Young players as targets in combat outside of dungeons Added a new section to UOX.INI - [young player starting locations] - that can be used to define starting locations for Young players. If only one such location is provided, all players start there. Otherwise, it matches the same starting location setup as the regular one - with one entry per town in Britannia. Restricted transferring and/or friending of pets (code) and hirelings (hirelings.js) between Young and non-Young players Restricted Young players from recalling or gating to Felucca facet Young players can instantly logout from anywhere, at any time
2023-07-01 20:02:40 +08:00
case CACCOUNT_YOUNG: *vp = BOOLEAN_TO_JSVAL( myAccount->wFlags.test( AB_FLAGS_YOUNG )); break;
case CACCOUNT_UNUSED10: *vp = BOOLEAN_TO_JSVAL( myAccount->wFlags.test( AB_FLAGS_UNUSED10 )); break;
case CACCOUNT_SEER: *vp = BOOLEAN_TO_JSVAL( myAccount->wFlags.test( AB_FLAGS_SEER )); break;
case CACCOUNT_COUNSELOR: *vp = BOOLEAN_TO_JSVAL( myAccount->wFlags.test( AB_FLAGS_COUNSELOR )); break;
case CACCOUNT_GM: *vp = BOOLEAN_TO_JSVAL( myAccount->wFlags.test( AB_FLAGS_GM )); break;
Fixes for Console behaviour on Linux and Windows, addition of JS properties for user accounts Fixed long-standing issue with UOX3 console not resetting terminal properly after shutdown on Linux, after updating cConsole.cpp/h to conform to standard unix terminal commands/settings for certain features (punt) Fixed an issue that could cause a crash on Windows when attempting to broadcast system messages from the UOX3 console (punt) Fixed an issue that prevented text input in UOX3 console for system broadcasts from being displayed on Linux and MacOS (punt) Added support for new JS Object - IUE_ACCOUNT - which can be accessed via character property .account. The following account properties have been exposed to the JS engine: .id // Account ID (Read-Only) .username // Account Username (Read-Only) .flags // Flags set on account (Read-Only) .comment // Comment/contact info .character1 // Character in account slot 1 (Read-Only) .character2 // Character in account slot 2 (Read-Only) .character3 // Character in account slot 3 (Read-Only) .character4 // Character in account slot 4 (Read-Only) .character5 // Character in account slot 5 (Read-Only) .character6 // Character in account slot 6 (Read-Only) .character7 // Character in account slot 7 (Read-Only) .currentChar // Currently logged in character (if any) (Read-Only) .lastIP // Last IP used to connect to account (Read-Only) // Flag shortcuts .isBanned // Is account banned? .isSuspended // Is account suspended? .isPublic // Is comment/contact info to be considered public info? .isOnline // Is account online? .isSlot1Blocked // Is character slot 1 blocked? .isSlot2Blocked // Is character slot 2 blocked? .isSlot3Blocked // Is character slot 3 blocked? .isSlot4Blocked // Is character slot 4 blocked? .isSlot5Blocked // Is character slot 5 blocked? .isSlot6Blocked // Is character slot 6 blocked? .isSlot7Blocked // Is character slot 7 blocked? .unused9 // Unused flag .unused10 // Unused flag .isSeer // Is account marked as Seer account? .isCounselor // Is account marked as Counselor account? .isGM // Is account marked as GM account? Fixed 'addaccount command - can now once again be used to add a new user account to the server from in-game. See accounts.adm for info on available flags. Syntax: 'addaccount [username] [password] [(optional)flags] Updated 'get command to allow retrieving certain account properties for targeted player characters: username, flags, comment, character1, character2, character3, character4, character5, character6, character7, lastIP, isBanned, isSuspended, isPublic, isOnline, isSlot1Blocked, isSlot2Blocked, isSlot3Blocked, isSlot4Blocked, isSlot5Blocked, isSlot6Blocked, isSlot7Blocked, unused9, unused10, isSeer, isCounselor and isGM Updated 'set command to allow setting certain account properties for targeted player characters: comment, password, isBanned, isSuspended, isPublic, isOnline, isSlot1Blocked, isSlot2Blocked, isSlot3Blocked, isSlot4Blocked, isSlot5Blocked, isSlot6Blocked, isSlot7Blocked, unused9, unused10, isSeer, isCounselor, isGM Updated 'tweak command to allow viewing and modifying of certain account properties for targeted player characters Note that any changes to account properties will not go into effect until a worldsave or manual save of accounts via console has taken place. Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2021-04-16 21:14:50 +08:00
default:
break;
}
2002-04-07 20:53:41 +00:00
}
Fixes for Console behaviour on Linux and Windows, addition of JS properties for user accounts Fixed long-standing issue with UOX3 console not resetting terminal properly after shutdown on Linux, after updating cConsole.cpp/h to conform to standard unix terminal commands/settings for certain features (punt) Fixed an issue that could cause a crash on Windows when attempting to broadcast system messages from the UOX3 console (punt) Fixed an issue that prevented text input in UOX3 console for system broadcasts from being displayed on Linux and MacOS (punt) Added support for new JS Object - IUE_ACCOUNT - which can be accessed via character property .account. The following account properties have been exposed to the JS engine: .id // Account ID (Read-Only) .username // Account Username (Read-Only) .flags // Flags set on account (Read-Only) .comment // Comment/contact info .character1 // Character in account slot 1 (Read-Only) .character2 // Character in account slot 2 (Read-Only) .character3 // Character in account slot 3 (Read-Only) .character4 // Character in account slot 4 (Read-Only) .character5 // Character in account slot 5 (Read-Only) .character6 // Character in account slot 6 (Read-Only) .character7 // Character in account slot 7 (Read-Only) .currentChar // Currently logged in character (if any) (Read-Only) .lastIP // Last IP used to connect to account (Read-Only) // Flag shortcuts .isBanned // Is account banned? .isSuspended // Is account suspended? .isPublic // Is comment/contact info to be considered public info? .isOnline // Is account online? .isSlot1Blocked // Is character slot 1 blocked? .isSlot2Blocked // Is character slot 2 blocked? .isSlot3Blocked // Is character slot 3 blocked? .isSlot4Blocked // Is character slot 4 blocked? .isSlot5Blocked // Is character slot 5 blocked? .isSlot6Blocked // Is character slot 6 blocked? .isSlot7Blocked // Is character slot 7 blocked? .unused9 // Unused flag .unused10 // Unused flag .isSeer // Is account marked as Seer account? .isCounselor // Is account marked as Counselor account? .isGM // Is account marked as GM account? Fixed 'addaccount command - can now once again be used to add a new user account to the server from in-game. See accounts.adm for info on available flags. Syntax: 'addaccount [username] [password] [(optional)flags] Updated 'get command to allow retrieving certain account properties for targeted player characters: username, flags, comment, character1, character2, character3, character4, character5, character6, character7, lastIP, isBanned, isSuspended, isPublic, isOnline, isSlot1Blocked, isSlot2Blocked, isSlot3Blocked, isSlot4Blocked, isSlot5Blocked, isSlot6Blocked, isSlot7Blocked, unused9, unused10, isSeer, isCounselor and isGM Updated 'set command to allow setting certain account properties for targeted player characters: comment, password, isBanned, isSuspended, isPublic, isOnline, isSlot1Blocked, isSlot2Blocked, isSlot3Blocked, isSlot4Blocked, isSlot5Blocked, isSlot6Blocked, isSlot7Blocked, unused9, unused10, isSeer, isCounselor, isGM Updated 'tweak command to allow viewing and modifying of certain account properties for targeted player characters Note that any changes to account properties will not go into effect until a worldsave or manual save of accounts via console has taken place. Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2021-04-16 21:14:50 +08:00
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
return JS_TRUE;
}
JSBool CAccountProps_setProperty( JSContext* cx, JSObject* obj, jsid id, JSBool strict, jsval* vp )
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
{
CAccountBlock_st *myAccount = static_cast<CAccountBlock_st *>( JS_GetPrivate( cx, obj ));
2021-06-12 07:30:23 -04:00
if( myAccount == nullptr )
Fixes for Console behaviour on Linux and Windows, addition of JS properties for user accounts Fixed long-standing issue with UOX3 console not resetting terminal properly after shutdown on Linux, after updating cConsole.cpp/h to conform to standard unix terminal commands/settings for certain features (punt) Fixed an issue that could cause a crash on Windows when attempting to broadcast system messages from the UOX3 console (punt) Fixed an issue that prevented text input in UOX3 console for system broadcasts from being displayed on Linux and MacOS (punt) Added support for new JS Object - IUE_ACCOUNT - which can be accessed via character property .account. The following account properties have been exposed to the JS engine: .id // Account ID (Read-Only) .username // Account Username (Read-Only) .flags // Flags set on account (Read-Only) .comment // Comment/contact info .character1 // Character in account slot 1 (Read-Only) .character2 // Character in account slot 2 (Read-Only) .character3 // Character in account slot 3 (Read-Only) .character4 // Character in account slot 4 (Read-Only) .character5 // Character in account slot 5 (Read-Only) .character6 // Character in account slot 6 (Read-Only) .character7 // Character in account slot 7 (Read-Only) .currentChar // Currently logged in character (if any) (Read-Only) .lastIP // Last IP used to connect to account (Read-Only) // Flag shortcuts .isBanned // Is account banned? .isSuspended // Is account suspended? .isPublic // Is comment/contact info to be considered public info? .isOnline // Is account online? .isSlot1Blocked // Is character slot 1 blocked? .isSlot2Blocked // Is character slot 2 blocked? .isSlot3Blocked // Is character slot 3 blocked? .isSlot4Blocked // Is character slot 4 blocked? .isSlot5Blocked // Is character slot 5 blocked? .isSlot6Blocked // Is character slot 6 blocked? .isSlot7Blocked // Is character slot 7 blocked? .unused9 // Unused flag .unused10 // Unused flag .isSeer // Is account marked as Seer account? .isCounselor // Is account marked as Counselor account? .isGM // Is account marked as GM account? Fixed 'addaccount command - can now once again be used to add a new user account to the server from in-game. See accounts.adm for info on available flags. Syntax: 'addaccount [username] [password] [(optional)flags] Updated 'get command to allow retrieving certain account properties for targeted player characters: username, flags, comment, character1, character2, character3, character4, character5, character6, character7, lastIP, isBanned, isSuspended, isPublic, isOnline, isSlot1Blocked, isSlot2Blocked, isSlot3Blocked, isSlot4Blocked, isSlot5Blocked, isSlot6Blocked, isSlot7Blocked, unused9, unused10, isSeer, isCounselor and isGM Updated 'set command to allow setting certain account properties for targeted player characters: comment, password, isBanned, isSuspended, isPublic, isOnline, isSlot1Blocked, isSlot2Blocked, isSlot3Blocked, isSlot4Blocked, isSlot5Blocked, isSlot6Blocked, isSlot7Blocked, unused9, unused10, isSeer, isCounselor, isGM Updated 'tweak command to allow viewing and modifying of certain account properties for targeted player characters Note that any changes to account properties will not go into effect until a worldsave or manual save of accounts via console has taken place. Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2021-04-16 21:14:50 +08:00
return JS_FALSE;
JSEncapsulate encaps( cx, vp );
2025-04-07 14:11:13 +10:00
UI16 propID = getScriptID( cx, id, JSP_ACCOUNT );
if( propID != 0xFFFF )
Fixes for Console behaviour on Linux and Windows, addition of JS properties for user accounts Fixed long-standing issue with UOX3 console not resetting terminal properly after shutdown on Linux, after updating cConsole.cpp/h to conform to standard unix terminal commands/settings for certain features (punt) Fixed an issue that could cause a crash on Windows when attempting to broadcast system messages from the UOX3 console (punt) Fixed an issue that prevented text input in UOX3 console for system broadcasts from being displayed on Linux and MacOS (punt) Added support for new JS Object - IUE_ACCOUNT - which can be accessed via character property .account. The following account properties have been exposed to the JS engine: .id // Account ID (Read-Only) .username // Account Username (Read-Only) .flags // Flags set on account (Read-Only) .comment // Comment/contact info .character1 // Character in account slot 1 (Read-Only) .character2 // Character in account slot 2 (Read-Only) .character3 // Character in account slot 3 (Read-Only) .character4 // Character in account slot 4 (Read-Only) .character5 // Character in account slot 5 (Read-Only) .character6 // Character in account slot 6 (Read-Only) .character7 // Character in account slot 7 (Read-Only) .currentChar // Currently logged in character (if any) (Read-Only) .lastIP // Last IP used to connect to account (Read-Only) // Flag shortcuts .isBanned // Is account banned? .isSuspended // Is account suspended? .isPublic // Is comment/contact info to be considered public info? .isOnline // Is account online? .isSlot1Blocked // Is character slot 1 blocked? .isSlot2Blocked // Is character slot 2 blocked? .isSlot3Blocked // Is character slot 3 blocked? .isSlot4Blocked // Is character slot 4 blocked? .isSlot5Blocked // Is character slot 5 blocked? .isSlot6Blocked // Is character slot 6 blocked? .isSlot7Blocked // Is character slot 7 blocked? .unused9 // Unused flag .unused10 // Unused flag .isSeer // Is account marked as Seer account? .isCounselor // Is account marked as Counselor account? .isGM // Is account marked as GM account? Fixed 'addaccount command - can now once again be used to add a new user account to the server from in-game. See accounts.adm for info on available flags. Syntax: 'addaccount [username] [password] [(optional)flags] Updated 'get command to allow retrieving certain account properties for targeted player characters: username, flags, comment, character1, character2, character3, character4, character5, character6, character7, lastIP, isBanned, isSuspended, isPublic, isOnline, isSlot1Blocked, isSlot2Blocked, isSlot3Blocked, isSlot4Blocked, isSlot5Blocked, isSlot6Blocked, isSlot7Blocked, unused9, unused10, isSeer, isCounselor and isGM Updated 'set command to allow setting certain account properties for targeted player characters: comment, password, isBanned, isSuspended, isPublic, isOnline, isSlot1Blocked, isSlot2Blocked, isSlot3Blocked, isSlot4Blocked, isSlot5Blocked, isSlot6Blocked, isSlot7Blocked, unused9, unused10, isSeer, isCounselor, isGM Updated 'tweak command to allow viewing and modifying of certain account properties for targeted player characters Note that any changes to account properties will not go into effect until a worldsave or manual save of accounts via console has taken place. Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2021-04-16 21:14:50 +08:00
{
2025-04-07 14:11:13 +10:00
switch( propID )
Fixes for Console behaviour on Linux and Windows, addition of JS properties for user accounts Fixed long-standing issue with UOX3 console not resetting terminal properly after shutdown on Linux, after updating cConsole.cpp/h to conform to standard unix terminal commands/settings for certain features (punt) Fixed an issue that could cause a crash on Windows when attempting to broadcast system messages from the UOX3 console (punt) Fixed an issue that prevented text input in UOX3 console for system broadcasts from being displayed on Linux and MacOS (punt) Added support for new JS Object - IUE_ACCOUNT - which can be accessed via character property .account. The following account properties have been exposed to the JS engine: .id // Account ID (Read-Only) .username // Account Username (Read-Only) .flags // Flags set on account (Read-Only) .comment // Comment/contact info .character1 // Character in account slot 1 (Read-Only) .character2 // Character in account slot 2 (Read-Only) .character3 // Character in account slot 3 (Read-Only) .character4 // Character in account slot 4 (Read-Only) .character5 // Character in account slot 5 (Read-Only) .character6 // Character in account slot 6 (Read-Only) .character7 // Character in account slot 7 (Read-Only) .currentChar // Currently logged in character (if any) (Read-Only) .lastIP // Last IP used to connect to account (Read-Only) // Flag shortcuts .isBanned // Is account banned? .isSuspended // Is account suspended? .isPublic // Is comment/contact info to be considered public info? .isOnline // Is account online? .isSlot1Blocked // Is character slot 1 blocked? .isSlot2Blocked // Is character slot 2 blocked? .isSlot3Blocked // Is character slot 3 blocked? .isSlot4Blocked // Is character slot 4 blocked? .isSlot5Blocked // Is character slot 5 blocked? .isSlot6Blocked // Is character slot 6 blocked? .isSlot7Blocked // Is character slot 7 blocked? .unused9 // Unused flag .unused10 // Unused flag .isSeer // Is account marked as Seer account? .isCounselor // Is account marked as Counselor account? .isGM // Is account marked as GM account? Fixed 'addaccount command - can now once again be used to add a new user account to the server from in-game. See accounts.adm for info on available flags. Syntax: 'addaccount [username] [password] [(optional)flags] Updated 'get command to allow retrieving certain account properties for targeted player characters: username, flags, comment, character1, character2, character3, character4, character5, character6, character7, lastIP, isBanned, isSuspended, isPublic, isOnline, isSlot1Blocked, isSlot2Blocked, isSlot3Blocked, isSlot4Blocked, isSlot5Blocked, isSlot6Blocked, isSlot7Blocked, unused9, unused10, isSeer, isCounselor and isGM Updated 'set command to allow setting certain account properties for targeted player characters: comment, password, isBanned, isSuspended, isPublic, isOnline, isSlot1Blocked, isSlot2Blocked, isSlot3Blocked, isSlot4Blocked, isSlot5Blocked, isSlot6Blocked, isSlot7Blocked, unused9, unused10, isSeer, isCounselor, isGM Updated 'tweak command to allow viewing and modifying of certain account properties for targeted player characters Note that any changes to account properties will not go into effect until a worldsave or manual save of accounts via console has taken place. Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2021-04-16 21:14:50 +08:00
{
case CACCOUNT_ID:
case CACCOUNT_USERNAME:
case CACCOUNT_FLAGS:
case CACCOUNT_PATH:
case CACCOUNT_CHARACTER1:
case CACCOUNT_CHARACTER2:
case CACCOUNT_CHARACTER3:
case CACCOUNT_CHARACTER4:
case CACCOUNT_CHARACTER5:
case CACCOUNT_CHARACTER6:
case CACCOUNT_CHARACTER7:
case CACCOUNT_CURRENTCHAR:
case CACCOUNT_LASTIP:
case CACCOUNT_FIRSTLOGIN:
Fixes for Console behaviour on Linux and Windows, addition of JS properties for user accounts Fixed long-standing issue with UOX3 console not resetting terminal properly after shutdown on Linux, after updating cConsole.cpp/h to conform to standard unix terminal commands/settings for certain features (punt) Fixed an issue that could cause a crash on Windows when attempting to broadcast system messages from the UOX3 console (punt) Fixed an issue that prevented text input in UOX3 console for system broadcasts from being displayed on Linux and MacOS (punt) Added support for new JS Object - IUE_ACCOUNT - which can be accessed via character property .account. The following account properties have been exposed to the JS engine: .id // Account ID (Read-Only) .username // Account Username (Read-Only) .flags // Flags set on account (Read-Only) .comment // Comment/contact info .character1 // Character in account slot 1 (Read-Only) .character2 // Character in account slot 2 (Read-Only) .character3 // Character in account slot 3 (Read-Only) .character4 // Character in account slot 4 (Read-Only) .character5 // Character in account slot 5 (Read-Only) .character6 // Character in account slot 6 (Read-Only) .character7 // Character in account slot 7 (Read-Only) .currentChar // Currently logged in character (if any) (Read-Only) .lastIP // Last IP used to connect to account (Read-Only) // Flag shortcuts .isBanned // Is account banned? .isSuspended // Is account suspended? .isPublic // Is comment/contact info to be considered public info? .isOnline // Is account online? .isSlot1Blocked // Is character slot 1 blocked? .isSlot2Blocked // Is character slot 2 blocked? .isSlot3Blocked // Is character slot 3 blocked? .isSlot4Blocked // Is character slot 4 blocked? .isSlot5Blocked // Is character slot 5 blocked? .isSlot6Blocked // Is character slot 6 blocked? .isSlot7Blocked // Is character slot 7 blocked? .unused9 // Unused flag .unused10 // Unused flag .isSeer // Is account marked as Seer account? .isCounselor // Is account marked as Counselor account? .isGM // Is account marked as GM account? Fixed 'addaccount command - can now once again be used to add a new user account to the server from in-game. See accounts.adm for info on available flags. Syntax: 'addaccount [username] [password] [(optional)flags] Updated 'get command to allow retrieving certain account properties for targeted player characters: username, flags, comment, character1, character2, character3, character4, character5, character6, character7, lastIP, isBanned, isSuspended, isPublic, isOnline, isSlot1Blocked, isSlot2Blocked, isSlot3Blocked, isSlot4Blocked, isSlot5Blocked, isSlot6Blocked, isSlot7Blocked, unused9, unused10, isSeer, isCounselor and isGM Updated 'set command to allow setting certain account properties for targeted player characters: comment, password, isBanned, isSuspended, isPublic, isOnline, isSlot1Blocked, isSlot2Blocked, isSlot3Blocked, isSlot4Blocked, isSlot5Blocked, isSlot6Blocked, isSlot7Blocked, unused9, unused10, isSeer, isCounselor, isGM Updated 'tweak command to allow viewing and modifying of certain account properties for targeted player characters Note that any changes to account properties will not go into effect until a worldsave or manual save of accounts via console has taken place. Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2021-04-16 21:14:50 +08:00
break;
UOX3 0.99.6-RC6 Removed arbitrary and hidden restrictions on refreshing list of online players shown with 'wholist command Fixed an issue where player ghosts that get teleported would not see themselves get updated to new location Fixed a server crash from clients disconnecting while running server in debug mode Improved how container updates are sent to players; now only sends to clients that have actually opened the container, and who are still within range Added more information about UO data files being loaded during server startup Enhanced the GM 'add menu to allow clicking directly on images of items/npcs to add them, and adjusted size of menus to accommodate this Fixed an issue with fleeing NPCs that could cause them to attempt to flee across time and space, regardless of distance to target/attacker in combat Added NPC AI that runs away from players if they get too close (even outside combat). Applied to hind, rabbits, squirrels, ferrets and various birds by default: AI_ANIMAL_SCARED (aitype 12) Fixed issues with NPCs fleeing forever, or getting stuck in flee/don't flee loop, by introducing max fleeing distance (50 tiles) and cooldown (30 sec) on fleeing Updated onNameRequest JS Event to include third parameter with origin of name request, so script responses can be tailored appropriately: onNameRequest( myObj, requestedBy, requestSource ) Potential values for requestSource: 0 - Speech/System Messages 1 - Guild Menus 2 - Stat Window (self) 3 - Stat Window (other) 4 - Tooltip 5 - Paperdoll Journal 6 - Paperdoll 7 - Single Click / All-Names 8 - System 9 - Secure Trade Window Added Adaptive Performance System (APS) that dynamically adjust how often NPC AI/movement is checked based on overall shard performance. If performance drops below defined threshold, UOX3 gradually slows down checks for NPC AI/movement to prioritize player movement/speech/command responsiveness. If performance climbs back up above threshold, slowdowns are gradually removed. The following UOX.INI options have been added under [system] category to support this system: APSPERFTHRESHOLD=50 // Performance threshold (measured in simulation cycles/sec) below which the APS kicks in APSINTERVAL=100 // How often (in milliseconds) the APS checks performance and makes adjustments (if needed) to balance out shard performance APSDELAYSTEP=50 // How much the delay timer is modified by (in milliseconds) each time APS makes adjustments APSDELAYMAXCAP=2000 // Max amount of of delay APS can introduce for NPC AI/movement handling when attempting to restore shard performance Added new JS Methods for Region objects: .GetOrePrefs( oreType ) // Get ore preference data for ore type found in town region. Returned as an array containing the following data: orePrefData -> [ oreName, // name of ore color, // color of ore minskill, // min skill to mine ore ingotName, // name of ingot created from ore makemenu, // makemenu entry for crafting something from ingot oreChance, // default global chance of finding this ore type scriptID // script attached to mined ore ], orePrefChance // Chance of finding this ore type in given town region .GetOreChance() // Get base chance of finding any ore in town region Moved Mining skill plus gravedigging feature from hard code to scripts (js/skill/mining.js) to make it easier to maintain and/or customize, and removed hard coded variants Gravedigging now relies on the ore resource system behind the scenes to restrict how often graves in a given area can be dug up Fixed some incorrect references to .worldNumber Character property in misc scripts (should be .worldnumber) Made some "hard-scripted" system messages in misc scripts use dictionary system instead Added spawn region for banker NPCs in Serpent's Hold (dfndata/spawn/felucca/spawn_town_serpents_hold.dfn, dfndata/spawn/trammel/spawn_town_serpents_hold.dfn) Fixed region definition of Ocllo to actually cover the entire town (dfndata/regions/regions.dfn) Added numerous additional locations accessible with 'goplace # command, for key locations in Ilshenar, Malas, Tokuno Islands and Ter Mur (dfndata/location/location.dfn) Revised travel-menu portion of GM menu (shortcut: 'travel) to include more travel options based on new locations (dfndata/items/travelmenu.dfn and travelmenu.bulk.dfn) Fixed an issue where NPCs could attempt to attack targets in other worlds/instances Added new JS Event that triggers for characters who are about to deal damage in combat. Complimentary to onDamage, which triggers for chars receiving damage: onDamageDeal( dmgDealer, dmgReceiver, damageValue, damageType ) Added new JS Event that can trigger in global script upon creation of new player chars. Note that this will trigger in place of onCreateDFN event for player characters: onCreatePlayer( pChar ) Added new JS Event that triggers for characters selecting a target with a spell. Complimentary to onSpellTarget, which triggers for targets selected with a spell: onSpellTargetSelect( caster, target, spellNum ) Updated onCombatStart and onCombatEnd JS Events to also trigger for the other party in combat Updated onPickup JS Event to include a third parameter - the potential container item was picked up from. Event now also triggers event in scripts attached to said containers: onPickup( iPickedUp, pChar, iCont ) Added tracking of total playtime per individual character, and per account across all characters, and exposed these properties to JS engine: .totalPlayTime // Account property, total playtime across all chars .playTime // Character property, total playtime on given character only Added new player-accessible command ('playtime) to spit out the playtime of current character/account as a whole (js/commands/playtime.js) Implemented first version of Young Player System: Replaced the UNUSED9 account flag with YOUNG, to be used by Young/New Player System Added new JS Account property that gets/sets whether player account is considered Young: .isYoung Added new Char timers: TIMER_YOUNGHEAL // Restricts how often Young players are healed by NPC healers TIMER_YOUNGMESSAGE // Restricts how often Young players are warned about dangerous looking monsters in overworld Updated GM commands 'get and 'set to get/set .isYoung property of player's account (js/commands/targeting/get.js and set.js) Added new UOX.INI setting to enable/disable Young Player System (enabled by default): YOUNGPLAYERSYSTEM=1 If Young Player System is enabled, all newly created player accounts are automatically marked with Young flag Added new script to handle various restrictions and functions related to Young characters (js/player/young_player.js): Young characters will have [Young] displayed over their head Young characters will have their Young status checked and verified on every login + every stat/skill gain, to revoke the Young status if any of the following is true: Account has a total playtime of more than 40 hours Any character has more than 350 total (base) skill points Any character has more than 70 skill points in a single skill Any character has more than 150 total stat points Any character has more than 80 stat points in a single stat Young characters can renounce their Young status manually by saying the words "I renounce my young player status" Young characters get two additional items upon creation: a new player ticket (can be combined with any other players new player ticket for both players to get a reward) a sextant (shows Young players directions to nearest moongate/bank regardless of where they are, as long as outdoors) Young characters cannot target other player characters with hostile spells or skills Young characters cannot be the target of other player characters' hostile spells or skills Young characters can only cast beneficial spells upon themselves or other Young characters Young characters can only be the target of beneficial spells from other Young players Young players (and their pets/followers) cannot attack or harm any other players (or their pets/followers), nor themselves be attacked or harmed by any other players (or their pets/followers), whether from combat, spells, skills or items Young players don't lose any of their items on death, and are teleported to the nearest healer upon death with all their items intact Young players receive a warning upon entering dungeons that monsters there will be hostile Updated global script (js/server/global.js) to: Check/Verify Young status of players upon login Attach young player script on login/creation for players on Young accounts Give specific items to Young players upon creation Added new script (js/item/corpse.js) that is assigned to all freshly created corpses. This script handles restrictions related to Young players interactions with corpses, and the interactions of other players with corpses of Young players Updated JS Method .Carve() to return true/false depending on whether carving a corpse was successful Updated Healer AI in code to heal nearby injured Young players Updated Evil AI and Evil Caster AI in code to avoid selecting Young players as targets in combat outside of dungeons Added a new section to UOX.INI - [young player starting locations] - that can be used to define starting locations for Young players. If only one such location is provided, all players start there. Otherwise, it matches the same starting location setup as the regular one - with one entry per town in Britannia. Restricted transferring and/or friending of pets (code) and hirelings (hirelings.js) between Young and non-Young players Restricted Young players from recalling or gating to Felucca facet Young players can instantly logout from anywhere, at any time
2023-07-01 20:02:40 +08:00
case CACCOUNT_TOTALPLAYTIME: myAccount->wTotalPlayTime = static_cast<UI32>( encaps.toInt() ); break;
Fixes for Console behaviour on Linux and Windows, addition of JS properties for user accounts Fixed long-standing issue with UOX3 console not resetting terminal properly after shutdown on Linux, after updating cConsole.cpp/h to conform to standard unix terminal commands/settings for certain features (punt) Fixed an issue that could cause a crash on Windows when attempting to broadcast system messages from the UOX3 console (punt) Fixed an issue that prevented text input in UOX3 console for system broadcasts from being displayed on Linux and MacOS (punt) Added support for new JS Object - IUE_ACCOUNT - which can be accessed via character property .account. The following account properties have been exposed to the JS engine: .id // Account ID (Read-Only) .username // Account Username (Read-Only) .flags // Flags set on account (Read-Only) .comment // Comment/contact info .character1 // Character in account slot 1 (Read-Only) .character2 // Character in account slot 2 (Read-Only) .character3 // Character in account slot 3 (Read-Only) .character4 // Character in account slot 4 (Read-Only) .character5 // Character in account slot 5 (Read-Only) .character6 // Character in account slot 6 (Read-Only) .character7 // Character in account slot 7 (Read-Only) .currentChar // Currently logged in character (if any) (Read-Only) .lastIP // Last IP used to connect to account (Read-Only) // Flag shortcuts .isBanned // Is account banned? .isSuspended // Is account suspended? .isPublic // Is comment/contact info to be considered public info? .isOnline // Is account online? .isSlot1Blocked // Is character slot 1 blocked? .isSlot2Blocked // Is character slot 2 blocked? .isSlot3Blocked // Is character slot 3 blocked? .isSlot4Blocked // Is character slot 4 blocked? .isSlot5Blocked // Is character slot 5 blocked? .isSlot6Blocked // Is character slot 6 blocked? .isSlot7Blocked // Is character slot 7 blocked? .unused9 // Unused flag .unused10 // Unused flag .isSeer // Is account marked as Seer account? .isCounselor // Is account marked as Counselor account? .isGM // Is account marked as GM account? Fixed 'addaccount command - can now once again be used to add a new user account to the server from in-game. See accounts.adm for info on available flags. Syntax: 'addaccount [username] [password] [(optional)flags] Updated 'get command to allow retrieving certain account properties for targeted player characters: username, flags, comment, character1, character2, character3, character4, character5, character6, character7, lastIP, isBanned, isSuspended, isPublic, isOnline, isSlot1Blocked, isSlot2Blocked, isSlot3Blocked, isSlot4Blocked, isSlot5Blocked, isSlot6Blocked, isSlot7Blocked, unused9, unused10, isSeer, isCounselor and isGM Updated 'set command to allow setting certain account properties for targeted player characters: comment, password, isBanned, isSuspended, isPublic, isOnline, isSlot1Blocked, isSlot2Blocked, isSlot3Blocked, isSlot4Blocked, isSlot5Blocked, isSlot6Blocked, isSlot7Blocked, unused9, unused10, isSeer, isCounselor, isGM Updated 'tweak command to allow viewing and modifying of certain account properties for targeted player characters Note that any changes to account properties will not go into effect until a worldsave or manual save of accounts via console has taken place. Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2021-04-16 21:14:50 +08:00
case CACCOUNT_PASSWORD:
{
std::string newPass = encaps.toString();
if( newPass.length() > 3 )
{
Fixes for Console behaviour on Linux and Windows, addition of JS properties for user accounts Fixed long-standing issue with UOX3 console not resetting terminal properly after shutdown on Linux, after updating cConsole.cpp/h to conform to standard unix terminal commands/settings for certain features (punt) Fixed an issue that could cause a crash on Windows when attempting to broadcast system messages from the UOX3 console (punt) Fixed an issue that prevented text input in UOX3 console for system broadcasts from being displayed on Linux and MacOS (punt) Added support for new JS Object - IUE_ACCOUNT - which can be accessed via character property .account. The following account properties have been exposed to the JS engine: .id // Account ID (Read-Only) .username // Account Username (Read-Only) .flags // Flags set on account (Read-Only) .comment // Comment/contact info .character1 // Character in account slot 1 (Read-Only) .character2 // Character in account slot 2 (Read-Only) .character3 // Character in account slot 3 (Read-Only) .character4 // Character in account slot 4 (Read-Only) .character5 // Character in account slot 5 (Read-Only) .character6 // Character in account slot 6 (Read-Only) .character7 // Character in account slot 7 (Read-Only) .currentChar // Currently logged in character (if any) (Read-Only) .lastIP // Last IP used to connect to account (Read-Only) // Flag shortcuts .isBanned // Is account banned? .isSuspended // Is account suspended? .isPublic // Is comment/contact info to be considered public info? .isOnline // Is account online? .isSlot1Blocked // Is character slot 1 blocked? .isSlot2Blocked // Is character slot 2 blocked? .isSlot3Blocked // Is character slot 3 blocked? .isSlot4Blocked // Is character slot 4 blocked? .isSlot5Blocked // Is character slot 5 blocked? .isSlot6Blocked // Is character slot 6 blocked? .isSlot7Blocked // Is character slot 7 blocked? .unused9 // Unused flag .unused10 // Unused flag .isSeer // Is account marked as Seer account? .isCounselor // Is account marked as Counselor account? .isGM // Is account marked as GM account? Fixed 'addaccount command - can now once again be used to add a new user account to the server from in-game. See accounts.adm for info on available flags. Syntax: 'addaccount [username] [password] [(optional)flags] Updated 'get command to allow retrieving certain account properties for targeted player characters: username, flags, comment, character1, character2, character3, character4, character5, character6, character7, lastIP, isBanned, isSuspended, isPublic, isOnline, isSlot1Blocked, isSlot2Blocked, isSlot3Blocked, isSlot4Blocked, isSlot5Blocked, isSlot6Blocked, isSlot7Blocked, unused9, unused10, isSeer, isCounselor and isGM Updated 'set command to allow setting certain account properties for targeted player characters: comment, password, isBanned, isSuspended, isPublic, isOnline, isSlot1Blocked, isSlot2Blocked, isSlot3Blocked, isSlot4Blocked, isSlot5Blocked, isSlot6Blocked, isSlot7Blocked, unused9, unused10, isSeer, isCounselor, isGM Updated 'tweak command to allow viewing and modifying of certain account properties for targeted player characters Note that any changes to account properties will not go into effect until a worldsave or manual save of accounts via console has taken place. Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2021-04-16 21:14:50 +08:00
myAccount->sPassword = newPass;
}
Fixes for Console behaviour on Linux and Windows, addition of JS properties for user accounts Fixed long-standing issue with UOX3 console not resetting terminal properly after shutdown on Linux, after updating cConsole.cpp/h to conform to standard unix terminal commands/settings for certain features (punt) Fixed an issue that could cause a crash on Windows when attempting to broadcast system messages from the UOX3 console (punt) Fixed an issue that prevented text input in UOX3 console for system broadcasts from being displayed on Linux and MacOS (punt) Added support for new JS Object - IUE_ACCOUNT - which can be accessed via character property .account. The following account properties have been exposed to the JS engine: .id // Account ID (Read-Only) .username // Account Username (Read-Only) .flags // Flags set on account (Read-Only) .comment // Comment/contact info .character1 // Character in account slot 1 (Read-Only) .character2 // Character in account slot 2 (Read-Only) .character3 // Character in account slot 3 (Read-Only) .character4 // Character in account slot 4 (Read-Only) .character5 // Character in account slot 5 (Read-Only) .character6 // Character in account slot 6 (Read-Only) .character7 // Character in account slot 7 (Read-Only) .currentChar // Currently logged in character (if any) (Read-Only) .lastIP // Last IP used to connect to account (Read-Only) // Flag shortcuts .isBanned // Is account banned? .isSuspended // Is account suspended? .isPublic // Is comment/contact info to be considered public info? .isOnline // Is account online? .isSlot1Blocked // Is character slot 1 blocked? .isSlot2Blocked // Is character slot 2 blocked? .isSlot3Blocked // Is character slot 3 blocked? .isSlot4Blocked // Is character slot 4 blocked? .isSlot5Blocked // Is character slot 5 blocked? .isSlot6Blocked // Is character slot 6 blocked? .isSlot7Blocked // Is character slot 7 blocked? .unused9 // Unused flag .unused10 // Unused flag .isSeer // Is account marked as Seer account? .isCounselor // Is account marked as Counselor account? .isGM // Is account marked as GM account? Fixed 'addaccount command - can now once again be used to add a new user account to the server from in-game. See accounts.adm for info on available flags. Syntax: 'addaccount [username] [password] [(optional)flags] Updated 'get command to allow retrieving certain account properties for targeted player characters: username, flags, comment, character1, character2, character3, character4, character5, character6, character7, lastIP, isBanned, isSuspended, isPublic, isOnline, isSlot1Blocked, isSlot2Blocked, isSlot3Blocked, isSlot4Blocked, isSlot5Blocked, isSlot6Blocked, isSlot7Blocked, unused9, unused10, isSeer, isCounselor and isGM Updated 'set command to allow setting certain account properties for targeted player characters: comment, password, isBanned, isSuspended, isPublic, isOnline, isSlot1Blocked, isSlot2Blocked, isSlot3Blocked, isSlot4Blocked, isSlot5Blocked, isSlot6Blocked, isSlot7Blocked, unused9, unused10, isSeer, isCounselor, isGM Updated 'tweak command to allow viewing and modifying of certain account properties for targeted player characters Note that any changes to account properties will not go into effect until a worldsave or manual save of accounts via console has taken place. Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2021-04-16 21:14:50 +08:00
else
{
Fixes for Console behaviour on Linux and Windows, addition of JS properties for user accounts Fixed long-standing issue with UOX3 console not resetting terminal properly after shutdown on Linux, after updating cConsole.cpp/h to conform to standard unix terminal commands/settings for certain features (punt) Fixed an issue that could cause a crash on Windows when attempting to broadcast system messages from the UOX3 console (punt) Fixed an issue that prevented text input in UOX3 console for system broadcasts from being displayed on Linux and MacOS (punt) Added support for new JS Object - IUE_ACCOUNT - which can be accessed via character property .account. The following account properties have been exposed to the JS engine: .id // Account ID (Read-Only) .username // Account Username (Read-Only) .flags // Flags set on account (Read-Only) .comment // Comment/contact info .character1 // Character in account slot 1 (Read-Only) .character2 // Character in account slot 2 (Read-Only) .character3 // Character in account slot 3 (Read-Only) .character4 // Character in account slot 4 (Read-Only) .character5 // Character in account slot 5 (Read-Only) .character6 // Character in account slot 6 (Read-Only) .character7 // Character in account slot 7 (Read-Only) .currentChar // Currently logged in character (if any) (Read-Only) .lastIP // Last IP used to connect to account (Read-Only) // Flag shortcuts .isBanned // Is account banned? .isSuspended // Is account suspended? .isPublic // Is comment/contact info to be considered public info? .isOnline // Is account online? .isSlot1Blocked // Is character slot 1 blocked? .isSlot2Blocked // Is character slot 2 blocked? .isSlot3Blocked // Is character slot 3 blocked? .isSlot4Blocked // Is character slot 4 blocked? .isSlot5Blocked // Is character slot 5 blocked? .isSlot6Blocked // Is character slot 6 blocked? .isSlot7Blocked // Is character slot 7 blocked? .unused9 // Unused flag .unused10 // Unused flag .isSeer // Is account marked as Seer account? .isCounselor // Is account marked as Counselor account? .isGM // Is account marked as GM account? Fixed 'addaccount command - can now once again be used to add a new user account to the server from in-game. See accounts.adm for info on available flags. Syntax: 'addaccount [username] [password] [(optional)flags] Updated 'get command to allow retrieving certain account properties for targeted player characters: username, flags, comment, character1, character2, character3, character4, character5, character6, character7, lastIP, isBanned, isSuspended, isPublic, isOnline, isSlot1Blocked, isSlot2Blocked, isSlot3Blocked, isSlot4Blocked, isSlot5Blocked, isSlot6Blocked, isSlot7Blocked, unused9, unused10, isSeer, isCounselor and isGM Updated 'set command to allow setting certain account properties for targeted player characters: comment, password, isBanned, isSuspended, isPublic, isOnline, isSlot1Blocked, isSlot2Blocked, isSlot3Blocked, isSlot4Blocked, isSlot5Blocked, isSlot6Blocked, isSlot7Blocked, unused9, unused10, isSeer, isCounselor, isGM Updated 'tweak command to allow viewing and modifying of certain account properties for targeted player characters Note that any changes to account properties will not go into effect until a worldsave or manual save of accounts via console has taken place. Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2021-04-16 21:14:50 +08:00
return JS_FALSE;
}
Fixes for Console behaviour on Linux and Windows, addition of JS properties for user accounts Fixed long-standing issue with UOX3 console not resetting terminal properly after shutdown on Linux, after updating cConsole.cpp/h to conform to standard unix terminal commands/settings for certain features (punt) Fixed an issue that could cause a crash on Windows when attempting to broadcast system messages from the UOX3 console (punt) Fixed an issue that prevented text input in UOX3 console for system broadcasts from being displayed on Linux and MacOS (punt) Added support for new JS Object - IUE_ACCOUNT - which can be accessed via character property .account. The following account properties have been exposed to the JS engine: .id // Account ID (Read-Only) .username // Account Username (Read-Only) .flags // Flags set on account (Read-Only) .comment // Comment/contact info .character1 // Character in account slot 1 (Read-Only) .character2 // Character in account slot 2 (Read-Only) .character3 // Character in account slot 3 (Read-Only) .character4 // Character in account slot 4 (Read-Only) .character5 // Character in account slot 5 (Read-Only) .character6 // Character in account slot 6 (Read-Only) .character7 // Character in account slot 7 (Read-Only) .currentChar // Currently logged in character (if any) (Read-Only) .lastIP // Last IP used to connect to account (Read-Only) // Flag shortcuts .isBanned // Is account banned? .isSuspended // Is account suspended? .isPublic // Is comment/contact info to be considered public info? .isOnline // Is account online? .isSlot1Blocked // Is character slot 1 blocked? .isSlot2Blocked // Is character slot 2 blocked? .isSlot3Blocked // Is character slot 3 blocked? .isSlot4Blocked // Is character slot 4 blocked? .isSlot5Blocked // Is character slot 5 blocked? .isSlot6Blocked // Is character slot 6 blocked? .isSlot7Blocked // Is character slot 7 blocked? .unused9 // Unused flag .unused10 // Unused flag .isSeer // Is account marked as Seer account? .isCounselor // Is account marked as Counselor account? .isGM // Is account marked as GM account? Fixed 'addaccount command - can now once again be used to add a new user account to the server from in-game. See accounts.adm for info on available flags. Syntax: 'addaccount [username] [password] [(optional)flags] Updated 'get command to allow retrieving certain account properties for targeted player characters: username, flags, comment, character1, character2, character3, character4, character5, character6, character7, lastIP, isBanned, isSuspended, isPublic, isOnline, isSlot1Blocked, isSlot2Blocked, isSlot3Blocked, isSlot4Blocked, isSlot5Blocked, isSlot6Blocked, isSlot7Blocked, unused9, unused10, isSeer, isCounselor and isGM Updated 'set command to allow setting certain account properties for targeted player characters: comment, password, isBanned, isSuspended, isPublic, isOnline, isSlot1Blocked, isSlot2Blocked, isSlot3Blocked, isSlot4Blocked, isSlot5Blocked, isSlot6Blocked, isSlot7Blocked, unused9, unused10, isSeer, isCounselor, isGM Updated 'tweak command to allow viewing and modifying of certain account properties for targeted player characters Note that any changes to account properties will not go into effect until a worldsave or manual save of accounts via console has taken place. Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2021-04-16 21:14:50 +08:00
break;
}
case CACCOUNT_COMMENT:
myAccount->sContact = encaps.toString();
break;
case CACCOUNT_TIMEBAN:
{
UI32 timeBan = static_cast<UI32>( encaps.toInt() );
if( timeBan > 0 )
{
myAccount->wFlags.set( AB_FLAGS_BANNED, true );
myAccount->wTimeBan = GetMinutesSinceEpoch() + timeBan;
}
else
{
myAccount->wTimeBan = 0;
}
break;
}
Fixes for Console behaviour on Linux and Windows, addition of JS properties for user accounts Fixed long-standing issue with UOX3 console not resetting terminal properly after shutdown on Linux, after updating cConsole.cpp/h to conform to standard unix terminal commands/settings for certain features (punt) Fixed an issue that could cause a crash on Windows when attempting to broadcast system messages from the UOX3 console (punt) Fixed an issue that prevented text input in UOX3 console for system broadcasts from being displayed on Linux and MacOS (punt) Added support for new JS Object - IUE_ACCOUNT - which can be accessed via character property .account. The following account properties have been exposed to the JS engine: .id // Account ID (Read-Only) .username // Account Username (Read-Only) .flags // Flags set on account (Read-Only) .comment // Comment/contact info .character1 // Character in account slot 1 (Read-Only) .character2 // Character in account slot 2 (Read-Only) .character3 // Character in account slot 3 (Read-Only) .character4 // Character in account slot 4 (Read-Only) .character5 // Character in account slot 5 (Read-Only) .character6 // Character in account slot 6 (Read-Only) .character7 // Character in account slot 7 (Read-Only) .currentChar // Currently logged in character (if any) (Read-Only) .lastIP // Last IP used to connect to account (Read-Only) // Flag shortcuts .isBanned // Is account banned? .isSuspended // Is account suspended? .isPublic // Is comment/contact info to be considered public info? .isOnline // Is account online? .isSlot1Blocked // Is character slot 1 blocked? .isSlot2Blocked // Is character slot 2 blocked? .isSlot3Blocked // Is character slot 3 blocked? .isSlot4Blocked // Is character slot 4 blocked? .isSlot5Blocked // Is character slot 5 blocked? .isSlot6Blocked // Is character slot 6 blocked? .isSlot7Blocked // Is character slot 7 blocked? .unused9 // Unused flag .unused10 // Unused flag .isSeer // Is account marked as Seer account? .isCounselor // Is account marked as Counselor account? .isGM // Is account marked as GM account? Fixed 'addaccount command - can now once again be used to add a new user account to the server from in-game. See accounts.adm for info on available flags. Syntax: 'addaccount [username] [password] [(optional)flags] Updated 'get command to allow retrieving certain account properties for targeted player characters: username, flags, comment, character1, character2, character3, character4, character5, character6, character7, lastIP, isBanned, isSuspended, isPublic, isOnline, isSlot1Blocked, isSlot2Blocked, isSlot3Blocked, isSlot4Blocked, isSlot5Blocked, isSlot6Blocked, isSlot7Blocked, unused9, unused10, isSeer, isCounselor and isGM Updated 'set command to allow setting certain account properties for targeted player characters: comment, password, isBanned, isSuspended, isPublic, isOnline, isSlot1Blocked, isSlot2Blocked, isSlot3Blocked, isSlot4Blocked, isSlot5Blocked, isSlot6Blocked, isSlot7Blocked, unused9, unused10, isSeer, isCounselor, isGM Updated 'tweak command to allow viewing and modifying of certain account properties for targeted player characters Note that any changes to account properties will not go into effect until a worldsave or manual save of accounts via console has taken place. Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2021-04-16 21:14:50 +08:00
case CACCOUNT_BANNED: myAccount->wFlags.set( AB_FLAGS_BANNED, encaps.toBool() ); break;
case CACCOUNT_SUSPENDED: myAccount->wFlags.set( AB_FLAGS_SUSPENDED, encaps.toBool() ); break;
case CACCOUNT_PUBLIC: myAccount->wFlags.set( AB_FLAGS_PUBLIC, encaps.toBool() ); break;
case CACCOUNT_CHARSLOT1BLOCKED: myAccount->wFlags.set( AB_FLAGS_CHARACTER1, encaps.toBool() ); break;
case CACCOUNT_CHARSLOT2BLOCKED: myAccount->wFlags.set( AB_FLAGS_CHARACTER2, encaps.toBool() ); break;
case CACCOUNT_CHARSLOT3BLOCKED: myAccount->wFlags.set( AB_FLAGS_CHARACTER3, encaps.toBool() ); break;
case CACCOUNT_CHARSLOT4BLOCKED: myAccount->wFlags.set( AB_FLAGS_CHARACTER4, encaps.toBool() ); break;
case CACCOUNT_CHARSLOT5BLOCKED: myAccount->wFlags.set( AB_FLAGS_CHARACTER5, encaps.toBool() ); break;
case CACCOUNT_CHARSLOT6BLOCKED: myAccount->wFlags.set( AB_FLAGS_CHARACTER6, encaps.toBool() ); break;
case CACCOUNT_CHARSLOT7BLOCKED: myAccount->wFlags.set( AB_FLAGS_CHARACTER7, encaps.toBool() ); break;
UOX3 0.99.6-RC6 Removed arbitrary and hidden restrictions on refreshing list of online players shown with 'wholist command Fixed an issue where player ghosts that get teleported would not see themselves get updated to new location Fixed a server crash from clients disconnecting while running server in debug mode Improved how container updates are sent to players; now only sends to clients that have actually opened the container, and who are still within range Added more information about UO data files being loaded during server startup Enhanced the GM 'add menu to allow clicking directly on images of items/npcs to add them, and adjusted size of menus to accommodate this Fixed an issue with fleeing NPCs that could cause them to attempt to flee across time and space, regardless of distance to target/attacker in combat Added NPC AI that runs away from players if they get too close (even outside combat). Applied to hind, rabbits, squirrels, ferrets and various birds by default: AI_ANIMAL_SCARED (aitype 12) Fixed issues with NPCs fleeing forever, or getting stuck in flee/don't flee loop, by introducing max fleeing distance (50 tiles) and cooldown (30 sec) on fleeing Updated onNameRequest JS Event to include third parameter with origin of name request, so script responses can be tailored appropriately: onNameRequest( myObj, requestedBy, requestSource ) Potential values for requestSource: 0 - Speech/System Messages 1 - Guild Menus 2 - Stat Window (self) 3 - Stat Window (other) 4 - Tooltip 5 - Paperdoll Journal 6 - Paperdoll 7 - Single Click / All-Names 8 - System 9 - Secure Trade Window Added Adaptive Performance System (APS) that dynamically adjust how often NPC AI/movement is checked based on overall shard performance. If performance drops below defined threshold, UOX3 gradually slows down checks for NPC AI/movement to prioritize player movement/speech/command responsiveness. If performance climbs back up above threshold, slowdowns are gradually removed. The following UOX.INI options have been added under [system] category to support this system: APSPERFTHRESHOLD=50 // Performance threshold (measured in simulation cycles/sec) below which the APS kicks in APSINTERVAL=100 // How often (in milliseconds) the APS checks performance and makes adjustments (if needed) to balance out shard performance APSDELAYSTEP=50 // How much the delay timer is modified by (in milliseconds) each time APS makes adjustments APSDELAYMAXCAP=2000 // Max amount of of delay APS can introduce for NPC AI/movement handling when attempting to restore shard performance Added new JS Methods for Region objects: .GetOrePrefs( oreType ) // Get ore preference data for ore type found in town region. Returned as an array containing the following data: orePrefData -> [ oreName, // name of ore color, // color of ore minskill, // min skill to mine ore ingotName, // name of ingot created from ore makemenu, // makemenu entry for crafting something from ingot oreChance, // default global chance of finding this ore type scriptID // script attached to mined ore ], orePrefChance // Chance of finding this ore type in given town region .GetOreChance() // Get base chance of finding any ore in town region Moved Mining skill plus gravedigging feature from hard code to scripts (js/skill/mining.js) to make it easier to maintain and/or customize, and removed hard coded variants Gravedigging now relies on the ore resource system behind the scenes to restrict how often graves in a given area can be dug up Fixed some incorrect references to .worldNumber Character property in misc scripts (should be .worldnumber) Made some "hard-scripted" system messages in misc scripts use dictionary system instead Added spawn region for banker NPCs in Serpent's Hold (dfndata/spawn/felucca/spawn_town_serpents_hold.dfn, dfndata/spawn/trammel/spawn_town_serpents_hold.dfn) Fixed region definition of Ocllo to actually cover the entire town (dfndata/regions/regions.dfn) Added numerous additional locations accessible with 'goplace # command, for key locations in Ilshenar, Malas, Tokuno Islands and Ter Mur (dfndata/location/location.dfn) Revised travel-menu portion of GM menu (shortcut: 'travel) to include more travel options based on new locations (dfndata/items/travelmenu.dfn and travelmenu.bulk.dfn) Fixed an issue where NPCs could attempt to attack targets in other worlds/instances Added new JS Event that triggers for characters who are about to deal damage in combat. Complimentary to onDamage, which triggers for chars receiving damage: onDamageDeal( dmgDealer, dmgReceiver, damageValue, damageType ) Added new JS Event that can trigger in global script upon creation of new player chars. Note that this will trigger in place of onCreateDFN event for player characters: onCreatePlayer( pChar ) Added new JS Event that triggers for characters selecting a target with a spell. Complimentary to onSpellTarget, which triggers for targets selected with a spell: onSpellTargetSelect( caster, target, spellNum ) Updated onCombatStart and onCombatEnd JS Events to also trigger for the other party in combat Updated onPickup JS Event to include a third parameter - the potential container item was picked up from. Event now also triggers event in scripts attached to said containers: onPickup( iPickedUp, pChar, iCont ) Added tracking of total playtime per individual character, and per account across all characters, and exposed these properties to JS engine: .totalPlayTime // Account property, total playtime across all chars .playTime // Character property, total playtime on given character only Added new player-accessible command ('playtime) to spit out the playtime of current character/account as a whole (js/commands/playtime.js) Implemented first version of Young Player System: Replaced the UNUSED9 account flag with YOUNG, to be used by Young/New Player System Added new JS Account property that gets/sets whether player account is considered Young: .isYoung Added new Char timers: TIMER_YOUNGHEAL // Restricts how often Young players are healed by NPC healers TIMER_YOUNGMESSAGE // Restricts how often Young players are warned about dangerous looking monsters in overworld Updated GM commands 'get and 'set to get/set .isYoung property of player's account (js/commands/targeting/get.js and set.js) Added new UOX.INI setting to enable/disable Young Player System (enabled by default): YOUNGPLAYERSYSTEM=1 If Young Player System is enabled, all newly created player accounts are automatically marked with Young flag Added new script to handle various restrictions and functions related to Young characters (js/player/young_player.js): Young characters will have [Young] displayed over their head Young characters will have their Young status checked and verified on every login + every stat/skill gain, to revoke the Young status if any of the following is true: Account has a total playtime of more than 40 hours Any character has more than 350 total (base) skill points Any character has more than 70 skill points in a single skill Any character has more than 150 total stat points Any character has more than 80 stat points in a single stat Young characters can renounce their Young status manually by saying the words "I renounce my young player status" Young characters get two additional items upon creation: a new player ticket (can be combined with any other players new player ticket for both players to get a reward) a sextant (shows Young players directions to nearest moongate/bank regardless of where they are, as long as outdoors) Young characters cannot target other player characters with hostile spells or skills Young characters cannot be the target of other player characters' hostile spells or skills Young characters can only cast beneficial spells upon themselves or other Young characters Young characters can only be the target of beneficial spells from other Young players Young players (and their pets/followers) cannot attack or harm any other players (or their pets/followers), nor themselves be attacked or harmed by any other players (or their pets/followers), whether from combat, spells, skills or items Young players don't lose any of their items on death, and are teleported to the nearest healer upon death with all their items intact Young players receive a warning upon entering dungeons that monsters there will be hostile Updated global script (js/server/global.js) to: Check/Verify Young status of players upon login Attach young player script on login/creation for players on Young accounts Give specific items to Young players upon creation Added new script (js/item/corpse.js) that is assigned to all freshly created corpses. This script handles restrictions related to Young players interactions with corpses, and the interactions of other players with corpses of Young players Updated JS Method .Carve() to return true/false depending on whether carving a corpse was successful Updated Healer AI in code to heal nearby injured Young players Updated Evil AI and Evil Caster AI in code to avoid selecting Young players as targets in combat outside of dungeons Added a new section to UOX.INI - [young player starting locations] - that can be used to define starting locations for Young players. If only one such location is provided, all players start there. Otherwise, it matches the same starting location setup as the regular one - with one entry per town in Britannia. Restricted transferring and/or friending of pets (code) and hirelings (hirelings.js) between Young and non-Young players Restricted Young players from recalling or gating to Felucca facet Young players can instantly logout from anywhere, at any time
2023-07-01 20:02:40 +08:00
case CACCOUNT_YOUNG: myAccount->wFlags.set( AB_FLAGS_YOUNG, encaps.toBool() ); break;
Fixes for Console behaviour on Linux and Windows, addition of JS properties for user accounts Fixed long-standing issue with UOX3 console not resetting terminal properly after shutdown on Linux, after updating cConsole.cpp/h to conform to standard unix terminal commands/settings for certain features (punt) Fixed an issue that could cause a crash on Windows when attempting to broadcast system messages from the UOX3 console (punt) Fixed an issue that prevented text input in UOX3 console for system broadcasts from being displayed on Linux and MacOS (punt) Added support for new JS Object - IUE_ACCOUNT - which can be accessed via character property .account. The following account properties have been exposed to the JS engine: .id // Account ID (Read-Only) .username // Account Username (Read-Only) .flags // Flags set on account (Read-Only) .comment // Comment/contact info .character1 // Character in account slot 1 (Read-Only) .character2 // Character in account slot 2 (Read-Only) .character3 // Character in account slot 3 (Read-Only) .character4 // Character in account slot 4 (Read-Only) .character5 // Character in account slot 5 (Read-Only) .character6 // Character in account slot 6 (Read-Only) .character7 // Character in account slot 7 (Read-Only) .currentChar // Currently logged in character (if any) (Read-Only) .lastIP // Last IP used to connect to account (Read-Only) // Flag shortcuts .isBanned // Is account banned? .isSuspended // Is account suspended? .isPublic // Is comment/contact info to be considered public info? .isOnline // Is account online? .isSlot1Blocked // Is character slot 1 blocked? .isSlot2Blocked // Is character slot 2 blocked? .isSlot3Blocked // Is character slot 3 blocked? .isSlot4Blocked // Is character slot 4 blocked? .isSlot5Blocked // Is character slot 5 blocked? .isSlot6Blocked // Is character slot 6 blocked? .isSlot7Blocked // Is character slot 7 blocked? .unused9 // Unused flag .unused10 // Unused flag .isSeer // Is account marked as Seer account? .isCounselor // Is account marked as Counselor account? .isGM // Is account marked as GM account? Fixed 'addaccount command - can now once again be used to add a new user account to the server from in-game. See accounts.adm for info on available flags. Syntax: 'addaccount [username] [password] [(optional)flags] Updated 'get command to allow retrieving certain account properties for targeted player characters: username, flags, comment, character1, character2, character3, character4, character5, character6, character7, lastIP, isBanned, isSuspended, isPublic, isOnline, isSlot1Blocked, isSlot2Blocked, isSlot3Blocked, isSlot4Blocked, isSlot5Blocked, isSlot6Blocked, isSlot7Blocked, unused9, unused10, isSeer, isCounselor and isGM Updated 'set command to allow setting certain account properties for targeted player characters: comment, password, isBanned, isSuspended, isPublic, isOnline, isSlot1Blocked, isSlot2Blocked, isSlot3Blocked, isSlot4Blocked, isSlot5Blocked, isSlot6Blocked, isSlot7Blocked, unused9, unused10, isSeer, isCounselor, isGM Updated 'tweak command to allow viewing and modifying of certain account properties for targeted player characters Note that any changes to account properties will not go into effect until a worldsave or manual save of accounts via console has taken place. Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2021-04-16 21:14:50 +08:00
case CACCOUNT_UNUSED10: myAccount->wFlags.set( AB_FLAGS_UNUSED10, encaps.toBool() ); break;
case CACCOUNT_SEER: myAccount->wFlags.set( AB_FLAGS_SEER, encaps.toBool() ); break;
case CACCOUNT_COUNSELOR: myAccount->wFlags.set( AB_FLAGS_COUNSELOR, encaps.toBool() ); break;
case CACCOUNT_GM: myAccount->wFlags.set( AB_FLAGS_GM, encaps.toBool() ); break;
default:
break;
}
}
UOX3 0.99.6-RC4 Fixed an issue that prevented onBuyFromVendor() and onBoughtFromVendor() JS Events from triggering when attached to NPC shopkeepers Fixed an issue with help gump that prevented password management section from working as intended (js/server/misc/helpgump.js) Fixed an issue where UOX3 would fail to load pre-HS multi.mul files Added chess board to Misc->Games add menu (dfndata/items/ItemMenu.bulk.dfn) Fixed an issue with 'move (alias for 'telestuff) command that referenced the wrong variable name (js/commands/targeting/tele.js) When a player is teleported via the GM 'wholist menu, any pets within range are now also brought along for the ride Consolidated error-reporting for JS Functions, Object Methods and Object Properties to provide more context (scriptID, filename, line number) when something goes wrong Added some missing shield IDs (0xA649, 0xA64A, 0xA831, 0xA832) to IsShieldType() function MAXRANGE item property previously only worked for ranged weapons; now it works for melee weapons too, and potentially allows melee weapons with combat range longer than 1 tile MAXRANGE item property can now be used to define max combat range for melee weapons Fixed an issue (non-critical) with .PlaceInPack() JS Method that would cause UOX3 to try adding items marked for deletion to refreshQueue and spam console with errors Added missing AI scripts to summoned Blade Spirits and Energy Vortexes (dfndata/npc/magicsummon.dfn) Fixed an issue with weight calculation for hireling backpacks (js/npc/ai/hireling.js) Fixed an issue with the 'fix command, which would in most cases set character's Z to -1 regardless of location, but now adheres to map elevation instead Fixed an issue with Pack AI (js/npc/ai/pack_ai.js) that prevented pack members from attacking target correctly (thanks Dragon Slayer) Fixed an issue with DoesMapBlock JS Function that incorrectly checked for 6 function arguments, when it actually requires 8 Fixed an issue with DoesDynamicBlock JS Function that incorrectly checked for 8 function arguments, when it actually requires 9 Fixed an issue with runebook script (js/item/runebook.js) that prevented players from being able to use recall charges without having spellbook with spell in inventory Fixed issues with placement of tall items on ground/floor, and with stacking of items in houses Fixed incorrect alias for woodland armor (dfndata/items/gear/armor/other/armor/wood.dfn - thanks Dragon Slayer) Fixed a critical issue with script context sometimes changing while executing a script, because of events in other scripts being triggered. Affected scripts can be safeguarded against this by the addition of a dummy callback function anywhere in the script: function _restorecontext_() {} Fixed an issue with non-animal pets not gaining loyalty when being fed (thanks Dragon Slayer) Added new JS Object Methods for Chars/Items/Multis to fetch list of custom tags associated with object: .GetTagMap() // Gets list of persistent custom tags associated with object .GetTempTagMap() // Gets list of temporary custom tags associated with object Added new JS commands ('GETTAGMAP and 'GETTEMPTAGMAP) that spits out details of custom tags associated with targeted object (js/commands/custom/misc-cmd.js) Added new JS command ('USEITEM) that acts as a short-cut for double-clicking on targeted item (js/commands/custom/misc-cmd.js) Updated 'ADD # and 'ADD ITEM # JS commands to support targeting a container directly and adding the new item inside (js/commands/targeting/add.js) Updated axe script to only perform lumberjacking skill-check when there's still wood available in a given area, and to play appropriate animations for Gargoyle players (js/item/axe.js) Updated script for gameboards to make generated pieces newbiefied so they won't appear on ground if board decays (js/item/gameboards.js) Updated script for stablemasters to avoid relying on global variables (js/npc/ai/stablemaster.js) Updated names of items crafted with runic hammers to include the material name of the hammers used to craft them (js/skill/craft/crafting_complete.js) Fixed a small issue with Detect Hidden skill that would return the wrong message if players found anyone hiding nearby (js/skill/detecthidden.js) Fixed an issue that prevented tile overrides in dfndata/maps/tiles.dfn from loading properly Added entries for a couple of walls with missing no-shoot flags to tile overrides in dfndata/maps/tiles.dfn Updated JS Method .SoundEffect() to support optional third argument (creatureSoundNum) to play creature-defined sounds from dfndata/creatures/creatures.dfn. New syntax: .SoundEffect( soundID, allHear[, creatureSoundNum] ) // 0=SOUND_STARTATTACK, 1=SOUND_IDLE, 2=SOUND_ATTACK, 3=SOUND_DEFEND, 4=SOUND_DIE Added new Character JS Methods: .SetRandomName( nameListID ) // apply a random name from specified namelist to character .FindItemSection( sectionID ) // find item in player's backpack with specified sectionID Added new Socket JS Method: .OpenContainer() // Opens specified container for socket
2023-05-30 01:47:26 +08:00
Fixes for Console behaviour on Linux and Windows, addition of JS properties for user accounts Fixed long-standing issue with UOX3 console not resetting terminal properly after shutdown on Linux, after updating cConsole.cpp/h to conform to standard unix terminal commands/settings for certain features (punt) Fixed an issue that could cause a crash on Windows when attempting to broadcast system messages from the UOX3 console (punt) Fixed an issue that prevented text input in UOX3 console for system broadcasts from being displayed on Linux and MacOS (punt) Added support for new JS Object - IUE_ACCOUNT - which can be accessed via character property .account. The following account properties have been exposed to the JS engine: .id // Account ID (Read-Only) .username // Account Username (Read-Only) .flags // Flags set on account (Read-Only) .comment // Comment/contact info .character1 // Character in account slot 1 (Read-Only) .character2 // Character in account slot 2 (Read-Only) .character3 // Character in account slot 3 (Read-Only) .character4 // Character in account slot 4 (Read-Only) .character5 // Character in account slot 5 (Read-Only) .character6 // Character in account slot 6 (Read-Only) .character7 // Character in account slot 7 (Read-Only) .currentChar // Currently logged in character (if any) (Read-Only) .lastIP // Last IP used to connect to account (Read-Only) // Flag shortcuts .isBanned // Is account banned? .isSuspended // Is account suspended? .isPublic // Is comment/contact info to be considered public info? .isOnline // Is account online? .isSlot1Blocked // Is character slot 1 blocked? .isSlot2Blocked // Is character slot 2 blocked? .isSlot3Blocked // Is character slot 3 blocked? .isSlot4Blocked // Is character slot 4 blocked? .isSlot5Blocked // Is character slot 5 blocked? .isSlot6Blocked // Is character slot 6 blocked? .isSlot7Blocked // Is character slot 7 blocked? .unused9 // Unused flag .unused10 // Unused flag .isSeer // Is account marked as Seer account? .isCounselor // Is account marked as Counselor account? .isGM // Is account marked as GM account? Fixed 'addaccount command - can now once again be used to add a new user account to the server from in-game. See accounts.adm for info on available flags. Syntax: 'addaccount [username] [password] [(optional)flags] Updated 'get command to allow retrieving certain account properties for targeted player characters: username, flags, comment, character1, character2, character3, character4, character5, character6, character7, lastIP, isBanned, isSuspended, isPublic, isOnline, isSlot1Blocked, isSlot2Blocked, isSlot3Blocked, isSlot4Blocked, isSlot5Blocked, isSlot6Blocked, isSlot7Blocked, unused9, unused10, isSeer, isCounselor and isGM Updated 'set command to allow setting certain account properties for targeted player characters: comment, password, isBanned, isSuspended, isPublic, isOnline, isSlot1Blocked, isSlot2Blocked, isSlot3Blocked, isSlot4Blocked, isSlot5Blocked, isSlot6Blocked, isSlot7Blocked, unused9, unused10, isSeer, isCounselor, isGM Updated 'tweak command to allow viewing and modifying of certain account properties for targeted player characters Note that any changes to account properties will not go into effect until a worldsave or manual save of accounts via console has taken place. Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2021-04-16 21:14:50 +08:00
return JS_TRUE;
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
}
2002-04-07 20:53:41 +00:00
2025-03-28 13:23:59 +10:00
JSBool CConsoleProps_getProperty( JSContext *cx, JSObject *obj, jsid id, jsval *vp )
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
{
if( JSID_IS_INT( id ))
2002-04-07 20:53:41 +00:00
{
switch( JSID_TO_INT( id ))
2002-04-07 20:53:41 +00:00
{
case CCONSOLE_MODE: *vp = INT_TO_JSVAL( Console.CurrentMode() ); break;
case CCONSOLE_LOGECHO: *vp = INT_TO_JSVAL( Console.LogEcho() ); break;
default:
break;
2002-04-07 20:53:41 +00:00
}
}
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
return JS_TRUE;
}
2002-04-07 20:53:41 +00:00
JSBool CConsoleProps_setProperty( JSContext* cx, JSObject* obj, jsid id, JSBool strict, jsval* vp )
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
{
JSEncapsulate encaps( cx, vp );
2025-04-07 14:11:13 +10:00
UI16 propID = getScriptID( cx, id, JSP_CONSOLE );
if( propID != 0xFFFF )
2002-04-07 20:53:41 +00:00
{
2025-04-07 14:11:13 +10:00
switch( propID )
2002-04-07 20:53:41 +00:00
{
case CCONSOLE_MODE: Console.CurrentMode( encaps.toInt() ); break;
case CCONSOLE_LOGECHO: Console.LogEcho( encaps.toBool() ); break;
default:
break;
2002-04-07 20:53:41 +00:00
}
}
UOX3 0.99.6-RC4 Fixed an issue that prevented onBuyFromVendor() and onBoughtFromVendor() JS Events from triggering when attached to NPC shopkeepers Fixed an issue with help gump that prevented password management section from working as intended (js/server/misc/helpgump.js) Fixed an issue where UOX3 would fail to load pre-HS multi.mul files Added chess board to Misc->Games add menu (dfndata/items/ItemMenu.bulk.dfn) Fixed an issue with 'move (alias for 'telestuff) command that referenced the wrong variable name (js/commands/targeting/tele.js) When a player is teleported via the GM 'wholist menu, any pets within range are now also brought along for the ride Consolidated error-reporting for JS Functions, Object Methods and Object Properties to provide more context (scriptID, filename, line number) when something goes wrong Added some missing shield IDs (0xA649, 0xA64A, 0xA831, 0xA832) to IsShieldType() function MAXRANGE item property previously only worked for ranged weapons; now it works for melee weapons too, and potentially allows melee weapons with combat range longer than 1 tile MAXRANGE item property can now be used to define max combat range for melee weapons Fixed an issue (non-critical) with .PlaceInPack() JS Method that would cause UOX3 to try adding items marked for deletion to refreshQueue and spam console with errors Added missing AI scripts to summoned Blade Spirits and Energy Vortexes (dfndata/npc/magicsummon.dfn) Fixed an issue with weight calculation for hireling backpacks (js/npc/ai/hireling.js) Fixed an issue with the 'fix command, which would in most cases set character's Z to -1 regardless of location, but now adheres to map elevation instead Fixed an issue with Pack AI (js/npc/ai/pack_ai.js) that prevented pack members from attacking target correctly (thanks Dragon Slayer) Fixed an issue with DoesMapBlock JS Function that incorrectly checked for 6 function arguments, when it actually requires 8 Fixed an issue with DoesDynamicBlock JS Function that incorrectly checked for 8 function arguments, when it actually requires 9 Fixed an issue with runebook script (js/item/runebook.js) that prevented players from being able to use recall charges without having spellbook with spell in inventory Fixed issues with placement of tall items on ground/floor, and with stacking of items in houses Fixed incorrect alias for woodland armor (dfndata/items/gear/armor/other/armor/wood.dfn - thanks Dragon Slayer) Fixed a critical issue with script context sometimes changing while executing a script, because of events in other scripts being triggered. Affected scripts can be safeguarded against this by the addition of a dummy callback function anywhere in the script: function _restorecontext_() {} Fixed an issue with non-animal pets not gaining loyalty when being fed (thanks Dragon Slayer) Added new JS Object Methods for Chars/Items/Multis to fetch list of custom tags associated with object: .GetTagMap() // Gets list of persistent custom tags associated with object .GetTempTagMap() // Gets list of temporary custom tags associated with object Added new JS commands ('GETTAGMAP and 'GETTEMPTAGMAP) that spits out details of custom tags associated with targeted object (js/commands/custom/misc-cmd.js) Added new JS command ('USEITEM) that acts as a short-cut for double-clicking on targeted item (js/commands/custom/misc-cmd.js) Updated 'ADD # and 'ADD ITEM # JS commands to support targeting a container directly and adding the new item inside (js/commands/targeting/add.js) Updated axe script to only perform lumberjacking skill-check when there's still wood available in a given area, and to play appropriate animations for Gargoyle players (js/item/axe.js) Updated script for gameboards to make generated pieces newbiefied so they won't appear on ground if board decays (js/item/gameboards.js) Updated script for stablemasters to avoid relying on global variables (js/npc/ai/stablemaster.js) Updated names of items crafted with runic hammers to include the material name of the hammers used to craft them (js/skill/craft/crafting_complete.js) Fixed a small issue with Detect Hidden skill that would return the wrong message if players found anyone hiding nearby (js/skill/detecthidden.js) Fixed an issue that prevented tile overrides in dfndata/maps/tiles.dfn from loading properly Added entries for a couple of walls with missing no-shoot flags to tile overrides in dfndata/maps/tiles.dfn Updated JS Method .SoundEffect() to support optional third argument (creatureSoundNum) to play creature-defined sounds from dfndata/creatures/creatures.dfn. New syntax: .SoundEffect( soundID, allHear[, creatureSoundNum] ) // 0=SOUND_STARTATTACK, 1=SOUND_IDLE, 2=SOUND_ATTACK, 3=SOUND_DEFEND, 4=SOUND_DIE Added new Character JS Methods: .SetRandomName( nameListID ) // apply a random name from specified namelist to character .FindItemSection( sectionID ) // find item in player's backpack with specified sectionID Added new Socket JS Method: .OpenContainer() // Opens specified container for socket
2023-05-30 01:47:26 +08:00
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
return JS_TRUE;
}
2002-04-07 20:53:41 +00:00
2025-03-28 13:23:59 +10:00
JSBool CScriptSectionProps_getProperty( JSContext *cx, JSObject *obj, jsid id, jsval *vp )
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
{
CScriptSection *gPriv = static_cast<CScriptSection *>( JS_GetPrivate( cx, obj ));
2021-06-12 07:30:23 -04:00
if( gPriv == nullptr )
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
return JS_FALSE;
UI16 propID = getScriptID( cx, id, JSP_CONSOLE );
if( propID != 0xFFFF )
2002-04-07 20:53:41 +00:00
{
switch( propID )
2002-04-07 20:53:41 +00:00
{
case CSS_NUMTAGS: *vp = INT_TO_JSVAL( gPriv->NumEntries() ); break;
case CSS_ATEND: *vp = BOOLEAN_TO_JSVAL( gPriv->AtEnd() ); break;
case CSS_ATENDTAGS: *vp = BOOLEAN_TO_JSVAL( gPriv->AtEndTags() ); break;
default:
break;
2002-04-07 20:53:41 +00:00
}
}
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
return JS_TRUE;
}
2002-04-07 20:53:41 +00:00
JSBool CScriptSectionProps_setProperty( JSContext* cx, JSObject* obj, jsid id, JSBool strict, jsval* vp )
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
{
return JS_TRUE;
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
}
2002-04-07 20:53:41 +00:00
JSBool CResourceProps_setProperty( JSContext* cx, JSObject* obj, jsid id, JSBool strict, jsval* vp )
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
{
MapResource_st *gPriv = static_cast<MapResource_st*>( JS_GetPrivate( cx, obj ));
2021-06-12 07:30:23 -04:00
if( gPriv == nullptr )
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
return JS_FALSE;
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
JSEncapsulate encaps( cx, vp );
2025-04-07 14:11:13 +10:00
UI16 propID = getScriptID( cx, id, JSP_RESOURCE );
if( propID != 0xFFFF )
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
{
2025-04-07 14:11:13 +10:00
switch( propID )
{
UOX3 0.99.5b-6 Increased world load speed by almost 20% by reducing how often loading progress is written to the console Increased world save speed by almost 50% through the use of binary mode and buffer tweaks for ofstream combined with a cached newline char and std::to_string instead of static_cast Fixed a server crash involving killing NPCs of a specific spawn region using the 'spawnkill # command Fixed a server crash involving moving items from decaying corpses to the ground Fixed a server crash involving carving up human corpses Fixed a server crash related to AreaCharacterFunction JS function, which could trigger for any script that potentially kills any NPC this function iterates over (like explosion potions) Fixed a server crash related to GMs attempting to add items from add-menu while having no backpack Fixed a client crash issue caused by attempting to sell house deeds back to architect NPCs Fixed an issue where players would get incorrect amounts of gold for selling house deeds back to architect NPCs Fixed an issue with characters dying onboard boats which prevented players from packing up the boats later Added new item property in code (via bools bitset) that can be used to enable/disable maker's mark on crafted items. This property can be set to true for items crafted at exceptional quality by GM craftsmen Exposed the new item property to JS engine: .isMarkedByMaker // If true, maker's mark will be displayed Updated default item tooltip to display " of exceptional quality" for items crafted with exceptional quality Updated default item tooltip to display "[Crafted] by [Crafter's Name]" for exceptional quality items crafted by GM craftsmen. The [Crafted] text comes from the MADEWORD defined in dfndata/skills/skills.dfn for the primary skill used to craft the item Updated old-school single-click names for items (when AoS bit is disabled in client/server features) to display exceptional status and/or maker's mark for appropriate items Fixed an issue with the display of titles for NPCs that used dictionary lookups for their title Added new UOX.INI settings under the [settings] section: DISPLAYMAKERSMARK=1/0 // Controls if maker's marks on crafted items are shown on a global level SHOWNPCTITLESOVERHEAD=1/0 // Controls whether NPC titles are shown over their heads SHOWINVULNERABLETAGOVERHEAD=0/1 // Controls whether invulnerable tags are shown overhead GLOBALRESTOCKMULTIPLIER=1.0 // Global multiplier applied to RESTOCK property of items when loaded from DFNs Added new UOX.INI settings under the [combat] section: PETCOMBATTRAINING=1/0 // Controls whether pets can gain skills/stats from combat HIRELINGCOMBATTRAINING=1/0 // Controls whether hirelings can gain skills/stats from combat NPCCOMBATTRAINING=0/1 // Controls whether NPCs in general can gain skills/stats from combat Fixed an issue where a player meeting the exact minimum requirements for crafting an item would always fail Fixed a bug with teleporting off boats to valid nearby locations when double-clicking boat planks while standing on it Updated behaviour of planks on boats: Boat key can unlock plank, but won't automatically open it Boat key used on an open, unlocked plank will lock and automatically close the plank Boat key used on an open, locked plank will unlock the plank and leave it open Player using an unlocked plank now opens it Player using an open plank will disembark (if onboard) or embark (if not) the boat Player can always open a locked plank if they're on the boat, even with no key, to allow disembarking the boat. Planks that are open, but locked cannot be accessed from outside the boat, and will close automatically after five of seconds Updated behaviour of Magic Lock/Unlock spells: Magic Lock cannot be used on objects inside a multi Magic Lock applies difficulty to lock based on caster's Magery skill Magic Lock effect will last between 7 to 50 seconds (depending on caster's Magery skill) Any object that can be locked via Magic Lock spell can also be unlocked via Magic Unlock spell, if caster has high enough Magery skill Fixed a bug where certain JS Functions, Methods and Properties would occasionally pass incorrect values to scripts that called upon them. Scripts that rely on the GetCurrentClock() Function, the .GetTimer() Method, .decayTime, .logTime, .oreTime and .fishTime Properties might need to be updated to account for the fix, which causes larger values to be passed in than before. Fixed a bug related to GetCurrentClock() that caused decay and respawning of dungeon chests from working properly Fixed a bug related to GetCurrentClock() and .logTime/.fishTime that prevented consumption and regeneration of log/fish resources from working properly Added a new JS Function: GetStartTime() // Returns a timestamp for when server started up Fixed a bug related to GetCurrentClock() where server uptime stats in help menu was showing up incorrectly Fixed a bug related to GetCurrentClock() and purging of registrations of visitors in public houses so their visits can be counted again later Fixed a bug related to GetCurrentClock() that caused monster speech to not work properly Fixed a Z-related issue that sometimes prevented players from fishing when standing on the shoreline next to the sea Fixed an issue with Animal Lore skill that would always return a pet's loyalty level as "Wild" Increased max range pets can be from their owner in order to still be included in moongate/teleporter travel from 12 to 24 tiles Fixed an issue where the alchemy bonus damage for explosion potions was off by an order of magnitude Fixed an issue where food IDs from foodlists referenced by other foodlists was not detected as valid food for tamed pets or NPCs Fixed an issue where Alchemy crafting skill did not properly check for the existence of the crafting tool before proceeding with the crafting process Fixed an issue that prevented the Teleport spell from working as intended Fixed an issue where players would still get 1 gold even if STARTGOLD in uox.ini was set to 0 Fixed an issue with mount restrictions script that prevented players from mounting Unicorns, Ki-rins and Cu Sidhes Fixed an issue where aggressive creatures wouldn't stop attacking player after being tamed (js/skill/taming.js) Added a system message to inform the player when they've dropped out of stealth due to taking too many steps Fixed an issue where hunger level of NPCs instantly dropped upon spawning because hunger timer was not active yet Fixed a bug where character corpses would appear with a [unidentified] tag attached Fixed an issue where the [unidentified] tag did not show up for unidentified magic items Added ANIMAL tag to a small bunch of creature definitions (dfndata/creatures/creatures.dfn) Fixed an issue with Bowcraft skill where player could not gain enough skill from crafting bows to reach min requirement for crossbows, and similiarly could not reach min requirement for heavy crossbows from crossbows Updated default value of MURDERDECAYTIMER INI setting from 60 seconds to 28800 seconds (8 hours), to match the amount of time it would take for one (short term) murder count to decay on LBR-era OSI shards.
2022-08-25 02:13:00 +08:00
case CRESP_LOGAMT: gPriv->logAmt = encaps.toInt(); break;
case CRESP_LOGTIME:
{
gPriv->logTime = static_cast<UI32>( encaps.toInt() * 1000 ); break;
break;
}
case CRESP_OREAMT: gPriv->oreAmt = encaps.toInt(); break;
case CRESP_ORETIME: //gPriv->oreTime = encaps.toInt(); break;
{
gPriv->oreTime = static_cast<UI32>( encaps.toInt() * 1000 ); break;
break;
}
case CRESP_FISHAMT: gPriv->fishAmt = encaps.toInt(); break;
case CRESP_FISHTIME: //gPriv->fishTime = encaps.toInt(); break;
{
gPriv->fishTime = static_cast<UI32>( encaps.toInt() * 1000 ); break;
break;
}
default: break;
2002-04-07 20:53:41 +00:00
}
}
UOX3 0.99.6-RC4 Fixed an issue that prevented onBuyFromVendor() and onBoughtFromVendor() JS Events from triggering when attached to NPC shopkeepers Fixed an issue with help gump that prevented password management section from working as intended (js/server/misc/helpgump.js) Fixed an issue where UOX3 would fail to load pre-HS multi.mul files Added chess board to Misc->Games add menu (dfndata/items/ItemMenu.bulk.dfn) Fixed an issue with 'move (alias for 'telestuff) command that referenced the wrong variable name (js/commands/targeting/tele.js) When a player is teleported via the GM 'wholist menu, any pets within range are now also brought along for the ride Consolidated error-reporting for JS Functions, Object Methods and Object Properties to provide more context (scriptID, filename, line number) when something goes wrong Added some missing shield IDs (0xA649, 0xA64A, 0xA831, 0xA832) to IsShieldType() function MAXRANGE item property previously only worked for ranged weapons; now it works for melee weapons too, and potentially allows melee weapons with combat range longer than 1 tile MAXRANGE item property can now be used to define max combat range for melee weapons Fixed an issue (non-critical) with .PlaceInPack() JS Method that would cause UOX3 to try adding items marked for deletion to refreshQueue and spam console with errors Added missing AI scripts to summoned Blade Spirits and Energy Vortexes (dfndata/npc/magicsummon.dfn) Fixed an issue with weight calculation for hireling backpacks (js/npc/ai/hireling.js) Fixed an issue with the 'fix command, which would in most cases set character's Z to -1 regardless of location, but now adheres to map elevation instead Fixed an issue with Pack AI (js/npc/ai/pack_ai.js) that prevented pack members from attacking target correctly (thanks Dragon Slayer) Fixed an issue with DoesMapBlock JS Function that incorrectly checked for 6 function arguments, when it actually requires 8 Fixed an issue with DoesDynamicBlock JS Function that incorrectly checked for 8 function arguments, when it actually requires 9 Fixed an issue with runebook script (js/item/runebook.js) that prevented players from being able to use recall charges without having spellbook with spell in inventory Fixed issues with placement of tall items on ground/floor, and with stacking of items in houses Fixed incorrect alias for woodland armor (dfndata/items/gear/armor/other/armor/wood.dfn - thanks Dragon Slayer) Fixed a critical issue with script context sometimes changing while executing a script, because of events in other scripts being triggered. Affected scripts can be safeguarded against this by the addition of a dummy callback function anywhere in the script: function _restorecontext_() {} Fixed an issue with non-animal pets not gaining loyalty when being fed (thanks Dragon Slayer) Added new JS Object Methods for Chars/Items/Multis to fetch list of custom tags associated with object: .GetTagMap() // Gets list of persistent custom tags associated with object .GetTempTagMap() // Gets list of temporary custom tags associated with object Added new JS commands ('GETTAGMAP and 'GETTEMPTAGMAP) that spits out details of custom tags associated with targeted object (js/commands/custom/misc-cmd.js) Added new JS command ('USEITEM) that acts as a short-cut for double-clicking on targeted item (js/commands/custom/misc-cmd.js) Updated 'ADD # and 'ADD ITEM # JS commands to support targeting a container directly and adding the new item inside (js/commands/targeting/add.js) Updated axe script to only perform lumberjacking skill-check when there's still wood available in a given area, and to play appropriate animations for Gargoyle players (js/item/axe.js) Updated script for gameboards to make generated pieces newbiefied so they won't appear on ground if board decays (js/item/gameboards.js) Updated script for stablemasters to avoid relying on global variables (js/npc/ai/stablemaster.js) Updated names of items crafted with runic hammers to include the material name of the hammers used to craft them (js/skill/craft/crafting_complete.js) Fixed a small issue with Detect Hidden skill that would return the wrong message if players found anyone hiding nearby (js/skill/detecthidden.js) Fixed an issue that prevented tile overrides in dfndata/maps/tiles.dfn from loading properly Added entries for a couple of walls with missing no-shoot flags to tile overrides in dfndata/maps/tiles.dfn Updated JS Method .SoundEffect() to support optional third argument (creatureSoundNum) to play creature-defined sounds from dfndata/creatures/creatures.dfn. New syntax: .SoundEffect( soundID, allHear[, creatureSoundNum] ) // 0=SOUND_STARTATTACK, 1=SOUND_IDLE, 2=SOUND_ATTACK, 3=SOUND_DEFEND, 4=SOUND_DIE Added new Character JS Methods: .SetRandomName( nameListID ) // apply a random name from specified namelist to character .FindItemSection( sectionID ) // find item in player's backpack with specified sectionID Added new Socket JS Method: .OpenContainer() // Opens specified container for socket
2023-05-30 01:47:26 +08:00
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
return JS_TRUE;
}
2002-04-07 20:53:41 +00:00
2025-03-28 13:23:59 +10:00
JSBool CResourceProps_getProperty( JSContext *cx, JSObject *obj, jsid id, jsval *vp )
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
{
MapResource_st *gPriv = static_cast<MapResource_st*>( JS_GetPrivate( cx, obj ));
2021-06-12 07:30:23 -04:00
if( gPriv == nullptr )
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
return JS_FALSE;
UI16 propID = getScriptID( cx, id, JSP_RESOURCE );
if( propID != 0xFFFF )
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
{
switch( propID )
2002-04-07 20:53:41 +00:00
{
UOX3 0.99.5b-6 Increased world load speed by almost 20% by reducing how often loading progress is written to the console Increased world save speed by almost 50% through the use of binary mode and buffer tweaks for ofstream combined with a cached newline char and std::to_string instead of static_cast Fixed a server crash involving killing NPCs of a specific spawn region using the 'spawnkill # command Fixed a server crash involving moving items from decaying corpses to the ground Fixed a server crash involving carving up human corpses Fixed a server crash related to AreaCharacterFunction JS function, which could trigger for any script that potentially kills any NPC this function iterates over (like explosion potions) Fixed a server crash related to GMs attempting to add items from add-menu while having no backpack Fixed a client crash issue caused by attempting to sell house deeds back to architect NPCs Fixed an issue where players would get incorrect amounts of gold for selling house deeds back to architect NPCs Fixed an issue with characters dying onboard boats which prevented players from packing up the boats later Added new item property in code (via bools bitset) that can be used to enable/disable maker's mark on crafted items. This property can be set to true for items crafted at exceptional quality by GM craftsmen Exposed the new item property to JS engine: .isMarkedByMaker // If true, maker's mark will be displayed Updated default item tooltip to display " of exceptional quality" for items crafted with exceptional quality Updated default item tooltip to display "[Crafted] by [Crafter's Name]" for exceptional quality items crafted by GM craftsmen. The [Crafted] text comes from the MADEWORD defined in dfndata/skills/skills.dfn for the primary skill used to craft the item Updated old-school single-click names for items (when AoS bit is disabled in client/server features) to display exceptional status and/or maker's mark for appropriate items Fixed an issue with the display of titles for NPCs that used dictionary lookups for their title Added new UOX.INI settings under the [settings] section: DISPLAYMAKERSMARK=1/0 // Controls if maker's marks on crafted items are shown on a global level SHOWNPCTITLESOVERHEAD=1/0 // Controls whether NPC titles are shown over their heads SHOWINVULNERABLETAGOVERHEAD=0/1 // Controls whether invulnerable tags are shown overhead GLOBALRESTOCKMULTIPLIER=1.0 // Global multiplier applied to RESTOCK property of items when loaded from DFNs Added new UOX.INI settings under the [combat] section: PETCOMBATTRAINING=1/0 // Controls whether pets can gain skills/stats from combat HIRELINGCOMBATTRAINING=1/0 // Controls whether hirelings can gain skills/stats from combat NPCCOMBATTRAINING=0/1 // Controls whether NPCs in general can gain skills/stats from combat Fixed an issue where a player meeting the exact minimum requirements for crafting an item would always fail Fixed a bug with teleporting off boats to valid nearby locations when double-clicking boat planks while standing on it Updated behaviour of planks on boats: Boat key can unlock plank, but won't automatically open it Boat key used on an open, unlocked plank will lock and automatically close the plank Boat key used on an open, locked plank will unlock the plank and leave it open Player using an unlocked plank now opens it Player using an open plank will disembark (if onboard) or embark (if not) the boat Player can always open a locked plank if they're on the boat, even with no key, to allow disembarking the boat. Planks that are open, but locked cannot be accessed from outside the boat, and will close automatically after five of seconds Updated behaviour of Magic Lock/Unlock spells: Magic Lock cannot be used on objects inside a multi Magic Lock applies difficulty to lock based on caster's Magery skill Magic Lock effect will last between 7 to 50 seconds (depending on caster's Magery skill) Any object that can be locked via Magic Lock spell can also be unlocked via Magic Unlock spell, if caster has high enough Magery skill Fixed a bug where certain JS Functions, Methods and Properties would occasionally pass incorrect values to scripts that called upon them. Scripts that rely on the GetCurrentClock() Function, the .GetTimer() Method, .decayTime, .logTime, .oreTime and .fishTime Properties might need to be updated to account for the fix, which causes larger values to be passed in than before. Fixed a bug related to GetCurrentClock() that caused decay and respawning of dungeon chests from working properly Fixed a bug related to GetCurrentClock() and .logTime/.fishTime that prevented consumption and regeneration of log/fish resources from working properly Added a new JS Function: GetStartTime() // Returns a timestamp for when server started up Fixed a bug related to GetCurrentClock() where server uptime stats in help menu was showing up incorrectly Fixed a bug related to GetCurrentClock() and purging of registrations of visitors in public houses so their visits can be counted again later Fixed a bug related to GetCurrentClock() that caused monster speech to not work properly Fixed a Z-related issue that sometimes prevented players from fishing when standing on the shoreline next to the sea Fixed an issue with Animal Lore skill that would always return a pet's loyalty level as "Wild" Increased max range pets can be from their owner in order to still be included in moongate/teleporter travel from 12 to 24 tiles Fixed an issue where the alchemy bonus damage for explosion potions was off by an order of magnitude Fixed an issue where food IDs from foodlists referenced by other foodlists was not detected as valid food for tamed pets or NPCs Fixed an issue where Alchemy crafting skill did not properly check for the existence of the crafting tool before proceeding with the crafting process Fixed an issue that prevented the Teleport spell from working as intended Fixed an issue where players would still get 1 gold even if STARTGOLD in uox.ini was set to 0 Fixed an issue with mount restrictions script that prevented players from mounting Unicorns, Ki-rins and Cu Sidhes Fixed an issue where aggressive creatures wouldn't stop attacking player after being tamed (js/skill/taming.js) Added a system message to inform the player when they've dropped out of stealth due to taking too many steps Fixed an issue where hunger level of NPCs instantly dropped upon spawning because hunger timer was not active yet Fixed a bug where character corpses would appear with a [unidentified] tag attached Fixed an issue where the [unidentified] tag did not show up for unidentified magic items Added ANIMAL tag to a small bunch of creature definitions (dfndata/creatures/creatures.dfn) Fixed an issue with Bowcraft skill where player could not gain enough skill from crafting bows to reach min requirement for crossbows, and similiarly could not reach min requirement for heavy crossbows from crossbows Updated default value of MURDERDECAYTIMER INI setting from 60 seconds to 28800 seconds (8 hours), to match the amount of time it would take for one (short term) murder count to decay on LBR-era OSI shards.
2022-08-25 02:13:00 +08:00
case CRESP_LOGAMT: *vp = INT_TO_JSVAL( gPriv->logAmt ); break;
case CRESP_LOGTIME: JS_NewNumberValue( cx, gPriv->logTime, vp ); break;
case CRESP_OREAMT: *vp = INT_TO_JSVAL( gPriv->oreAmt ); break;
case CRESP_ORETIME: JS_NewNumberValue( cx, gPriv->oreTime, vp ); break;
case CRESP_FISHAMT: *vp = INT_TO_JSVAL( gPriv->fishAmt ); break;
case CRESP_FISHTIME: JS_NewNumberValue( cx, gPriv->fishTime, vp ); break;
default: break;
}
}
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
return JS_TRUE;
}
2002-04-07 20:53:41 +00:00
JSBool CPartyProps_setProperty( JSContext* cx, JSObject* obj, jsid id, JSBool strict, jsval* vp )
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
{
Party *gPriv = static_cast<Party *>( JS_GetPrivate( cx, obj ));
2021-06-12 07:30:23 -04:00
if( gPriv == nullptr )
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
return JS_FALSE;
2002-04-07 20:53:41 +00:00
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
JSEncapsulate encaps( cx, vp );
2025-04-07 14:11:13 +10:00
UI16 propID = getScriptID( cx, id, JSP_PARTY );
if( propID != 0xFFFF )
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
{
2025-04-07 14:11:13 +10:00
switch( propID )
{
case CPARTYP_LEADER:
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
{
if( encaps.ClassName() == "UOXChar" || encaps.ClassName() == "UOXSocket" )
2002-04-07 20:53:41 +00:00
{
2021-06-12 07:30:23 -04:00
CChar *newLeader = nullptr;
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
if( encaps.ClassName() == "UOXChar" )
{
newLeader = static_cast<CChar *>( encaps.toObject() );
}
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
else
2002-04-07 20:53:41 +00:00
{
CSocket *tempSock = static_cast<CSocket *>( encaps.toObject() );
2021-06-12 07:30:23 -04:00
if( tempSock != nullptr )
{
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
newLeader = tempSock->CurrcharObj();
}
2002-04-07 20:53:41 +00:00
}
if( ValidateObject( newLeader ))
{
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
gPriv->Leader( newLeader );
}
2002-04-07 20:53:41 +00:00
}
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
}
break;
case CPARTYP_ISNPC: gPriv->IsNPC( encaps.toBool() ); break;
default: break;
}
}
UOX3 0.99.6-RC4 Fixed an issue that prevented onBuyFromVendor() and onBoughtFromVendor() JS Events from triggering when attached to NPC shopkeepers Fixed an issue with help gump that prevented password management section from working as intended (js/server/misc/helpgump.js) Fixed an issue where UOX3 would fail to load pre-HS multi.mul files Added chess board to Misc->Games add menu (dfndata/items/ItemMenu.bulk.dfn) Fixed an issue with 'move (alias for 'telestuff) command that referenced the wrong variable name (js/commands/targeting/tele.js) When a player is teleported via the GM 'wholist menu, any pets within range are now also brought along for the ride Consolidated error-reporting for JS Functions, Object Methods and Object Properties to provide more context (scriptID, filename, line number) when something goes wrong Added some missing shield IDs (0xA649, 0xA64A, 0xA831, 0xA832) to IsShieldType() function MAXRANGE item property previously only worked for ranged weapons; now it works for melee weapons too, and potentially allows melee weapons with combat range longer than 1 tile MAXRANGE item property can now be used to define max combat range for melee weapons Fixed an issue (non-critical) with .PlaceInPack() JS Method that would cause UOX3 to try adding items marked for deletion to refreshQueue and spam console with errors Added missing AI scripts to summoned Blade Spirits and Energy Vortexes (dfndata/npc/magicsummon.dfn) Fixed an issue with weight calculation for hireling backpacks (js/npc/ai/hireling.js) Fixed an issue with the 'fix command, which would in most cases set character's Z to -1 regardless of location, but now adheres to map elevation instead Fixed an issue with Pack AI (js/npc/ai/pack_ai.js) that prevented pack members from attacking target correctly (thanks Dragon Slayer) Fixed an issue with DoesMapBlock JS Function that incorrectly checked for 6 function arguments, when it actually requires 8 Fixed an issue with DoesDynamicBlock JS Function that incorrectly checked for 8 function arguments, when it actually requires 9 Fixed an issue with runebook script (js/item/runebook.js) that prevented players from being able to use recall charges without having spellbook with spell in inventory Fixed issues with placement of tall items on ground/floor, and with stacking of items in houses Fixed incorrect alias for woodland armor (dfndata/items/gear/armor/other/armor/wood.dfn - thanks Dragon Slayer) Fixed a critical issue with script context sometimes changing while executing a script, because of events in other scripts being triggered. Affected scripts can be safeguarded against this by the addition of a dummy callback function anywhere in the script: function _restorecontext_() {} Fixed an issue with non-animal pets not gaining loyalty when being fed (thanks Dragon Slayer) Added new JS Object Methods for Chars/Items/Multis to fetch list of custom tags associated with object: .GetTagMap() // Gets list of persistent custom tags associated with object .GetTempTagMap() // Gets list of temporary custom tags associated with object Added new JS commands ('GETTAGMAP and 'GETTEMPTAGMAP) that spits out details of custom tags associated with targeted object (js/commands/custom/misc-cmd.js) Added new JS command ('USEITEM) that acts as a short-cut for double-clicking on targeted item (js/commands/custom/misc-cmd.js) Updated 'ADD # and 'ADD ITEM # JS commands to support targeting a container directly and adding the new item inside (js/commands/targeting/add.js) Updated axe script to only perform lumberjacking skill-check when there's still wood available in a given area, and to play appropriate animations for Gargoyle players (js/item/axe.js) Updated script for gameboards to make generated pieces newbiefied so they won't appear on ground if board decays (js/item/gameboards.js) Updated script for stablemasters to avoid relying on global variables (js/npc/ai/stablemaster.js) Updated names of items crafted with runic hammers to include the material name of the hammers used to craft them (js/skill/craft/crafting_complete.js) Fixed a small issue with Detect Hidden skill that would return the wrong message if players found anyone hiding nearby (js/skill/detecthidden.js) Fixed an issue that prevented tile overrides in dfndata/maps/tiles.dfn from loading properly Added entries for a couple of walls with missing no-shoot flags to tile overrides in dfndata/maps/tiles.dfn Updated JS Method .SoundEffect() to support optional third argument (creatureSoundNum) to play creature-defined sounds from dfndata/creatures/creatures.dfn. New syntax: .SoundEffect( soundID, allHear[, creatureSoundNum] ) // 0=SOUND_STARTATTACK, 1=SOUND_IDLE, 2=SOUND_ATTACK, 3=SOUND_DEFEND, 4=SOUND_DIE Added new Character JS Methods: .SetRandomName( nameListID ) // apply a random name from specified namelist to character .FindItemSection( sectionID ) // find item in player's backpack with specified sectionID Added new Socket JS Method: .OpenContainer() // Opens specified container for socket
2023-05-30 01:47:26 +08:00
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
return JS_TRUE;
}
2025-03-28 13:23:59 +10:00
JSBool CPartyProps_getProperty( JSContext *cx, JSObject *obj, jsid id, jsval *vp )
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
{
Party *gPriv = static_cast<Party *>( JS_GetPrivate( cx, obj ));
2021-06-12 07:30:23 -04:00
if( gPriv == nullptr )
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
return JS_FALSE;
2002-04-07 20:53:41 +00:00
UI16 propID = getScriptID( cx, id, JSP_PARTY );
if( propID != 0xFFFF )
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
{
switch( propID )
{
case CPARTYP_LEADER:
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
{
CChar *myChar = gPriv->Leader();
if( !ValidateObject( myChar ))
{
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
*vp = JSVAL_NULL;
return JS_TRUE;
2002-04-07 20:53:41 +00:00
}
JSObject *myObj = JSEngine->AcquireObject( IUE_CHAR, myChar, JSEngine->FindActiveRuntime( JS_GetRuntime( cx )));
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
*vp = OBJECT_TO_JSVAL( myObj );
}
break;
case CPARTYP_MEMBERCOUNT: *vp = INT_TO_JSVAL( gPriv->MemberList()->size() ); break;
case CPARTYP_ISNPC: *vp = BOOLEAN_TO_JSVAL( gPriv->IsNPC() ); break;
default: break;
2002-04-07 20:53:41 +00:00
}
}
Numerous changes with focus on feature and stability parity across Windows, Linux and MacOS platforms Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt) Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri) Updated SpiderMonkey from v1.6.0 to v1.7.0 Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri) Added StringUtility file with general common string manipulation functions (punt) Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt) Overall code cleanup to remove/replace platform-dependent code (punt) Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes. (punt) Replaced usage of char in many places with std::string (punt) Started process of replacing UString usage with functions provided through StringUtility instead (punt) Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt) Replaced platform specific time handling by using cross-platform chrono library (punt) Removed UOX namespace to reduce complexity (punt) Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt) Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code. (punt) Removed some platform specific files like uoxlinux.h, which is no longer required (punt) Removed legacy crash protection code, and removed support for cluox (punt) Removed legacy "support" for Borland compiler (punt) Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri) Removed legacy BUILD folder with outdated compilation instructions (Xuri) Removed old Changelog file (merged into Changelog.txt) (Xuri) Fixed a pointer bug for items in multis on world load (punt) Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt) Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt) Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash. (punt) Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt) Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt) Added some new commands to js/commands/custom/misc-cmd.js (Xuri) cont // Targeted item will be made a container, set to nondecay and movable 2 endfight // Targeted character (and character being fought) will stop fighting getmulti // Get multiObject for targeted item finditem // Find item at layer X movespeed // Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen) Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version (Xuri) Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2020-09-07 18:09:55 +08:00
return JS_TRUE;
}
2002-04-07 20:53:41 +00:00
2025-03-28 13:23:59 +10:00
JSBool CScriptProps_getProperty( JSContext *cx, JSObject *obj, jsid id, jsval *vp )
UOX3 0.99.6-RC4 Fixed an issue that prevented onBuyFromVendor() and onBoughtFromVendor() JS Events from triggering when attached to NPC shopkeepers Fixed an issue with help gump that prevented password management section from working as intended (js/server/misc/helpgump.js) Fixed an issue where UOX3 would fail to load pre-HS multi.mul files Added chess board to Misc->Games add menu (dfndata/items/ItemMenu.bulk.dfn) Fixed an issue with 'move (alias for 'telestuff) command that referenced the wrong variable name (js/commands/targeting/tele.js) When a player is teleported via the GM 'wholist menu, any pets within range are now also brought along for the ride Consolidated error-reporting for JS Functions, Object Methods and Object Properties to provide more context (scriptID, filename, line number) when something goes wrong Added some missing shield IDs (0xA649, 0xA64A, 0xA831, 0xA832) to IsShieldType() function MAXRANGE item property previously only worked for ranged weapons; now it works for melee weapons too, and potentially allows melee weapons with combat range longer than 1 tile MAXRANGE item property can now be used to define max combat range for melee weapons Fixed an issue (non-critical) with .PlaceInPack() JS Method that would cause UOX3 to try adding items marked for deletion to refreshQueue and spam console with errors Added missing AI scripts to summoned Blade Spirits and Energy Vortexes (dfndata/npc/magicsummon.dfn) Fixed an issue with weight calculation for hireling backpacks (js/npc/ai/hireling.js) Fixed an issue with the 'fix command, which would in most cases set character's Z to -1 regardless of location, but now adheres to map elevation instead Fixed an issue with Pack AI (js/npc/ai/pack_ai.js) that prevented pack members from attacking target correctly (thanks Dragon Slayer) Fixed an issue with DoesMapBlock JS Function that incorrectly checked for 6 function arguments, when it actually requires 8 Fixed an issue with DoesDynamicBlock JS Function that incorrectly checked for 8 function arguments, when it actually requires 9 Fixed an issue with runebook script (js/item/runebook.js) that prevented players from being able to use recall charges without having spellbook with spell in inventory Fixed issues with placement of tall items on ground/floor, and with stacking of items in houses Fixed incorrect alias for woodland armor (dfndata/items/gear/armor/other/armor/wood.dfn - thanks Dragon Slayer) Fixed a critical issue with script context sometimes changing while executing a script, because of events in other scripts being triggered. Affected scripts can be safeguarded against this by the addition of a dummy callback function anywhere in the script: function _restorecontext_() {} Fixed an issue with non-animal pets not gaining loyalty when being fed (thanks Dragon Slayer) Added new JS Object Methods for Chars/Items/Multis to fetch list of custom tags associated with object: .GetTagMap() // Gets list of persistent custom tags associated with object .GetTempTagMap() // Gets list of temporary custom tags associated with object Added new JS commands ('GETTAGMAP and 'GETTEMPTAGMAP) that spits out details of custom tags associated with targeted object (js/commands/custom/misc-cmd.js) Added new JS command ('USEITEM) that acts as a short-cut for double-clicking on targeted item (js/commands/custom/misc-cmd.js) Updated 'ADD # and 'ADD ITEM # JS commands to support targeting a container directly and adding the new item inside (js/commands/targeting/add.js) Updated axe script to only perform lumberjacking skill-check when there's still wood available in a given area, and to play appropriate animations for Gargoyle players (js/item/axe.js) Updated script for gameboards to make generated pieces newbiefied so they won't appear on ground if board decays (js/item/gameboards.js) Updated script for stablemasters to avoid relying on global variables (js/npc/ai/stablemaster.js) Updated names of items crafted with runic hammers to include the material name of the hammers used to craft them (js/skill/craft/crafting_complete.js) Fixed a small issue with Detect Hidden skill that would return the wrong message if players found anyone hiding nearby (js/skill/detecthidden.js) Fixed an issue that prevented tile overrides in dfndata/maps/tiles.dfn from loading properly Added entries for a couple of walls with missing no-shoot flags to tile overrides in dfndata/maps/tiles.dfn Updated JS Method .SoundEffect() to support optional third argument (creatureSoundNum) to play creature-defined sounds from dfndata/creatures/creatures.dfn. New syntax: .SoundEffect( soundID, allHear[, creatureSoundNum] ) // 0=SOUND_STARTATTACK, 1=SOUND_IDLE, 2=SOUND_ATTACK, 3=SOUND_DEFEND, 4=SOUND_DIE Added new Character JS Methods: .SetRandomName( nameListID ) // apply a random name from specified namelist to character .FindItemSection( sectionID ) // find item in player's backpack with specified sectionID Added new Socket JS Method: .OpenContainer() // Opens specified container for socket
2023-05-30 01:47:26 +08:00
{
cScript *gPriv = static_cast<cScript*>( JS_GetPrivate( cx, obj ) );
if( JSID_IS_INT( id ) && JSID_TO_INT( id ) == CSCRIPT_SCRIPTID )
UOX3 0.99.6-RC4 Fixed an issue that prevented onBuyFromVendor() and onBoughtFromVendor() JS Events from triggering when attached to NPC shopkeepers Fixed an issue with help gump that prevented password management section from working as intended (js/server/misc/helpgump.js) Fixed an issue where UOX3 would fail to load pre-HS multi.mul files Added chess board to Misc->Games add menu (dfndata/items/ItemMenu.bulk.dfn) Fixed an issue with 'move (alias for 'telestuff) command that referenced the wrong variable name (js/commands/targeting/tele.js) When a player is teleported via the GM 'wholist menu, any pets within range are now also brought along for the ride Consolidated error-reporting for JS Functions, Object Methods and Object Properties to provide more context (scriptID, filename, line number) when something goes wrong Added some missing shield IDs (0xA649, 0xA64A, 0xA831, 0xA832) to IsShieldType() function MAXRANGE item property previously only worked for ranged weapons; now it works for melee weapons too, and potentially allows melee weapons with combat range longer than 1 tile MAXRANGE item property can now be used to define max combat range for melee weapons Fixed an issue (non-critical) with .PlaceInPack() JS Method that would cause UOX3 to try adding items marked for deletion to refreshQueue and spam console with errors Added missing AI scripts to summoned Blade Spirits and Energy Vortexes (dfndata/npc/magicsummon.dfn) Fixed an issue with weight calculation for hireling backpacks (js/npc/ai/hireling.js) Fixed an issue with the 'fix command, which would in most cases set character's Z to -1 regardless of location, but now adheres to map elevation instead Fixed an issue with Pack AI (js/npc/ai/pack_ai.js) that prevented pack members from attacking target correctly (thanks Dragon Slayer) Fixed an issue with DoesMapBlock JS Function that incorrectly checked for 6 function arguments, when it actually requires 8 Fixed an issue with DoesDynamicBlock JS Function that incorrectly checked for 8 function arguments, when it actually requires 9 Fixed an issue with runebook script (js/item/runebook.js) that prevented players from being able to use recall charges without having spellbook with spell in inventory Fixed issues with placement of tall items on ground/floor, and with stacking of items in houses Fixed incorrect alias for woodland armor (dfndata/items/gear/armor/other/armor/wood.dfn - thanks Dragon Slayer) Fixed a critical issue with script context sometimes changing while executing a script, because of events in other scripts being triggered. Affected scripts can be safeguarded against this by the addition of a dummy callback function anywhere in the script: function _restorecontext_() {} Fixed an issue with non-animal pets not gaining loyalty when being fed (thanks Dragon Slayer) Added new JS Object Methods for Chars/Items/Multis to fetch list of custom tags associated with object: .GetTagMap() // Gets list of persistent custom tags associated with object .GetTempTagMap() // Gets list of temporary custom tags associated with object Added new JS commands ('GETTAGMAP and 'GETTEMPTAGMAP) that spits out details of custom tags associated with targeted object (js/commands/custom/misc-cmd.js) Added new JS command ('USEITEM) that acts as a short-cut for double-clicking on targeted item (js/commands/custom/misc-cmd.js) Updated 'ADD # and 'ADD ITEM # JS commands to support targeting a container directly and adding the new item inside (js/commands/targeting/add.js) Updated axe script to only perform lumberjacking skill-check when there's still wood available in a given area, and to play appropriate animations for Gargoyle players (js/item/axe.js) Updated script for gameboards to make generated pieces newbiefied so they won't appear on ground if board decays (js/item/gameboards.js) Updated script for stablemasters to avoid relying on global variables (js/npc/ai/stablemaster.js) Updated names of items crafted with runic hammers to include the material name of the hammers used to craft them (js/skill/craft/crafting_complete.js) Fixed a small issue with Detect Hidden skill that would return the wrong message if players found anyone hiding nearby (js/skill/detecthidden.js) Fixed an issue that prevented tile overrides in dfndata/maps/tiles.dfn from loading properly Added entries for a couple of walls with missing no-shoot flags to tile overrides in dfndata/maps/tiles.dfn Updated JS Method .SoundEffect() to support optional third argument (creatureSoundNum) to play creature-defined sounds from dfndata/creatures/creatures.dfn. New syntax: .SoundEffect( soundID, allHear[, creatureSoundNum] ) // 0=SOUND_STARTATTACK, 1=SOUND_IDLE, 2=SOUND_ATTACK, 3=SOUND_DEFEND, 4=SOUND_DIE Added new Character JS Methods: .SetRandomName( nameListID ) // apply a random name from specified namelist to character .FindItemSection( sectionID ) // find item in player's backpack with specified sectionID Added new Socket JS Method: .OpenContainer() // Opens specified container for socket
2023-05-30 01:47:26 +08:00
{
*vp = INT_TO_JSVAL( gPriv->GetScriptID() );
}
else if( JSID_IS_STRING( id ) )
{
// This is trying to resolve *everything* - functions, global variables, etc
// We *only* care about script_id
JSString* str = JSID_TO_STRING( id );
char* chars = JS_EncodeString(cx, str);
std::string propID(chars);
if( propID == "script_id" )
UOX3 0.99.6-RC4 Fixed an issue that prevented onBuyFromVendor() and onBoughtFromVendor() JS Events from triggering when attached to NPC shopkeepers Fixed an issue with help gump that prevented password management section from working as intended (js/server/misc/helpgump.js) Fixed an issue where UOX3 would fail to load pre-HS multi.mul files Added chess board to Misc->Games add menu (dfndata/items/ItemMenu.bulk.dfn) Fixed an issue with 'move (alias for 'telestuff) command that referenced the wrong variable name (js/commands/targeting/tele.js) When a player is teleported via the GM 'wholist menu, any pets within range are now also brought along for the ride Consolidated error-reporting for JS Functions, Object Methods and Object Properties to provide more context (scriptID, filename, line number) when something goes wrong Added some missing shield IDs (0xA649, 0xA64A, 0xA831, 0xA832) to IsShieldType() function MAXRANGE item property previously only worked for ranged weapons; now it works for melee weapons too, and potentially allows melee weapons with combat range longer than 1 tile MAXRANGE item property can now be used to define max combat range for melee weapons Fixed an issue (non-critical) with .PlaceInPack() JS Method that would cause UOX3 to try adding items marked for deletion to refreshQueue and spam console with errors Added missing AI scripts to summoned Blade Spirits and Energy Vortexes (dfndata/npc/magicsummon.dfn) Fixed an issue with weight calculation for hireling backpacks (js/npc/ai/hireling.js) Fixed an issue with the 'fix command, which would in most cases set character's Z to -1 regardless of location, but now adheres to map elevation instead Fixed an issue with Pack AI (js/npc/ai/pack_ai.js) that prevented pack members from attacking target correctly (thanks Dragon Slayer) Fixed an issue with DoesMapBlock JS Function that incorrectly checked for 6 function arguments, when it actually requires 8 Fixed an issue with DoesDynamicBlock JS Function that incorrectly checked for 8 function arguments, when it actually requires 9 Fixed an issue with runebook script (js/item/runebook.js) that prevented players from being able to use recall charges without having spellbook with spell in inventory Fixed issues with placement of tall items on ground/floor, and with stacking of items in houses Fixed incorrect alias for woodland armor (dfndata/items/gear/armor/other/armor/wood.dfn - thanks Dragon Slayer) Fixed a critical issue with script context sometimes changing while executing a script, because of events in other scripts being triggered. Affected scripts can be safeguarded against this by the addition of a dummy callback function anywhere in the script: function _restorecontext_() {} Fixed an issue with non-animal pets not gaining loyalty when being fed (thanks Dragon Slayer) Added new JS Object Methods for Chars/Items/Multis to fetch list of custom tags associated with object: .GetTagMap() // Gets list of persistent custom tags associated with object .GetTempTagMap() // Gets list of temporary custom tags associated with object Added new JS commands ('GETTAGMAP and 'GETTEMPTAGMAP) that spits out details of custom tags associated with targeted object (js/commands/custom/misc-cmd.js) Added new JS command ('USEITEM) that acts as a short-cut for double-clicking on targeted item (js/commands/custom/misc-cmd.js) Updated 'ADD # and 'ADD ITEM # JS commands to support targeting a container directly and adding the new item inside (js/commands/targeting/add.js) Updated axe script to only perform lumberjacking skill-check when there's still wood available in a given area, and to play appropriate animations for Gargoyle players (js/item/axe.js) Updated script for gameboards to make generated pieces newbiefied so they won't appear on ground if board decays (js/item/gameboards.js) Updated script for stablemasters to avoid relying on global variables (js/npc/ai/stablemaster.js) Updated names of items crafted with runic hammers to include the material name of the hammers used to craft them (js/skill/craft/crafting_complete.js) Fixed a small issue with Detect Hidden skill that would return the wrong message if players found anyone hiding nearby (js/skill/detecthidden.js) Fixed an issue that prevented tile overrides in dfndata/maps/tiles.dfn from loading properly Added entries for a couple of walls with missing no-shoot flags to tile overrides in dfndata/maps/tiles.dfn Updated JS Method .SoundEffect() to support optional third argument (creatureSoundNum) to play creature-defined sounds from dfndata/creatures/creatures.dfn. New syntax: .SoundEffect( soundID, allHear[, creatureSoundNum] ) // 0=SOUND_STARTATTACK, 1=SOUND_IDLE, 2=SOUND_ATTACK, 3=SOUND_DEFEND, 4=SOUND_DIE Added new Character JS Methods: .SetRandomName( nameListID ) // apply a random name from specified namelist to character .FindItemSection( sectionID ) // find item in player's backpack with specified sectionID Added new Socket JS Method: .OpenContainer() // Opens specified container for socket
2023-05-30 01:47:26 +08:00
{
*vp = INT_TO_JSVAL( gPriv->GetScriptID() );
UOX3 0.99.6-RC4 Fixed an issue that prevented onBuyFromVendor() and onBoughtFromVendor() JS Events from triggering when attached to NPC shopkeepers Fixed an issue with help gump that prevented password management section from working as intended (js/server/misc/helpgump.js) Fixed an issue where UOX3 would fail to load pre-HS multi.mul files Added chess board to Misc->Games add menu (dfndata/items/ItemMenu.bulk.dfn) Fixed an issue with 'move (alias for 'telestuff) command that referenced the wrong variable name (js/commands/targeting/tele.js) When a player is teleported via the GM 'wholist menu, any pets within range are now also brought along for the ride Consolidated error-reporting for JS Functions, Object Methods and Object Properties to provide more context (scriptID, filename, line number) when something goes wrong Added some missing shield IDs (0xA649, 0xA64A, 0xA831, 0xA832) to IsShieldType() function MAXRANGE item property previously only worked for ranged weapons; now it works for melee weapons too, and potentially allows melee weapons with combat range longer than 1 tile MAXRANGE item property can now be used to define max combat range for melee weapons Fixed an issue (non-critical) with .PlaceInPack() JS Method that would cause UOX3 to try adding items marked for deletion to refreshQueue and spam console with errors Added missing AI scripts to summoned Blade Spirits and Energy Vortexes (dfndata/npc/magicsummon.dfn) Fixed an issue with weight calculation for hireling backpacks (js/npc/ai/hireling.js) Fixed an issue with the 'fix command, which would in most cases set character's Z to -1 regardless of location, but now adheres to map elevation instead Fixed an issue with Pack AI (js/npc/ai/pack_ai.js) that prevented pack members from attacking target correctly (thanks Dragon Slayer) Fixed an issue with DoesMapBlock JS Function that incorrectly checked for 6 function arguments, when it actually requires 8 Fixed an issue with DoesDynamicBlock JS Function that incorrectly checked for 8 function arguments, when it actually requires 9 Fixed an issue with runebook script (js/item/runebook.js) that prevented players from being able to use recall charges without having spellbook with spell in inventory Fixed issues with placement of tall items on ground/floor, and with stacking of items in houses Fixed incorrect alias for woodland armor (dfndata/items/gear/armor/other/armor/wood.dfn - thanks Dragon Slayer) Fixed a critical issue with script context sometimes changing while executing a script, because of events in other scripts being triggered. Affected scripts can be safeguarded against this by the addition of a dummy callback function anywhere in the script: function _restorecontext_() {} Fixed an issue with non-animal pets not gaining loyalty when being fed (thanks Dragon Slayer) Added new JS Object Methods for Chars/Items/Multis to fetch list of custom tags associated with object: .GetTagMap() // Gets list of persistent custom tags associated with object .GetTempTagMap() // Gets list of temporary custom tags associated with object Added new JS commands ('GETTAGMAP and 'GETTEMPTAGMAP) that spits out details of custom tags associated with targeted object (js/commands/custom/misc-cmd.js) Added new JS command ('USEITEM) that acts as a short-cut for double-clicking on targeted item (js/commands/custom/misc-cmd.js) Updated 'ADD # and 'ADD ITEM # JS commands to support targeting a container directly and adding the new item inside (js/commands/targeting/add.js) Updated axe script to only perform lumberjacking skill-check when there's still wood available in a given area, and to play appropriate animations for Gargoyle players (js/item/axe.js) Updated script for gameboards to make generated pieces newbiefied so they won't appear on ground if board decays (js/item/gameboards.js) Updated script for stablemasters to avoid relying on global variables (js/npc/ai/stablemaster.js) Updated names of items crafted with runic hammers to include the material name of the hammers used to craft them (js/skill/craft/crafting_complete.js) Fixed a small issue with Detect Hidden skill that would return the wrong message if players found anyone hiding nearby (js/skill/detecthidden.js) Fixed an issue that prevented tile overrides in dfndata/maps/tiles.dfn from loading properly Added entries for a couple of walls with missing no-shoot flags to tile overrides in dfndata/maps/tiles.dfn Updated JS Method .SoundEffect() to support optional third argument (creatureSoundNum) to play creature-defined sounds from dfndata/creatures/creatures.dfn. New syntax: .SoundEffect( soundID, allHear[, creatureSoundNum] ) // 0=SOUND_STARTATTACK, 1=SOUND_IDLE, 2=SOUND_ATTACK, 3=SOUND_DEFEND, 4=SOUND_DIE Added new Character JS Methods: .SetRandomName( nameListID ) // apply a random name from specified namelist to character .FindItemSection( sectionID ) // find item in player's backpack with specified sectionID Added new Socket JS Method: .OpenContainer() // Opens specified container for socket
2023-05-30 01:47:26 +08:00
}
js_free(chars);
UOX3 0.99.6-RC4 Fixed an issue that prevented onBuyFromVendor() and onBoughtFromVendor() JS Events from triggering when attached to NPC shopkeepers Fixed an issue with help gump that prevented password management section from working as intended (js/server/misc/helpgump.js) Fixed an issue where UOX3 would fail to load pre-HS multi.mul files Added chess board to Misc->Games add menu (dfndata/items/ItemMenu.bulk.dfn) Fixed an issue with 'move (alias for 'telestuff) command that referenced the wrong variable name (js/commands/targeting/tele.js) When a player is teleported via the GM 'wholist menu, any pets within range are now also brought along for the ride Consolidated error-reporting for JS Functions, Object Methods and Object Properties to provide more context (scriptID, filename, line number) when something goes wrong Added some missing shield IDs (0xA649, 0xA64A, 0xA831, 0xA832) to IsShieldType() function MAXRANGE item property previously only worked for ranged weapons; now it works for melee weapons too, and potentially allows melee weapons with combat range longer than 1 tile MAXRANGE item property can now be used to define max combat range for melee weapons Fixed an issue (non-critical) with .PlaceInPack() JS Method that would cause UOX3 to try adding items marked for deletion to refreshQueue and spam console with errors Added missing AI scripts to summoned Blade Spirits and Energy Vortexes (dfndata/npc/magicsummon.dfn) Fixed an issue with weight calculation for hireling backpacks (js/npc/ai/hireling.js) Fixed an issue with the 'fix command, which would in most cases set character's Z to -1 regardless of location, but now adheres to map elevation instead Fixed an issue with Pack AI (js/npc/ai/pack_ai.js) that prevented pack members from attacking target correctly (thanks Dragon Slayer) Fixed an issue with DoesMapBlock JS Function that incorrectly checked for 6 function arguments, when it actually requires 8 Fixed an issue with DoesDynamicBlock JS Function that incorrectly checked for 8 function arguments, when it actually requires 9 Fixed an issue with runebook script (js/item/runebook.js) that prevented players from being able to use recall charges without having spellbook with spell in inventory Fixed issues with placement of tall items on ground/floor, and with stacking of items in houses Fixed incorrect alias for woodland armor (dfndata/items/gear/armor/other/armor/wood.dfn - thanks Dragon Slayer) Fixed a critical issue with script context sometimes changing while executing a script, because of events in other scripts being triggered. Affected scripts can be safeguarded against this by the addition of a dummy callback function anywhere in the script: function _restorecontext_() {} Fixed an issue with non-animal pets not gaining loyalty when being fed (thanks Dragon Slayer) Added new JS Object Methods for Chars/Items/Multis to fetch list of custom tags associated with object: .GetTagMap() // Gets list of persistent custom tags associated with object .GetTempTagMap() // Gets list of temporary custom tags associated with object Added new JS commands ('GETTAGMAP and 'GETTEMPTAGMAP) that spits out details of custom tags associated with targeted object (js/commands/custom/misc-cmd.js) Added new JS command ('USEITEM) that acts as a short-cut for double-clicking on targeted item (js/commands/custom/misc-cmd.js) Updated 'ADD # and 'ADD ITEM # JS commands to support targeting a container directly and adding the new item inside (js/commands/targeting/add.js) Updated axe script to only perform lumberjacking skill-check when there's still wood available in a given area, and to play appropriate animations for Gargoyle players (js/item/axe.js) Updated script for gameboards to make generated pieces newbiefied so they won't appear on ground if board decays (js/item/gameboards.js) Updated script for stablemasters to avoid relying on global variables (js/npc/ai/stablemaster.js) Updated names of items crafted with runic hammers to include the material name of the hammers used to craft them (js/skill/craft/crafting_complete.js) Fixed a small issue with Detect Hidden skill that would return the wrong message if players found anyone hiding nearby (js/skill/detecthidden.js) Fixed an issue that prevented tile overrides in dfndata/maps/tiles.dfn from loading properly Added entries for a couple of walls with missing no-shoot flags to tile overrides in dfndata/maps/tiles.dfn Updated JS Method .SoundEffect() to support optional third argument (creatureSoundNum) to play creature-defined sounds from dfndata/creatures/creatures.dfn. New syntax: .SoundEffect( soundID, allHear[, creatureSoundNum] ) // 0=SOUND_STARTATTACK, 1=SOUND_IDLE, 2=SOUND_ATTACK, 3=SOUND_DEFEND, 4=SOUND_DIE Added new Character JS Methods: .SetRandomName( nameListID ) // apply a random name from specified namelist to character .FindItemSection( sectionID ) // find item in player's backpack with specified sectionID Added new Socket JS Method: .OpenContainer() // Opens specified container for socket
2023-05-30 01:47:26 +08:00
}
return JS_TRUE;
}