chaple2008
05-19-2010, 07:21 AM
Ok, This is my first post here, but I used SEQ back in the early days of EQ.
I always loved how it just listened to the packets and was undetectable. So, when I started playing recently on Project 1999 I felt that I was missing something without SEQ running on a linux box next to my game machine.
So, my quest began.
Step 1, acquire a somewhat ok machine to run linux on
Step 2, they use the Titanium client so I had to get that version of SEQ
http://sourceforge.net/projects/seq/files/ShowEQ/ShowEQ-5.2.2/showeq-5.2.2.0.tar.bz2/download
Step 3,
I realized I needed RedHat 8... Well, I had to torrent that since I couldn't find my cd's from 8 years ago.
Step 4,
I needed to find a library for QT which would work with this build of SEQ, happened to be QT 3.2.3
Step 5
Find a version of pcap, did some digging found libpcap 0.62 at http://www.tcpdump.org/ (Side Note, the latest version will work fine too!)
Step 6
Build and compile everything according to directions. I followed the thread http://www.showeq.net/forums/showthread.php?74-Idiots-Guide-all-questions-answered-here&highlight=installation
Step 7
I wasn't getting any updates on mobs or other players. So now I had a program issue. It appears that the emu was build w/ the SOF client in mind, but they only support the Titanium version.
So, the packets have extra trash in them that would usually be used for the SOF client. I had to isolate it and found that it was a 15 bit difference in size in the location packets. So when the size checkfor the sizechecktype of "match" was called, the packet didn't match so it ignored it.
So, in my reasoning, I didn't want to figure out what the extra fields where (I'm lazy) I modified the code in packetinfo.cpp around line 194
bool EQPacketPayload::match(const uint8_t* data, size_t size, uint8_t dir) const
In there their is the following code:
switch(m_sizeCheckType)
{
case SZC_None:
return ((m_dir & dir) != 0);
case SZC_Match:
return (((m_dir & dir) != 0) &&
(m_typeSize == size));
case SZC_Modulus:
return (((m_dir & dir) != 0) &&
((size % m_typeSize) == 0));
default:
break;
}
return false;
to
switch(m_sizeCheckType)
{
case SZC_None:
return ((m_dir & dir) != 0);
case SZC_Match:
return (((m_dir & dir) != 0) &&
(size>=m_typeSize ) && (size<=m_typeSize+15 ));
case SZC_Modulus:
return (((m_dir & dir) != 0) &&
((size % m_typeSize) == 0));
default:
break;
}
return false;
So, I recompiled and fired it up and wohoo I was getting updates.... but it wasn't updating the player object... this was due to the fact that I was using a "network Switch" instead of a "Hub".... off to Best Buy to buy a old fashion hub.
Plugged my linux box and my game machine into the hub and walaa, my player started updating... SEQ was working... doh, "Segmentation Fault"... damn it.
So back into the code I went, I knew the packet it recieved just before the fault was "OP_FormattedMessage" and I had read in several places that this caused issues. Well looking in the zoneopcodes.xml file I found the entry and the sizechecktype equaled "None".
Hrm, I really don't care about formatted messages.... let's change it to match!
So, I changed the xml setting to match, recompiled and walaa! no more "Segmentation Fault"!!!!
So, there ya go, I'm sure there is more bugs waiting to be found due to my hackish approach to the program, but at least the program runs 99% of the time.
I hope this is useful to others trying to get that code base working w/ the eqemu's.
Chaple
I always loved how it just listened to the packets and was undetectable. So, when I started playing recently on Project 1999 I felt that I was missing something without SEQ running on a linux box next to my game machine.
So, my quest began.
Step 1, acquire a somewhat ok machine to run linux on
Step 2, they use the Titanium client so I had to get that version of SEQ
http://sourceforge.net/projects/seq/files/ShowEQ/ShowEQ-5.2.2/showeq-5.2.2.0.tar.bz2/download
Step 3,
I realized I needed RedHat 8... Well, I had to torrent that since I couldn't find my cd's from 8 years ago.
Step 4,
I needed to find a library for QT which would work with this build of SEQ, happened to be QT 3.2.3
Step 5
Find a version of pcap, did some digging found libpcap 0.62 at http://www.tcpdump.org/ (Side Note, the latest version will work fine too!)
Step 6
Build and compile everything according to directions. I followed the thread http://www.showeq.net/forums/showthread.php?74-Idiots-Guide-all-questions-answered-here&highlight=installation
Step 7
I wasn't getting any updates on mobs or other players. So now I had a program issue. It appears that the emu was build w/ the SOF client in mind, but they only support the Titanium version.
So, the packets have extra trash in them that would usually be used for the SOF client. I had to isolate it and found that it was a 15 bit difference in size in the location packets. So when the size checkfor the sizechecktype of "match" was called, the packet didn't match so it ignored it.
So, in my reasoning, I didn't want to figure out what the extra fields where (I'm lazy) I modified the code in packetinfo.cpp around line 194
bool EQPacketPayload::match(const uint8_t* data, size_t size, uint8_t dir) const
In there their is the following code:
switch(m_sizeCheckType)
{
case SZC_None:
return ((m_dir & dir) != 0);
case SZC_Match:
return (((m_dir & dir) != 0) &&
(m_typeSize == size));
case SZC_Modulus:
return (((m_dir & dir) != 0) &&
((size % m_typeSize) == 0));
default:
break;
}
return false;
to
switch(m_sizeCheckType)
{
case SZC_None:
return ((m_dir & dir) != 0);
case SZC_Match:
return (((m_dir & dir) != 0) &&
(size>=m_typeSize ) && (size<=m_typeSize+15 ));
case SZC_Modulus:
return (((m_dir & dir) != 0) &&
((size % m_typeSize) == 0));
default:
break;
}
return false;
So, I recompiled and fired it up and wohoo I was getting updates.... but it wasn't updating the player object... this was due to the fact that I was using a "network Switch" instead of a "Hub".... off to Best Buy to buy a old fashion hub.
Plugged my linux box and my game machine into the hub and walaa, my player started updating... SEQ was working... doh, "Segmentation Fault"... damn it.
So back into the code I went, I knew the packet it recieved just before the fault was "OP_FormattedMessage" and I had read in several places that this caused issues. Well looking in the zoneopcodes.xml file I found the entry and the sizechecktype equaled "None".
Hrm, I really don't care about formatted messages.... let's change it to match!
So, I changed the xml setting to match, recompiled and walaa! no more "Segmentation Fault"!!!!
So, there ya go, I'm sure there is more bugs waiting to be found due to my hackish approach to the program, but at least the program runs 99% of the time.
I hope this is useful to others trying to get that code base working w/ the eqemu's.
Chaple