Skip to content




Implemented Zone Controller

  • When a zone boots, it will spawn an invisible npc by the name of zone_controller
  • Lua and Perl scripts can be represented with this npc as
  • This NPC's ID is ruled be define ZONE_CONTROLLER_NPC_ID 10

Quest Events

Two EVENT's uniquely are handled with this NPC/controller (They only work with the zone_controller NPC)

  • All NPC spawns in the zone trigger the controller and pass the following variables
    • $spawned_entity_id
    • $spawned_npc_id
  • All NPC deaths in the zone trigger the controller event and pass the following variables:
    • $killer_id
    • $killer_damage
    • $killer_spell
    • $killer_skill
    • $killed_npc_id



Added GetInstanceTimer() to Perl and Lua

Added GetInstanceTimerByID(instance_id) to Perl and Lua.


If you do not provide an instance id in the method it defaults to instance id 0 and returns 0 for time remaining.

Added UpdateZoneHeader(type, value) to Perl and Lua


UpdateZoneHeader allows you to manipulate fog color, fog density, and many other zone header settings on the fly in Perl and Lua



Updated Item Table Fields and Added a Few Missing Fields for Evolving Items

DO NOT implement Heirloom items till the inventory code is fixed to allow placing NO DROP items in your shared bank. (but item field located on items table)

NYI - SkillModMax: Max skill point modification from the percent mods. EX: 100% 2HSlashing (Max 50) * can only increase 2hslash by 50 MAX! (item field located though)

Kinglykrab Added GetMeleeMitigation() for NPCs and Clients in Perl and Lua.

This allows you to check total item, spell, and AA melee mitigation contribution.


Kinglykrab Added many methods to Perl and Lua, list below:

  • SeeInvisible()
  • SeeInvisibleUndead()
  • SeeHide()
  • SeeImprovedHide()
  • GetNimbusEffect1() * returns first nimbus effect
  • GetNimbusEffect2() * returns second nimbus effect
  • GetNimbusEffect3() * returns third nimbus effect
  • IsTargetable()
  • HasShieldEquiped()
  • HasTwoHandBluntEquiped()
  • HasTwoHanderEquiped()
  • GetHerosForgeModel() * returns int32 Hero's Forge model
  • IsEliteMaterialItem() * returns uint32 Hero's Forge Model
  • GetBaseSize() * returns Mob's base size
  • HasOwner()
  • IsPet()
  • HasPet()
  • IsSilenced()
  • IsAmnesiad()


Noudess Repaired issue with Bind Wounds on someone else. Message was not coming out on client (hold still) and a bind wounds on someone already binding their wounds would interrupt their bind and make them stand. Also removed some duplicate messaging.




Command Alias Changes

  • To add a command alias, edit the database table command_settings * here, you will find three columns: command, access and aliases
  • Adding command aliases require that the command contain an entry in command_settings.command
  • Only 'real' commands go inside of the command_init() function in command.cpp .. if you wish to add aliases, you must enter them into the database
  • 'Real' commands are loaded first .. then any access/alias data is loaded and applied afterwards
  • Duplicate aliases will be ignored .. only the first encountered occurrence will be honored * if it does not conflict with an existing command name
  • Aliases should not contain whitespace and should be '|' (pipe) delimited
  • The restriction on the number of aliases has been removed .. though each alias will still be limited to the access level of the parent command
  • If you need need more name space for aliases, simply edit the command_settings table and increase the size of the aliases column
  • The old commands table has been renamed to commands_old for reference
  • All of the current 'standard' commands have been added to the new command_settings table


Uleat Changed criteria for a few bots scripts from count to null/not null in hopes of fixing special case failures


Uleat Fix for loginserver project compile failure



Implemented #repopclose

  • Real case use: Large zones with 700 NPC's and you are making fast quick tweaks to nearby NPC's you can refresh just the NPC's around you instead of all in the zone
  • This can be quite the time saver
  • This command will depop all NPC's and only respawn the NPC's that are 500 units around you or unless you specify otherwise



