Code: Cavedude * /who all will now display AFK and LFG. * Pets will now use the same melee range as their owner. * Damage done to a NPC used to credit XP and the corpse upon their death is now kept in its own list, instead of using hatelist. * Removed the hatelist methods that previously handled this functionality. As a result, the Lua export GetHateDamageTop() has also been removed. (It was unused.) * Damage added to this list by all player pets will now count towards their owner to correct issues with charmed pets losing damage credit when charm fades. (NPC pets will keep track of their own damage, since they don't despawn when their owner dies.) * Rewrote a large portion of NPCeath() to implement this new list, optimize the method, remove obsolete code, and correct a potential zone crash. * Rule AlKabor:HighLvlCorpsesAlwaysSpawn has been changed to AlKabor:LevelCorpsesAlwaysSpawn and now can be used to specify the level NPCs will always leave corpses if a player is present (defaults to 55.) * NPCs will no longer seek out other NPCs to attack in zones that never idle and have no players. (Boat/Quest zones.) This saves a good amount of CPU in local testing. * NPCs will no longer fully process death in zones that are idling (this shouldn't happen much anymore due to the above change.) * Created a new variable for /assist range, and set it to be slightly higher than /target range. * [Performance] Fixed a large overhead issue where every single NPC in a zone was checking to depop themselves as a swarm pet every 3ms regardless of being a swarm pet or not. Swarm pets now check to depop only when their timer is up (Akkadius from eqemu) * Converted the loginserver to use LogSys, removing the old error_log system. The categories used in this commit are Login_Server, Netcode, and Error. Set all three to general in order to get full log output. * The login's trace and world_trace options have been removed from the database. In order to enable those logs, set Netcode to general. * The packet_dump in/out options are still valid, and require Login_Server to be set to general. * Added DumpServerPacketToString() so that Server Packets can be dumped using LogSys instead of DumpPacket(). DumpPacketToString() already exists for Application Packets. Converted several DumpPacket() calls to use LogSys. * Some console color syntax may have been lost in this commit. New LogSys categories with a custom color can be added in that's an issue. By default, the colors are yellow for Login_Server/Netcode and red for Error. * Aggro scan timers will now be disabled in no combat zones. Haynar * Increased Rule PetCommandRange to 200. This is used for pursuit range of pets. * Updated some message ranges to clients. * Dragging your own corpse will no longer cause aggro in some Velious zones. * Added some optimizations in hatelist management, where distance to mob was being calculated multiple times. * Added a min persuit range where timers are used and mobs will continue to chase. This will help prevent runners in ring war from being kited. * Pets will no longer apply hate bonuses due to closer proximity. Low HPs are still appealing though. * Adjusted some spell casting AI values to save CPU cycles. * Added combined packets for OP_MobUpdate Robregen * Updated glm library to 0.9.8.4 (from 0.9.6.1) (Uleat from eqemu) * [Performance] Reduced CPU footprint in cases where a client is checking for aggro excessively every 750 millseconds. This has been adjusted to 2 seconds per new rule RULE_INT(Aggro, ClientAggroCheckInterval) - When zones have many players, with many NPC's, this adds up quickly (Akkadius from EQEmu) * [Performance] Removed a timer where clients would constantly calculate light amount on equipment every 600ms, instead clients will update light when changing equipment or entering a zone (Akkadius from EQEmu) * [Performance] Disabled enraged timer checks for NPC's that do not actually have enrage as a special attack (Akkadius from EQEmu) * [Performance] Remove unecessary log calls from EQStream hot paths (read/write) (Akkadius from EQEmu) * [Performance] Reworked how all log calls are made in the source (Akkadius from EQEmu) Speedz * Added settings to allow/block client types. Database: Robregen * Coldain Ring 10: Narandi is now flagged for giant bane. Script: Robregen * Coldain Ring 10: Added a missing shout from Zrelik when issue the command to call all Coldain. * Coldain Ring 10: Removed an odd emote made from Dobbin Crossaxe when a command is issue to call all coldain or Dobbin.
So much pwn. Can't wait to test these mechanics tweaks out! And lol @ the swarmpet thing. I love that King Tormax was standing around thinking, "Am I a swarmpet? Should I despawn?" "Am I a swarmpet? Should I despawn?" "Am I a swarmpet NOW?" "How about now?" "AM I A FUNKING SWARMPET?!" "WHO AM I?!" Talk about yer existential crises.
The really upsetting part was every NPC on the server was going through the same thing. We got them all into group therapy, and I think we'll be okay.
You guys able to share some cpu% stats with us after you've had a chance to collected some fresh data? I'm assuming the cpu load improvements are at least noticeable? maybe an average daily cpu% load week prior to patch, and average daily cpu% load in the week following this patch? I would be quite interested to see the performance benefit of these tweaks! no worries if you're not willing to share this data
Its on a VM, so overall stats are relative. CPU used to run 28-30% most of the time. Its doing about 20-23% now. Data rates and packets/sec are also down about 25%. This client will only allow sending mob updates in multiples. That got figured out how to do this patch. So mob position updates can be combined. Where they were one at a time before, we are now able to combine up to 30 in a single packet. H
Amazing thinking of alpha when we couldn't even update position fast enough to melee fleeing mobs and look at that, still making huge gains.
If u consider a single pos update. Its 19 bytes. Only 15 bytes of data. First 4 is an int32 with how many packets. UDP has an overhead of 20 bytes ish. There is another 10 bytes containing opcodes, packet flags info. So for a single pos update thats 49 bytes sent. 20 + 10 + 4 + 15. Say you send 20 seperate. Thats 980 bytes. Now the new way. Stack them in. 20 + 10 + 4 + (15 x 20) = 334 Just that set of updates goes from 980 bytes in 20 packets to 334 bytes, in one. We dont alway stack in 20. But 10-15 is very common. And going up to 30. In places with lots of movement, that is a bunch of data. And a huge savings. In certain areas of like overthere. I was hitting 75 pos update packets a second. That got reduced to 7 packets over that time period. H
Neat! I noticed last week that calling the dwarves in the Ring War created huge lag spikes. Is this change likely to have an impact there?