|
From: <iea...@us...> - 2008-06-11 21:30:21
|
Revision: 703
http://seq.svn.sourceforge.net/seq/?rev=703&view=rev
Author: ieatacid
Date: 2008-06-11 14:30:19 -0700 (Wed, 11 Jun 2008)
Log Message:
-----------
+ Updated version to 5.12.4.1
+ The variable-length spawn data should be handled properly now
Modified Paths:
--------------
showeq/trunk/ChangeLog
showeq/trunk/conf/zoneopcodes.xml
showeq/trunk/configure.in
showeq/trunk/src/everquest.h
showeq/trunk/src/interface.cpp
showeq/trunk/src/spawnshell.cpp
showeq/trunk/src/spawnshell.h
Modified: showeq/trunk/ChangeLog
===================================================================
--- showeq/trunk/ChangeLog 2008-06-09 00:54:25 UTC (rev 702)
+++ showeq/trunk/ChangeLog 2008-06-11 21:30:19 UTC (rev 703)
@@ -1,5 +1,10 @@
Version: $Id$ $Name$
+ieatacid (6/11/08)
+----------------
++ Updated version to 5.12.4.1
++ The variable-length spawn data should be handled properly now
+
ieatacid (6/8/08)
----------------
+ Updated version to 5.12.4
Modified: showeq/trunk/conf/zoneopcodes.xml
===================================================================
--- showeq/trunk/conf/zoneopcodes.xml 2008-06-09 00:54:25 UTC (rev 702)
+++ showeq/trunk/conf/zoneopcodes.xml 2008-06-11 21:30:19 UTC (rev 703)
@@ -75,7 +75,7 @@
</opcode>
<opcode id="3164" name="OP_RemoveSpawn" updated="04/17/08">
<comment>Remove spawn from zone</comment>
- <payload dir="server" typename="removeSpawnStruct" sizechecktype="none"/>
+ <payload dir="both" typename="removeSpawnStruct" sizechecktype="none"/>
</opcode>
<opcode id="1B85" name="OP_Death" updated="01/17/08">
<comment>old NewCorpseCode</comment>
Modified: showeq/trunk/configure.in
===================================================================
--- showeq/trunk/configure.in 2008-06-09 00:54:25 UTC (rev 702)
+++ showeq/trunk/configure.in 2008-06-11 21:30:19 UTC (rev 703)
@@ -2,7 +2,7 @@
dnl $Id$ $Name$
AC_PREREQ(2.59)
-AC_INIT(showeq, 5.12.4.0)
+AC_INIT(showeq, 5.12.4.1)
AC_CONFIG_SRCDIR(src/main.cpp)
AC_CANONICAL_SYSTEM
Modified: showeq/trunk/src/everquest.h
===================================================================
--- showeq/trunk/src/everquest.h 2008-06-09 00:54:25 UTC (rev 702)
+++ showeq/trunk/src/everquest.h 2008-06-11 21:30:19 UTC (rev 703)
@@ -984,7 +984,7 @@
};
int32_t miscData;
};
-/*0000*/ uint8_t hasTitleOrSuffix;
+/*0000*/ uint8_t otherData; // & 4 - has title, & 8 - has suffix, & 1 - it's a chest or untargetable
/*0000*/ uint32_t race;
/*0000*/ uint8_t charProperties;
/*0000*/ uint32_t bodytype;
@@ -1085,7 +1085,7 @@
unsigned padding1:2;
unsigned trader:1;
unsigned buyer:1;
-/*0000*/ uint8_t hasTitleOrSuffix; // & 4=title, & 8=suffix, & 1 - it's a chest
+/*0000*/ uint8_t otherData; // & 4 - has title, & 8 - has suffix, & 1 - it's a chest or untargetable
/*0000*/ uint32_t unknown3;
/*0000*/ uint32_t unknown4;
/*0000*/ uint32_t unknown5;
Modified: showeq/trunk/src/interface.cpp
===================================================================
--- showeq/trunk/src/interface.cpp 2008-06-09 00:54:25 UTC (rev 702)
+++ showeq/trunk/src/interface.cpp 2008-06-11 21:30:19 UTC (rev 703)
@@ -1962,9 +1962,9 @@
m_packet->connect2("OP_Shroud", SP_Zone, DIR_Server,
"spawnShroudSelf", SZC_None,
m_spawnShell, SLOT(shroudSpawn(const uint8_t*, size_t, uint8_t)));
- m_packet->connect2("OP_RemoveSpawn", SP_Zone, DIR_Server,
+ m_packet->connect2("OP_RemoveSpawn", SP_Zone, DIR_Server|DIR_Client,
"removeSpawnStruct", SZC_None,
- m_spawnShell, SLOT(removeSpawn(const uint8_t*, size_t)));
+ m_spawnShell, SLOT(removeSpawn(const uint8_t*, size_t, uint8_t)));
#if 0 // ZBTEMP
connect(m_packet, SIGNAL(spawnWearingUpdate(const uint8_t*, size_t, uint8_t)),
m_spawnShell, SLOT(spawnWearingUpdate(const uint8_t*)));
Modified: showeq/trunk/src/spawnshell.cpp
===================================================================
--- showeq/trunk/src/spawnshell.cpp 2008-06-09 00:54:25 UTC (rev 702)
+++ showeq/trunk/src/spawnshell.cpp 2008-06-11 21:30:19 UTC (rev 703)
@@ -423,7 +423,7 @@
{
NetStream netStream(data,len);
spawnStruct *spawn = new spawnStruct;
- uint32_t spawnStructSize;
+ int32_t spawnStructSize;
uint16_t parm1;
while(!netStream.end())
@@ -433,16 +433,22 @@
if(parm1==0x1ff)
parm1=netStream.readUInt16NC();
+ // skip 0x79 before name
netStream.skipBytes(1);
+
spawnStructSize=fillSpawnStruct(spawn,netStream.pos(),len,false);
newSpawn(*spawn);
- netStream.skipBytes(spawnStructSize);
+ if(spawnStructSize)
+ netStream.skipBytes(spawnStructSize);
}
}
-uint32_t SpawnShell::fillSpawnStruct(spawnStruct *spawn, const uint8_t *data, size_t len, bool checkLen)
+int32_t SpawnShell::fillSpawnStruct(spawnStruct *spawn, const uint8_t *data, size_t len, bool checkLen)
{
NetStream netStream(data,len);
+ int32_t retVal;
+ uint32_t race;
+ uint8_t i;
QString name=netStream.readText();
@@ -464,25 +470,49 @@
spawn->miscData=netStream.readUInt32NC();
- spawn->hasTitleOrSuffix=netStream.readUInt8();
+ spawn->otherData=netStream.readUInt8();
-// seqDebug("miscData: %x hasTitleOrSuffix: %x",spawn->miscData,spawn->hasTitleOrSuffix);
+// seqDebug("miscData: %x otherData: %x",spawn->miscData,spawn->otherData);
// seqDebug("buyer=%d trader=%d TC=%d T=%d BB=%d LD=%d gen=%d anon=%d gm=%d invis=%d LFG=%d sneak=%d AFK=%d",
// spawn->buyer,spawn->trader,spawn->targetcyclable,spawn->targetable,spawn->betabuffed,
// spawn->linkdead,spawn->gender,spawn->anon,spawn->gm,spawn->invis,spawn->LFG,spawn->sneak,spawn->AFK);
- if(spawn->hasTitleOrSuffix & 1)
+ // skip unknown3, unknown4
+ netStream.skipBytes(8);
+
+ if(spawn->otherData & 1)
{
- // it's a chest. skip usual 21 plus extra 56
- netStream.skipBytes(77);
+ // it's a chest or untargetable
+
+ do
+ i=netStream.readUInt8();
+ while(i);
+
+ do
+ i=netStream.readUInt8();
+ while(i);
+
+ do
+ i=netStream.readUInt8();
+ while(i);
+
+ // skip next 3 longs
+ netStream.skipBytes(12);
+
+ // next it loops through 9 longs, but we can just skip them
+ netStream.skipBytes(36);
+
+ // skip 1 byte
+ netStream.skipBytes(1);
+
+ // skip the last long
+ netStream.skipBytes(4);
}
- else
- {
- // skip facestyle, walk/run speeds, unknowns
- netStream.skipBytes(21);
- }
+ // skip facestyle, walk/run speeds, unknown5
+ netStream.skipBytes(13);
+
spawn->race=netStream.readUInt32NC();
// seqDebug("race=%d",spawn->race);
@@ -493,11 +523,10 @@
{
spawn->bodytype=netStream.readUInt32NC();
// seqDebug("bodytype=%d",spawn->bodytype);
- for(int i=1; i < spawn->charProperties; i++)
+ for(i=1; i < spawn->charProperties; i++)
{
// extra character properties
- int j=netStream.readUInt32NC();
-// netStream.skipBytes(4);
+ netStream.skipBytes(4);
}
}
@@ -544,20 +573,19 @@
spawn->posData[4]=netStream.readUInt32NC();
// seqDebug("%x %x %x %x %x",spawn->posData[0],spawn->posData[1],spawn->posData[2],spawn->posData[3],spawn->posData[4]);
-
-// seqDebug("%d %d %d | %d %d %d | %d %d | %d",spawn->y>>3,spawn->x>>3,spawn->z>>3,
+// seqDebug("%d %d %d | %d %d %d | %d %d | %d",spawn->y>>3,spawn->x>>3,spawn->z>>3,
// spawn->deltaY>>2,spawn->deltaX>>2,spawn->deltaZ>>2,
// spawn->heading,spawn->deltaHeading,spawn->animation);
// skip color
netStream.skipBytes(36);
- uint32_t race=spawn->race;
+ race=spawn->race;
// this is how the client checks if equipment should be read.
if(spawn->NPC==0 || race <= 12 || race==128 || race==130 || race==330 || race==522)
{
- for(int i=0; i<9; i++)
+ for(i=0; i<9; i++)
{
spawn->equipment[i].itemId=netStream.readUInt32NC();
spawn->equipment[i].equip1=netStream.readUInt32NC();
@@ -565,14 +593,14 @@
}
}
- if(spawn->hasTitleOrSuffix & 4)
+ if(spawn->otherData & 4)
{
name=netStream.readText();
strcpy(spawn->title,name.latin1());
// seqDebug("title=%s",spawn->title);
}
- if(spawn->hasTitleOrSuffix & 8)
+ if(spawn->otherData & 8)
{
name=netStream.readText();
strcpy(spawn->suffix,name.latin1());
@@ -583,12 +611,13 @@
// now we're at the end
- uint32_t retVal=netStream.pos()-netStream.data();
+ retVal=netStream.pos()-netStream.data();
if(checkLen && (int32_t)len!=retVal)
{
seqDebug("SpawnShell::fillSpawnStruct - expected length: %d, read: %d",len,retVal);
}
+
return retVal;
}
@@ -1241,13 +1270,17 @@
} // else not yourself
} // end consMessage()
-void SpawnShell::removeSpawn(const uint8_t* data, size_t len)
+void SpawnShell::removeSpawn(const uint8_t* data, size_t len, uint8_t dir)
{
+ if(dir==DIR_Client)
+ return;
const removeSpawnStruct* rmSpawn = (const removeSpawnStruct*)data;
#ifdef SPAWNSHELL_DIAG
seqDebug("SpawnShell::removeSpawn(id=%d)", rmSpawn->spawnId);
#endif
+
Item *item;
+
if(len==sizeof(removeSpawnStruct))
{
if(!rmSpawn->removeSpawn)
@@ -1268,10 +1301,6 @@
}
}
}
- else
- {
-
- }
}
else if((len+1)!=sizeof(removeSpawnStruct))
{
Modified: showeq/trunk/src/spawnshell.h
===================================================================
--- showeq/trunk/src/spawnshell.h 2008-06-09 00:54:25 UTC (rev 702)
+++ showeq/trunk/src/spawnshell.h 2008-06-11 21:30:19 UTC (rev 703)
@@ -122,7 +122,7 @@
void updateNpcHP(const uint8_t* hpupdate);
void spawnWearingUpdate(const uint8_t* wearing);
void consMessage(const uint8_t* con, size_t, uint8_t);
- void removeSpawn(const uint8_t* rmSpawn, size_t len);
+ void removeSpawn(const uint8_t* rmSpawn, size_t len, uint8_t dir);
void deleteSpawn(const uint8_t* delSpawn);
void killSpawn(const uint8_t* deadspawn);
void respawnFromHover(const uint8_t* respawn);
@@ -140,7 +140,7 @@
void deleteItem(spawnItemType type, int id);
bool updateFilterFlags(Item* item);
bool updateRuntimeFilterFlags(Item* item);
- uint32_t fillSpawnStruct(spawnStruct *spawn, const uint8_t *data, size_t len, bool checkLen);
+ int32_t fillSpawnStruct(spawnStruct *spawn, const uint8_t *data, size_t len, bool checkLen);
ItemMap& getMap(spawnItemType type);
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|