Performance Optimizations

  • Performance boost (exponential) - Adjusted default idle cast check timers in rules
  • Spells:AI_IdleNoSpellMinRecast - 500 (Now 6000) 6 seconds
  • Spells:AI_IdleNoSpellMaxRecast - 2000 (Now 60000) 60 seconds
  • Database version 9089 will take care of this update automatically only if you used the default values
  • The CPU cost of NPC's checking the entire entity list to cast beneficial spells (Heals/Buffs) becomes extremely high when higher NPC count zones exist (Based off of process profiling)
  • Distance checks for every single NPC to every single other NPC who are casting beneficial spells occur every .5 * 2 seconds unless npc_spells dictates other values, which most of the time it does not
  • Zones that once fluctuated from 1-8% CPU with no activity (Idle but players present) now idle at .5% based on my testings due

    to this change in conjunction with the past few performance commits, these are zones that have 600-800 NPC's in them * These values normally are overridden by the spells table (npc_spells), fields (idle_no_sp_recast_min, idle_no_sp_recast_max)



Server Backend Optimizations

Made many performance optimizing oriented code changes in the source

  • Added Rate limit the rate in which signals are processed for NPC's (.5 seconds instead of .01 seconds)
  • Added Perl Export Settings which should heavily reduce the Perl footprint
  • Normally when any sub EVENT_ gets triggered, all kinds of variables have to get exported every single time an event is triggered and

    this can make Perl very slow when events are triggered constantly

    • The two most taxing variable exports are the item variables ($itemcount{} $hasitem{} \(oncursor{}) and qglobals (\)qglobals{})
    • qglobals can pose to be an issue quickly when global qglobals build up, it is highly recommend to use the GetGlobal() and SetGlobal() methods instead as they don't reference the hashmap $qglobals{} that is rebuilt every single time a sub event is triggered
    • A stress test conducted with 10,000 samples shows an excess of time taken to export variables

After the Perl Export Settings table is implemented, and all exports are shut off you see the following test result:

