Skip to content



  • mackal Added classes_required to merchantlist (same bitmask as items)


Secrets (Akkadius): Perl $client->SilentMessage("Message"); addition, this is a pre-req for a Perl plugin I've shared with EQEmu. This function essentially mimics a player speaking with an NPC * which is used in popup window responses

  • Secrets Added functionality to Perl for $client->PlayMP3("name of file").

Usage varies, but typically you can place an MP3/WAV/XMI in the EQDir//sounds, pfs, s3d, or root client folder and it will play through this Perl function. Example, $client->PlayMP3("combattheme1.mp3") or $client->PlayMP3("TUTBTrade1.mp3")

All clients except Secrets of Faydwer and 6.2 have their opcodes identified for this function. The struct + supported params is the same throughout versions.

Use $client->PlayMP3 with an invalid sound file to stop playback or simply wait for it to end.

  • KLS Added functionality to Lua for Client:PlayMP3(filename)
  • KLS Added functionality to Lua for Client:SendMarqueeMessage(type, priority/opacity, fade_in_time_ms, fade_out_time_ms, duration_ms, msg)


  • Kayen Implemented SE_ArcheryDoubleAttack (Chance to do an extra archery attack)
  • Kayen Implemented SE_ShieldEquipDmgMod (Increase damage in primary hand if shield equiped)
  • Kayen Implemented SE_ShieldEquipHateMod (Increase hate generated if shield equiped)
  • Kayen Implemented SE_TriggerOnAmountValue (Trigger spell if HP/Mana/End bellow X value or num pet on target)


  • Kayen Fix to SE_BlockNextSpellFocus to make it functional again.


  • mackal Moved the blocked buff check down so we get spell effects like on live
  • Kayen Implemented SE_ReduceHealing (Reduces amount of healing on target by X amount)
  • Kayen Implemented SE_CastonFocusEffect (Triggers spell as part of a focus, when that focus effect is used)
  • Kayen Implemented SE_IncreaseHitDmgTaken (Effect is triggered when X amount of damage is taken)
  • Kayen More fixes for various spell triggers/procs to now properly use their resist modifier.


  • mackal Blocked buffs shouldn't fail, they should just not be applied.
  • JJ Changed enable/disable recipe to confirm change made.


  • Kayen Implemented additional functionality for SE_CurrentHP utilizing base2 values. (ie limit to body type)
  • Kayen Implemented SE_MitigateMeleeDamageSP (Partial Melee Rune that only is lowered if melee hits are over X amount of damage)
  • Kayen Implemented SE_SpellOnAmtDmgTaken (Effect is triggered when X amount of damage is taken)
  • Kayen Fix for various spell triggers/procs to now properly use their resist modifier.
  • Kayen Fix to mob->ModSkillDmgTaken(skill_num, value), setting value to -1 will now properly effect all skills.


  • mackal Fixed issue with crippling blow from berserker frenzy not actually doing anything
  • mackal Fix haste caps


  • mackal Fixed SpellType_Charm case in AICastSpell


  • mackal Added #showspellslist to view a mobs spell list
  • mackal Fix procing off of unattackable things


  • JJ Bandaid fix to CopyCharacter function.


  • mackal Stacking issues should be resolved now, probably could be optimized more, but went from 3 loops that do stuff to 3 where only 2 really does stuff and one breaks early in most cases, so slightly better


  • Secrets Fixed an issue related to a zone crash where the count of the abilities in an AA was 0, leading to a size 0 buffer issue.


  • Secrets Fixed an issue with two zone crashes reported on PEQ related to the buff restrictions code and AAs.
  • mackal Partially make use of dot_stacking_exempt (case when it's 1 is implemented, -1 case isn't)


  • mackal Added assistradius to npc_types, defaults to aggroradius if set to 0 (old behaviour)


  • Sorvani fixed leash and tether special abilities to use the specified range correctly.
  • mackal Rewrote the Mob::_GetMovementSpeed fix an issue that arose from the change on 11/11
  • Added the rule Character:BaseRunSpeedCap (default 158) so people can customize what their runspeed cap is. Hardcapped to 225 so stuff doesn't get too crazy.


  • Leere Fixed the drinking message for auto-consume, it will again correctly show up for forced consumption instead.
  • mackal Added Mob::DoCastingChecks() which will check for various fail conditions while the casting bar is up. This is called after Mob::DoCastSpell() starts the casting and before it returns.


  • mackal Fixed Mob::CalcFocusEffect()'s SE_LimitEffect
  • Leere Fixed a stacking issue for SE_StackingCommand_Block


  • mackal Implemented bard song effect cap. You can set the base cap with the rule Character:BaseInstrumentSoftCap, defaults to 36 or "3.6" as it is sometimes referred to.
  • mackal Fix Echo of Taelosia and Ayonae's Tutelage to increase the mod cap instead of further improving the instrument mod
  • mackal Implemented Singing/Instrument Mastery as an AA bonus.


  • mackal Changed the way walk speed is calculated to allow mobs to have their walk speed equal a 100% movement reduction


  • Leere Fixed Bard mana regen, they now only are affected by items and AA.


  • KLS Added a system to use the BaseData system in the client.
  • KLS Added an optional utility to import spells, skill caps and base data (will import from ./import and export to ./export).

