Possible Lag Bug Fix

Trevius

Dalayan Beginner
I remember reading that SoD has been plagued with a bug for a while that causes clients to become unable to cast spells or combat. We had a similar issue on EQEmu for a long time, but resolved it with a simple fix. Here is a link to the thread with the code fix and a brief explanation:

http://www.eqemulator.net/forums/showthread.php?t=25559

I am not sure if this is the cause of the issue on SoD, but some both projects are based on the same source originally, I wouldn't be surprised if you guys still had the problem shown in that thread. The basics of it is that when a server has heavy traffic, there is a chance that packets will come in out of order. Without the fix above, the out of order packets can cause the client to enter that bugged state where they eventually get disconnected.

Here is the actual code change from that thread for people who might not have a login to the EQEmu forums to view it:

EQStream.cpp
Code:
--- EQEmu-0.7.0-1118/common/EQStream.cpp.orig   2008-06-25 16:50:09.000000000 +0000
+++ EQEmu-0.7.0-1118/common/EQStream.cpp        2008-06-25 16:50:47.000000000 +0000
@@ -178,6 +178,8 @@
                                _raw(NET__DEBUG, seq, p);
                                //kludge to see if it helps:
                                //SendAck(GetLastAckSent());
+
+                               SendOutOfOrderAck(seq);
                        } else {
                                // In case we did queue one before as well.
                                EQProtocolPacket *qp=RemoveQueue(seq);
@@ -222,6 +224,8 @@
                        } else if (check == SeqPast) {
                                _log(NET__DEBUG, _L "Duplicate OP_Fragment: Expecting Seq=%d, but got Seq=%d" __L, NextInSeq, seq);
                                _raw(NET__DEBUG, seq, p);
+
+                               SendOutOfOrderAck(seq);
                        } else {
                                // In case we did queue one before as well.
                                EQProtocolPacket *qp=RemoveQueue(seq);

I thought someone here may have already seen this and put this fix in for SoD if it was needed, but just incase, I figured I should post it. I know I was extremely happy when this fix went in for EQEmu and it fixed the issue 100% for us. So, if it works for you guys as well, grats :)
 
Our issue is that the client expects a new encryption key roughly once an hour (starting after a zone). The server doesn't know how to respond with a new key, and the client stops reacting and will lag out. As far as anyone knows, the only way to get a fix is to have the real servers from the same age as the client and replicate the response.

To get around this, we have a command that rezones us to reset the encryption key. (/cm refresh if you are playing.)
 
As much as we appreciate the thought Trevius (and we do) none of that snippet is even present in our source code. Its not the source of our problems.
 
Back
Top Bottom