The difference of eliminating unneeded exports brings the overhead and footprint of 10,000 triggers from 54 seconds to 2 seconds

  • In a 10,000 sample test (10,000 sub event triggers), exporting item variables adds 12 seconds alone, when item variables are only needed in EVENT_ITEM and EVENT_SAY a majority of the time if at all
  • In a 10,000 sample test (10,000 sub event triggers), exporting qglobals with approximately 1,000 global qglobals in the database creates about 11-20 seconds of delay on its own (Depending on hardware of course)
  • I've written a parser that has determined which of these exports are needed in which sub routines and have turned off all of the unneeded exports in sub routines that do not need them and used it to create the default table that will be installed in the database.
  • The export table is called perl_event_export_settings and it resembles the following structure and contains all current 81 EVENTS
  • If a change is made to this table while the server is live and running, you can hot reload all zone process settings via:

    reloadperlexportsettings * For those who wonder what "exports" are, they are reference to variables that are made available at runtime of the sub event, such as * (export_qglobals) (Heavy) : $qglobals * (export_item) (Heavy) : $itemcount{} $hasitem{} $oncursor{} * (export_zone) : $zoneid, $instanceid, $zoneln etc. * (export_mob) : $x, $y, $z, $h, \(hpratio etc. []( * (export_event) : (event specific) IE: EVENT_SAY (\)text)


Uleat Added command '#bot clearfollowdistance [ | spawned | all ]' to coincide with the activation of the load/save feature for follow_distance


Uleat Important update to 2015_09_30_bots.sql * fix for orphaned entries causing crashes during the conversion process


Please visit the thread below if you encounter issues during the conversion process


  • Uleat Implemented 'bots' database versioning Note: See thread for more information:
  • Kayen Feign death will now break when hit by casted spells, consisted with live. Implemented suport for AA/spell effect which provides a chance to avoid FD breaking from spells.


Kayen Updated mechanics to be consistent with live regarding how invisible breaks when the client is the target of a spell. Invisible will drop whenever a client is hit with a detrimental spell, regardless of if resisted, if it does damage or AOE. Hide skill now also follows the same rules as above. Implemented support for Rogue AA * Nerves of Steel which gives a chance for hide NOT to break when client is hit with an AOE spell.



Implemented "Inventory Snapshot" Feature


  • Character:ActiveInvSnapshots - active (true) or inactive (false default)
  • Character:InvSnapshotMinIntervalM - minimum time between snapshots (in minutes)
  • Character:InvSnapshotMinRetryM - minimum time to attempt a retry after a failed snapshot (in minutes)
  • Character:InvSnapshotHistoryD - minimum time to keep snapshot entries (in days)
  • commands
  • invsnapshot - Takes a snapshot of target client's inventory (feature active or inactive)

  • clearinvsnapshots [use rule]

  • Clears snapshot entries based on bool argument ([true] honors the 'InvSnapshotHistoryD' rule, [false] * erases all)


  • Shendare VS2013 query StringFormat glitches when "%f" is passed for the int GetRunSpeed().
  • Shendare In CreateNewNPCCommand(), the npc_type_id and spawngroupid are created in the database, but never set in the spawn class, so later it can't delete them with #npcspawn remove or #npcspawn delete.


Uleat Reworked the QS Audit code in Handle_OP_ShopPlayerBuy (\zone\client_packet.cpp) to help eliminate potential for exception errors


mackal Corrected some hate value calcs based on updated

Rule Aggro:MaxStunProcAggro to Aggro:MaxScalingProcAggro since the cap applies to more than stuns


mackal Rework spell aggro based on


  • Hateborne Added optional ability to enforce task level requirements in perl and lua via an added, optional parameter to $client->AssignTask and quest::assigntask
quest::assigntask(703); # this still assigns the task as normal, no functional change
quest::assigntask(703, 1); # this will assign the task, provided the character meets the db-stored level requirements
$client->AssignTask(703, $npc->GetID()); # still assigns the task as normal, no functional change
$client->AssignTask(703, $npc->GetID(), 1); # this will assign the task, provided the character meets the db-stored level requirements



Implement Triple Attack Skill

  • Parses showed about rand(1000) for the chance, may need more investigating
  • Corrected Double Attack chances as well
  • Running optional 2015_07_06_TripleAttack.sql will set current toons to their max skill
  • This is optional because the admins might want to go a different route.



Rewrite NPC Combat Attack Round Logic

  • An NPC "quading" is really just an NPC with innate dual wield that doubles on both hands
  • The old rules allowed NPCs to hit 6 times in one round
  • NPCs also seem to have their own skill progression for DW/DA

You can set Combat:UseLiveCombatRounds to false to use the old rules

PC Double Attack rates kind of follow the same thing but still needs to be implemented


Quest, Bot Changes

  • Added bot saylinks (thanks Uleat!)
  • Command aliases for #augmentitem (#aug), #findnpctype (#fn), #findspell (#fs)
  • Bot command changes: #bot sow -> #bot speed, #bot magepet -> #bot setpet, #bot resurrectme -> #bot resurrect
  • Changed all occurrences of burried to buried in the code.
  • client_packet.cpp was referencing old columns in character_corpses, not sure how we didn't already see this before.



Reworked the Activated Avoidance Skills

Reworked the activated avoidance skills (riposte, dodge, etc) based on dev quotes. This also fixes the order things are checked (avoidance skills, THEN hit/miss). Also riposte immunity from the increase riposte chance spell effect.


KLS / Mackal

  • AA system has been rewritten fixing a ton of bugs and extending functionality while making it easier to create new AA points.
  • New tables are needed and so older data will need to be migrated to the new system.
  • The SQL saves the old aa points spent/avail/character_alt_abilities data if any server ops want to do something different than PEQ did with it.
  • Will try to get a wiki entry written up next week some time explaining the system but it's really not hard to follow the db tables in the meantime.



  • Fix an issue where emote messages would overflow the buffer of 256 by increasing the size and changing some of the initialization
  • Added a custom Health Update message that will display in the middle of the players screen, to enable this server wide you must enable rule 'Character:MarqueeHPUpdates'


  • Fixed some runspeed issues with Perl and LUA scripts
  • Updated #showstats and #npcstats for new speed calcs to display speeds again in familiar float format.
  • Improved client movement while AI Controlled, such as feared and charmed. Movement will be much smoother from clients perspective.


Uleat Adjusted SessionStats to better reflect a sister implementation


  • Uleat Implemented optional rule for using disenchanted bags. Action triggers at the same point that temporary items are removed.

    Optional SQL: utils/sql/git/optional/2015_06_07_TransformSummonedBagsRule.sql * mackal changes to AA packets since more fields have been identified * mackal fix exploit with expendable AAs punching holes in the aa_array and staying around longer than they are welcomed


  • Akkadius Implemented disjointed zone based time, this can be triggered via quest methods
  • Akkadius Added parameter to LUA and Perl method settime(hour, minute, [update_world = true])
  • If update_world is false, the zone will then unsubscribe itself from regular worldserver time synchronizations
  • Basically this localizes the zones time and keeps it from syncing with world updates
  • Akkadius Added DB ver 9082 with update to add npc_types texture columns if table does not currently have them


Uleat Added null-term declaration for character names in ENCODE(OP_CharInfo) * where appropriate


mackal Bard instrument mods should be more consistent with live. Zoning will keep instrument mod for long duration buffs (selo's). Still need to have procs/doom effects to inherit the instrument mods from their source buff/whatever


KLS Changed how fishing locates water to hopefully be a bit more accurate at the expense of a bit more cpu power per line cast.


Uleat Added check to EntityList::CheckSpawnQueue() to bypass dereference if returned iterator is npc_list.end() * should fix the debug assertion failure crash



Implement Mob and Client Melee Push

You can set Combat:MeleePush to false to turn off or change Combat:MeleePushChance to increase the chance an NPC can be pushed PCs are always pushed, need to do more testing to verify.



Debug Assertion Fix

Probable fix for 'Debug Assertion Failure' in Client::GarbleMessage() when calling the 'isalpha' macro.



  • Secrets Identified the Target Ring fields for RoF/RoF2.
  • Secrets Added a perl accessor for the last target ring position received from the client. Usage: $client->GetTargetRingX(), $client->GetTargetRingY(), $client->GetTargetRingZ()


  • Akkadius [ V7] Add Option 9) LUA Modules * Download latest LUA Modules (Required for Lua)


  • Akkadius [] Add Option 7) Plugins * Download latest Perl plugins
  • Akkadius [] Add Option 8) Quests * Download latest PEQ quests and stage updates
  • Akkadius [] Set version 5 of script


  • Akkadius [] Add Option 6) Download Latest map and water files


  • Akkadius Fix Spell Book Deletion


  • Uleat Fix for 'Invalid Slot ID' messages. Bag slot count is now enforced during database saves to eliminate existing 'hidden' duplicated items..sorry MQ2 users...
  • Uleat Fix for Item loss during corpse looting and possible item loss when purchasing items from LDoN or Adventure merchants. (cursor-related)


  • Uleat Final 'tweak' for light sources until a valid issue arises. Wearable equipment now matches client behavior. Stackable light sources are bugged in the client..but, the current timer update implementation alleviates this condition.


  • Uleat Updated light source criteria to (hopefully) match what the client uses (still needs tweaking)
  • Uleat Changed 'general' light source checks to accept the last valid light source (client behavior)


    • "Fire Beetle Eyes" are still causing issues in general slots (no item movement sound effect)
    • Wearable equipment types still register as valid light sources when in general slots (needs exemption criteria)


  • Noudess Allow for a rule to set starting swimming && SenseHeading value.

    I moved the swimming override to char create instead of setting it

    every time a char enters a zone.

