This will at least somewhat improve performance, as confirmed through microbenchmark testing.
const fields are replaced with literal values in the Assembly's IL code, while static readonly fields may be optimized by the JIT, and is not guaranteed to happen. const fields may also lend themselves to stronger optimizations at runtime.
* adding preliminary support for dual-wielding monsters
* fixing monster special attack fx
* improved monster combat maneuvers table
* adding dual wield speed modifier for mobs
* fixing mobs casting flame wave
* adding support for EmoteManager.CastSpell untargeted spell projectiles
* fixing untargeted Blast spells
* fixing blast spells
* fixing spell z-angle
* re-add Emote.Move* physics position sync w/ valid rotation check
* wip
* latest wip
* cleanup
* small position adjustments
* matching create.Y formula up to retail pcaps
* refactoring spell projectiles
* startPos based on targetPos instead of casterPos for strike spells?
* improved strike spawn position
* add error logging
* add support for peturbation, improve ring positioning for even # of projectiles
* adding /clearcache for content developers
* fixing boost variance
* adding quadrant stuff
* splatter dir
* better usage of body part quadrants for physical attacks
* found CMTs with multiple entries per lookup key, cycle through anims
* fixing portal gems
* prototype: adding account-wide house recall
* updating restriction db / has permissions
* additional ObjMaint refactoring
* re-adding CheckPlayers()
* the call to GetVisibleObjects() in Monster.FindNextTarget() is no longer needed in new design
* removing more unused code
* very preliminary testing
* prevent 1 character from purchasing multiple houses
* adding account/character houses
* further work on AccountHouses / CharacterHouses
* latest updates, account/character multihouse polish, apartment deed location
* adding /house-select process
* HouseManager refactoring, removing async, fixing PlayerHouse.CompareTo equals, fixed InventoryLoaded for weenies, added Player_House.GetHouseInstance()
* first posted draft
* wiring up the remaining HouseInstance -> GetHouseInstance()
* preventing maintenance items from being added for houses owned by players in multihouse state
* cleaning up log messages, handling some edge cases
* Adding max distance for CreateObject
* ...
* Reverting last change, the original was correct
* Update from testing, for objects re-entering visibility
* Landblock EnqueueBroadcast cleanup
Avoid double cast by using OfType
Change excludeList from IEnumerable to ICollection because it was being enumerated more than once.
* SerializedShard handle OperationCancledException
* SerializedShard break on the exceptions
* Landblock save progress
* Landblock merge fix
* Decayable -> Dynamic
* Improved ShutdownServer to include landblock unload and db queue wait
* Sleep during shutdown instead of using up all the CPU
* Shard GetDynamic was comparing against the wrong id... woops
* Fix shard biota caching
* Improve shutdown logging and actions
* cosmetic code order
* Fix crash when trying to add a bad wo to a landblock
* This fixes reloading dynamic objects
* Don't save item on pickup
* Don't save item on pickup from chest
* Don't save items on drop
* Set Home Position only for creatures (Used for navigation)
* Improve the landblock SaveDB code
* Don't save player corpse on death. Landblock will do that for us in bulk.
* Add the housing objects to statics that persist to the shard
* WorldObjectFactory dont overwrite location if object came from database
* Improved IsStaticThatShouldPersistToShard
* This should fix player dropped missiles
* Move PositionType into ACE.Entity.Enum.Properties
* Ephemeral support for Positions
* Decay code/saving works much better
* Filter out contained and wielded items from shard GetDynamicsByLandblock
* TimeToRot provision for -1 (No rot)
* Corpse decay is now controlled by landblock and uses the same decay code
* ShardDatabase: Fix add/remove biota bug
* WorldObject.Destroy now destroys contained and equipped items as well
* TryRemoveFromInventoryWithNetworking no longer removes the object from the db
* Player corpse items now remain when the corpse decays
* Cleaned up SetPropertiesForWorld
* Fixing jump in multiplayer, refactoring movement and animation systems for network and game layers
* Fixing stamina dropping to 0 while running
* Fixing some monsters getting stuck if they wakeup during idle emote
* Reverting position
* Fixing magic aftercast speed
* Improved monster timing / server animation sync
* Improving accuracy of mob archers
* Changing default creature stance from Invalid to NonCombat
* Fixing some emote stuff
* Fixing player launching last arrow in stack
* Removed unused properties and added a couple more to support the new refactoring.
* Lots of refactoring and adding layers of abstraction to make addition of new spell types easier.
* Fixed global positioning system to use IsDungeon instead of Indoors
* Adding support for projectiles launched from inside buildings
* Adding PositionExtensions
* Fix EnqueueBroadcast line.
* Add ACE.Server.Entity namespace.
* Add support for untargeted war spells.
* Add support for ring and wall spells and a couple of fixes.
* Add supoort for ring, wall, and blast spells plus some refactoring.
* Small fix to wall padding.
* Remove ParentWorldObject property as it is a duplicate of ProjectileSource.
* Fix some physics bitfield issues for Volley, Blast, Ring and Wall spells.
* Remove redundant PlayScriptIntensity calculation.
* Major overhaul of player visibility / broadcast system
* Removing some debug lines
* Fixing /telepoi
* Removing CreateObj != newlyVisible from debug msgs
* Update for adding objects to landblocks
* Fixing projectile spawning
* Fixing portals for multiplayer
* Fixing /telepoi for multiplayer, and successive item pickup from landblock
* Fixing pink bubble state for multiplayer
* Fixing double broadcast bug
* Adding ObjMaint destructor
* Voyeur cleanup
* Fixing wielded items lingering around after player logout
* Allegiance WIP
* Ranks, XP passup calcs
* Granting Allegiance XP passup to patrons
* Commenting debug messages
* Fixing Allegiance tab
* Adding Allegiance exceptions
* Adding break allegiance
* add ability to /tele players by name (#823)
* add ability to /tele players by name
* command parsing resiliency
* Give Request fix (#824)
* Give Request fix
Selected Wielded Objects as well as Inventory Objects. This fixes crash of gioving wielded objects to the town crier.
* Deleted unnecessary semicolons
* requested return for null
* UI panel refresh, apply XP earned by vassals on login
* Unequip and burden correction (#826)
* Add a configurable property storing database to resolve issue #753 (#820)
* Added the configuration database base script.
This should initialize the config database to hold different values that can be changed during the server operation.
* Added database models and connection.
This should begin to add in the new configuration database and its models so that it can be accessed from the server.
* Added boolean statistic access methods.
Modified the database file so that it was properly casting to a boolean and added the methods into the server configuration database API.
* Added the ability to access/modify integers in the config database.
* Added the ability to access/modify floating point variables in the configuration database
* Added the ability to access/modify string values in the configuration database
* Added the ServerConfigurationDatabase to the DatabaseManager.
* Added in the initial caching layer for configuration
* Added the ability to modify cached items.
* Changed from regular dictionaries to concurrent dictionaries.
* Added in the ability for the ConfigurationManager to self-update from the database.
* Added fallback parameters instead of forcing a default
* Added customizable vitae statistics.
This is the first big stat that can be modified. It is a float, so more floats should now work when they have support added.
* Updated the configuration manager to separate methods and ensure semantics are correct.
* Added command to fetch float value from server
* Add property for XP/Lum multipler.
* Welcome message/MOTD is now configurable from the database.
* Added string modification commands
* Database is no longer required for server configuration.
* Added in all modification/fetch commands and a resync command
* Renamed ConfigurationManager -> PropertyManager as this removes ambiguity
* Changed logging string to be more consistent
* Pass w/ StyleCop
* Added comments to the property manager
* Added the ability to disable caching fallback values.
This can be used for default settings or if a fetch with the default fallback should not cache (ie fetching xp_multipler before xp_multiplier has been fetched from the DB/the default value has been given, and therefore xp_multiplier is fetched as 0 and cached as 0). This functionality should be used for server commands.
* The admin commands now properly obey cacheFallback restrictions
* Added initial default property handling.
* Moved to using constant values as defaults.
* Switched to using a Dictionary for resolution of default properties
* Added warning when the server configuration database is not loaded.
* Corrected MOTD default string
* Renamed some of the database connection objects and changed float -> double and int -> long
* Fixed admin commands not being named correctly
* Fixed spelling error
* Config tables now lie in the shard database
* Added descriptions to properties across the board that can be analyzed through admin commands
* Removed property from PlayerXP file
* Removed vitae properties from EnchantmentManager
* Added null checks to make output nicer
* Added command to modify property descriptions
* Fixed string not being stored properly in the DB and crashing the server
* Wrapped the old ServerPropertyDatabase into SerializedShardDatabase
* Fixed ShardDbContext having a modified OnConfiguring method
* Allegiance WIP
* Ranks, XP passup calcs
* Granting Allegiance XP passup to patrons
* Commenting debug messages
* Fixing Allegiance tab
* Adding Allegiance exceptions
* Adding break allegiance
* UI panel refresh, apply XP earned by vassals on login
* Smite + Corpse Spawning
* Changing GameEventSequence to 1
* Better corpse placement
* Pixel perfect corpse drop
* WIP: /smite all
* Creature Corpses with Clothing appear correctly
* Corpses are in fact Containers
* cleanup
* more cleanup
* even more cleanup
* Removed unused using statements
* Removed redudnant ToString()'s
* Removed some redundant type casts
* Removed redundant bool comparisons
* remove redundant initializers
* xml summary in invalid place switched to comments
* Use string interpolation
* use format separators
* Removed redundant parenths
* remove redundant else
* direct cast when safe
* redundant string interpolation
* xml summary fixes
* removed empty ctors
* fix modifier order
* Convert to auto property
* Convert some getters to method bodies
* use format separators
* changelog
* Auto-properties that can made to get-only
* fixed some references in XML comments
* remove redundant base()
* Revert "Auto-properties that can made to get-only"
This reverts commit 32a1225ce8.
* fix starter gear json
* Use collections count property
* simplify conditional ternary expression
* remove redundant return statements
* Constructors for abstract classes changed to protected
* Moved declarations to inner scopes
* Join declaration and assignments
* inline out variables
* Use enum extension methods instead of static methods
* inline out more variables
* more unused usings
* Remove specifying enums as ints
* Clean up sql scripts
* Cleanup sql scripts
* Calculate correct ObjCell
* Missing Weenies in DB catches
* Changes for ObjectDescriptionFlag, PhysicsState and a few defaults for Lifestone/Bindstone
* Add Shade, Palette and StackSize to Create command
* Slight SQL script adjustment
* trying to find problem with AppVeyor
* Restore TryToBond
* Invert...
* clearly modifying this file is the cause....
* Restore removed fields
* Revert "Restore removed fields"
This reverts commit 9f2ea0c808.
* Add Shade and Palette to WorldObjects
* Remove WieldObject Hack
* Wielding Clothes and Face Randomization
* Update changelog
* Testing Json attribute
* Stupid appveyor
* I give up
* Fixing a really dumb error which lead to the problem as well as improving the AppVeyor output
* Clean up some left over code
* Adjust code to match changes upstream
* Change >> 1) & 1 to & 2
Cosmetic change pointed out by Rawaho.
* Better fix of the Portal Flags in the dat code
* ACE.DatLoader refactoring
This new code format uses extention methods to re-use code. It allows decouples object unpacking from DatReader and reduces the dependancy to a simple BinaryReader.
* Forgot to remove the temp StarterAreas code from the transition
* Some files were ignored, not sure why. This should fix
* Fellowships
* Fellowship updates for most actions
* * Added saving of "ignore" and "auto accept" of fellowship requests
* Added functionality to GetCharacterOptions
* Confirmation processing - Need to clean up contextID gen
* Fellowship checkpoint
* Adding corrected GameEvent
* New method to create contextID for confirmations
Fix to assignnew leader
Added Change Openness of fellowship
* Adding missing Gamemessage
* Added EarnXP with two bool for fixed and to share xp to handle earning non-sharable xp while in fellowship as well as fixed xp amounts for certain quests
Refactored Grantxp to use new method that other xp earning methods can use
Added X & Y only distance calc to Position for fellowship distance calc
* Update changelog.md
* Adding fellow full handling
* Update EmoteCategory, EmoteType and SpellType enums
* Add CombatStyle enum
* Rebase SQL scripts
* Change uint to int in SQL
* Adjust SpellType
* Changed all PropertyInt properties from uint to int
* Some CombatStance work + StyleCop clean up
* Update README
* Updated ACE-World requirement and appveyor
* WIP for fantoms to take a peek
* more API WIP
* always forget the stupid changelog
* fix for swagger built-in auth
* more WIP for ace.web - cookie stuff stubbed in. also fix for large tickets exploding the server.
* * Refactored debug command learn spell.
* Made spells persist to the database.
* Added abilty to delete spell from spell book and send that persistantly to the database on character save.
* TODO: Put in the abilty to use scrolls to learn spells.
* Update comments
* typo in method name
* * Initial work on combat mode. System now will move into and out of the correct combat mode depending on what items you have equipped.
* TODO: There are some edge cases I still need to implement and additional testing. I would like to get this in so that I do not run into huge merge issues later on.
* Testing - you can log in - run @weapons after log in. This will get you various weapons based on weapon type. You can go into and out of combat mode
* Melee, missile - both bow and xbow, thrown, sword, UA, two handed as well as dual wield. I also implemented if you remove your weapon while in combat mode,
* you will drop into unarmed. If you equip an item and you are not in peace mode, you will assume the correct combat mode. There may be some tweaking needed
* for changing combat mode in combat mode - I think it did some slower animation - but the basics are in and I can tweak the sequence once I talk to players or If
* I can find a pcap with that behavior.
* Updated per ddevec's feedback.