A fan-based EverQuest Emulator Project

Get ready for the spooktacular season coming up!

Please report any bugs and we will fix them as soon as possible.
The Beginning


The Dragons of Norrath expansion was announced on January 11, 2005, and went live on February 15, 2005. The initial expansion announcement may be found here. The initial patch message may be found here.

Download < PEQ Patch Files v11 > HERE

What's Going On


  • A series of events has transpired across the world of Norrath and the familiar faces of Firiona Vie and her nemesis Lanys T`Vyl return to find themselves at the forefront of these events. Unbeknownst to them, a dark influence has seeped into the world of Norrath causing new tensions to arise and conflicts to intensify as the dawn of a new age emerges. The Age of War is upon the people of Norrath and heroes return in this ultimate, unending battle between good and evil.
  • A gnome mining expedition has managed to dig their way through the northern mountains in Lavastorm. They came upon the dragon nesting grounds, a previously unexplored part of northeastern Antonica which is full of Nest dragons, dragonkin and goblins; and thriving with wildlife.
What's New

  • The Guild Hall is your guild's own instanced zone, including guild bank, a portal to many druid/wizard destinations, and buff stoppage.
  • The Guild Lobby (now available to everyone) is a place for guilds to recruit and for players to summon their corpses.
  • New Models: Dragons, Stone Sentinels, Kirins, Drakes, Spiders, Pumas, Dervishes.
  • New AAs retrieved through Dragons of Norrath progression.
  • In order to progress through this expansion, you would be advised to pick a faction and stick with it. You have two to choose from: The good-aligned Norrath's Keepers or the evil-aligned Dark Reign. Neither faction has any effect on any other zones in EverQuest.
  • Both factions have camps set up in the network of caves in Lavastorm's north. In addition to these two camps, there is a group of Wayfarers to the south-southeast of the caves who also offer tasks.
  • Completing tasks (both groups and raids) yields X amount of Radiant Crystals or Ebon Crystals, which can be used to purchase items and augmentations from adventure merchants Tatsujiro the Serene (for the Norrath's Keepers) and Xeib Darkskies (for the Dark Reign).
  • Faction is gained by completing tasks and turning in the token you receive after each task. These tokens are LORE, so you need to make the turn-in after each task completed for maximum faction gains.


A Breakdown of Static Zones
  • Guild Lobby (all levels; entered through the Plane of Knowledge)
  • Guild Hall (all levels; entered through the Guild Lobby; must be guilded)
  • The Broodlands (40th-60th level; entered through the northern caves of Lavastorm)
  • Lavaspinner's Lair (45th-60th level; entered through the Broodlands)
  • Tirranun's Delve (45th-65th level; entered through Lavaspinner's Lair)
  • Stillmoon Temple (55th-65th level; entered through the Broodlands)
  • The Ascent (60th-70th level; entered through Stillmoon Temple)
  • Thundercrest Isles (60th-70th level; entered through the Broodlands)
  • The Accursed Nest (70th level; entered through the dropdown in the rocks centered in the Broodlands lake)
A Breakdown of Instanced Zones
  • Lavaspinner's Lair (instanced) (missions available for 60th-70th level; multiple entrances through the Broodlands)
  • Tirranun's Delve (instanced) (missions available for 60th-70th level; multiple entrances through the Broodlands)
  • Stillmoon Temple (instanced) (missions available for 60th-70th level; multiple entrances through the Broodlands)
  • The Ascent (instanced) (missions available for 60th-70th level; multiple entrances through the Broodlands)
  • Thundercrest Isles (instanced) (missions available for 60th-70th level; multiple entrances through the Broodlands)
  • The Accursed Nest (instanced) (missions available for 70th-75th level; multiple entrances through the Broodlands)
Travel to the Dragons of Norrath
  • The Broodlands are entered through the cave system in Lavastorm's north.
Above source Allakhazam

Developers Diary on Dragons of Norrath


It's here! Finally! After roughly 5 too long years of development, blockers, struggles, we eventually and finally accomplished what felt so massive and impossible when we started. The major blocker being a massive new system that needed to be implemented, Shared Tasks (amongst many other blockers and challenges). At the time PEQ didn't even have Dynamic Zones or Expeditions and used not so great workarounds to implement both. Today, we have Shared Tasks which also use Dynamic Zones, Expeditions also use Dynamic zones and a tremendous amount of time in effort went into all of them. Combined, the effort(s) were well over 1-2 years worth of work alone to implement all of the above said systems.

Content Framing

We also had a major obstacle of collecting base content for the making of the zones. Years ago Drogerin started by hand placing NPC's in the Nest. Manually setting their appearance, size, texture, movement etc. While Drogerin's work ethic was unreal and I had no doubt he would literally do all of the zone by hand, we needed a better way to frame the zones in. Same could be said for Huffin who were both working hard at making Dragons of Norrath happen even though the challenges ahead were monumental.

Content Collection

Historically, we framed zones through packet collection tools where we would at least capture NPC spawns, appearances, doors, objects and all of their respective locations. While data collection tools are a massive help for framing a zone, we still needed to do a LOT of work grooming the content. For example, grids still need to be groomed, loot needs to be done entirely manually, factions, quests, merchants, scripts, updates, task data, task implementation, respawn times, quest interaction, sequencing, flagging. None of that is talking about the major systems we needed to implement to bolt on-top of it all and the massive investments in tooling to make developing it all simple.

Content Import

We worked with Maudigan from to build a data collection tool using MQ2 cleverly called TakeADump which will dump doors, ground items, merchant lists, npcs, zone data, zone points to dumps which can then be translated using a tool we wrote called Monocle to import directly into our data models. You can see this video where I import dumps collected from both Drogerin and Huffin by going into every instance and task on live. This was already 4 years ago and this was our first major hurdle completed. The same tool was able to be used for other expansions and content as well.

After importing the roughly framed content, lots of work went into parsing by Drogerin and Huffin to tune major NPC encounters, loot, grids, framing the scripting for events independent of all of a major component, tasks. Shared Tasks were still the missing but giant elephant in the room that needed to be tackled. Years went on as various developers attempted to start an interpretation of the system, but got walled by its complexity and and enormity of the project and it sat, multiple times.

Shared Tasks

In 2021, I decided I was going to move a lot of my other projects to the background to start prioritizing getting Shared Tasks moving since it had lost all momentum multiple times by the several different folks who attempted it. I scoped out the project and started my plans for how I was going to tackle the behemoth. I put together a design doc which shaped the rough idea of how the project were to be executed and what was needed to be done. It also required heavy cleanup of the existing Task code to even consider how we were going to bolt on a wildly complex system on top of it and keep it simple and intuitive enough for other developers to maintain and content creators to consume.

After scoping out the project, it took some convincing but I was able to get @hg who was a massive help and co-contributor to making Shared Tasks possible. If you don't know HG he was a player on PEQ and one day decided to take a stab at Expeditions and Dynamic Zones and beautifully executed them. I really enjoyed working with someone so brilliant, easy to work with as we tackled the monstrosity that was Shared Tasks. We formulated our plans, iterated on them, learned from it, iterated our plans some more, went on code binges on each parts of our implementations and found ourselves burnt out many a time, only to pick ourselves back up to keep going. Hitting a project like this for as long as we did was a difficult, stale, lengthy process and having each other to keep synergy going was key.

ProjectEQ Expansions

There's been a lot of work behind the scenes over the years to enable the server technologically the capability of classifying content and data to be within an era. Classifying data is still an ongoing effort and whilst not perfect, we are and have been making massive strides in this area.

ProjectEQ is the foundational database that is used in every EverQuest Emulator server installation and is the open source "source of truth" for Live-like content. While being the defacto standard, that does not mean that it is perfect, in many ways is far from it. Many projects have forked from it and made significant improvements to various eras of the EverQuest experience. The emulator community as a whole continues to make lots of progress here, sometimes other projects have to take the foreground for a while until we can get back to certain workstreams.

Some servers have areas of content that is far true to era in ways and with the technology to more easily move a server between eras and content settings, it allows us to move between settings in a matter of small settings changes rather than huge one-way, non-reversible data changes which is how ProjectEQ and all servers have operated until recent years. We have strong members of the community who have been helping contribute back their changes into ProjectEQ content that is more true to era as we progress both forward in expansions and also backwards. We continue to improve our technology, tooling, processes here and we're finally starting to see the first major shift on the current PEQ Production server.

PEQ Server Era Changes

ProjectEQ has for the longest time been considered in no specific era or expansion. It is a mish-mash of current and past, with no sensible boundaries. We use an EverQuest client in the Rain of Fear era while most of the players are playing through Omens of War expansion. Some zones have items, spells, from an era far past Omens of War and even playable character races.

PEQ will be shifting from no expansion or (all expansions) into the current expansion context with the release of Dragons of Norrath. That means that while things won't be perfect, we can start to think of a lot of our data from the lens of the current era and make changes, tweaks from the perspective of the era. It also allows us to classify things in earlier expansions and later expansions which will make the ProjectEQ database more fluid for anyone who installs their own server to chose what experience they want to play on as we the project matures.

While we realize that making this change, it will inevitably take things away that players have been used to utilizing and benefiting from that is out of era. Taking things away is not fun from the player perspective and changes that do so should be attempted to be done as sensibly as we can. We are going to try our best to grandfather out of era features and things where it makes sense such as quality of life client features out of era and doesn't impact the experience tremendously.

Other servers that use PEQ can choose to be more strict about their era experiences while we will try to stay mostly true to form, we can certainly make small exclusions here and there where it does make sense. Some of that we will leave up to player feedback on the forums as to what should be done with things that may have been undecided on and we can make a call. It also doesn't mean that when PEQ has other variants of servers out for player use, some rule-sets can't be more stricter in some sense as well to be even truer to the era changes through progression.

In general, if players feel something should be changed. Please utilize the forums to report and make the case for what you feel should be changed.

Special Thanks

None of this would be possible if it wasn't for a ton of work by very few individuals.
  • @huffin for his unrelenting dedication to PEQ. PEQ most certainly wouldn't be what it is today without his help. Massive contributor to content. He is always tweaking, tuning, fixing, correcting silently behind the scenes and does so without much thanks. I and the community are forever grateful for his selfless contributions and incredible hard work.
  • @Drogerin for his huge contributions during the early phases of Dragons of Norrath. Drogerin was a huge help to the PEQ community helping out in all ways content. Huffin and Drogerin worked closely together on many things.
  • @huffin and @Drogerin worked together closely during the early days of Dragons of Norrath, collecting zones, tuning encounters, building boss event scripts, parsing, scaling zones, applying pathing.
  • @joligario for being a long-time champion of PEQ. Always helpful on the forums, being the sole maintainer of the PEQ editor enabling content developers to do more for the community, fixing broken scripts, helping players and so much more.
  • @hg for being the silent hero who if it weren't for him, I wouldn't be writing this right now. He was instrumental in building Expeditions, Dynamic Zones, Shared Tasks, building out all of the Dragons of Norrath progression, sequencing, framing in all of the tasks and all of the missions for Dragons of Norrath.
  • @robregen a long time PEQ veteran who went to build the The Al`kabor Project for years and is now coming back with all of his content learnings to help make PEQ better. Robregen is an amazing person who has selflessly helped so many people in the community.
  • @Trust for continuing to take his learnings from running Wayfarers Haven (a variant of The Al`Kabor Project) and continuing to give back and also make PEQ better. Trust has been a valuable member of the emulator community and has done many things to improve PEQ from his work on Wayfarers. I'm sure he will certainly help Dragons of Norrath as well once his project is exposed to the expansion as well

Changelog Notes

Era-Related Changes

  • Akkadius AA's are now era contextual. Only the AA's that were available during Dragons of Norrath will be loaded and available. There is no grandfathering here. Veteran AA's will remain as they were.
  • Huffin Spells acquired for Dragons of Norrath through the Plane of Knowledge library prior to the expansion will no longer be scribed on characters and will need to be acquired through the means of the expansion content.
Character Select

  • Akkadius Drakkins are no longer able to be created during character select. If you had a Drakkin created prior to this change you are grandfathered in and still will be able to play said character.
Guild Hall / Guild Lobby
  • Akkadius Consolidated Guild Hall versions to the current era. No longer will clients be bouncing between different versions. (Make sure you download patch files)
  • Akkadius Consolidated doors between Guild Hall and Guild Lobby to be consistent and not different based on client versions
Plane of Knowledge

  • Robregen Added the pre-SoD era Guardians and set the appropriate min and max expansion flag.
  • Robregen Added the pre-VoA era Spell Merchants and set the min and max expansion flag.
  • Robregen Aligned the Bazaar and Guild Lobby to set more appropriate to live and set those doors to appropriate min and max expansion flag.
  • Robregen Set the Crescent Portal to correct expansion.
  • Robregen Fixed headings to Class Tome Merchant NPC.
  • Akkadius No longer will players be able to zone to out of era zones. Zones that were not available during Dragons of Norrath will not be available to zone to regardless of the client you have. If there are challenges due to v1/v2 versions of zones that players run into, we will fix and come up with a remediation plan to address it. If you have spells that bring you to out of era zones, you will be prevented from zoning.
  • Akkadius If you are camped in a zone that is out of era, you will be brought in era.
  • Akkadius If you are bound in a zone that is out of era, you will be brought in era.
Feedback, Reporting Bugs

To provide feedback on Dragons of Norrath or anything content related. Feel free to use the forums, you also can use the new /bug functionality. We will be using /bug more to triage issues in-game.
See below for release notes in this server code update.

[22.21.2] - 07/19/2023

  • Fix rarer same bucket name scoping overlap issue (#3509) @Akkadius 2023-07-20
[22.21.1] - 07/18/2023

  • Show Petition and Show Petition_Info fix (#3503) @fryguy503 2023-07-18
  • Remove arbitrary teleport blocking in Tutorial and Load zones (#3506) @Valorith 2023-07-19
  • Fix issue with expired databuckets not being expired and returned properly (#3504) @Akkadius 2023-07-18
[22.21.0] - 07/18/2023

Data Buckets
  • Fix rule check and add rule for pickpocket command (#3492) @tuday2 2023-07-16
Quest API
Z Clipping
  • Don't issue zclip adjustments when NPC is not moving (#3499) @Akkadius 2023-07-16
[22.20.1] - 07/15/2023

  • Fix database manifest entry for #3443 @neckkola 2023-07-15
[22.20.0] - 07/15/2023

  • Remove orphaned commands related to botgroup (#3489) @tuday2 2023-07-09
  • Consolidate #set-like commands into a singular #set command (#3486) @kinglykrab 2023-07-15
  • Add Support for item textures higher than 65,535 (#3494) @kinglykrab 2023-07-14
  • Update raid features (#3443) @neckkola 2023-07-13
  • Fix Tradeskill Combines with augmented items (#3490) @kinglykrab 2023-07-15
  • Fix charmed pets to follow when charmed. (#3488) @noudess 2023-07-08
  • Update bot naming check and add more explanation (#3491) @tuday2 2023-07-13
Quest API
[22.19.0] - 07/08/2023

  • Add Pickpocket Command (#3484) @tuday2 2023-07-08
  • Move #find item summon links to front (#3483) @kinglykrab 2023-07-05
  • Remove LoadItemDBFieldNames() from common/misc.cpp and common/misc.h (#3473) @kinglykrab 2023-07-04
  • Fix _PutItem having a slot_id of -1 on mobs with no items (#3474) @kinglykrab 2023-07-04
  • Add Skills:TrivialTradeskillCombinesNoFail Rule (#3481) @JasXSL 2023-07-05
[22.18.0] - 07/04/2023

  • Add chatchannel_reserved_names to a new manifest (#3482) @kinglykrab 2023-07-04
  • Fix issue in zone store of returning reference to local variable (#3477) @kinglykrab 2023-07-04
[22.17.0] - 07/03/2023

  • Remove LoadItemDBFieldNames() from common/misc.cpp and common/misc.h (#3473) @kinglykrab 2023-07-04
  • Remove handle_npc_single_npc from zone/lua_parser_events.cpp and zone/lua_parser_events.h (#3467) @kinglykrab 2023-07-03
  • Set multi statements off when returning early (#3462) @Akkadius 2023-07-01
  • Add Strings::BeginsWith() and Strings::EndsWith() (#3471) @kinglykrab 2023-07-03
  • Add check for underscores in botcreate command (#3458) @tuday2 2023-06-29
  • EVENT_LANGUAGE_SKILL_UP in Lua was using EVENT_SKILL_UP logic (#3466) @kinglykrab 2023-07-03
  • Fix _PutItem having a slot_id of -1 on mobs with no items (#3474) @kinglykrab 2023-07-04
  • Fix data type of GetAggroCount() (#3470) @kinglykrab 2023-07-03
  • Fix logging crash when % are sent through query logs (#3461) @Akkadius 2023-07-01
Quest API
[22.16.0] - 06/27/2023

  • Fix database version checking edge case issue (#3428) @Akkadius 2023-06-22
  • Fix multi-statement error reporting (#3425) @Akkadius 2023-06-19
  • Implement native database migrations in server (#2857) @Akkadius 2023-06-19
  • Fix NPC Item Stat Bonuses (#3444) @kinglykrab 2023-06-26
  • Fix error in 023_01_21_bots_raid_members.sql (#3453) @mibastian 2023-06-28
  • Fix possible crash with #npcedit weapon (#3421) @kinglykrab 2023-06-19
  • Merchant Open Flag set only for regular Merchants (#3454) @kinglykrab 2023-06-27
[22.15.3] - 06/19/2023

[22.15.2] - 06/19/2023

[22.15.1] - 06/19/2023

  • Add chatchannel_reserved_names table to database_schema.h
[22.15.0] - 06/19/2023

  • Default skill type to Hand to Hand in #npcedit meleetype (#3422) @kinglykrab 2023-06-19
  • Implement native database migrations in server (#2857) @Akkadius 2023-06-19
[22.14.1] - 06/18/2023

  • Move world database:dump to use MySQL credentials file (#3410) @Akkadius 2023-06-17
  • Add support for static linking (portable) binaries (#3417) @Akkadius 2023-06-18
  • Add query multi statement execution support (#3414) @Akkadius 2023-06-17
  • Add Water Line of Sight Checks (#3408) @nytmyr 2023-06-17
  • Logging improvements, console silencing, terminal coloring (#3412) @Akkadius 2023-06-17
Quest API
  • Fix bug when using /tar on invalid target (#3407) @noudess 2023-06-17
  • Add cross zone/world wide cast and move functionality to Telnet (#3409) @kinglykrab 2023-06-17
[22.13.1] - 06/13/2023

[22.13.0] - 06/12/2023

  • Add GMFind_Struct to packet structures (#3402) @kinglykrab 2023-06-12
  • Remove CHECK_LOS_STEP from zone/common.h (#3398) @kinglykrab 2023-06-12
  • Remove CheckCoordLosNoZLeaps() from zone/entity.cpp and zone/entity.h (#3384) @kinglykrab 2023-06-12
  • Remove CountTempPets() from zone/entity.cpp and zone/entity.h (#3390) @kinglykrab 2023-06-12
  • Remove Evade() from zone/entity.cpp and zone/entity.h (#3394) @kinglykrab 2023-06-12
  • Remove GateAllClients() from zone/entity.cpp and zone/entity.h (#3391) @kinglykrab 2023-06-12
  • Remove GetClient(ip, port) from zone/entity.h (#3386) @kinglykrab 2023-06-12
  • Remove GetClientCount() from zone/entity.cpp and zone/entity.h (#3392) @kinglykrab 2023-06-12
  • Remove GetGroupByBot(), GetRaidByMob(), and GetRaidByLeaderName() from zone/entity.cpp and zone/entity.h (#3387) @kinglykrab 2023-06-12
  • Remove InteractiveChat() and TakenAction() from zone/npc.h (#3382) @kinglykrab 2023-06-12
  • Remove LimitCheckBoth() from zone/entity.cpp and zone/entity.h (#3393) @kinglykrab 2023-06-12
  • Remove NPC::AddCash() from npc.cpp/npc.h (#3380) @kinglykrab 2023-06-09
  • Remove RemoveMob() and RemoveRaid() from zone/entity.cpp and zone/entity.h (#3389) @kinglykrab 2023-06-12
  • Remove SPECIALIZE_MANA_REDUCE from zone/common.h (#3400) @kinglykrab 2023-06-12
  • Remove SendAATimer() from zone/entity.h (#3388) @kinglykrab 2023-06-12
  • Remove WriteEntityIDs() from zone/entity.cpp and zone/entity.h (#3395) @kinglykrab 2023-06-12
  • Remove _BECOMENPCPET() and _NPCPET() from zone/common.h (#3399) @kinglykrab 2023-06-12
  • Remove pDBAsyncWorkID from zone/entity.h (#3385) @kinglykrab 2023-06-12
  • Remove struct DynamicZoneSafeReturn from zone/entity.h (#3396) @kinglykrab 2023-06-12
  • Remove struct TradeEntity from zone/common.h (#3397) @kinglykrab 2023-06-12
  • RandomizeFeatures and SetGender were killing db texture (#3376) @noudess 2023-06-06
  • Fixed statements that logged incorrect data (#3381) @noudess 2023-06-07
Quest API
  • /tar should not untarget existing target (#3383) @noudess 2023-06-12
[22.12.0] - 05/29/2023

  • Intoxication setter/getter for source, getter for Perl/Lua (#3330) @JasXSL 2023-05-03
  • #augmentitem bypasses augment restrictions (#3332) @kinglykrab 2023-05-07
  • Fix Heroic INT/WIS Bonuses (#3341) @RekkasGit 2023-05-15
  • Fix duplicate messages in #npcedit (#3372) @kinglykrab 2023-05-21
  • Fix issue with Group Pointers/Member roles (#3374) @Aeadoin 2023-05-25
  • Fix mob item bonus calc (#3334) @Akkadius 2023-05-07
  • Fix typos in #zheader (#3370) @kinglykrab 2023-05-21
  • Mob scaling issue with min dmg set to zero while max dmg is not (#3351) @RekkasGit 2023-05-20
  • NPC Armor Upgrade to a slot not handled correctly (#3366) @noudess 2023-05-20
  • ReloadQuests() on Zone::Init() to avoid cached global quests/plugins (#3333) @kinglykrab 2023-05-07
  • Revert " ReloadQuests() on Zone::Init() to avoid cached global quests/plugins " (#3333) @Akkadius 2023-05-08
Memory Leak
  • Fix large memory leak introduced in CalcItemBonuses (#3331) @Akkadius 2023-05-07
  • Remove duplicate heal message for healing yourself (#3329) @noudess 2023-05-03
Quest API
  • Add GetHateListClosest(), GetHateListClosestBot(), GetHateListClosestClient(), and GetHateListClosestNPC() methods/overloads to Perl/Lua (#3359) @RekkasGit 2023-05-16
  • Add GetPet() to Perl (#3309) @kinglykrab 2023-05-08
  • Add Memorize and Scribe Spell Events to Perl/Lua (#3363) @kinglykrab 2023-05-25
  • Add zone data methods to Perl/Lua (#3342) @kinglykrab 2023-05-24
  • Cleanup The Darkened Sea Quest Methods Names (#3369) @kinglykrab 2023-05-21
  • Add World:MaximumQuestErrors Rule (#3349) @kinglykrab 2023-05-21
  • ResurrectionEffectBlock to prevent/allow/move buffs. (#3288) @nytmyr 2023-05-08
[22.11.0] - 04/29/2023

  • Add check for owner in quest::pausetimer() (#3304) @kinglykrab 2023-04-23
  • Add check for owner in quest::resumetimer() (#3305) @kinglykrab 2023-04-23
  • Add initiator/owner checks to various methods in questmgr.cpp (#3306) @kinglykrab 2023-04-23
  • Fix possible nullptr in quest::addloot() (#3303) @kinglykrab 2023-04-23
  • Remove GetClassHPFactor() from zone/client_mods.cpp and zone/client.h (#3313) @kinglykrab 2023-04-30
  • Remove GetClassHPFactor() from zone/merc.h (#3314) @kinglykrab 2023-04-30
  • Remove pDontCastBefore_casting_spell from zone/npc.h (#3311) @kinglykrab 2023-04-30
  • Remove unused code in zone/pets.cpp (#3310) @kinglykrab 2023-04-30
  • Remove unused methods in zone/bot.cpp and zone/bot.h (#3315) @kinglykrab 2023-04-30
  • Remove unused methods in zone/client.cpp and zone/client.h (#3312) @kinglykrab 2023-04-30
  • Remove unused variable in common/crash.cpp (#3308) @kinglykrab 2023-04-30
  • Use default ctor/dtor in oriented_bounding_box.h (#3307) @kinglykrab 2023-04-30
  • quest::createBot() unnecessary check against nullptr (#3302) @kinglykrab 2023-04-23
  • quest::setallskill() had always true condition. (#3301) @kinglykrab 2023-04-30
  • Fix UCS crash that occurs during log reloading (#3324) @Akkadius 2023-04-30
  • Fix possible dereference of nullptr in Client::CalcHPRegen (#3316) @Aeadoin 2023-04-23
  • Fix possible nullptr in Client::GetCharMaxLevelFromQGlobal() (#3317) @kinglykrab 2023-04-23
  • Add Discord webhook callback processing to world (#3322) @Akkadius 2023-04-30
  • Fix issue with NPCs no longer using some armor. (#3318) @noudess 2023-04-24
  • Fix issue with spawning Mercs (#3327) @Aeadoin 2023-04-29
  • Possible issues with SummonItem in Client::QuestReward() methods (#3325) @kinglykrab 2023-04-27
  • Update download with faster releases link (#3321) @Akkadius 2023-04-30
  • Remove duplicate you have lost a level message (#3323) @noudess 2023-04-25
Quest API
[22.10.0] - 04/22/2023

  • Only define row if we have results in Database::GetCharacterID() (#3199) @kinglykrab 2023-04-05
  • Add missing breaks and returns in bonuses.cpp (#3231) @kinglykrab 2023-04-05
  • Breaks in wrong spot in cases in spell_effects.cpp (#3297) @kinglykrab 2023-04-22
  • Cleanup always true/false statements in shareddb.cpp (#3189) @kinglykrab 2023-04-05
  • Cleanup cheap-to-copy reference to use value instead in eq_stream_ident.cpp/eq_stream_ident.h (#3209) @kinglykrab 2023-04-05
  • Cleanup discord.cpp and discord_manager.cpp (#3205) @kinglykrab 2023-04-05
  • Cleanup duplicate conditions in negate bonuses in bonuses.cpp (#3226) @kinglykrab 2023-04-05
  • Cleanup item_instance.cpp always true statements and reassigning of same values (#3187) @kinglykrab 2023-04-05
  • Cleanup macros in features.h (#3185) @kinglykrab 2023-04-05
  • Cleanup string -> char* -> string conversions in bot_command.cpp (#3252) @kinglykrab 2023-04-05
  • Cleanup unnecessary condition in Client::SendAlternateCurrencyValue() (#3266) @kinglykrab 2023-04-05
  • Cleanup zone/zoning.cpp (#3289) @kinglykrab 2023-04-14
  • Combine similar cases in Client::InitInnates() (#3260) @kinglykrab 2023-04-05
  • Convert equipable_slot_list to std::vector from std::list in bot_command.cpp (#3253) @kinglykrab 2023-04-05
  • Delete embxs.cpp/embxs.h (#3284) @kinglykrab 2023-04-14
  • Delete unused strings in bot_command.cpp (#3251) @kinglykrab 2023-04-05
  • Fix GetLastName() length check in Client::SendWindow() (#3263) @kinglykrab 2023-04-05
  • Fix always false conditions in Client::IncStats() (#3256) @kinglykrab 2023-04-05
  • Fix check for !this in Client::SendHPUpdateMarquee() (#3257) @kinglykrab 2023-04-05
  • Fix filter condition in attack.cpp (#3218) @kinglykrab 2023-04-05
  • Fix ornamentation augment icons in inspect requests (#3264) @kinglykrab 2023-04-05
  • Fix possible nullptr inst in GetSharedBank() (#3190) @kinglykrab 2023-04-08
  • Fix possible overflows in Client::AddPlatinum() and Client::TakePlatinum() (#3255) @kinglykrab 2023-04-05
  • Fix shared_tasks.cpp/shared_tasks.cpp variable named same as class member (#3192) @kinglykrab 2023-04-05
  • Fix skill_used being used as boolean in Mob::CommonDamage() (#3220) @kinglykrab 2023-04-05
  • Identical conditions right beside each other in aa.cpp (#3213) @kinglykrab 2023-04-05
  • Move unreachable code in ApplySpellsBonuses() (#3229) @kinglykrab 2023-04-05
  • Move variable definition to more relevant scope in DatabaseDumpService::Dump() (#3200) @kinglykrab 2023-04-05
  • Multiple cases with same outcome in GetDiscordPayloadFromEvent() (#3184) @kinglykrab 2023-04-05
  • Remove ExportVarComplex() from embparser.cpp/embparser.h (#3282) @kinglykrab 2023-04-14
  • Remove GetQGlobal() from qglobals.cpp/qglobals.h (#3285) @kinglykrab 2023-04-14
  • Remove IsFullHP from mob.cpp/mob.h (#3277) @kinglykrab 2023-04-14
  • Remove IsMeleeDmg() from skills.cpp/skills.h (#3279) @kinglykrab 2023-04-14
  • Remove _GetMovementSpeed() from mob.h (#3276) @kinglykrab 2023-04-14
  • Remove always true condition in Strings::Commify() (#3193) @kinglykrab 2023-04-05
  • Remove always true conditions and unreachable code in Client::SendMercPersonalInfo() (#3258) @kinglykrab 2023-04-05
  • Remove always true statement in say_link.cpp (#3188) @kinglykrab 2023-04-05
  • Remove always true statements in task_client_state.cpp (#3292) @kinglykrab 2023-04-14
  • Remove always true/false conditions from bot.cpp (#3237) @kinglykrab 2023-04-05
  • Remove bool return from GetSharedPlatinum() (#3191) @kinglykrab 2023-04-05
  • Remove extra assignment of current_endurance in Client ctor (#3261) @kinglykrab 2023-04-05
  • Remove extraneous check for NegateAttacks in SE_NegateAttacks (#3228) @kinglykrab 2023-04-05
  • Remove extraneous parentheses around math in Mob::ApplySpellsBonuses() (#3227) @kinglykrab 2023-04-05
  • Remove getd(), geti(), InUse(), lasterr(), my_get_sv(), and VarExists() in embperl.cpp/embperl.h (#3283) @kinglykrab 2023-04-15
  • Remove item_timers from questmgr.cpp/questmgr.h (#3286) @kinglykrab 2023-04-14
  • Remove pendinggroup from mob.h (#3278) @kinglykrab 2023-04-14
  • Remove position_same_update_count from client.cpp/client.h (#3280) @kinglykrab 2023-04-14
  • Remove unnecessary break in while loop in Mob::AddToHateList() (#3219) @kinglykrab 2023-04-05
  • Remove unnecessary check for IsStackable() in DeleteItem() (#3186) @kinglykrab 2023-04-05
  • Remove unnecessary condition and cleanup variable name in tasks.cpp (#3293) @kinglykrab 2023-04-14
  • Remove unnecessary conditions in Client::Consume() (#3265) @kinglykrab 2023-04-05
  • Remove unnecessary conditions in Client::FilteredMessageCheck() (#3262) @kinglykrab 2023-04-05
  • Remove unnecessary conditions in Client::SendFactionMessage() (#3267) @kinglykrab 2023-04-05
  • Remove unnecessary setting of reuse variable in Bot::DoClassAttacks() (#3233) @kinglykrab 2023-04-05
  • Remove unused SetConfigFile in common/eqemu_config.h (#3208) @kinglykrab 2023-04-05
  • Remove unused code in eq_packet.cpp/eq_packet.h (#3183) @kinglykrab 2023-04-05
  • Remove unused ctor and use default dtor in xtargetautohaters.h (#3290) @kinglykrab 2023-04-14
  • Remove unused macros in common/types.h (#3194) @kinglykrab 2023-04-05
  • Remove unused variable in Database::CopyCharacter() (#3197) @kinglykrab 2023-04-05
  • Remove unused variables and use reference in task_manager.cpp (#3291) @kinglykrab 2023-04-14
  • SE_AttackSpeed3 effect_value is always less than 0 (#3222) @kinglykrab 2023-04-05
  • SE_StrikeThrough and SE_StrikeThrough2 are the same in bonuses.cpp (#3223) @kinglykrab 2023-04-05
  • Set bonuses to use spell ID instead of boolean (#3230) @kinglykrab 2023-04-05
  • Use .clear() and .empty() instead of comparing to empty string or setting to empty string in CheckDatabaseConvertPPBlob() (#3201) @kinglykrab 2023-04-05
  • Use .clear() instead of setting string to empty in eqemu_command_handler.cpp (#3195) @kinglykrab 2023-04-05
  • Use .empty() in Client::ScribeSpells() and Client::LearnDisciplines() (#3259) @kinglykrab 2023-04-05
  • Use constant reference and check for empty string properly in dbcore.cpp (#3203) @kinglykrab 2023-04-05
  • Use default ctor instead of an empty ctor. (#3206) @kinglykrab 2023-04-05
  • Use default dtor instead of empty dtor for EQTime in eqtime.cpp/eqtime.h (#3210) @kinglykrab 2023-04-05
  • Use variable for c->GetTarget() instead of calling multiple times in bot_command.cpp (#3254) @kinglykrab 2023-04-05
  • Use variable for character instead of a loop (#3268) @kinglykrab 2023-04-05
  • Utilize .empty() instead of checking for an empty string in Database::ReserveName() (#3198) @kinglykrab 2023-04-05
  • Utilize IsTaunting(), SetPetPower(), SetPetType(), and SetTaunting() (#3275) @kinglykrab 2023-04-15
  • Validate for nullptrs in bot.cpp (#3232) @kinglykrab 2023-04-05
  • other is always defined in these cases in attack.cpp (#3217) @kinglykrab 2023-04-05
  • results variable is assigned but never used in SaveCharacterCreate() (#3180) @kinglykrab 2023-04-05
  • Add additional raid integrity checks on Bot Spawn. (#3295) @Aeadoin 2023-04-16
  • Fix crash with uninitialized item instance, and Bot timeout (#3296) @Aeadoin 2023-04-15
  • Resolve crash due to uninitialized pointer. (#3271) @Aeadoin 2023-04-08
  • Camping was causing player to leave raid, causing unexpected behavior (#3299) @Aeadoin 2023-04-22
  • Resolve loading of inventory (#3272) @Aeadoin 2023-04-08
Quest API
  • Optional summoning when already in melee range (#3204) @trentdm 2023-04-08
[22.9.1] - 04/03/2023

  • Add client pointer validation to Zone::GetClosestZonePoint() (#3173) @kinglykrab 2023-04-01
  • Change level to bot_level in Bot::DoClassAttacks() to not overlap member variable (#3239)...
Inktuta Revamp
  • DZ Based
  • Requires Cyno dead to request
  • 2 hour lockout on request
  • All fights revamped
  • Noqufiel is a completely re-written and different fight based on actual facts vs online guide garbage
  • Bonus Loot scripting functions (Can be looked up online how to specify the bonus loot item you want)
  • DZ's will lock at a specific point and prevent players from being added.
  • DZ requirements are Minimum 18 players, Maximum 54 players.

Uqua Revamp
  • DZ Based
  • Gas Chambers are re-written to be accurate and are very unforgiving, they work correctly per lives experience.
  • Anti Event skipping is in place (On live you cannot easily bypass doors as you can on the RoF2 and earlier clients)
  • Vrex fight has proper mechanics and flavor (including the npc's that act as the 3 minute timer by laying down in order each minute)
  • If you leave the construct up, and disregard the flavor warnings saying to make sure to kill it first, you will get a lockout time and no loot/key (This is live like)
  • DZ's will lock at a specific point and prevent players from being added.
  • This also includes a primals door update
  • DZ requirements are Minimum 18 players, Maximum 54 players.

The zone is still not 100% due to the inability to add proper entity based traps, but one that system is implemented I can resolve the last bit of inaccuracies.

  • Fix crash in CheckTradeskillLoreConflict (#3009) (Aeadoin) 2023-02-28
  • Account for bad data in Tradeskill Recipe Entries (#2991) (Aeadoin) 2023-02-25
  • Fix DoAnim quest method default speed (#3016) (Kinglykrab) 2023-03-01
  • Fix for Discipline Loading from Database causing issues with slot_ids (#3008) (Aeadoin) 2023-02-28
  • Fix for Lore Components where component is returned. (#3005) (Aeadoin) 2023-02-27
  • Fix issue where quest saylink responses would occur before the NPC's response (#3010) (Akkadius) 2023-03-01
  • Correct Mend reuse time and add reduction support. (#2972) (nytmyr) 2023-02-23
  • Fix Beneficial Target of Target procs (#2987) (Aeadoin) 2023-02-24
  • Fix for undefined MySQL library behavior. (#2834) (KimLS) 2023-02-25
  • Improve roambox logic (#2983) (Akkadius) 2023-02-24
  • More z-clip improvements, Wurm and Spectral Iksar race adjustments (#2988) (Akkadius) 2023-02-25
  • Smoother pathing z-correction (#2982) (Akkadius) 2023-02-24
Player Events
Quest API
  • Add IsAutoAttackEnabled() to Perl/Lua (#2979) (Kinglykrab) 2023-02-23
  • Add IsAutoFireEnabled() to Perl/Lua (#2978) (Kinglykrab) 2023-02-23
  • Fix EVENT_TIMER crash when entity is no longer available (#2986) (Akkadius) 2023-02-24
  • Add support for zone ID and instance version to NPC Scaling (#2968) (Kinglykrab) 2023-02-25
  • Improvements to general pathing
  • Mobs should clip into the ground far less
  • Recovery from clipping should also work much better
Mesh improvements to the following zones
  • Anguish
  • Ruined City of Dranik
  • Highkeep
  • Muramite Proving Grounds
  • Riftseekers
  • Tipt
  • Wall of Slaughter
  • Plane of Valor
To give you an idea of what "mesh improvements" means. NPC's adhere to a mesh when they make pathing decisions in a zone. When there are holes, it can lead to suboptimal routing and sometimes clipping to occur.

Below is Plane of Valor, before and after

Thanks for weathering the turbulence of updates recently. We appreciate you all

Double Experience through 2/27/2023
  • Issues related to players having problems with various hand-in NPC's should now be resolved (#2945) (#1373)
  • Issues related to Gates of Discord instances / raids should now be resolved (#2947)
  • Groundspawns will now properly do lore checks and no longer desynchronize the client
  • Groundspawns now appear properly on the ground instead of up in the air (#2930)
  • Clients dropping items should no longer crash zones (#2939)
  • Translocations work again (#2897)
  • Tradeskills now check for lore (#2932)
  • Plane of Mischief teleportation doors/pictures work properly again
  • Sanctus Seru teleportation clicks are now working properly again
See below for changelog


  • Remove bots preprocessor (Akkadius) 2023-01-20
  • Cleanup methods, and virtual overrides. (#2734) (Aeadoin) 2023-01-15
  • Add Additional HeroicAgi/Dex Modifiers. (#2838) (Aeadoin) 2023-02-07
  • Add Additional HeroicStr modifiers. (#2837) (Aeadoin) 2023-02-07
  • Add Bot Command Reloading (#2773) (Kinglykrab) 2023-01-22
  • Add EVENT_UNEQUIP_ITEM_BOT & EVENT_EQUIP_ITEM_BOT (#2796) (Aeadoin) 2023-01-27
  • Add GetAugmentIDsBySlotID & AddItem with table ref Methods. (#2805) (Aeadoin) 2023-01-29
  • Add GetBotOwnerByBotID Method (#2715) (Aeadoin) 2023-01-11
  • Add IsBot() to methods in attack.cpp where applicable. (#2840) (Aeadoin) 2023-02-09
  • Add Lore Check for Augments. (#2874) (Aeadoin) 2023-02-12
  • Add Override methods for GetMax Buffs/Songs/Total slots (#2801) (Aeadoin) 2023-01-27
  • Add Pet Power Support for Temp Pets. (#2853) (Aeadoin) 2023-02-11
  • Add Support for AA bonuses that were missing. (#2764) (Aeadoin) 2023-01-20
  • Add Support for TryTriggerOnCastFocusEffect (#2864) (Aeadoin) 2023-02-13
  • Add TotalDominationBonus modifiers. (#2852) (Aeadoin) 2023-02-09
  • Add Virtual Override for Bot::Attack (#2771) (Aeadoin) 2023-01-20
  • Cleanup and remove preprocessors. (#2757) (Kinglykrab) 2023-01-20
  • Cleanup various Bot Spell Focus methods (#2649) (Aeadoin) 2022-12-16
  • Fix Bot Spell Type "In Combat Buffs" (#2711) (Aeadoin) 2023-01-08
  • Fix Slow Query in QueryNameAvailablity (#2781) (Aeadoin) 2023-01-22
  • Post pre-processor fixes (#2770) (Akkadius) 2023-01-20
  • Restrict Bot Groups from spawning while Feigned. (#2761) (Aeadoin) 2023-01-19
  • ST_AreaClientOnly spells to land on Bots (#2849) (Aeadoin) 2023-02-09
  • Update ResistSpell to use temp_level_diff client formula (#2851) (Aeadoin) 2023-02-09
  • ^create and ^viewcombos popup messages fix. (#2797) (Kinglykrab) 2023-01-26
  • Fixing % based mob see invis (#2802) (fryguy503) 2023-01-29
  • #reload aa will now refresh the AA table properly for every client when changes are made (#2814) (Natedog2012) 2023-01-31
  • #reload static should now properly fill the entity_lists for… (#2815) (Natedog2012) 2023-01-31
  • Arithmetic on different enums is deprecated (#2752) (mackal) 2023-01-17
  • Enable C++20 + Fixes + FMT 9.1 (#2664) (Akkadius) 2022-12-21
  • Fix Windows stderr not bubbling properly (#2925) (Akkadius) 2023-02-14
Code Cleanup
  • Fix Bot Crash in Bot::Bot Constructor. (#2868) (Aeadoin) 2023-02-12
  • Fix Crash in FindType (#2867) (Aeadoin) 2023-02-13
  • Fix IsUnderwaterOnly crash where npc data references can be stale (#2830) (Akkadius) 2023-02-06
  • Fix command crash with #npcedit weapon when second weapon not passed ni (#2829) (Akkadius) 2023-02-06
  • Fix crash in Mob::CommonDamage when attacker was null (#2872) (Aeadoin) 2023-02-13
  • Fix crash in bot command botdyearmor (#2832) (Akkadius) 2023-02-06
  • Fix crash issue with log formatting during character creation (#2798) (Akkadius) 2023-01-27
  • Fix issue where long short names overflow file_name (Akkadius) 2023-02-09
  • Fix potential crash in Mob::CommonDamage (#2848) (Aeadoin) 2023-02-09
  • Fix rarer world crash issue where scheduler database was not available (#2789) (Akkadius) 2023-01-24
DB Updates
  • Add Windows MySQL path auto detection for users where the path is not found (#2836) (Akkadius) 2023-02-06
  • Have NPCs trigger double doors (#2821) (Akkadius) 2023-02-06
  • Remove door dev tools spam on client controlled doors (#2824) (Akkadius) 2023-02-06
  • Add "Keeps Sold Items" Flag to NPCs (#2671) (Kinglykrab) 2022-12-25
  • Add Experience Gain Toggle. (#2676) (Kinglykrab) 2022-12-30
  • Add IsOfClientBotMerc() virtual method. (#2843) (Aeadoin) 2023-02-07
  • Add Min/Max Status to Merchants (#2806) (Kinglykrab) 2023-01-29
  • Add Rule to Disable Group EXP Modifier. (#2741) (Kinglykrab) 2023-01-15
  • ResetItemCooldown added to lua/perl and fix item re-cast times to show properly (#2793) (Natedog2012) 2023-01-26
  • #npcstats command displaying incorrect faction (#2710) (noudess) 2023-01-08
  • #scribespells triggered error on mysql keyword rank (#2779) (noudess) 2023-01-21
  • Add Complete Heal Spell back to IsCompleteHealSpell Method (#2722) (Aeadoin) 2023-01-11
  • Add omitted function call in UCS (#2768) (Valorith) 2023-01-20
  • AltCurrencySelectItemReply_Struct was not handled correctly. (#2702) (Aeadoin) 2023-01-04
  • BuffLevelRestrictions were restricting group buffs if mob targeted (#2809) (noudess) 2023-01-29
  • EVENT_ENTER_AREA/EVENT_LEAVE_AREA. (#2698) (Kinglykrab) 2023-01-02
  • Fix #door Save (#2699) (Kinglykrab) 2023-01-02
  • Fix #findaa and GetAAName(). (#2774) (Kinglykrab) 2023-01-22
  • Fix #zone 0. (#2691) (Kinglykrab) 2023-01-01
  • Fix Aug Clicks where item has no click effect. (#2725) (Aeadoin) 2023-01-12
  • Fix Bot "Failed to Load" Messages. (#2719) (Kinglykrab) 2023-01-11
  • Fix Bot Group Loading (#2780) (Aeadoin) 2023-01-22
  • Fix CheckNumHitsRemaining() with 1H Blunt (#2846) (Kinglykrab) 2023-02-07
  • Fix Group XP not working. (#2748) (Aeadoin) 2023-01-17
  • Fix NPC Reference in EVENT_SPAWN (#2712) (Kinglykrab) 2023-01-08
  • Fix NPC ghosting at safe coordinates (#2823) (Akkadius) 2023-02-06
  • Fix ST_TargetsTarget Spells with Restrictions (#2746) (Aeadoin) 2023-01-15
  • Fix botgrouplist to display unique entries. (#2785) (Aeadoin) 2023-01-23
  • Fix bots equipping augments. (#2772) (Kinglykrab) 2023-01-22
  • Fix does_augment_fit_slot method. (#2817) (Aeadoin) 2023-02-01
  • Fix for interrupting item casts to no longer lock the client if cast time of item greater than 0 (#2921) (Natedog2012) 2023-02-13
  • Fix issue with Bot::LoadAndSpawnAllZonedBots. (#2733) (Kinglykrab) 2023-01-15
  • Fix luamod GetExperienceForKill return value (Cole-SoD) 2023-01-12
  • Fix nullptr spell in BCSpells::Load() (#2790) (Kinglykrab) 2023-01-24
  • Fix scenario where dereferenced object could be null. (#2784) (Aeadoin) 2023-01-23
  • Fixed message on promote/demote permissions check. (#2700) (Valorith) 2023-01-02
  • Handle_OP_AugmentItem could cause Zone crash (#2750) (Aeadoin) 2023-01-17
  • HasPet() Zone Crashes (#2744) (Aeadoin) 2023-01-15
  • Move EVENT_SPAWN for adding NPCs back to original spot, also add NPCs… (#2749) (Natedog2012) 2023-01-17
  • NPC Constructor was passing hp_regen_per_second out of order to Mob(). (#2681) (Aeadoin) 2022-12-29
  • Remove duplicate logic in GetActSpellHealing reducing HOT criticals (#2786) (Kinglykrab) 2023-01-24
  • Resolve Warning due to Virtual Mob Method GetInv() (#2650) (Aeadoin) 2022-12-19
  • Resolve XP Calculation Bug introduced w/ recent Rule addition (#2703) (Valorith) 2023-01-07
  • Resolve issue with max buff count being 25 in ROF2. (#2800) (Kinglykrab) 2023-01-28
  • Zone Flags Regression (#2760) (Akkadius) 2023-01-19
  • Add raw opcode when emu translated opcode is not found (OP_Unknown) via (C->S) (#2847) (Akkadius) 2023-02-08
  • Force crash logs to always be on regardless of setting (#2762) (Akkadius) 2023-01-20
  • Implement Player Event Logging system (#2833) (Akkadius) 2023-02-13
  • Improvements to GM Say Logging (#2765) (Akkadius) 2023-01-20
  • Logging Improvements (#2755) (Akkadius) 2023-01-18
  • Remove function prefixes (#2766) (Akkadius) 2023-01-20
  • Reset stream so we don't bold the whole line (Akkadius) 2023-01-18
  • Handle channel name filter checks in memory (#2767) (Valorith) 2023-01-20
  • Improvements to handling tight corridors pathing, clipping detection and recovery (#2826) (Akkadius) 2023-02-06
Quest API
  • (Performance) Check equip or scale item events exist before export and execute (#2898) (Kinglykrab) 2023-02-13
  • (Performance) Check event EVENT_AA_BUY or EVENT_AA_GAIN exist before export and execute (#2892) (Kinglykrab) 2023-02-13
  • (Performance) Check event EVENT_AGGRO, EVENT_ATTACK, or EVENT_COMBAT exist before export and execute (#2901) (Kinglykrab) 2023-02-13
  • (Performance) Check event EVENT_COMBINE, EVENT_COMBINE_SUCCESS, EVENT_COMBINE_FAILURE, or EVENT_COMBINE_VALIDATE exist before export and execute (#2896) (Kinglykrab) 2023-02-13
  • (Performance) Check event EVENT_DEATH, EVENT_DEATH_COMPLETE, or EVENT_DEATH_ZONE exist before export and execute (#2909) (Kinglykrab) 2023-02-13
  • (Performance) Check event EVENT_ENVIRONMENTAL_DAMAGE exists before export and execute (#2899) (Kinglykrab) 2023-02-13
  • (Performance) Check event EVENT_FEIGN_DEATH exists before export and execute (#2916) (Kinglykrab) 2023-02-13
  • (Performance) Check event EVENT_ITEM_TICK or EVENT_WEAPON_PROC exist before export and execute (#2914) (Kinglykrab) 2023-02-13
  • (Performance) Check event EVENT_LANGUAGE_SKILL_UP, EVENT_SKILL_UP, or EVENT_USE_SKILL exist before export and execute (#2894) (Kinglykrab) 2023-02-13
  • (Performance) Check event EVENT_PAYLOAD or EVENT_SIGNAL exist before export and execute (#2902) (Kinglykrab) 2023-02-13
  • (Performance) Check event EVENT_SLAY exists before export and execute (#2910) (Kinglykrab) 2023-02-13
  • (Performance) Check event EVENT_WAYPOINT_ARRIVE or EVENT_WAYPOINT_DEPART exist before export and execute (#2905) (Kinglykrab) 2023-02-13
  • (Performance) Check event exists before export and execute EVENT_AGGRO_SAY, EVENT_SAY, and EVENT_PROXIMITY_SAY (#2882) (Kinglykrab) 2023-02-13
  • (Performance) Check event exists before export and execute EVENT_BOT_CREATE (#2886) (Kinglykrab) 2023-02-13
  • (Performance) Check event exists before export and execute EVENT_CLICK_DOOR and EVENT_CLICK_OBJECT (#2880) (Kinglykrab) 2023-02-13
  • (Performance) Check event exists before export and execute EVENT_DESPAWN and EVENT_DESPAWN_ZONE (#2887) (Kinglykrab) 2023-02-13
  • (Performance) Check event exists before export and execute EVENT_DISCOVER_ITEM (#2912) (Kinglykrab) 2023-02-13
  • (Performance) Check event exists before export and execute EVENT_DUEL_LOSE and EVENT_DUEL_WIN (#2915) (Kinglykrab) 2023-02-13
  • (Performance) Check event exists before export and execute EVENT_ENTER_ZONE and EVENT_ZONE (#2900) (Kinglykrab) 2023-02-13
  • (Performance) Check event exists before export and execute EVENT_GM_COMMAND (#2890) (Kinglykrab) 2023-02-13
  • (Performance) Check event exists before export and execute EVENT_GROUP_CHANGE (#2884) (Kinglykrab) 2023-02-13
  • (Performance) Check event exists before export and execute EVENT_HP (#2904) (Kinglykrab) 2023-02-13
  • (Performance) Check event exists before export and execute EVENT_KILLED_MERIT (#2911) (Kinglykrab) 2023-02-13
  • (Performance) Check event exists before export and execute EVENT_LEVEL_UP and EVENT_LEVEL_DOWN (#2889) (Kinglykrab) 2023-02-13
  • (Performance) Check event exists before export and execute EVENT_POPUP_RESPONSE (#2881) (Kinglykrab) 2023-02-13
  • (Performance) Check event exists before export and execute EVENT_RESPAWN (#2917) (Kinglykrab) 2023-02-13
  • (Performance) Check event exists before export and execute EVENT_TICK (#2919) (Kinglykrab) 2023-02-13
  • (Performance) Check event exists before export and execute EVENT_TIMER (#2903) (Kinglykrab) 2023-02-13
  • (Performance) Check event exists before export and execute EVENT_TRADE (#2906) (Kinglykrab) 2023-02-13
  • (Performance) Check event exists before export and execute EVENT_UNHANDLED_OPCODE (#2918) (Kinglykrab) 2023-02-13
  • (Performance) Check event exists before export and execute EVENT_WARP (#2907) (Kinglykrab) 2023-02-13
  • (Performance) Check event exists before export and execute area events (#2888) (Kinglykrab) 2023-02-13
  • (Performance) Check merchant events exist before export and execute (#2893) (Kinglykrab) 2023-02-13
  • (Performance) Check spell or cast events exist before export and execute (#2897) (Kinglykrab) 2023-02-13
  • (Performance) Check task events exist before export and execute (#2883) (Kinglykrab) 2023-02-13
  • Add $target export to EVENT_INSPECT in Perl (#2891) (Kinglykrab) 2023-02-13
  • Add Additional XP Events EVENT_AA_EXP_GAIN, EVENT_EXP_GAIN (#2865) (Valorith) 2023-02-13
  • Add Augment Slot Type/Visible to GetItemStat (#2686) (Kinglykrab) 2023-01-01
  • Add Augment Slot support to does_augment_fit (#2813) (Kinglykrab) 2023-01-31
  • Add Bot Methods to Lua. (#2731) (Kinglykrab) 2023-01-14
  • Add Bot::Camp() to Perl/Lua. (#2718) (Kinglykrab) 2023-01-11
  • Add BuffCount() Overloads to Perl/Lua. (#2679) (Kinglykrab) 2022-12-29
  • Add CampAllBots() to Perl/Lua. (#2732) (Kinglykrab) 2023-01-14
  • Add Charges/Augment/Attuned Support to Varlink. (#2685) (Kinglykrab) 2023-01-01
  • Add Client Augment Events to Perl/Lua. (#2735) (Kinglykrab) 2023-01-15
  • Add Despawn Events to Perl/Lua. (#2707) (Kinglykrab) 2023-01-07
  • Add DoAugmentSlotsMatch() to Perl/Lua. (#2687) (Kinglykrab) 2023-01-01
  • Add DoesAugmentFit() to Perl/Lua. (#2688) (Kinglykrab) 2023-01-01
  • Add Door Methods to Perl/Lua. (#2724) (Kinglykrab) 2023-01-12
  • Add EVENT_BOT_CREATE to Perl/Lua (#2713) (Kinglykrab) 2023-01-09
  • Add EVENT_DAMAGE_GIVEN and EVENT_DAMAGE_TAKEN to Perl/Lua. (#2804) (Kinglykrab) 2023-01-29
  • Add EVENT_DESTROY_ITEM_CLIENT to Perl/Lua. (#2871) (Kinglykrab) 2023-02-13
  • Add EVENT_DROP_ITEM_CLIENT to Perl/Lua (#2869) (Kinglykrab) 2023-02-13
  • Add EVENT_ITEM_CLICK_CLIENT and EVENT_ITEM_CLICK_CAST_CLIENT to Perl/Lua. (#2810) (Kinglykrab) 2023-01-30
  • Add EVENT_TASKACCEPTED to Player scope (#2822) (Valorith) 2023-02-06
  • Add GetAugmentIDsBySlotID() to Perl/Lua. (#2673) (Kinglykrab) 2022-12-25
  • Add GetItemCooldown to return the time remaining on items… (#2811) (Natedog2012) 2023-01-30
  • Add GetLeader() and GetLeaderName() to Perl/Lua. (#2701) (Valorith) 2023-01-04
  • Add IsAttackAllowed() to Perl/Lua. (#2672) (Kinglykrab) 2022-12-25
  • Add LDoN Methods to Perl/Lua (#2799) (Kinglykrab) 2023-01-29
  • Add Override Parameters to ScaleNPC() in Perl/Lua. (#2816) (Kinglykrab) 2023-02-01
  • Add Recipe-based methods to Perl/Lua. (#2844) (Kinglykrab) 2023-02-08
  • Add SendPath() to Perl/Lua. (#2740) (Kinglykrab) 2023-01-15
  • Add SignalAllBotsByOwnerName() to Perl/Lua. (#2730) (Kinglykrab) 2023-01-13
  • Add option to Ignore Mods to CalcEXP (#2704) (Aeadoin) 2023-01-06
  • Add rule AlternateAugmentationSealer for using a different bagtype (#2831) (Natedog2012) 2023-02-06
  • Cleanup Proximity Events (#2697) (Kinglykrab) 2023-01-02
  • Cleanup string copies and push_backs. (#2807) (Kinglykrab) 2023-01-29
  • Default ScaleNPC to always scale. (#2818) (Kinglykrab) 2023-02-06
  • Export $door to EVENT_CLICKDOOR in Perl (#2861) (Kinglykrab) 2023-02-11
  • Export $hate_entity to EVENT_HATE_LIST in Perl (#2885) (Kinglykrab) 2023-02-13
  • Export $item and $augment to augment events in Perl (#2895) (Kinglykrab) 2023-02-13
  • Export $item and $corpse to EVENT_LOOT and EVENT_LOOT_ZONE in Perl (#2878) (Kinglykrab) 2023-02-13
  • Export $item to Client/Bot Equip Events in Perl (#2860) (Kinglykrab) 2023-02-11
  • Export $item to EVENT_DISCOVER_ITEM in Perl (#2863) (Kinglykrab) 2023-02-11
  • Export $item to EVENT_PLAYER_PICKUP in Perl. (#2875) (Kinglykrab) 2023-02-13
  • Export $item to Fishing and Forage Events in Perl (#2876) (Kinglykrab) 2023-02-13
  • Export $killed_npc to EVENT_NPC_SLAY to Perl (#2879) (Kinglykrab) 2023-02-13
  • Export $object to EVENT_CLICK_OBJECT in Perl (#2862) (Kinglykrab) 2023-02-11
  • Export $spawned to EVENT_SPAWN_ZONE in Perl (#2877) (Kinglykrab) 2023-02-13
  • Export target to EVENT_TARGET_CHANGE in Perl/Lua. (#2870) (Kinglykrab) 2023-02-13
  • Export targets to EVENT_CONSIDER and EVENT_CONSIDER_CORPSE (#2908) (Kinglykrab) 2023-02-13
  • Optionally parse EVENT_CONNECT and EVENT_DISCONNECT (#2913) (Kinglykrab) 2023-02-13
  • Optionally parse EVENT_TEST_BUFF (#2920) (Kinglykrab) 2023-02-13
  • Revert " Cleanup string copies and push_backs. " (#2807) (Akkadius) 2023-02-01
  • Add Backstab Rules (#2666) (Valorith) 2022-12-21
  • Add Group/Raid Experience Rules (#2850) (Kinglykrab) 2023-02-13
  • Add LDoN Loot Count Modifier Rule (#2694) (Kinglykrab) 2023-01-03
  • Add ManaOnDeath and EndurOnDeath (#2661) (fryguy503) 2022-12-20
  • Add rule for NPC Level Based Buff Restrictions. (#2708) (noudess) 2023-01-15
  • Add rule to allow players to permanently save chat channels to database, up to a limit. (#2706) (Valorith) 2023-01-19
  • Add rule to ignore name filter on chat channel creation. (#2820) (Valorith) 2023-02-06
  • Added rule to bypass level based haste caps (#2835) (jcr4990) 2023-02-06
  • Change TradeskillUp Rules to be Floats (#2674) (Aeadoin) 2022-12-25
  • Fix rule updates that affected bot booting checks (#2841) (Akkadius) 2023-02-06
  • Rule to allow cap on % XP gain per kill (#2667) (Valorith) 2022-12-25
  • Implement alternate currency rewards (#2827) (Akkadius) 2023-02-06
  • Fix MSVC compilation bug via workaround (#2926) (Akkadius) 2023-02-14
Zone Flags
  • Use database connection, not content connection (#2759) (Akkadius) 2023-01-19
It's finally here. We're going to start doing Alpha/Beta testing in the coming weeks.

Stay tuned for more detailed information.

In the meantime, I'm looking to start building interest of who is interested in participating in testing? The testing will not be occurring on the Live server.

Please share and look forward to hearing from you
Overdue but not overdone. Plane of Time has received a much needed overhaul to be in line with accuracy of the event mechanics and to utilize the newer Dynamic Zone system that hgtw implemented a few years ago. This also closes up a few exploits that existed with the older implementation of the Plane of Time.

  • Full DZ Support with Proper checks for each stage
  • Phase 1 has proper shadowed bosses if you return after 12 hours to continue and are required to complete phase 1 again. These bosses drop no loot per lives setup.
  • Per live there is a 45s pre-spawn wait on each of the 5 Phase 1 trials
  • Each Phase 1 section has a 18 player limit, any additional players will cause a random player in that area to be kicked to PoTimeA
  • Phase 2 is time gated by the RP of the bosses walking and pausing at each "wave". They require no activation in each section unlike phase 1
  • Once you enter Phase 4, zoning in will bring you directly to phase 4 with no way to re-enter phase 1-3
  • Once you enter Phase 5, zoning in will bring you directly to phase 5 with no way to re-enter phase 1-4
  • God Portals will become active once the respective god is killed.
  • DZ requirements are Minimum 18 players, Maximum 72 players.
  • When the egg is killed, the RP Event will start and cannot be stopped. There is not much time before the entire raid is ported out at that point.
  • If you end your dz and return with a fresh dz you will not be granted any of your bonus time from the previous phase. You will be granted the standard phase time.
We had roughly an hour of downtime while I was getting things fixed and sorted.

Running Double EXP through Wednesday

Server Hardware Update

Every year or so I cycle out with new hardware and we're about due anyways.

We've upgraded hardware Sunday (20th) which has also dropped 20ms latency on average for users and has led to better server responsiveness around the board.

Server DDOS Attacks

We've been getting attacked with anywhere between 3-4Gbps to 60-80Gbps of attack traffic over the past few months. It has occurred sporadically so while it might be fine for a few days, the issue comes back and there's a whole new flavor of attacks with different signatures and things we needed to combat.

With the server upgrade, this also changes the network story for how the server is being fed mitigation wise. We have several layers of DDOS mitigation implemented at the server level. We have DDOS mitigation appliances that will vacuum malicious traffic based on known signatures, we also firewall all non-user facing traffic and have many iptables configurations to discard invalid packet signatures, malformed packets, fragmented packets, SYN flood rate limiting and a wide variety of other mechanisms.

All in all, we should be in a much better place for user experience. There's no guarantees we don't have to deal with something later down the road.

Double Experience

In the spirit of 4 days of server stability so far, we will go full 2x (Double Experience) through Monday (28th). I think we can do another sometime down the road in the near term since everyone has had to deal with this to some degree for a few months ago.

Thank you for your patience as fixing a moving and changing target certainly takes time.