Commit graph

22 commits

Author SHA1 Message Date
Ty Conner
74cce13847
Cache ServerVersion.AutoDetect (#4256)
* Cache ServerVersion.AutoDetect

Adjusted database connections so that they cache ServerVersion.AutoDetect result on first hit and reuse.

This resolves a current bug that exhausts or times out connections to database.

* Change to dictionary

* Update Source/ACE.Database/DatabaseManager.cs

Co-authored-by: gmriggs <gmriggs@gmail.com>

* Update DatabaseManager.cs

* Update DatabaseManager.cs

---------

Co-authored-by: gmriggs <gmriggs@gmail.com>
2024-12-18 12:17:00 -05:00
Ty Conner
533b037488
Prevent future instances of dynamic GUIDs in World Database (#3420) 2021-01-16 16:24:42 -05:00
Ty Conner
e4e7397945
Add Shard Biota cache configuration options (#3368)
* Add Shard Biota cache configuration options

* Update Config.js.docker

* Update Config.js.docker
2020-11-20 12:30:18 -05:00
Ty Conner
4a24710f4e
Fix spell bar position save issue (#2918)
* Fix spell bar position save issue

* Update 2020-04-11-00-Update-Character-SpellBars.sql

* Switch CharacterPropertiesSpellBar to composite key

* Fix incorrect indexes in SpellBars

* Update ShardDatabaseOfflineTools.cs

* Update PropertyManager.cs

* Update DatabaseManager.cs

* Update 2020-04-11-00-Update-Character-SpellBars.sql

* Update 2020-04-11-00-Update-Character-SpellBars.sql

* Update ShardDatabaseOfflineTools.cs

* Update 2020-04-11-00-Update-Character-SpellBars.sql

* Update ShardDatabaseOfflineTools.cs

* Update DeveloperDatabaseCommands.cs

* Update Program.cs

* Update 2020-04-11-00-Update-Character-SpellBars.sql

* Update 2020-04-11-00-Update-Character-SpellBars.sql

* Update ShardDatabaseOfflineTools.cs

* Update ShardDbContext.cs

* .

* Update DeveloperDatabaseCommands.cs

* Update DeveloperDatabaseCommands.cs

optimizations by @gmriggs

Co-Authored-By: gmriggs <gmriggs@gmail.com>

Co-authored-by: gmriggs <gmriggs@gmail.com>
2020-04-12 17:01:22 -04:00
Mag-nus
75fc1ce23c
Step 3. Convert ShardDatabase/WorldObjects biota from the ACE.Database model to the new ACE.Entity model (#2731)
* 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.
2020-04-02 22:40:27 -05:00
Mag-nus
c1d480a01a
Step 2. Convert WorldDatabase Weenie Cache from the ACE.Database model to the new ACE.Entity model (#2702)
* 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

* More code ported from Step 3

* Update WorldDatabaseWithEntityCache.cs

* GetCachedCookbooks(recpieId) -> GetCookbooksByRecipeId(recpieId)

* build fix

* changelog
2020-03-02 08:03:50 -06:00
Ty Conner
8179766e18
Update project to include database scripts for publishing (#2736)
* Update project to include database scripts for publishing

* Update ACE.Server.csproj

* Auto setup/init for SQL dbs

* Update VersionConstant.cs

* Update Program.cs

* Update Program.cs

* Update Program.cs

* Automatically promote first account to Admin

* Update Program.cs

* Update Program.cs

* Update Program.cs

* Update ACE.Server.csproj

* Update ACE.Server.csproj
2020-02-29 16:58:29 -05:00
Mag-nus
c61acf7a01
PropertyManager Database Cleanup (#940)
Previously, PropertyManager used SerializedShardDatabase to wrap it's database calls.

This didn't make much sense because SerializedShardDatabase was basically just a wrapper that serialized calls to ShardDatabase.

So, instead, we now have a ShardConfigDatabase class as well that is held by DatabaseManager. This holds the property/config specific funcitons for the shard.

In addition, there were a couple bugs fixed in PropertyManager where a function migt have been GetLong() when it should have been GetDouble(), etc...
2018-08-10 13:52:19 -05:00
Ty Conner
eb59e587ec Missed the null check after loading 2018-03-18 20:06:15 -04:00
Ty Conner
9810a26f91 Adding a catch for likely empty databases 2018-03-18 20:01:22 -04:00
Mag-nus
a162905b1c WIP: Switch Database system to Entity Framework Core, DB First (#633)
* AuthenticationDatabase switched to Entity Framework Core, DB First

* Adds AsNoTracking() for performance and implements CreateAccount() instead of AddAccount()

* woops

* Auth db no longer needs to be init, or inherit from Database

* test fix hopefully

* Database objects in ACE.Entity would no longer be required

* Major WIP

* more progress

* AuthenticationDatabase switched to Entity Framework Core, DB First

* Adds AsNoTracking() for performance and implements CreateAccount() instead of AddAccount()

* woops

* Auth db no longer needs to be init, or inherit from Database

* test fix hopefully

* Database objects in ACE.Entity would no longer be required

* Major WIP

* more progress

* include missing CharacterCreateInfo

* GetCharacters changes to show how we can use the propertybag for these values

* Lot of progress with the WorldObject code

* comment add

* add biota to CreateWorldObject for loading inv from db
2018-03-06 04:35:48 -05:00
Mag-nus
ef34494e7b
ACE.Database refactoring (#632)
* ACE.Database cosmetic cleanups before I try to fix performance

* ACE.Server: Arrange initialization of manager in a more appropriate order

* This removes the interfaces from ACE.Database

* World should be init before shard
2018-02-10 06:05:13 -06:00
Mogwai-TheFurry
610c2d0573 Authentication overhaul and API start (#543)
* WIP

* WIP - MVC app for weenie editor with auth overhaul in place

* removed redundant project

* more WIP.  commiting to rebase

* WIP.  API works, auth partially tied in, swagger works, api host works

* moved auth to a post with a body instead of get

* WIP.  auth fully works.  swagger UI supports auth model.

* added easier auth attribute, updated existing methods for consistency.  should PR this after a couple more hours

* stylecop cleanups

* WIP. commiting to get help with session and connection issues

* forgot to save some changes to a sql script

* got all the login issues squared away.  new auth system is done.

* WIP. getting an out of memory exception i cant track down

* WIP.  PacketInboundLoginRequets reads the JwtToken with 2 bonus (invalid) prepended characters

* updated ReadString32L to suck a little less.  i dont think this is 100% correct though.

* Authentication overhaul complete, APIs begun to support content editing

* appveyor cleanup

* appveyor cleanup, take 2

* appveyor cleanup, take 3

* appveyor cleanup, take 4

* Rename 2017-10-20-auth-overhaul.sql to 2017-10-20-00-auth-overhaul.sql

* Rename 2017-10-20-auth-overhaul-shard.sql to 2017-10-20-00-auth-overhaul-shard.sql

* Rename 2017-10-20-auth-overhaul-world.sql to 2017-10-20-00-auth-overhaul-world.sql

* Update MySqlInstall.bat
2017-10-21 13:32:06 -04:00
Charles
f530f14de0 Wastin' away again in Splitsville (#451)
* * Initial work on splitting a stackable item.   This is working and in an action chain.   Right now, it is only working for items
* in your position.   I need to extend it to work with items in chests and off the ground.
* There is some new type of sequence that we need to research and implement.   I put a big todo in the code.
* I made some posts about getting guid manager going.   We are at a point where we need it.   I modified some of the ranges to make better use
* of our guid space.
* TODO - find out about sequence and then do stack which is the complement function from split.

* Saw some items I needed to clean up after I pushed the PR.

* Removed duplicate function.

* Start putting in DB Read

* made weenie range a little bigger

* Put in ddevec coding for db lookup on server startup.

* Cleaned up comments and unused using statements.
2017-07-07 19:11:49 -04:00
Mogwai-TheFurry
344f6ec46e Shard database serialization with ddevec fixes (#438)
* wip. major async breakage

* sorta working

* Cleaned up concurrency issues.  Required some locking/monitor nonsense.

* updated changelog

* .
2017-06-30 08:08:43 -04:00
Mogwai
943e918d74 added weenie caching layer, fixed portals, fixed null ref exception in the object factory, though I highly doubt i fixed the real issue. 2017-06-26 22:36:13 -04:00
Mogwai-TheFurry
c3184a08fa Object overhaul (#384)
* Object overhaul - clean up enums (#337)

* Give property enums a static value to aviod positional fubar later on.   Cleaned up using.

* Cleaning up enums

* Fixed Line ending update change log.

* Review & Comment only || Object overhaul - POC  (#339)

* Give property enums a static value to aviod positional fubar later on.   Cleaned up using.

* Cleaning up enums

* Fixed Line ending update change log.

* Added new positionType

* Started work on implementing object overhaul - want to make sure I am heading in the right direction.

* Minor clean up, responded to feedback and fixed a few bugs.   Thanks for the second and third set of eyes.

* Object Overhaul - ready for review and merge.    Still Work in Progress but a good spot. (#341)

* Give property enums a static value to aviod positional fubar later on.   Cleaned up using.

* Cleaning up enums

* Fixed Line ending update change log.

* Added new positionType

* Started work on implementing object overhaul - want to make sure I am heading in the right direction.

* Minor clean up, responded to feedback and fixed a few bugs.   Thanks for the second and third set of eyes.

* Continued work.   Please review as these are a LOT of manual changes.   Compiles and you can log in.

* Continued work.   I have all of the items pulling from properties now.   Still work to make baseAceObject and AceObject on thing / finish work around workmanship and actually kick the tires and start pulling data.   Sorry this is taking so long.

* Had time for a few more and cleaned up whitespace.

* Good point to check in.   All of the property tables are hooked up and loading data.   I created the workmanship hackery we discussed.   As always comments and suggestions much appreciated.

* One quick shot to fix appveyor before bed.

* * Continued work on Overhaul
* Created mapping cross reference file to faciltate docuatation and cleaning up names - work in progress https://goo.gl/eaaNQb
* Created new database schema for world_object - modified mysqlinstall.bat to refect new baseline
* created script to ETL old schema to new schema.   I have not included it as we will be refactoring the initial data load to use the new
* schema according to Ripley.   I have the script tested and posted on my dropbox if anyone wants it.   I also have a complete data dump that
* zips down to a manageable size.
* BaseAceObject is now using the new schema
* I re-hooked up telepoi to use the new schema.   Still to do, convert to constructed statement
* Next steps - refactor AceObject and make sure world objects load again.
* Once that is complete - start same process using clone of this schema for character as discussed.

* renabled more data loading.

* Continued work on hooking data back up.   Working on moveto debug command - this creates a world object.   Not quite there yet.

* WIP

* Making progress.   Test object able to be spwaned from new schema.   Still to do, renable constructed statements, clean up and re-enable the other constructed statements.

* updated worldbase

* * Intital work done for new schema.   Rebased and removed update sql files. (#353)

* Tested and the auto setting of Physics and Weenie Header Flags looks really solid.   Side note, the values we have
* in the database for weenieHeaderFlags and PhysicsDescriptionFlag should probably be dropped we don't read them or use them now.
* Doors, portals NPC's and signs are all back in the world now.
* I would suggest we remearge with the main branch sooner rather than later - we can create another branch to introduce these
* changes into the character side.
* TODO items:
* Creature spawns need to be refactored - I left them commented out.   We need to ditch seperate tables that we have now, I think all
* creature can use what we have now, plus maybe two additional world tables.   Everything else fits into the current schema.
* Test Ripley data and update ACE_World.
* Refactor portals - I just left the old way in and faked it out with a view.
* Once this looks good and stable and we fix any found bugs - we need to clone this over to the character database and start refactoring
* That will get us to persisted inventory.

* Objects - Game data refactored - issue with character login (#355)

* wip

* WIP - character login is trying to persist a world object

* Still throwing an exception on player login.

* Working Code - finished GameData - need to complete PhysicsData and ModelData.   Thanks to @Lidefeath for finding my issue.

* WIP compiles but has error on run.   Data changes have broken something.   Will fix tomorrow.

* Wip - nothing really working yet.   I can log in but item creation is not working.

* Objects (#357)

* wip

* WIP - character login is trying to persist a world object

* Still throwing an exception on player login.

* Working Code - finished GameData - need to complete PhysicsData and ModelData.   Thanks to @Lidefeath for finding my issue.

* WIP compiles but has error on run.   Data changes have broken something.   Will fix tomorrow.

* Wip - nothing really working yet.   I can log in but item creation is not working.

* Best attempt stabbed (#358)

* wip 1

* wip 2

* wip 3

* wip 3

* i think thats it for now.  good luck!

* Read cached characters and launch to char list (#360)

* First corrections and commenting out so the start to command line works

* The basics for launching to character list is working.

* Edit config.json for AppVeyor

* Rework Base SQL scripts. (#361)

Expect broken execution until views are corrected for ace_shard

* Cleaning up error list (#362)

Clearing stylecop issues and warnings in Error List

* ACE Enum adjustments (#363)

* More Enum Adjustments (#364)

* More Enum Adjustments

* Further Enum Refinement

* Changed Enum Value

* More Enum and Object Realignment (#365)

* Adding Enums to better align with AC standards. GroupTypeChat and AccessLevel will be converted to these.

* Object level changes to go with enum resorting

* Extend ORM to allow aggregate functions i.e. MAX(column) and (#366)

* Extend ORM to allow aggregate functions i.e. MAX(column) and implement GetNextCharacterId

* For AppVeyor, thanks @ogmage78 for the sql

* Implements IsCharacterNameAvailable and fixes some errors in the chargen code. (#367)

* Character Loading (#368)

* Cleaned up some whitespace issues.   Still understanding the direction.

* WIP added enums for PropertyAttribute

* Wip got a lot of aceCharacter done - working on position - about 1/2 done.

* WIP - Ace Character Loading.
* Intital work done for loading character from ace_shard.   Rebased and removed update sql files.
* Tested up to position loading.   Made changes to position, but have not loaded the dictionary yet.
* Fixed a few bugs - attribute loading had a few.
* TODO items:
* Finish up loading positions then see what is left.
* Work on saving as OptimShi - has character creation ready to go.

* Fixed for rebase and apveyor

* Hand wrote view per request and removed unneeded position.

* Read character creation values from client_portal.dat  (#369)

* Read character creation values from client_portal.dat and assign to appropriate Character Properties

* Added AceCharacter properties for the character appearance data

* More fun in Zombieland - character loading.    (#370)

* [Og II]
* Continued work loading character from ace_shard.   Rebased
* Added cascade delete to all child tables in ace_shard.
* Completed and tested up to skillz loading.   Made a few changes on the db side for key consistancy.
* TODO items:
* Finish up loading - spells, friends, allegiance info, spell comps, spell bars etc. etc....

* Fixed bug in setXXXProperty methods with the add new.   Was not setting the AceObjectId

* Fixed auto inc and unsealed position class and made aceObjectId virtual again.

* SaveObject implemented in ShardDatabase.cs (#371)

* First steps of SaveObject

* Hopefully I didn't bork anything too hard.

* Character creation -- data present on save appears to make its way to the DB.  Thanks to Lidefeath for the starter here.

* Removed all references to SaveCharacterOptions -- replace with SaveObject().

* Removed all references to SaveCharacterOptions -- replace with SaveObject().

* Cleanup of DbGetListAttribute (#372)

* First steps of SaveObject

* Hopefully I didn't bork anything too hard.

* Character creation -- data present on save appears to make its way to the DB.  Thanks to Lidefeath for the starter here.

* Removed all references to SaveCharacterOptions -- replace with SaveObject().

* Removed all references to SaveCharacterOptions -- replace with SaveObject().

* Reworked DbGetListAttribute, got rid of hacky code.

* Forgot to remove sloppy comments from refactoring.

* Create Database.cs

* Fix the "You do not own this character" error. (#373)

* Refactoring, save/restore progress on object overhaul (#375)

* First steps of SaveObject

* added todo

* Hopefully I didn't bork anything too hard.

* Character creation -- data present on save appears to make its way to the DB.  Thanks to Lidefeath for the starter here.

* Removed all references to SaveCharacterOptions -- replace with SaveObject().

* Removed all references to SaveCharacterOptions -- replace with SaveObject().

* Working on player login.   Getting closer.   At SendSelf in player.cs

* Reworked DbGetListAttribute, got rid of hacky code.

* Forgot to remove sloppy comments from refactoring.

* Create Database.cs

* Continued work on character login.   A little closer - we can get into the world now.   Please see change log for list of outstanding items.

* Can log in, and walk around.  Some properties still wrong.  Still need to submit several DB level fixes.

* Many fixups/bugfixes.

Positions now save.
Character logs in.
Game doesn't crash.
Can open multiple sessions.
(some) ORM issues fixed

Issues:
World Objects still don't appear in game.
Race found in ShardDatabase (commented)

* Minor cleanups.

* Object overhaul (#376)

* First steps of SaveObject

* added todo

* Hopefully I didn't bork anything too hard.

* Character creation -- data present on save appears to make its way to the DB.  Thanks to Lidefeath for the starter here.

* Removed all references to SaveCharacterOptions -- replace with SaveObject().

* Removed all references to SaveCharacterOptions -- replace with SaveObject().

* Working on player login.   Getting closer.   At SendSelf in player.cs

* Reworked DbGetListAttribute, got rid of hacky code.

* Forgot to remove sloppy comments from refactoring.

* Create Database.cs

* Continued work on character login.   A little closer - we can get into the world now.   Please see change log for list of outstanding items.

* Can log in, and walk around.  Some properties still wrong.  Still need to submit several DB level fixes.

* Many fixups/bugfixes.

Positions now save.
Character logs in.
Game doesn't crash.
Can open multiple sessions.
(some) ORM issues fixed

Issues:
World Objects still don't appear in game.
Race found in ShardDatabase (commented)

* Properly load Data Id instances.  Objects now "spawn" in-world, but don't interact properly.

* Fixes to worldbase vw_teleport_location, player description, character handler.  Player now gets proper stats and can teleportpoi.  Vital inital values are off.

* Sets options on load.  May be bad/broken.  Need to seriously think how AceObject/AceCharacter and WorldObject/Player should interact.  We don't do that well now.

* Fix to attribute2nd, using uint24 instead of uint16 for value (because monster's health can get huuuge).

* Position refactor into backend object AceObjectPropertiesPosition and front-end object Position.

* * fixed issues with the weenieHeaderFlags setting method, fixed PhysicsDescriptionFlag setting issue as well.
* cleaned up and rebased data scripts for WorldBase and ShardBase
* Found issue in my data that was ETL to our new schema - had two flag fields Reversed - that is fixed but would be no issue
* once we have Ripley's new data export.   I have shared out a link to the cleaned up data for use while we finish the new export.
* https://www.dropbox.com/s/pohcruvalt9s38h/WorldandShardData.zip?dl=0
* I put in a nasty hack - hard coded weenieClassId on character save - it was being set to 0 and I could not find it.   I marked with with a todo.
* player.cs line 490

* Create Landblock.cs

* Updated changelog

* Fear the Walking Dead - More work on our object overhaul - bug fixes and continued work (#377)

* Testing - fixed a few null reference check errors.   Added in OptimShi player apperance code.

* added back code needed for ci

* Sending DataId and InstanceId data to character description.

* Forgot to update change log

* Added Ripley's changes to scheam

* Create ShardBase.sql

* Create WorldBase.sql

* Made requested changes

* Lord BucketHead - temp fix.   Added start of equipping items and POC code (#378)

* * Added getting and setting ContainerID and Wielder into AceObject and surfaced in worldObject
* Put in a hack to show how equiped weapons and shields work.   We will need to establish a place to store this data.
* I put in big TODO to indentify the hack - it is benign and will not impact anything else other than to demo the placement
* of the spear in Rand the Game Hunters hand in Holtburg.
* Modified SetPhysicsDescriptionFlags so it can be container and weilder aware.
* Worked with OptimShi and we put in a fix for Lord BucketHead.

* Found and fixed one more bug with hair styles

* Update Player.cs

removed comment that was out of date.

* SQL Scripts Re-based (#379)

* SQL Scripts Rebased

* More alignment of base DB script.

* Final SQL script rebase

* Code cleanup and a few bug fixes.   (#380)

* Code cleanup and a few bug fixes.   Working to trello card.   Board updated.

* Added first part of wield item.

* Update to remove class diagram

* Update GameActionGetAndWieldItem.cs

* Update GameEventWieldItem.cs

* Fixed Position Saving. (#381)

* Fixed Position Saving.

* Fixed other minor character initialization bugs

* Cleanup backing AceObject (#382)

* Reworked AceObject/Player/WorldObject to better repsect AceObject as a unit backing.

* Enough cleanup to commit.  Fixed vitals (Attribute2nd) in the process.

* Fixed bad rebase errors.  Appears to work now.  Can confirm vitals (Attribute2nds) initialize well, and can be raised.

* Fixed bug with player creation and made a bunch of comments and notes about things I discovered so they would not get lost. (#383)
2017-06-16 09:54:39 -04:00
Charles
75eded7587 Reworked - Refactored debug commands, Expanded to spawn from weenie - started character orm. (#311)
* Initial work on characterorm / Cleaned up test code to create world objects from the database.

* Forgot the change log again.

* Missed SQL File

* Moved debug commands over to AdminCommands as requested.

* Added command attributes

* Update for merge

* Fixed AppVeyor issue I hope

* One more Time

* Still trying to fix appvoyer

* OMG

* Fixed correclty this time - I hope

* Wip

* Update for merge

* Update changelog.md
2017-05-02 10:25:35 -04:00
OptimShi
3e751f584b Added XpTable class to ACE.DatLoader and removed the JSON Xp files. Some additional cleanup in the other DatLoader.FileTypes classes. (#291) 2017-04-26 07:56:26 -04:00
Mogwai-AC
b08cee50c5 testing stylecop build breakage 2017-04-04 15:25:38 -04:00
Mag-nus
e33fe98ff8 Refactored namespaces, and a couple minor cosmetic cleanups here and there. 2017-02-16 19:54:23 -06:00
Scott Aday
2cbc848715 project separation and xp chart files 2017-02-13 23:17:58 -05:00
Renamed from Source/ACE/Database/DatabaseManager.cs (Browse further)