Dawn of Light

The Dark Age of Camelot Server Emulator


A Dark Age of Camelot open source server emulator project written in C# started in 2003 by fans. We have created from scratch a server framework with database, packet and server logic.

The project aims were to create a framework which not only allowed for live-like behaviour but completely custom rulesets.


DOL Server - The server application

DAoC Portal - An application which allows your game client to connect to custom servers.

Featured Servers

Uthgard - Our most successful server focusing on classic DAoC and Realm vs Realm fights in Old Frontiers.

Storm D2 - Our custom flagship server focusing on a Diablo 2 ruleset in the DAoC world.


Latest Updates

Project News, Blogs and Code Commits


User avatar 

Posted 1 month ago

A new Project upcoming

I want create an livelike 1.110 Server i allready have an scripter but i need one gm more and one scripter more.
The Idea is very simple to create an permanent home for all the toa likers.
Check my forum here:
whisper me on forum if you wanna work on the project. (on dol works too ofc)

View Post

User avatar 

(Developer Team)
Posted 8 months ago

Revision - Database Handler Revamp

Database Handler(s) Revamp

Former DOL Database Code is pretty old and never changed much since migration from XML repository to MySQL driver, I tried to add support for SQLite some time ago, I managed to get some code working with both SQL drivers and some other parts needed complete duplication to handle differences...

I wanted to improve the SQLite driver implementation as I tend to use it a lot for standalone and portable development environment (Compiling Dawn of Light and Running server from a usb key !), I also wanted to implement low-level Unit Tests to track correctly upcoming change of the DOL Database API and make sure the Database Driver doesn't do anything funny !

So I ended up making a huge patch, which is always a long task and error prone...

Here is a List of all the major changes from this revamp :

  • Removed XML files repository support completely, and cleaned up unused Cache Logic and DataSets Handling.

  • Optimized DataTable Handler to have the full Table Object Model and Reflection Methods available when writing drivers implementation. This remove the needs for a lot of Reflection hacks in every parts of the Database Library !

  • Changed the hierarchy logic for the Database API to target SQL connection instead of Static File Access, File repository could still be used if anybody implement a file-based driver that mimic SQL behavior but it's not the default implementation logic.

  • Added a collection of Unit Tests for Database to be run with Continuous Integration, Unit Tests default to SQLite driver to run without MySQL Engine, but can be explicitly run against a local MySQL Database if needed...

  • New "Vectorized" Database API, Vectorized Methods are designed to handle whole collection of DataObjects at once, trying to group database access using parametrized queries which can reach greater throughput than query string. This can bring performance improvement up to 20 times faster when filling relations.

  • Update of XML Auto Updater to use the new Vectorized API reducing server first startup time.

  • Implementation of Multiple Field Unique Constraints, matching a group of DataObject Fields as Unique when all their values are matched against another record Fields, this can bring improvement for Table like Merchant Item which should have unique page and slot pair for each ItemList

  • New Table View Handler, can create views or handle existing views, can support update if the view has a real Table base, can be used as an easy mechanism to subclass DataObject with new Relations.

  • Complete Rewrite of the MySQL Driver Abstraction, using optimized string builders for queries and reflection methods resolved from datatable handlers, it can now flawlessly alter table primary key of any kind, supports index alteration as well to match DataObjects Indexes or Constraints.

  • Complete Rewrite of the SQLite Driver Abstraction, no more tied to MySQL Implementation, can alter table using Code logic to create a new table and import old data then destroy old table, workaround implemented to match SQLite behavior to MySQL behavior.

To sum up : everything was rewritten except the Database Interface to keep the compatibility with DOL without changing Game Server Code !

This Revamp was made to get obsolete code out of DOL Database code, clean up the mess of previous updates, make the code readable for future improvements and other driver implementations, add some new features like unique constraints, better table alteration support, get the SQLite backend up to production level, and lastly get some dramatic speed improvement !

! Important Change !
To prevent spamming your log with unfiltered debug message please update your logconfig.xml

Code: Select all
   <logger name="DOL.Database.Handlers">
      <level value="INFO" />

! New Unique Constraints !
If you happen to have Data Duplicate when updating to this new Database Handler here are the queries I used to solve this on Storm RvR

Code: Select all
UPDATE (SELECT COUNT(*) AS `Rows`, `ItemTemplate_ID` FROM `itemtemplate` GROUP BY `ItemTemplate_ID` Having `Rows` > 1) as `duplicates`
JOIN `ItemTemplate` ON (`ItemTemplate`.`ItemTemplate_ID` = `duplicates`.`ItemTemplate_ID`) SET `ItemTemplate`.`ItemTemplate_ID` = UUID() WHERE 1

UPDATE (SELECT COUNT(*) AS `Rows`, `CraftedItem_ID` FROM `CraftedItem` GROUP BY `CraftedItem_ID` Having `Rows` > 1) as `duplicates`
JOIN `CraftedItem` ON (`CraftedItem`.`CraftedItem_ID` = `duplicates`.`CraftedItem_ID`) SET `CraftedItem`.`CraftedItem_ID` = UUID() WHERE 1