Also added rules to not ignore, but rather forrce sense heading packets to be used to train it instead of maxing it out like before.

  • Uleat Fix for RoF+ clients showing active 'Return Home' button when action is not available (swapped 'GoHome' and 'Enabled' fields in RoF-era CharacterSelectEntry structs)


  • Noudess Starting erudites that were supposed to start in paineel were landing in erudin on Titanium. Fixed to be paineel.


  • mackal Implement claims for RoF/RoF2 (should no longer crash the client!)
  • fixed bugs related to claims for the rest of the clients (woo infinite loops)


  • Trevius Fix for potential recursive loops if using RemoveFromHateList() within EVENT_HATE_LIST.


  • Uleat Implemented per-client character creation limiting. Caps are unknown, don't get over-zealous!


    • Titanium is hard-coded to min/max of 8 in both the server and client translator code (client doesn't support variations in available character count)
    • SoF thru RoF2 have had their max characters raised to 12 from 10
    • Changing the number of characters per account is accomplished by:

      1) Setting consts::CHARACTER_CREATION_LIMIT to the desired count in the client's constants file in ../common/patches/

      2) Ensuring that eq_dictionary's EmuConstants::CHARACTER_CREATION_LIMIT is equal-greater than the client's new value..referencing is good

      3) Recompiling the server code * A rules-based qualifier may be added at some point


  • Trevius (RoF2) Bazaar Trading (Buying/Selling) is now fully functional. Bazaar (/bazaar) search is not yet functional.
  • mackal (RoF2) Send the bard focus effects, note custom servers will need to fix their items, server side we still use the old system, but RoF2 wasn't showing anything with not sending focus, so send them


  • Trevius (RoF2) Bazaar is now partially functional. RoF2 clients can start/end trader mode and other clients can purchase from them. No other functionality yet.
  • Uleat Implemented higher bandolier and potion belt counts for clients that support will still need to activate them through the proper aa's, etc...


  • Akkadius Implement zone based gravity, required SQL DB change
  • To test zone table gravity values, change the value and use #zheader to test


  • Trevius (RoF+) Bandolier no longer displays a Treasure Chest Icon when no Bandoliers are set.


  • Trevius (RoF+) Setting Alt flag on characters in the Guild Management Window is now saved and functional for filtering.
  • Trevius (RoF+) Guild Invites between RoF+ and previous Clients is now functional.


  • Kayen Implemented npc special ability (44) COUNTER_AVOID_DAMAGE which when applied to the ATTACKING NPC will make their attacks more difficult to be avoided by riposte/dodge/parry/block.
  • Parama0: Negative modifer value that affects ALL avoid damage types dodge/parry/riposte/block) chance on defender. Ie (44,50 = 50 pct reduction to ALL)
  • Parama1: Negative modifer value that affects RIPOSTE chance on defender. Ie (44,1,0,50 = 50 pct reduction to riposte chance)
  • Parama2: Negative modifer value that affects PARRY chance on defender. Ie (44,1,0,0,50 = 50 pct reduction to parry chance)
  • Parama3: Negative modifer value that affects BLOCK chance on defender. Ie (44,1,0,0,0,50 = 50 pct reduction to block chance)
  • Parama4: Negative modifer value that affects DODGE chance on defender. e (44,1,0,0,0,0,50 = 50 pct reduction to dodge chance)

    Example of usage: Player has Improved Dodge V (+50 pct dodge chance), you want to negate this bonus you would set 44,1,0,0,0,0,50 on your NPC.


  • Akkadius Reduced #repop time dramatically by taking down hundreds of individual SELECT/DELETE/INSERT queries in routines and bringing it down to very few


  • Uleat Updated returns for Inventory and ItemInst const iterators. (const


  • Trevius Fixed Environmental Damage for RoF2.


  • Trevius Crashfix for TempName() when numbers are passed at the end of the name.
  • Uleat Tweaking of item type exclusions to alleviate strobing conditions with light sources




Add Quest Debugging to LUA

 eq.debug("Test debug level implicit 1")
 eq.debug("Test debug level explicit 1", 1)
 eq.debug("Test debug level explicit 2", 2)
 eq.debug("Test debug level explicit 3", 3)


Add Packet Logging Categories


  • Trevius Fixed FindGroundZ() and GetGroundZ() to once again utilize the X and Y arguments that are passed to them.




This event triggers when taking any sort of environmental damage. Example use:

    quest::debug("env_damage is " . $env_damage);
    quest::debug("env_damage_type is " . $env_damage_type);
    quest::debug("env_final_damage is " . $env_final_damage);

Result of above script

  • Implemented LUA counterpart of this same implementation above
  • Bobaski Add PoK New Merchant sql/git/optional/2015_01_30_poknowledge_spell_vendors.sql


  • Trevius Added more information to Mercenary Logging.
  • Trevius Added potential fix for Mercenaries that fail to unsuspend.
  • Trevius Added a new "statscale" field to the merc_stats table that can be used to quickly balance Mercenary Stats based on Level.
  • Trevius The new "statscale" field now combines with the Mercs::ScaleRate rule value (default 100 percent for both).



Added Logs::DebugQuest Category Per Request from Trevius (Great idea)

  • Exported quest::debug(log_message, [debug_level = 1)
quest::debug("This is a test debug message, level 1 (default)");
quest::debug("This is a test debug message, level 1", 1);
quest::debug("This is a test debug message, level 2", 2);
quest::debug("This is a test debug message, level 3", 3);

  • Uses traditional logging system to output this category
  • Required MySQL Source in Database version 9070


  • Trevius Removed "Mercenary Debug:" from the Mercenary Log entries.
  • Trevius Resolved duplicate "You have no Mercenaries" messages when zoning without owning a Mercenary.
  • Trevius Mercenaries should now always be able to unsuspend if the timer is up.
  • Trevius More work on Mercenaries and Grouping to reduce bugs and redundant queries.
  • Uleat Finished ClientVersion update to include patch file and namespace updates * don't forget to copy the renamed 'patch_UF.conf' into your eqemu directory.)


  • Uleat Changed Corpse::MoveItemToCorpse() to allow 'by address' passing of removed item slot list. Fixed a bug that kept soul-bound items inside of bags from attuning properly


  • Trevius Fixed an issue where Mercenaries were causing several DB queries per second while suspended.
  • Trevius Added Logs::Mercenaries to the new Logging System. Logging of Mercenary information is off by default with the required SQL.


  • Uleat Added equipment light source functionality to all mob derived classes (may still need tweaking...)


    • In addition to equipment light sources, innate npc_type light sources have already been activated
    • Valid light source values are 0 thru 15 (values are bitmask checked and limited to 0x0F)
    • Not all classes handle equipment light sources the same way due to their equipment/loot list configurations
    • Spell (casting?) light sources may be implemented at some point..more information is needed
    • Currently, loot list (general inventory) light sources are limited to ItemTypeMisc and ItemTypeLight to avoid issues with worn-specific light sources emitting
    • Augment light sources are not recognized by the client and, therefore, not implemented in the server code



  • Uleat Added light field to npc_types load query (all six clients tested positive for functionality.)

    Note: This only affects 'innate' light. Equipment (other) light is still in-work.

    Optional SQL: utils/sql/git/optional/2015_01_21_NPC_Types_Light_Field_Primer.sql


  • Uleat Fix for Inventory::_HasItemByUse(bucket) using the parent container when searching for bag container items.


  • Uleat Changed 'enum EQClientVersion' to 'enum class ClientVersion.' Other light modifications were made to accommodate this namespace. Added 'RoF2' to the lua client version enumeration.


  • Uleat Attempted fix for elusive inventory bug:
  • Removed 'iter_queue' typedef and converted lcast to explicit or auto defines
  • Reworked several functions that manipulate the cursor queue
  • Found/corrected one occurrence of post-processing iterator incrementing in an ItemInstQueue handler
  • Added many scope declarations in code that handles inventory manipulation (loose macros are bad...)
  • Uleat Added Item_Struct pointer checks to ItemInst methods that did not have them
  • Uleat Changed IsEquippable(race,class) to use bit-wise 'and' (&) over '(x%2)


  • Uleat Placed an upper limit on the cursor queue save loop.
  • Trevius (RoF2) Guild invites now add new members as members instead of recruits, and /guild chat works properly.
  • Trevius (RoF2) Guild Promote is now functional.


  • Uleat Fix for OP_FormattedMessage text link server crashes
  • Uleat Added text link translators for OP_TaskDescription (RoF+ -* all clients current)
  • Uleat Fix for load_bots.sql using '\' as a delimiter (Changed to '$$')


  • Uleat Added text link translators for OP_TaskDescription (Ti thru UF..RoF+ in-work)


  • Uleat Added text link translators for OP_Emote


  • Uleat Added text link translators for OP_FormattedMessage


  • Trevius Added some extra checks and clean-up related to Groups and Mercenaries.


  • Uleat Excluded text link body from message scrambling in Client::GarbleMessage()
  • Trevius Mercenaries now load directly from tables only. The vwMercNpcTypes view is no longer required and can be deleted.
  • Trevius Query fix for group_leaders table. This may resolve some crashes/bugs related to Mercs/Bots and Groups.


  • Trevius Changed the pet command #defines to be based on RoF2 list of pet commands and added decodes to Titanium, SoF and SoD.
  • Trevius (RoF+) The /pet focus on/off and /pet hold on/off commands are now functional.
  • Trevius Added defines for all remaining pet commands and some support for them as well.


  • Uleat Fixed (added translators for) item/text links. Only 'OP_ChannelMessage' and 'OP_SpecialMesg' are currently handled..more text channels will be added as the need arises.


  • Trevius (RoF2) /shield (shielding) and /key (key ring) are both now functional after opcode updates.


  • Trevius (RoF2) Hopefully Fixed looting incorrect items from NPCs. Please report any issues!
  • Trevius (RoF2) Now able to loot items past the 10th slot on NPC corpses.
  • Trevius Attuned Items can now be auto-looted and will equip properly.
  • Trevius Mercenaries and Bots will no longer take a share from /split or /autosplit