Improvements to handling of UOP format; now takes a cleaner approach, loads files faster (punt)
Fixed a issue in JS/COMMANDS/TARGETING/add.js that would display 'undefined' in system message when adding raw/base items
Updated default jail time in JS/COMMANDS/TARGETING/jail.js (and in code) from 100000 seconds to 86400 seconds (24 hours)
All references in code and scripts to "midi" changed to "music", to reflect fact that modern clients don't actually even have midi files. This change covers both GM commands, DFN tags in regions.dfn and JS methods/properties.
Added new socket property for storing temporary int in JS - tempInt2
Added new socket property for storing temporary object in JS - tempObj2
Expanded XGO command in JS/COMMANDS/TARGETING/x.js to support optional world and instance parameters
Fixed an issue that prevented characters from vanishing from the the sight of players when teleporting to a different instance
Added support for ClassicUO client's WorldMap tracking packet (0xf0) for guildmembers/partymembers. This is the same packet as Razor uses for feature negotiation, so merged the handling of those two packets together into CPIKrriosClientSpecial, which can also be extended to handle other uses of this packet.
Added new UOX.INI setting whether shard should respond to ClassicUO client's WorldMap tracking packets for guildmembers/partymembers
CLASSICUOMAPTRACKER=0
Misc changes to address errors and warnings when compiling on 64bit Linux
%li changed to %i
%lu changed to %u
Some (SERIAL) changed to (UI64)
Some size_t changed to UI32
Embraced the usage of R32, R64, SI16, UI16, SI32, UI32, SI64 and UI64 typedef aliases as replacement for built-in types throughout the sourcecode:
typedef float R32;
typedef double R64;
typedef signed char SI08;
typedef unsigned char UI08;
typedef signed short int SI16;
typedef unsigned short int UI16;
typedef signed int SI32;
typedef unsigned int UI32;
typedef signed long long SI64;
typedef unsigned long long UI64;
As part of this process, UI32 was redefined from unsigned long int to unsigned int, and SI32 from signed long int to signed int to ensure the size of variables using these remain the same (32bit) across both Windows, Linux and MacOS for both 32bit and 64bit platforms
Replaced instances of toLong() with toInt(), and toULong() to toUInt()
Replaced instances of "long" and "int" with SI32 where possible
Replaced instances of "unsigned long" and "unsigned int" with UI32 where possible
Replaced instances of "float" with R32 where possible
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
Added new JS Gump Methods:
AddPicInPic( x, y, gumpID, width, height, spriteX, spriteY ) // Add sprite image in dialogs, requires client v7.0.80.0 or above
AddImageProperty( serial ) // Add properties(?) of a specific item
Fixed a server crash related to world saves, where items being cleaned up were not being removed properly from the MapRegions they were in, resulting in a crash when attempting to save non-existent items out to the worldfiles.
Fixed an issue that could cause GMs to become permanently squelched
Fixed an issue where the newStatus parameter for the onFlagChange JS event was overwritten with oldStatus, and oldStatus parameter was never set
Updated onDeath JS Event to include a second parameter - iCorpse:
onDeath( pDeath, iCorpse ) // iCorpse is a reference to the newly created corpse of pDead
Disabled detailed logging of spells loaded from spells.dfn on startup - was causing unnecessary slowdown
Removed void Wiping( CSocket *s ) from cmdtable.cpp - unused and unreferenced function without a definition
Removed handling of IT_KEY doubleclicking in code, as this is now handled in JS
Removed bool isDoorBlocked( CItem *door ) from cPlayerAction.cpp - unused and unreferenced function without a definition
Removed void CorpseTarget( CSocket *s ) from targeting.cpp - now handled in JS
Removed broken cannon loading and spelldamage code - this should be done in JS instead
Items that initiate a target cursor on use are now stored in tempObj property of player's socket, and distance to these items are checked again after player targets something
House and boat deeds must now be in the player's inventory in order to successfully place a house or boat
Fixed superfluous arugment passed to switchGobletID function in js/server/resource/pitchers.js
Removed some duplicate/unused local variables in js/commands/custom/misc-cmd.js
Removed an unused local variable in js/commands/targeting/dupe.js
Fixed an issue with setting item type through the SET command
Fixed an issue where the number of arrows or bolts in player's inventory was potentially miscalculated in js/item/archerybutte.js
Fixed issue where pickpocket-dummy item visuals potentially didn't get updated properly in js/item/pickpocketdip.js
Fixed an unreachable return statement in js/npc/ai/stablemaster.js
Fixed incorrect ID for gargish maul in js/server/data/weapontypes.js
Added some missing variable declarations in js/commands/custom/repeatingcmds.js, js/commands/delid.js, js/commands/targeting/hide.js, js/item/food.js, js/item/key.js, js/npc/ai/stablemaster.js
Updated AddButton and AddPageButton JS Methods (and Docs) to include an optional argument for ID of button when pressed. If the extra argument is not provided, the methods behave like before, using buttonImage + 1 for the pressed button:
void AddButton( topHeight, topLeft, buttonImage, (buttonPressedImage) unk1, unk2, unk3 )
void AddPageButton( topHeight, topLeft, buttonImage, (buttonPressedImage), pageNum )
Changed RuntimeLibrary in Debug configuration in VS project file from MultiThreadedDebugDLL to MultiThreadedDebug to fix issues with unreadable characters in strings while debugging
Fixed potential issue with checking for number of arguments in CFile_Pos()
Fixed possible null pointer dereference
Converted some C-style pointer casting to C++ style
Added override specifier to some virtual methods that override base class virtual methods
Some function parameters are now passed as const references as they're not being modified in the called function
-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
-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()
-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
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)
-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)
-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 caused by changing an items layer
-Fixed a bug causing NPC's to always be the first attacker
-Armor DEF system overhauled to match OSI system
-Updated Hash Table Remove() calls to remove unrefrenced parameter "index"
-Changed cSocket::Get/SetDWord() to a UI32 to fix problems checking it against
INVALIDSERIAL and storing large serial numbers
-Changed cSocket::AddID() to a UI32 for the same reason as above
-Changed cSocket:::Get/SetWord() to a UI16 to fix possible problems storing ID's
-Fixed up calcStealDiff() to match new weight system
-Minor updates to CPStatsWindow to match the new Armor DEF system and Weight
system
-Fixed calls to getTileName() so the names container was set with MAX_NAME
-Fixed up getFieldDir() using direction typedefs
-Changed Get/SetMagic() to Get/SetMovable()
-Cleaned up some unrefrenced params
-Changed some int's to UI16's in books.cpp
-WorldSave Changes:
-XYZ and worldnum to Location=x,y,z,worldnum
-HiDamage and LoDamage into Damage=hidamage,lodamage
-Strength,st2,Dexterity,dx2,Intelligence,in2 changed to Strength=str,st2,
Intelligence=int,in2, Dexterity=dex,dx2
-DWord0-3 changed to DWords=0,1,2,3
-FX1,FY1,FX2,FY2,FZ1 changed to WanderArea=FX1,FY1,FX2,FY2,FZ1
-MoreX,MoreY,MoreZ changed to MoreXYZ=morex,morey,morez
-More,More2 changed to More=more,more2
-Type,Type2 changed to Type=type,type2
-Light,Rain,Heat,Cold,Snow,Lightning changed to
RaceDamage=Light,Rain,Heat,Cold,Snow,Lightning
-Fame,Karma,Kills changed to Reputation=fame,karma,kills
-Complete rewrite to the Weight system
-Weight is more permanent, removed need to recalc it constantly
-Packs now show the weight of themselves and all their contents
-Packs now have a weight limit (currently hardcapped to 400, should make it
based on type of container and possibly scriptable)
-All items use the weight value given to them in the scripts unless the entry
is 0 in which case they pull weight from the MUL's
-Better handling of overloaded for teleport / recall / walking
-Weight will max out at 65535 stones and can not go lower than 0 stones
-Items container is now set as a cBaseObject
-Fixed up itemsfx() and renamed it to itemSound(), now better handles Gold
sfx and where an item was dropped (ie in a pack or on the ground)
-Cleaned up goldsfx() and renamed it to goldSound()
-Many fixes to get/drop/wear/packItem functions
-Minor fixes/cleanups in movement.cpp
-Fixed a worldsave crash with tamed creatures
-Pressing 0 in console reloads items as well as everything else
-Made dagger usable for carve again
-Fixed a horse mounting distance check
-Noted (and in some cases fixed) unrefrenced variables throughout the code
-Converted inscribe.gmp to inscribe.dfn and used NewMakeMenu() in favor of the
old make menu system
-Updated GetMagic() == 3 calls to IsLockedDown() calls (as that is all it
should be used for)
-Fixed up all IsLockedDown() calls, resources that are LockedDown can NOT be
used, even by GM, until released
-Also note, items that should be usable if locked: Skill items (looms, training
dummies, etc, Recall runes)
-Moved the two functions from newbie.cpp to pcmanage.cpp and removed newbie.cpp
from the project
-Moved action() and impaction() to effects.cpp
-Moved isHuman() to npcs.cpp
-Where possible made functions that were part of classes private
-Made use of cCombat::getWeaponTyp