2015

EverQuest Emulator Server code changes for year 2015

12/29/2015

Akkadius

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 zone_controller.pl/lua

  • 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)

  • EVENT_SPAWN_ZONE

    • All NPC spawns in the zone trigger the controller and pass the following variables

      • $spawned_entity_id

      • $spawned_npc_id

  • EVENT_DEATH_ZONE

    • 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

12/28/2015

Kinglykrab

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

12/21/2015

Natedog

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.

12/19/2015

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()

12/16/2015

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.

12/14/2015

12/07/2015

Uleat

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

  • YOU WILL NEED TO VERIFY/IMPORT OLD ACCESS VALUES AS THIS CHANGE REVERTS ALL COMMAND ACCESS VALUES TO THEIR PEQDB DEFAULTS

11/30/2015

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

11/22/2015

Uleat Fix for loginserver project compile failure

11/7/2015

Akkadius

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

11/2/2015

Akkadius

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)

11/1/2015

Akkadius

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

10/16/2015

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

10/13/2015

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

10/12/2015

  • Uleat Implemented 'bots' database versioning Note: See thread for more information: http://www.eqemulator.org/forums/showthread.php?t=40091

  • 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.

10/10/2015

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.

09/25/2015

Uleat

Implemented "Inventory Snapshot" Feature

Rules

  • 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)

08/02/2015

  • 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.

07/27/2015

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

07/22/2015

mackal Corrected some hate value calcs based on updated http://www.eqemulator.org/forums/showthread.php?t=39819

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

07/16/2015

mackal Rework spell aggro based on http://www.eqemulator.org/forums/showthread.php?t=39819

07/15/2015

  • 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

07/06/2015

mackal

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.

07/05/2015

mackal

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

Kinglykrab

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.

7/4/2015

mackal

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.

7/2/2015

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.

7/1/2015

Akkadius

  • 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'

Haynar

  • 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.

06/12/2015

Uleat Adjusted SessionStats to better reflect a sister implementation

06/07/2015

  • 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

05/25/2015

  • 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

05/22/2015

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

05/20/2015

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

05/18/2015

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.

05/15/2015

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

04/30/2015

mackal

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.

04/22/2015

Uleat

Debug Assertion Fix

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

Reference: https://connect.microsoft.com/VisualStudio/feedback/details/932876/calling-isdigit-with-a-signed-char-1-results-in-a-assert-failure-in-debug-compiles

03/29/2015

  • 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()

03/12/2015

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

03/11/2015

  • Akkadius [eqemu_update.pl] Add Option 7) Plugins * Download latest Perl plugins

  • Akkadius [eqemu_update.pl] Add Option 8) Quests * Download latest PEQ quests and stage updates

  • Akkadius [eqemu_update.pl] Set version 5 of script

03/10/2015

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

03/04/2015

  • Akkadius Fix Spell Book Deletion

03/03/2015

  • 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)

02/27/2015

  • 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.

02/26/2015

  • 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)

    Notes:

    • "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)

02/23/2015

  • 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)

02/21/2015

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

02/20/2015

  • 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)

02/18/2015

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

02/17/2015

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

    Notes:

    • 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

02/16/2015

  • 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

02/14/2015

  • 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 it..you will still need to activate them through the proper aa's, etc...

02/12/2015

  • Akkadius Implement zone based gravity, required SQL DB change

    • To test zone table gravity values, change the value and use #zheader to test

02/11/2015

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

02/09/2015

  • 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.

02/08/2015

  • 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.

02/07/2015

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

02/06/2015

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

02/05/2015

  • Trevius Fixed Environmental Damage for RoF2.

02/03/2015

  • 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

02/02/2015

02/01/2015

mackal

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)

Akkadius

Add Packet Logging Categories

01/31/2015

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

01/30/2015

Akkadius

Implemented event type EVENT_ENVIRONMENTAL_DAMAGE

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

sub EVENT_ENVIRONMENTAL_DAMAGE{
quest::debug("EVENT_ENVIRONMENTAL_DAMAGE");
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

01/29/2015

  • 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).

01/28/2015

Akkadius

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

01/27/2015

  • 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.)

01/26/2015

  • 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

01/25/2015

  • 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.

01/24/2015

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

    Notes:

    • 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

01/22/2015

01/21/2015

  • 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

01/20/2015

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

01/19/2015

  • 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.

01/15/2015

  • 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)

01/13/2015

  • 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.

01/12/2015

  • 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 '$$')

01/11/2015

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

01/10/2015

  • Uleat Added text link translators for OP_Emote

01/09/2015

  • Uleat Added text link translators for OP_FormattedMessage

01/08/2015

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

01/07/2015

  • 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.

01/06/2015

  • 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.

01/05/2015

  • 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.

01/03/2015

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

01/02/2015

  • 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