* fix various desyncs and inconsistencies which could possibly be resulting in leaks
* moving other landblock discard code to deeper in physics spawning to fix some oddities with faction / foetype mob 1-way tracking, and to improve scatter gen retries
* Step 1. Add new adapter classes and models
All classes and objects added are in new namespaces.
This add has 0 interraction on existing ACE code.
This sets the groundwork for Step 2. Moving World DB caching to the new models
* first part of the world entity usage
* almost there
* final part
* update WeenieExtensions
* fix
* merge fixes and improvements
* ACE.Database new code
* it compiles
* InitializePropertyDictionaries
* WOrldDatabaseWithEntityCache cleanup
* ShardDatabaseWithCaching
* ShardDatabase Cleanup
* todo
* cache counts reported in serverstatus
* House InitializePropertyDictionaries
* improve ServerStatus
* BiotaModel change HousePermissions to Dictionary<uint, bool>
* PropertiesAllegiance to dictionary
* BiotaUpdater improvements
* Shard Database Cache Reporting
* More code ported from Step 3
* Remove stub CharacterCache
* Update WorldDatabaseWithEntityCache.cs
* build fixes
* code audit
* Remove non-callback functions from SerializedShardDatabase
* BiotaUpdater progress.. only emote left
* Emotes done... now need to test
* fix
* Burden/Value fix for containers
* fat fingered EncumbranceVal
* add some safety
* Don't cache player biotas for initial PlayerManager load
* fix null spellbook
* Add another null check
This is redundant as the check is also upstream.
This is to prevent an exception in the future if this function is called from another source.
* Adjust debug output
* Add overrideable properties for region encounter generators
* override_encounter_spawn_rates bool
- encounter_regen_interval
- encounter_delay
* Allow camp generators to despawn
When a full "camp" is wiped, destroy it so the parent generator can roll the slot again
* Update WorldObject_Generators.cs
* Update WorldObject_Generators.cs
Data Error protection for crazy profile values
* Carry over Delay from profile template
* Update RemoveQueue info
* Adjust CurrentCreate to be calculated
This prevents out-of-sync issues currently seen in master
* Update changelog.md
* Update GeneratorProfile.cs
* Fix RegenOnClose
This fixes the issue were chests weren't calling their profiles generator.HeartBeat() because chest.ResetGenerator was false.
The fix is to process maintenance for generator profiles always, but only the spawn heartbeats conditionally.
This was tested using /crack and the pathwarden chest.
* Updated comment
* Drop loot to ground if NoCorpse is true for creatures
* Broadcast CasterEffect if spell has one
* Change Generators enable/disable to staged, change on 2nd heartbeat.
* Flags attribute
* empty statement
* Fix Formatting
* Fix OrderBy -> ThenBy
* use OfType
* Replace with asingle call to Count(...)
* Replace with a single call to FirstOrDefault
* Merge cast with type check
* use String.IsNullOrEmpty
* use collections count property
* use format specifier (results in shorter loc)
* use Any() instead of Count() > 0
* revert ThenBy with comment
* GeneratorHeartbeat() is now ticked independantly from Heartbeat()
There is no longer a DefaultHeartbeatInterval.
Heartbeats only happen if a HeartbeatInterval exists and is greater than 0.
Heartbeats are still staggered over heartbeatSpreadInterval (5s).
Generators will GeneratorHeartBeat() on the next tick after object construction.
However, if RegenerationInterval is 0, they will not beat again.
* woops
* move the IsGenerator check to the base WorldObject HeartBeat
* Move EmoteManager.HeartBeat from WorldObject to Creature
* Change WO HeartBeatInterval check to a NextHeartBeatTime
Suggestion from gmriggs
* check if HasEnchantments before EnchantmentManager.HeartBeat()
This still encounters a lock but still, the overall performance is very good here.
For extreme performance we could expose a non-thread safe HasEnchantmentsForTick function that checks the colleciton size without using a lock.
* switch Monster_Tick to use currentUnixTime instead of DateTime.UtcNow
* Only instantiate actionQueue when it's actually used
This reduces the overhead of calling actionQueue.RunActions() that queries a ConcurrentQueue for it's count.
* Expand /serverstatus report
* Fix ObjCell.FindObjCollisions InvalidOperationException
* use faster Queue.IsEmpty check in ActionQueue.RunActions
* Only set RegenerationInterval if > 0 (per gmriggs)
* Monster_Tick changes (per gmriggs)
* fix QueueFirstHeartbeat
* Add some UpdateGameWorld RateMonitors to /serverstatus
* Remove nullable from NextHeartBeatTime (was not needed)
Comparing a nullable to a non-nullable takes almost 2x as long as a non-nullable to a non-nullable.
* AgressiveInlining suggestions for the compiler
* Moving ACE.Server.Physics.Common.Random to ACE.ThreadSafeRandom
replaced the thread discriminator with a lock
renamed "Random" to "ThreadSafeRandom"
renamed "RollDice" functions to the standard "Next"
* deleted Source/ACE.Server/Physics/Common/Random.cs
replaced conditionally omitted and commented code with new name
* renamed source file
* Fixes for Anniversary Event emotes
* Add Pre+Permaload of Global Event Landblock
* Making requested changes
* Add correct check for GlobalEventLandblockPreloading
* Further requested changes. New config setup for Preloaded and Permaloaded Landblocks
* Minor cleanup
* Add a hardcoded fallback incase config file not updated
* Update example to fix syntax error
* Minor tweak to example and console output
* Refactored generators, improved RNG selection formula
* Removing calls to PerfTimer
* .
* Fixing AL/RL display in character info panel
* Fixing issue with MaxCreate
* Adding check for GeneratorDisabled status, cleaning up EventManager
* Removing int cast for latest version of DB
* Remove duplicate Timer from Physics.Common
* Clean up ACE.Common.Time and its usages
* WorldObject: Fix CreationTimestamp
* Remove PhysicsTimer which was just a class wrapping a double
* WorldManager.UpdateWorld Stopwatch Usage change
Before we were calculating the elapsed seconds manually with this:
(double)worldTickTimer.ElapsedTicks / Stopwatch.Frequency
The stopwatch can already do this for us via this:
worldTickTimer.Elapsed.TotalSeconds
* WorldManager UpdateWorld Summary improvement
* DateTime based tick removed from Tick() arguments
* No need to pass DateTime.UtcNow.Ticks to Session.Tick
* LastMovementBroadcastTicks was obsolete
Probably souldn't be referencing WorldManager.PortalYearTicks as well.
If we need this in the future, it's probably better to reference DateTime.UtcNow or Time.GetUnixTime()
* Fix WorldObject.Tick() overhead
* Revert "WorldObject: Fix CreationTimestamp"
This reverts commit 457bebc48e.
* PhysicsTimer stuff
Move the Timer back to the Physics namespace and rename it PhysicsTimer
Change some references from PhysicsTimer to DateTime.UtcNow
* timeBeginPeriod and timeEndPeriod added for Windows to improve timer resolution
* ServerManager Shutdown was using 100% cpu
* Fix the usage of CreationTimestamp
* CharacterHandler should not be setting default values. Player ctor should.
* EmoteManager switched from PhysicsTimer to DateTime.UtcNow
* Use PropertyInt and not PropertyFloat for LoginTimestamp
* Fix Session GetAll() to also include sessions that are at the character selections creen
* Adding the ability for players to buy houses
* Updating Property IDs
* Fixing links
* Updating purchase time to match AC data, calculating rent time dynamically
* Processing nested links recursively
* Fixing HandleActionForceObjDescSend error message
* Adding weapon speed mod
* .
* Updating attack animation speed to be accurate to retail.
Huge thanks to Sluashnas for figuring this out!
* Adding missing =
Thanks again to Slushnas!
* Removing previous code
* SaveBiota major changes
SaveBiota now only updates values in the database that have changed instead of updating every single value.
In addition. SaveBiota detects added and removed linked entities.
* Replace AddBiota(s) with SaveBiota(s)
* This improves the way a few places referenced the biota
* SaveBiota switched to a diff method. Still some work to do
* More notes + fixes
* SaveBiota move GetBiota to before EnterWriteLock
* Added a note about the lock performance
* More summary improvements for BiotaDatabaseLock
* Thread safety added to the SaveBiotas and AddBiotas functions
SavePlayer also switched to use the SaveBiotas bulk action instead of saving each biota individually.
* Biota.Clone() added
* BiotaExtensions cosmetic only
* DbUpdateException fixed
If there were multiple new records in a collection, the first one was attached but with the last new records values.
This would end up resulting in property records with duplicate types id's.
* ReoveBiota check if biota actually exists in db before removal.
* /databasequeueinfo added
* New From-Weenie Containers should not be searching the shard for inventory
* DeveloperDatabaseCommands removed RequiresWorld flag
* Improved DatabasePerfTest results.
* Adding landblock unloading system, and player corpses
* Adding dropped items to player corpse
* Adding landblock unloading system, and player corpses
* Adding dropped items to player corpse
* Adding permaload flag, and updating TimeToRot on landblock unload
* Adding corpse looting permissions
* Adding stack sizes
* Cleanup