Be sure to source the SQL and run shared_memory.


  • JJ (Kingly_Krab) Fix for #npcedit qglobal command.


  • JJ Added in-game commands to enable/disable tradeskill recipes

-Commands: #enablerecipe recipe_id, #disablerecipe recipe_id

-Perl: quest::enablerecipe(recipe_id), quest::disablerecipe(recipe_id)

-Lua: eq.enable_recipe(recipe_id), eq.disable_recipe(recipe_id)


  • Leere Add the ability to disable a tradeskill recipe


  • Uleat Client patch prep work for extending usable skill range (no apparent issues with Ti through RoF[12-10-2012] testing * i.e., clients showed proper skills and they didn't crash)
  • Uleat This final patch aligns the existing server PlayerProfile_Struct with the previous changes. The pp_struct, as well as the character 'pp' blob, remains unchanged in size and alignment. The only difference is that the first trailing 100 bytes of the unknown array have been re-assigned to the skills array, and the unknown array decreased by the same amount.


  • The existing configuration will allow the use of any new skills up to 99
  • Due to this new segment of the blob having never been written to properly, we may have erratic data there that needs to be cleared before use
  • None of the new skills are coded to use these 'new' skill slots
  • A per-client method will still need to be observed when coding for the new skill uses


  • Uleat Attempted fix for high level (12) debug compile failures


  • Explicit Windows vs. Linux code was not changed due to my inability to compile Linux code
  • Only CMake accessible flags were corrected if adding the 'std' namespace did not correct the issue
  • the tag [CODEBUG] was added to failed code identifed by the above note
  • If you are having compile issues after this patch is committed, look to the changes here first

  • Uleat Changed riposte fail check to proper failure criteria * (x


  • mackal Fix some memory leaks in Mob::SpellOnTarget


  • mackal Changed GetMinLevel return 0 for more cases that EQ uses for some reason ...
  • mackal Added buff level restrictions, set the Spells:BuffLevelRestrictions to false to have the old behavior.


  • Uleat Expanded the 'Bag Type' enumeration to include all known values. Also, set in place additional 'Bag Type' to 'Skill Type' conversions. Some of these will need to be verified before activation.
  • Uleat Cleaned up some unused enumerations to show a move towards standardization. More to come...


  • mackal Allow Titanium and lower clients to enter Tutorial zone from character select
  • Bad_Captain Fixed merc crash issue by updating special_abilities & vwMercNpcTypes (Sorvani).
  • Bad_Captain Bots* added out of combat bard songs & #bot bardoutofcombat on|off command to turn them on/off.


  • JJ (mackal) Allow use of Go Home button when Tutorial still selected in RoF.


  • Secrets Fixed zone shutdown (or #reloadqst) reinitalization of Perl. This should allow for Perl 5.14 and later to work on Windows under the new quest system.
  • mackal Beneficial single target buffs shouldn't have their mana/timers set if they fail to cast after the Mob::SpellOnTarget call in Mob::SpellFinished
  • JJ Revert change to EnterWorldPacket introduced on 22 April 2013 to fix inability to enter Tutorial or Go Home from character select screen.


  • mackal Fixed some more instances of the AA timer being eaten


  • mackal Added IsBuffSpell(spell_id) that will return true if the spell has a duration, so would end up in effects/song/discs etc windows on the client
  • mackal Replaced instances of using CalcBuffDuration to determine if a spell was a buff with IsBuffSpell
  • mackal Removed Mob::HasBuffIcon since it was doing what IsBuffSpell does in a more convoluted way with a rather misleading name
  • mackal Fixed issues that arose from the 10/03/2013 change


  • Sorvani fixed issue with stackable items being created with 0 charges cause by fix to SummonItems


  • mackal Fix when the random +1 tick is added to nerf extension focus effects to where they should be


  • Sorvani Changed SummonItem to only summon an item with max charges when said default value is present and not on zero charges
  • mackal Fixed issue with #showstats showing your level for a bunch of values


  • mackal Add support for /pet hold on and /pet hold off (UF and RoF)


  • KLS Removed Common Profiler and Zone Profiler. They're well past outdated status and are just code bloat.
  • KLS Fix for reported issue on forums with skills that could potentially be trained before a player achieved the level to train.


  • Uleat Fix for bot pet spell buff corruption (existing db issues will correct themselves through pet death attrition)


  • KLS Fix for crash in special_abilities code due to existing use of some dangerous code we didn't catch before.


  • Sorvani fix for lua_general.cpp funtion get_spawn_condition
  • Uleat added non-extensioned wildcard filter to ...\dependencies.gitignore to fix tortoisegit inclusion errors (fixes commit and display overlay issues.)


  • KLS Added packet class and helper functions to Lua.
  • KLS Added quest event: event_unhandled_opcode


  • KLS Added a few lua functions.
  • KLS Redid the npcspecialatk system with a new system that is more flexible but a little more complicated (this will break any 3rd party tools that deal with them).

Instead of a string such as "ERS" to denote "Enrage Rampage Summon" abilities are indexed by their ability number, level and params separated by '^'. It is stored in the following format: ability,level[,param0,param1,param2,param3,param4,param5,param6,param7] Params will be read until there are 8 total or a '^' is reached. Eg: 'ERS' -> '2,13,11,1

Levels allow us to dictate how abilities behave that may be different even though they're the same ability. Params allow us to further refine behaviors on a case by case basis. Passing 0 as a param will use the default value.

NOTE: Be sure to source 2013_07_11_NPC_Special_Abilities.sql. Also due to the large impact this has on a database it is very HIGHLY SUGGESTED to BACKUP YOUR DATABASE FIRST.

The following are the special abilities currently in the game as well as their levels and parameters currently in use:

SPECATK_SUMMON = 1 Level 1: Summon target to NPC Level 2: Summon NPC to target Param0: Cooldown in ms (default: 6000) Param1: HP ratio required to summon (default: 97)

SPECATK_ENRAGE = 2 Param0: HP ratio required to enrage (default: rule NPC:StartEnrageValue) Param1: Enrage duration in ms (default: 10000) Param2: Enrage cooldown in ms (default: 360000)

SPECATK_RAMPAGE = 3 Param0: Proc chance (default: 20) Param1: Rampage target count (default: rule Combat:MaxRampageTargets) Param2: Percent of a normal attack damage to deal (default: 100) Param3: Flat damage bonus to add to the rampage attack (default: 0) Param4: Ignore % armor for this attack (default 0) Param5: Ignore flat armor for this attack (default 0) Param6: Percent of npc's natual crit that can go toward this rampage (default: 100) Param7: Flat crit bonus on top of npc's natual crit that can go toward this attack (default 0)

SPECATK_AREA_RAMPAGE = 4 Param0: Proc chance (default: 20) Param1: Rampage target count (default: 1) Param2: Percent of a normal attack damage to deal (default: 100) Param3: Flat damage bonus to add to the rampage attack (default: 0) Param4: Ignore % armor for this attack (default 0) Param5: Ignore flat armor for this attack (default 0) Param6: Percent of npc's natual crit that can go toward this rampage (default: 100) Param7: Flat crit bonus on top of npc's natual crit that can go toward this attack (default 0)

SPECATK_FLURRY = 5 Param0: Proc chance (default: rule Combat:NPCFlurryChance) Param1: Flurry attack count (default: rule Combat:MaxFlurryHits) Param2: Percent of a normal attack damage to deal (default: 100) Param3: Flat damage bonus to add to the flurry attack (default: 0) Param4: Ignore % armor for this attack (default 0) Param5: Ignore flat armor for this attack (default 0) Param6: Percent of npc's natual crit that can go toward this attack (default: 100) Param7: Flat crit bonus on top of npc's natual crit that can go toward this attack (default 0)

Ex: Normal Flurry with 25% proc rate and 100% crit chance that ignores 500 armor. 5,1,25,0,0,0,0,500,0,100


NPC_TUNNELVISION = 29 Param0: Aggro modifier on non-tanks (default: rule Aggro:TunnelVisionAggroMod)


LEASH = 32 Param0: Range (default: aggro range * aggro range)

TETHER = 33 Param0: Range (default: aggro range * aggro range)


The following Lua API functions were added to deal with the new system: Integer GetSpecialAbility(Integer ability); Integer GetSpecialAbilityParam(Integer ability, Integer param); Void SetSpecialAbility(Integer ability, Integer level); Void SetSpecialAbilityParam(Integer ability, Integer param, Integer value); Void ClearSpecialAbilities(); Void ProcessSpecialAbilities(String str);

The old API functions that worked with letters still exist for backwards compatibility reasons but wont be updated further.


  • Secrets Cleanup of some log functions that did not have an 'off' function.**
  • Secrets Unknown opcode messages only show on EQDEBUG* >= 5 or higher now. (including the dumped packet)

_NOTE: We recommend for debugging and feature development that you keep EQDEBUG to 5 or higher. For production environments, we recommend 1 to help with CPU performance on windows machines and disk I/O on all platforms. *_Affected filters: NET**ERROR NET**DEBUG


  • KLS Added some lua functions
  • KLS Fixed some lua functions
  • KLS Perl now will (like lua) keep track of the values you return from EVENT_*. This allows perl to use the extra behavior in things like EVENT_DEATH. Now generally the perl system is now considered deprecated (in favor of lua in the long term) I felt this was too big a change to pass up adding when I got it working.


  • KLS Exported eq.follow(entity_id, [distance]) and eq.stop_follow() to lua.


  • mackal Fix Monster Summoning related to giants/cyclops
  • mackal Prevent Monster Summoning from summoning a portal in bothunder
  • KLS Merge of lua branch to master

See: for more detailed information on what is added.

Upgrade notes:

-'templates' quest folder needs to be renamed 'global'

-'items' quest folder needs to be moved into the 'global' folder

-'spells' quest folder needs to be moved into the 'global' folder

-EVENT_PROXIMITY_SAY needs to be enabled via quest before it will work, calling quest::enable_proximity_say() in EVENT_SPAWN will suffice.

-quest::handleturnin, quest::completehandin, quest::resethandin, and quest::clearhandin have been removed. Take a look at plugin::mq_process_items, plugin::check_mq_handin, plugin::clear_mq_handin for MQ viable replacements.

-Some spell quests that overwrote the effects from the spell they were cast on no longer function properly on perl, it's suggested you make the spells empty or rewrite the broken quests in lua and return a non-zero value.

-Some item quests have changed in a subtle way, though it's unlikely any quests are impacted and the thread has more information if you found any of your quests broke. As far as I know for example: PEQ didn't have to update any of its nearly 70 item quests.

-Cazic Touch (982) no longer shouts the name of the thing it is targeting without a script.

-EVENT_DEATH now triggers before the death is complete. For the old functionality you may use EVENT_DEATH_COMPLETE. It might be a good idea to replace all EVENT_DEATH with EVENT_DEATH_COMPLETE in existing spells.

We sought to minimize changes required but it's still a bit disruptive so take a few minutes when upgrading to make sure everything is correct. Most notably quest::clearhandin was used in some popular plugins to avoid a dupe involved with its code and now that it's gone those will not function if fixes are not applied.


  • Secrets Fixed an issue with RoF items and Req/Rec level above 100 appearing yellow. Recommended to enable the #iteminfo command for items that have a req/rec above 100 to display proper information regarding the info.


  • KLS (image) Potentially could bypass some spell checks by passing a specially crafted spell slot. This has been addressed.


  • KLS Merge Hateborne's hp cap stuff
  • KLS We haven't updated changelog in a while but there's been:

-Some string stuff

-A lot of fixes to things like caps.

-More work on custom mod stuff (including examples)

-Fix for login not bailing out if it cant connect to a db

-Quite a few warning changes.


  • Uleat (Updated: 06/12/2013) Fixed a few observed bot issues and an beneficial AE casting bug:

Added missing Bot primary weapon proc call (secondary and ranged already exist)

Added Bard Bot instrumentation bonuses

Added checks to avoid AE Buff casting on enemy mobs

Fixed a few typos in 'Vah Shir'-related code

(Please post any discrepancies as bugs)


Added simple account flags. Would this work better as an additional qglobal category?

Added SendMessage to EQW, useful for using CURL to broadcast to the server.

Added WorldShutDown to EQW for timed world shutdowns, also updated console worldshutdown command to optionally use timed behavior.

Added numerous modding hooks and mod_functions.cpp for easy custom formulas or future lua integration.

Added various rules for monk AC bonus weight, archery bonuses, kick/bash stuns and mob stun levels.

required SQL: 2013_05_05_Account_Flags.sql

required SQL: 2013_05_05_Item_Tick.sql


  • PiB Implement CRC16 using CRC32.


  • PiB Verify OP_Ack size & fix crash in BasePacket::build_raw_header_dump due to uninitialised timestamp.
  • Derision Verify minimum size of OP_Packet, OP_Fragment and OP_OutOfOrderAck.


  • Bad_Captain Fixed a couple of merc stat issues.
  • Bad_Captain Removed unneeded bot pet AI.
  • Bad_Captain Fixed a few bot aggro issues. (Uleat)


  • JJ Fixed rare case where heals from buffs could go negative.


  • Derision Moved entity_list.Clear() prior to destruction of Perl objects in zone shutdown as I was seeing a segfault due to attempts to call EVENT_HATE_LIST as mobs were being destroyed.


  • mackal Realized I was an idiot, changed salvage script to be better

optional SQL: 2013_04_09_SalvageCleanOld.sql * run if ran old script


  • mackal Implemented Salvage AA

required SQL: 2013_04_08_Salvage.sql

script: * will generate the entries for some exceptions for salvage returns.


  • mackal Implemented SE_ForageAdditionalItems as a bonus

required SQL: 2013_04_04_NaturesBounty.sql


  • mackal Overloaded Mob::Say_StringID with the option to provide a message type
  • mackal Switched rest of the Pet Messages to MT_PetResponse (Leader commands intentionally left the old way)


  • Bad_Captain Fixed Merc lack of use of heal over time spells (causing excessive healing).
  • Bad_Captain Fixed pet mitigation/AC issues.


  • mackal AA reuse timers now start when you hit the button and are reset upon failure
  • mackal Instant Cast bard AAs can now be used while singing a song


  • mackal Fixed most of the pet talking, all use StringIDs now. Pet now informs you when it taunts.


  • mackal Fix issues with escape not always working and fixed SE_FadingMemories to have the message since the message isn't part of the spell data.

Escape now uses just the spell and not the AA Actoin

Fading Memories now only uses the AA Action to eat mana


  • Bad_Captain Fixed merc buffing bugs.
  • Bad_Captain Added checks before dismissing merc to prevent possible bugged mercs.
  • Bad_Captain Merged in Secret's merc memory leak fixes.


  • mackal Fixed stacking issues with SE_Limit* (ex. Unholy Aura Discipline and Aura of Reverence)


  • Bad_Captain Fixed zone crash due to merc focus effects & tribute.
  • Bad_Captain Fixed merc aggro issues when client in melee range & spell recast timers.
  • Bad_Captain Added melee DPS spells/disciplines & support.


  • Secrets Fixed that pesky merc memleak.
  • Secrets Bit of code cleanup regarding mercs.


  • Derision RoF: Added ENCODE for Resurrect_struct (Accepting a rez should now work).
  • Derision Fixed a couple of memory leaks in Rez code.


  • JJ (NatedogEZ) Fix for hate list random never selecting last member of hate list.
  • Bad_Captain Fixed Merc spell recast timers.
  • Bad_Captain Changed how Mercs add mobs to their hate lists (should prevent IsEngaged() issues).
  • Bad_Captain Initial Caster DPS Merc spell casting AI, including initial Merc stance implementation.
  • Bad_Captain Mercs now suspend when their owner dies to prevent them being bugged (until it can be fixed).

OPTIONAL SQL: 2013_03_14_Merc_Spells.sql


  • Zaela_S Stop mobs aggroing on dead players when using RespawnFromHover.
  • Derision Removed _log message from zone/CatchSignal on Linux as it can deadlock on shutdown if another signal is received while the _log call is being processed.
  • Derision Added some error logging into ZoneDatabase::NPCSpawnDB for #npcspawn create.


  • af4t Melee tomes with names beginning "Skill:" (e.g. RNG Warder's Wrath, etc) can be memorized now, by hand-in-to-guildmaster or right-click-from-inventory.


  • af4t Stop NPCs aggroing each other with buffs/beneficial spells.


  • Bad_Captain Fixed Merc depop bug.
  • Bad_Captain Added merc rest regen.
  • Bad_Captain Fixed merc group spell casting bug where mercs would continue to try to cast group buffs on pets of caster who didn't have Pet Affinity AA.


  • Bad_Captain Fixed Merc duplicate save bug.
  • Bad_Captain Focus items, spell_scale and heal_scale now work implemented and new merc equipment (with focus items).
  • Bad_Captain Added checks during merc hire, unsuspend, & timer update for states where a merc can't be hired, unsuspended, or can't be retained due to insufficient funds, no room in group, in raid, invalid merc data, etc, and give appropriate feedback.
  • Bad_Captain Added rules for charging of merc purchase and upkeep costs.

REQUIRED SQL: 2013_03_1_Merc_Rules_and_Equipment.sql


  • KLS Changed how shared memory works: Instead of System V/windows pagefile shared memory we now have shared memory that's backed by the filesystem. What that means is basically instead of EMuSharedMem(shared library) we now have shared_memory(executable), shared memory will be persistent between runs until you delete or reload it using the shared_memory executable.

STEPS FOR PEOPLE WHO CAN'T BE BOTHERED TO FIGURE IT OUT: 1) Create a directory in the place you run world/zone named shared and make sure files can write there. 2) Run the shared_memory executable from the same place you run world/zone (it's basically doing the loading we would do on startup so will take a moment). 3) Run world/zone/whatever


  • af4t Add Touch of the Wicked AA redux to SK Improved Harm Touch and Leech Touch.


  • mackal Mobs will now be removed from XTargets when they get back to their way point, should be last instance of XTarget mobs not clearing when they are not aggroed anymore


  • Derision World should no longer crash if the start_zone query fails at character creation.


  • Bad_Captain Moved merc save to merc table, save merc buffs, added cure and rez spells to healer merc.
  • JJ Chat garbled for drunk characters.
  • Derision Charmed pets should no longer be targettable with F8. Charmed pets no longer get a surname of Soandso's Pet.
  • mackal Added potionbelt tool tip
  • KLS Added EVENT_DEATH to Player Quests

REQUIRED SQL: 2013_02_18_Merc_Rules_and_Tables.sql OPTIONAL SQL: 2013_02_18_Merc_Spells.sql


  • Derision Added optional guildid and minstatus parameters to quest::gmsay(, [color], [toworld], [guildid], [minstatus])
  • Derision Client version is now returned by the stream proxy as a number.
  • Derision Fixed bug where BecomeTrader packets were only being sent to the Trader, not all other clients in the bazaar.


  • mackal Fix AA reuse timer calc
  • mackal Remove old filters and change all remaining old to new (Also fix Auction filtering out OOC as well due to incorrect define)


  • Kayen AA fix

REQUIRED SQL: utils/sql/svn/2504_required_aa_updates.sql


  • Derision RoF: Added ENCODE for OP_BeginCast (fixes no sound during spell casting). Corrected OP_DeleteSpell.


  • JJ (mackal) Language skill up should use proper function.
  • JJ SetLanguageSkill now updates client immediately. Both functions do proper limit checks.

Added two missing languages. Skill level 0 in a spoken language now shows 'in an unknown tongue'.

  • JJ Initial implementation of a GarbleMessage function and implemented for languages. Can be shared with drunk speaking.


  • KLS Was pointed out to me that we're in violation of ActiveState Licensing terms for their perl distribution.

To rectify this we have removed the Windows perl binaries from the source.


  • Uleat Changed conversion of bot armor colors from long to unsigned long. Conversion error led to #FFFFFFFF for all returns.


  • cavedude00 Added heading to start_zones
  • Uleat Fixed the 'nude' bot issue. Mob::texture was not set to the appropriate value and forcing an unclad body model.
  • Uleat Fixed the show/hide helm feature. Added rebroadcast of packet so that changes take place immediately instead of after zoning.
  • KLS Addressed several (completely stupid and inexcusable) bugs in the avoidance code that made it impossible to dodge and parry in certain situations.

As a note: please don't touch the avoidance code if you don't know what you're doing, seriously.

Required SQL: utils/sql/svn/2482_required_start_zones.sql


  • Trevius RoF: More work on Bazaar Traders.
  • Sorvani Items with more than 1 charge should be purchased at max charges again. This does not fix players recharging by sell/buyback method. That will come in the future.


  • Trevius RoF: Fixed some opcodes related to surnames and traders. Surnames can now be cleared.
  • JJ Fix to #spawn: Automatically truncate name if too long so spawn will happen as expected rather than a NameTooLong NPC.
  • JJ Fix to #spawn: Output actual NPC result after creation rather than projected result before.


  • Trevius RoF: Loading Spell Sets now unmems spells before meming the new set.
  • Trevius RoF: Turning on Trader mode in bazaar now works, but no further trader functionality is available yet.
  • Akkadius Fixed an issue where was not initializing (initially)


  • cavedude00 (mackal) Rune aggro fix
  • cavedude00 (Drajor) Tradeskill skillneeded fix.


  • Kayen Various AA fixes, mostly related to SOF display issues.

REQUIRED SQL: utils/sql/svn/2471_required_aa_updates.sql


  • Secrets Another attempt to fix this bot/merc group crash on zoning.
  • cavedude Added $client->GetInstanceID() Perl export.


  • Secrets Fixed a crash issue involving invalid buff slots in SpellEffect code. (Crash fix.)
  • Secrets QuestParserCollection no longer processes EventPlayer in the case that a player zones and the group is still valid via linkdeath. (Crash fix.)
  • Secrets Added the command #augmentitem. Does the same thing that the #bot augmentitem command does but without the bot command needing to be active. Default 250 status.
  • JJ Added quest::depop_withtimer() which will depop NPC and start spawn timer (a replacement for $npc->Depop(1) code if desired)


  • Trevius Fixed a bug introduced in Rev2448 that caused some spell casting to use all of a player's mana.
  • Trevius Mercenary buffs now display in the Target Buffs window.
  • Trevius RoF: Populated a couple more bit fields in the spawn struct.
  • Trevius Mercenaries are no longer targetable with NPC targeting hotkeys.


  • Derision RoF: Updated spell buffs in the PP to account for instrument_mod/bard_modifier.
  • Sorvani Missed a spot on the stun proc aggro change.
  • Trevius Fixed Mercenary Upkeep Timers and Stances again for UF and SoD.
  • Trevius Fixed Mercenary Upkeep Timers to properly restart after the timer is up for all clients.
  • Bad_Captain Mercs * Initial spell casting AI committed.
  • KLS Added crash logging for Windows builds.
  • Trevius Mercenaries now despawn when a player camps out or disconnects in any way.
  • Trevius Players with a Mercenary spawned can now be invited to and join another group with their mercenary.
  • Sorvani (mackal): Moved stunproc rule implmentation to catch all cases

OPTIONAL SQL: utils/sql/svn/mercs.sql -* rerun for updated merc stats & merc spell lists


  • Sorvani Implemented max aggro from stun proc set to 400. It is rule based set rule to -1 for unlimited.
  • Derision RoF: Should fix x10 Buff bug.
  • Trevius Reworked some of the code dealing with Mercenary packets and spawning them. There is still some work to be done, but the basics are more solid now.
  • Trevius Mercenaries function much more consistently now for Hiring, Suspending, Unsuspending, Dismissing.
  • Trevius Mercenaries no longer fail to group up after being hired, unsuspended or after zoning/logging in.


  • Trevius RoF: The #fixmob command can now go up to race 724 when cycling through races.
  • Trevius RoF: The #npcstats command no longer truncates itemlinks.


  • Trevius RoF: Corrected multiple opcodes.
  • Trevius RoF: Apply Poison is now functional.
  • Trevius RoF: /getguildmotd is working.
  • Trevius RoF: GM commands /changename, /summon, /emotezone, and /emoteworld are working.
  • Trevius RoF: Sense Traps is now working.
  • Trevius RoF: Potion Belt is now functional.
  • Trevius RoF: /who and /who all now display the correct player counts.


  • Akkadius Should have fixed some scenarios where the script wasn't unloading correctly
  • Trevius RoF: Alternate Currencies now display correctly in the inventory window.
  • Trevius Changed one of the mercenary data packets to use the same packet Live does instead of the Merchant packet.
  • Uleat RoF: Aligned the extended client slots back into slottype 0. Previously, corpse looting stopped after looting the ninth slot. (There's still an issue addressing slots 31 and 32..this cannot be efficiently corrected until an inventory rework is performed.)
  • Uleat Fixed a corpse looting issue where the power source item (slot 9999) was being omitted from the corpse inventory. A previous oversight on my part. Also refined message reporting. (RoF: increased corpse slot limit to 34)
  • Uleat Power Source items will now report in 'worn' instead of 'inv' when using #peekinv.


  • KLS intN types have changed to more closely reflect C99 and C++11 types:

intN was an unsigned int of N bits -> it is now a signed int of N bits.

sintN was a signed int of N bits -> it has been removed in favor of intN.

uintN is still unsigned.

The existing types in the code have been changed automatically(intN -> uintN, sintN -> intN), but keep this in mind when developing in the future.


  • Akkadius Implemented, this is very similar to where any normal NPC script will run dual-stack or in tandem with the located in the templates folder
  • Akkadius Implemented the ability to modify EXP and AAEXP modifiers per Level, these are loaded from an optional table (level_exp_mods) that is attached to the commit, you MUST enable the rule first!
  • Akkadius Added #reloadlevelmods * which will reload level mods from the level_exp_mods table
  • Derision RoF: Guild name now appears in the Guild Management window and over player's heads. /guildstatus now works. Guild members status now updates in the GMW.
  • Uleat Corrected the BulkSendInventory process for incomplete item trade returns resulting from a server crash. Previous code used an external reference and items were never moved..and hence, lost once a new trade occurred.
  • Uleat Added mlog messages to existing BulkSendInventory code to report hidden item movements and deletions. All BSI and helper processes now log movements/deletions.
  • Uleat Added two new client pre-entry inventory validation methods * RemoveDuplicateLore and MoveSlotNotAllowed. Duplicate lore was not checked and IsSlotAllowed failures were not handled. Both were causes of persistent desyncs.
  • Uleat Corrected a bug in ItemInst::IsSlotAllowed that 'passed' PowerSource slot checks regardless of ItemInst::Slots value.
  • Uleat [Client-Server Inventory Desyncronization] Most CSD bugs should now be corrected, or at least, compensated for. Please post any desync issues as a new bug post or pm a Dev or GM if it involves an exploit.

Optional SQL: \utils\sql\svn\2428_optional_levelbasedexpmods.sql


  • Akkadius Fixed an size value of hp_regen_rate for NPC's so values don't roll over into negative values
  • KLS EQEmu has been setup to use CMake, this is mandatory.

Visit for instructions on Windows/GCC.


  • Uleat Added opcode handlers for OpenInventory(SoF and SoD) and OpenContainer(SoF, SoD, UF and RoF). Both still need slot translators.
  • Uleat Changed internal SwapItem method from void to bool return. Added appropriate code to handle returns.
  • Uleat Added an abbreviated form of the resync code * SwapItemResync. Handles failed item swaps on a case-by-case basis.
  • Uleat Fixed a bug that allowed duplication of non-stackable, charged items..lore or otherwise. (Sorry cheaters...)


  • Derision RoF: Updated OP_LogServer encode based on a live packet in order to enable 'Enter Tutorial from character select.
  • Secrets Added five new functions to perl for clients: GetBindX, GetBindY, GetBindZ, GetBindHeading, and GetBindZoneID. They all have an optional parameter of index of playerprofile's bindpoint.
  • Secrets Added an optional parameter to GetBind for index.


  • Derision RoF: Added Encode for OP_TaskDescription and removed RoF specific code for it from tasks.cpp
  • Derision Fixed some compiler warnings.
  • Trevius RoF: Varlinks and Saylinks now display properly for RoF.
  • Trevius RoF: Started work on Mercenaries. They are partially functional but need more work.
  • Trevius RoF: Started work on Guilds. The guild window can now display members, but the guild name does not yet display.


  • Derision RoF: Fixed bug that was causing only one task to show in the Active Task window.
  • Derision Fixed potential crash in QuestManager::varlink. Removed some unused variables that gcc was warning about.


  • Derision RoF: Encoded OP_TaskHistoryReply and added temporary handling for short OP_TaskActivity packets until encode is down for that.
  • Derision Deleted Anniversary/HoT/VoA and Live patches.
  • Derision Updated StaticGetZoneName with all zones currently in the PEQ database.
  • Trevius RoF: Disciplines now update without zoning.


  • Derision RoF: Personal Tribute and the Pet Buff Window now work.
  • Derision Fixed potential crash in SendPetBuffsToClient.
  • Derision RoF: Accounted for the fact the Duplicate Lore item message now includes the item's name.
  • Trevius RoF: The Task Selector Window is now functional.


  • JJ Added rule check to zone * no need to load Merc Templates if Mercs aren't allowed.


  • Trevius RoF: Corrected multiple opcodes.
  • Trevius RoF: #finditem now displays itemlinks correctly.
  • Trevius RoF: Started work/testing to get Tasks functioning. Don't click tasks in the history tab or client will freeze.
  • Trevius Added some possible crash fixes.
  • Bad_Captain Mercs * temp fix for possible crash when dying with RespawnFromHover on, fixed infinite stats (buffs continually adding to stats).


  • Derision RoF: Corrected LDoN merchant opcodes, added encode for OP_AdventureMerchantSell. Updated PP with available LDoN points.
  • Bad_Captain Mercs * removed debug messages, fixed regen.


  • Derision RoF: Marked position of Monk 'Mend' skill cooldown timer in PP. Fixed a typo.
  • Bad_Captain Mercs * Merged from branch. Initial merc commit to trunk with semi-functional tank mercs.
  • Uleat RoF: Changed opcode so that is handled properly. (Was writing to the log about twice-per-second.)
  • Trevius RoF: Death no longer crashes players and the respawn window is now functional.
  • Trevius RoF: More work on slot conversions. This time for the cursor buffer.
  • Trevius RoF: Some work on Guild Master Training packets, but still only seeing languages displayed.

REQUIRED SQL: utils/sql/svn/2383_required_group_ismerc.sql - adds ismerc column to group_id table OPTIONAL SQL: utils/sql/svn/2380_optional_merc_rules.sql - Contains rules for mercs including rule to enable mercs OPTIONAL SQL: utils/sql/svn/2380_optional_merc_merchant_npctypes_update.sql - Contains npc_types & spawn updates for merc merchants in PoK OPTIONAL SQL: utils/sql/svn/2380_optional_merc_data.sql - Contains basic merc data, template info, & merc merchant entries OPTIONAL SQL: utils/sql/svn/mercs.sql - Contains merc stats & armor to be replaced as needed with updated stats, spells, etc. Allows a complete resourcing of file


  • Trevius RoF: /who and /who all now function properly.
  • Trevius RoF: Adjusted/corrected some of the slot conversion functions.
  • Kayen Various AA Fixes including a critical crash bug.

REQUIRED SQL: utils/sql/svn/2376_required_aa_updates.sql


  • Kayen Fix for missing and incorrect Healing Adept AA values.
  • Trevius RoF: Possible crash fix for logging in on some server builds.
  • Trevius RoF: Added VoA to the #cvs command output.
  • Derision RoF: Short buffs should appear in the song/short buff box.

Lerxst/ *Hateborne Updated Mob::TryDivineSave to allow someone to be saved even if there are no additional effects to be cast and rearranged the buff fading so the spell effect isn't lost before it can be cast.

REQUIRED SQL: utils/sql/svn/2370_required_aa_updates.sql


  • Trevius RoF: Tradeskill combines (auto-combine and experiment) are now functional.
  • Trevius RoF: The Popup Message window is now functional.
  • Trevius RoF: Increased the max race id for #race to 724 (the max for RoF).
  • Trevius RoF: Corrected the opcode for Augmenting Items and adjusted the struct, but it looks like it may require considerable work to implement the new augment system.
  • Akkadius Trap Zone Crash issue where message is empty
  • Akkadius Fixed a warning regarding AC
  • Vaion RoF: Books now work properly.


  • Trevius RoF: Looting items and loot all are now functional.
  • Trevius RoF: Trading to NPCs and Players is now functional.
  • Trevius RoF: AA Purchases are now functional.
  • Trevius RoF: Opening Tradeskill Objects is now possible.
  • Trevius RoF: Moving items into Tradeskill Objects is now possible, but combines will bug the client.
  • Uleat QS: Added 4 additional logging options [MerchantLogTransactions], [PlayerLogDeletes], [PlayerLogHandins], [PlayerLogMoves]
  • Uleat QS: PlayerLogHandins is partially enabled..currently logs NPCtypeID and Client-side trade information only.
  • Uleat QS: Renamed 1 existing source files to maintain logging name continuity [PlayerLogTrades].
  • Uleat Fixed minor issue that was causing armor glitches with RoF clients from UF and lower clients.
  • Uleat Fixed minor bug in the #iteminfo command where the material value reported 0x20xx.

REQUIRED SQL: utils/sql/svn/2361_required_qs_rule_values.sql REQUIRED SQL: utils/sql/queryserv/2361_QueryServ.sql REQUIRED SQL: utils/sql/queryserv/2304_QueryServ.sql (rename '2304_qs_playertradelog.sql' * Does not need to be re-sourced)


  • Trevius RoF: Fixed slot conversion issues for Bank and Shared Bank
  • Trevius RoF: Normal Merchants are now fully functional for buy/sell
  • Trevius RoF: Item Links now display item stats when clicked, but the links are still truncated.
  • Trevius RoF: Corrected the Illusion Struct and corrected some opcodes.
  • Trevius RoF: Updated the DeleteSpawn struct and added an encode for it.
  • Trevius RoF: Hopefully fixed Consuming food/drink.


  • Vaion RoF: Crash prevention for Item Preview window.
  • Trevius RoF: Finished identifying basically all of the remaining RoF opcodes.
  • Akkadius Fix for Guild Crash again...