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 

(Developer Team)
Posted 1 year ago

Tiniest DOL Contributor, passed away...


Even if he couldn't learn a single git command, never made his mind on using functional or imperative programming, and could only communicate by shaking his head and use ears gestures...

...He was a great help for me on improving this project, an outstanding listener that could bounce on any subjects, a loyal fellow leaping through any difficulties, and a cute little ball of fur with a white nose :cry:

His name was Roger (from Roger Rabbit), and was almost ten years old.

If anybody have talented video editing skills, I'd gladly take some help in "restoring" this video from a smartphone :


View Post

User avatar 

(Database Team)
Posted 1 year ago

Xp on DOL and on Live

The xp on dol is custom its to high couse it were never changed on live. And couse not all noticed that yet i gonna xplain the xp diffrence from live to dol and from classic to livelike.
First of all Uthgard have exactly classic xp rules check this list:
https://sourceforge.net/projects/yggdra ... g/download
(the Level Cap is outdated in one way couse you get first grp xp and camp xp then that cap is changed and the other bonuses are added after)

This is the same as xp as currently on live it looks higher couse you have better skills and procs on lower levels and you dont start as starter class anymore. (so the speed twist a bit the feeling of xp value)

But sure there some new xp bonuses at these days:
3% xp bonus from keep bonuses
25% xp bonus in Darkness Falls (allready existed in live) / The Labyrinth / Passage of Conflict
75% xp bonus in all Catacombs open map and Dungeons (this include tutorial)
75% xp bonus in all Trials of Atlantis open map and Dungeons
75% xp bonus in all Darkness Rising open map and Dungeons
45% xp bonus to task dungeons and adventure wings
100% xp bonus in Celestius
100% xp bonus in Summoners Hall
75% xp bonus in Sheereo Hills
75% xp bonus in Malmohus
75% xp bonus in Dartmoor
15% RVR Zone xp bonus (existed in classic too)
25% RVR enemy kill xp
5% xp bonus from /gc buff xp
5% xp bonus Nightshroud Bracelet from Artifact Bracer: http://camelot.allakhazam.com/item.html?citem=13626
5% xp bonus Orion's Belt from Artifact Belt: http://camelot.allakhazam.com/item.html?citem=19027
and ofc grp bonus and camp bonus (forgot about them first added this after)

So you can reach +18% bonus xp in pve (without camp/grp/zone bonus) if you use all ways but that dont mean the base xp need be higher.
(and dol have an 50% higher base cap)
And RvR enemy kills can give up to 43% bonus xp (without camp/grp/zone bonus). But that dont change the hardcap couse with that you can come above the hardcap.

So if you want set the xp correctly on your server check this to see db property settings:
https://sourceforge.net/projects/yggdra ... g/download

And here you see the xp i gained on doing an kill as level 1 on level 1 mob without any bonuses: (with the adjustment you see above)
https://sourceforge.net/projects/yggdra ... g/download

View Post

User avatar 

(Developer Team)
Posted 1 year ago

DAoC Portal 2.9.1 Update.

DAoC Portal is being Updated to version 2.9.1.

It's been some time since any improvements were made to DAoC Portal, there isn't much here except the brand new connect.exe that can handle newest 1.122 Client and comes with fix for previous revisions...

The other updates are mostly small fixes to improve user experience without getting unexpected exceptions terminating Portal and improved behavior when using the Portal with Linux (either Mono or Wine, but you should stick to Wine...) making the Auto-Update process more dumb-proof !

The Portal now comes with fewer files, it can work with only Portal.exe and Connect.exe being present in the same folder, you can also use the Updater.exe as a portable installer that will take care of retrieving all the needed file in the current folder.

This was a first cleanup for small annoyances that allowed me to better understand the building and update workflow, I'll add other features later if needed ;)

Here is the full Changelog :

Code: Select all
   - connect.exe v4.0 : Fully rewritten for wide compatibility, support 1.122 client, pure command-line utility.
   - Update: Portal binaries are now packed with their resources to reduce the install footprint.
   - Bugfix: No longer crash when internet connexion is unavailble.
   - Bugfix: Threads are properly terminated when Portal is closed.
   - Bugfix: A lot more checks added to prevent crashes on easily expected exceptions.
   - Bugfix: Linux Mono and Wine update scenario tested, still have graphic artefacts with Mono.
   - Minor text fixes...

View Post

User avatar 

(Database Team)
Posted 1 year 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 2 years 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


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.


330 players on 9 servers (810 peak)

Download Client View Servers »


Project Tracker

Help improve Dawn of Light

Latest Open Issues

Issue 17338
freelevel wasn't available, timer became negative instead
Issue 17331
Druid Spell Issue - Embrace of Nature. Main spell casts but no heal procing. Spell delve appears fine and believe was working ~ year ago.
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.

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