* mitigate odd client behavior when swapping bows during repeat attacks, fix possible CurrentMotionState.Stance thrashing and possible dps increase
* further fixes to prevent CurrentMotionState thrashing / arrow visibility while stance swapping after launching first arrow w/ repeat attacks
* add motion copy constructor
* improve autonomous motion persistence through non-autonomous actions for missile combat
* fixing more state desync bugs when going into magic combat. it wasn't just autorun unfortunately, and has more to do with unresolvable bugs that originate on the client when entering magic combat mode.
* latest updates
* 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.
* fix corpses spawning frozen in mid-air
* updating fields
* /movetome admin command
* adding /showvelocity dev command
* only applies to player killers
* ensure corpse items are saved correctly if server crashes
* backporting Player_Magic refactoring from 1991
* fixing gap with untargeted void spells
* adding isWeaponSpell check to HasComponents
* adding null check to OnAttackMonster
* .
* adding /debugbusy temporary debugging command for ce
* temporarily revert chaining to old version
* more revert to exact original functionality + new architecture
* adding null checks
* IsBusyCompleted
* adding /castlog for debugging DM
* limiting CurrentMotionState thrashing from EnqueueMotion
* temp fix until concurrent dictionary
* removing debug code
* .
* WIP: Multi-thread landblock ticking
This is the start of "landblock group" ticking.
The idea behind the landblock groups are that each group may contain multiple landblocks that must be ticked on the same thread, but, each group itself can be ticked on independant threads.
The current groups are as follows:
Every outdoor landblock is in a group
Every dungeon landblock is in it's own group (one per dungeon)
This is not ready for public servers yet.
* More changes
* First pass at actual groups
* ObjMaint.KnownPlayers needs to be concurrent
* Removing original PoC code from LandblockManager
* Landblock Tick Cleanup
* VisibleObjects also needs to be concurrent
* DestructionQueue also needs to be concurrent
* KnownObjects needs to be concurrent
* Use a bool to toggle multi-threading
* Add thread safety to SequenceManager
* Move landblock phsyics ticking to LandblockManager
Also
* Cleanup log.Info level messages
Log.info is the default console output and is intended for:
server startup
connection/disconnections
admin initiated command output
server shutdown
Log.Debug is the appropriate level for debug-type messages that are to be logged and audited at a later date, but not output to the console.
* Missed a couple
* Move HandleSalvaging from Warn to Debug
* Add thread safety to Landblock
* More landblock group calc stuff
* couple comments
* Add some thread capping
* Limit database from taking all the threads
This adds limits to the database thread consumption.
It also should allow the world to now consume threads easier.
The way it is done is as follows.
- We determine the number of available threads using Environment.ProcessCount
- We allocate (int)Math.Max(Environment.ProcessorCount * .34, 1) to the World, and the remainder tothe database.
It breaks down as follows
1 vCPU = 1 thread world, 1 thread database
2 vCPU = 1 thread world, 1 thread database
3 vCPU = 1 thread world, 2 thread database
4 vCPU = 1 thread world, 3 thread database
5 vCPU = 1 thread world, 4 thread database
6 vCPU = 2 thread world, 4 thread database
7 vCPU = 2 thread world, 5 thread database
8 vCPU = 2 thread world, 6 thread database
9 vCPU = 3 thread world, 6 thread database
10 vCPU = 3 thread world, 7 thread database
I'd like to get some feedback from this PR on various sized servers.
What you may notice is that loading a player may take slightly longer (very slightly).
What you will probably notice is no discenerable difference in-game.
What I want to make sure happens is that the world doesn't end up feeling more choppy due to the parallel processing of outbound network traffic. Hopefully the more fair thread distriubiton will help prevent thread starvation.
* quit if not enough vCPU
* separate landblock group recal between add/remove
* revert landblockMutex in Landblock.cs
* World Manager AboveNormal thread priority.
* Add some tags
* Couple more
* Create LandBlockGroup entity
* remove space between tags
* Update the log4net examples
* Efficiency improvements
* fix message
* more WIP
* Improve log4net
Add color to console output
Make the default logger use Log4Net.Async
* WIP
* More WIP
* more WIP
* More WIP
* more WIP
* More WIP
* more WIP
* wip
* more WIP
* remove old processor count check
* Create ServerObjectManager
This removes the ServerObjects collection out of ObjectMaint into it's own class.
This paves the way for thread safety that will need to be added to ObjectMaint for the multi-threaded landblock groups.
* Only split if multi-threading is enabled
* remove comment
* ObjMaint refactor
* all obj maint collections are now private
* few more optimizations
* alternate objectmaint thread safety model
* fix
* Remove a couple of comments
* improved ObjectMaint locking
* lock (ThreadConfiguration.WorldLockObject) OnDeath
* progress
* set MultiThreadedLandblockGroupPhysicsTicking to false
* Move a bool
* add lock
* physics ticking thread safety improvement
* use Config.js for thread configuration
* Add config comments
* measure physics ticking performance
* /serverstatus info added
* comments
LandblockManager:
- Improved locks
- Only sets adjacents on GetLandblock if the landblock was just loaded, or, if loadAdjacents was set
- Now passes the adjacents to the physics landblock instead of asking the physics landblock to recalculate their own adjacents
ACE.Server.Entity.Landblock:
- _landblock renamed to PhysicsLandblock
- contructs the phyics landblock directly instead of using LScape.get_landblock
- Has a new Init() function that should be called after ctor to actually init the landblock
ACE.Server.Physics.Common.LScape:
- local landblock management is only used if Physics.Engine.Instance.Server is set to true
ACE.Server.Physics.Common.Landblock:
- Local adjacent calculation has been removed. IIRC, the 3rd party tools do not deal with adjacents.
ACE.Server.Physics.Common.ObjectMaint:
- To get a list of ServerObjects in the area, the work (funciton) has been added to the physics landblock class where it can more easily be made thread safe
* WIP
* '
* WIP
* Beginnings of icon_overlay handling
* Remove ability to 'Lower' Chest Armor
* Update shard to work with master
* Update handling of armor items with IconOverlay
* Update ShardDatabase.cs
* Revert "Update ShardDatabase.cs"
This reverts commit 25d8ae8964.
* Revert "Update shard to work with master"
This reverts commit 9f21fbaf65.
* Add NonTracking spell property.
* Fix DefaultScript and DefaultScriptIntensity serialization.
* Give EncumbranceVal a default value of 0.
* Add support for Curse of Raven Fury spell and some minor refactoring.
* A few minor tweaks.
* Add CasterEffect
* 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
* Switch Physics WeenieObject to hold a weak reference to WorldObject
This is mainly just a test to see if it's the physics engine that's holding into references, or something else.
This *should* allow WorldObjects to be garbage collected even if their physics counterparts haven't been released.
This is a test mainly for CE.
* Fix exception
* null checks added
* Skip Burden in CreateObject if object is Creature
* Update PlayerDescriptionEvent for pulling correct WeenieType and HasHealth bool
* Stop sending all children equipped items
* Allow Ammo to be seen by others, if not in peace mode
* whitespace issue