View Post

User avatar 

(Project Admin)
Posted 10 months ago

Migration from SourceForge to GitHub


We have moved now to GitHub. Please consider contributing through this media instead of SourceForge.

The ease of the GitHub infrastructure and the improved efficiency is the main reason, alongside with SourceForge erratic decisions took over the past months.

Please consult the how-to page here: viewtopic.php?f=47&t=22757

The website is uptodate with GH (mainly links), and GH is handling autobuild for us, in both Windows / Linux compliant mode.

Thanks Leodagan for the most work related to the migration.

SF is still open, not sure if/how we can close the contributions only.


View Post

User avatar 

(Developer Team)
Posted 1 year ago

Git Tag

Release : https://github.com/Dawn-of-Light/DOLSha ...

Merge pull request #3 from dol-leodagan/master : https://github.com/Dawn-of-Light/DOLSharp/pull/3

Commited by Leodagan

@dol-leodagan Update README.md …
@dol-leodagan Updated : Adding NuGet Dependencies for Dependencies
@dol-leodagan Updated : Changed DLL References to match Nuget Dependencies
@dol-leodagan Removed : Shared Modules Binary Dependencies
@dol-leodagan Updated : Reference to SQLite architecture binaries …
@dol-leodagan Revert "Removed : Shared Modules Binary Dependencies" …
@dol-leodagan Added : Appveyor AutoBuild Configuration
@dol-leodagan Updated : appveyor.yml wrong format ?

23 changed files with 115 additions and 436 deletions.

Modified : .gitignore
Modified : DOLBase/DOLBase.csproj
Modified : DOLConfig/DOLConfig.csproj
Modified : DOLDatabase/DOLDatabase.csproj
Modified : DOLServer/DOLServer.csproj
Added : DOLServer/packages.config
Modified : GameServer/GameServer.csproj
Modified : GameServerScripts/GameServerScripts.csproj
Modified : README.md
Modified : UnitTests/UnitTests.csproj
Added : appveyor.yml
Removed : sharedModules/ICSharpCode.SharpZLib/ICSharpCode.SharpZipLib.dll
Removed : sharedModules/ICSharpCode.SharpZLib/SharpZLib.license.txt
Removed : sharedModules/MySQL/MySql.Data.dll
Removed : sharedModules/SQLite/System.Data.SQLite.Linq.dll
Removed : sharedModules/SQLite/System.Data.SQLite.dll
Removed : sharedModules/SQLite/x64/SQLite.Interop.dll
Removed : sharedModules/SQLite/x86/SQLite.Interop.dll
Removed : sharedModules/log4net/log4net.dll
Removed : sharedModules/log4net/log4net.license.txt
Removed : sharedModules/nunit/nunit.core.dll
Removed : sharedModules/nunit/nunit.framework.dll
Removed : sharedModules/nunit/nunit.license.txt

View Post

User avatar 

(Developer Team)
Posted 1 year ago

SVN Rev. 3564

Commited by Graveen
Author : Kataract

*) Change from Kataract
- Fixed: /gminfo command was not displaying AccountName correctly

Modified : /DOLSharp/trunk/.gitignore
Modified : /DOLSharp/trunk/GameServer/commands/gmcommands/GMinfo.cs

View Post


Host a Game Server

A desktop application which allows you to host your own Dark Age of Camelot server for yourself, friends or the public via LAN or the Internet.


More »

DAoC Portal

Connect to a Server

A desktop client that allows you to view and connect to local, private or public DAoC freeshards.


1847 players on 13 servers (3997 peak)

Download Client View Servers »


Project Tracker

Help improve Dawn of Light

Latest Open Issues

Issue 17311
Taking a foreign DF exit won't port you out > on live you get back to your own realm, no matter what exit you take
Issue 17251
You can not place nor paint a skiff on the Atlantean Ocean.
Issue 17247
My money and all the money of my alliance members was reseted on the last server reboot.
Issue 17246
When entering Hadrian's Wall from Pennine Mountains (heading Berk on the Eastern path) my whole group suddenly found theirselves under water
Issue 17244
All kinds of necyomancers in DF are missing their clothings.

Longest Open Issues

Issue 2675
spiritmaster pet menu and pet commands are not working...possibly not implemented yet, having zero luck with any of them
Issue 2649
heretic aoe dmg and snare duration seems very short...maybe 5 seconds instead of 30
Issue 3107
whole hunter beastcraft line is bugged. lvl 30 spell not implemented the charming spells not right, has to be fixed completely i guess :(
Issue 3341
vamp: i dont know how but i can interrupt without range limit with a pulse that never stops even when i sit oO
Issue 3174
I cannot update my Bainshee Epic. The Template is missing according to the master blacksmith