PDA

View Full Version : Test Server Updates



sammie
09-08-2010, 04:34 PM
Instead of posting SEQ changes for the Test server haphazardly on various threads, I decided to open this thread to help consolidate info in an easy to find place. My changes are by no means official, but are instead quick hacks to get the SEQ client functional on the Test server. If you have any input, changes or questions or comments about SEQ on Test Server, please feel free to use this thread.


Latest Test Server Patch: 10/15/2010
Use SEQ Client: 5.13.10.2
Known Issues: Several outstanding opcodes.

Make the following changes to a fresh copy of 5.13.10.2 and recompile:

src/spawnshell.cpp


// unknowns
netStream.skipBytes(8);

spawn->isMercenary = netStream.readUInt8();

// unknowns -- changed from 28 to 53 for HoT Beta
netStream.skipBytes(53);

// now we're at the end


src/everquest.h


/*
** Info sent when you start to cast a spell
** Length: 44 Octets
** OpCode: StartCastCode
*/

struct startCastStruct
{
/*0000*/ int32_t slot; // ***Placeholder
/*0004*/ uint32_t spellId; // Spell ID
/*0008*/ int32_t inventorySlot; // ***Placeholder
/*0012*/ uint8_t unknown0012[8]; // ***Placeholder (9/1/2010)
/*0020*/ uint32_t targetId; // The current selected target
/*0024*/ uint8_t unknown0024[4]; // ***Placeholder
/*0028*/ uint8_t unknown0028[16]; // ***Placeholder (4/7/2009)
/*0044*/
};



/*
** Type: Zone Change Request (before hand)
** Length: 92 Octets
** OpCode: ZoneChangeCode
*/
struct zoneChangeStruct
{
/*0000*/ char name[64]; // Character Name
/*0064*/ uint16_t zoneId; // zone Id
/*0066*/ uint16_t zoneInstance; // zone Instance
/*0068*/ uint8_t unknown0068[8]; // unknown
/*0076*/ uint8_t unknown0076[12]; // ***Placeholder (6/29/2005)
/*0088*/ uint8_t unknown0088[4]; // HoT Beta (9/7/2010)
/*0092*/
};



/*18316*/ uint32_t copper_bank; // Copper Pieces in Bank
/*18320*/ uint32_t platinum_shared; // Shared platinum pieces
/*18324*/ uint8_t unknown18324[2124]; // Added 1088 for HoT
/*19360*/ uint32_t expansions; // Bitmask for expansions
/*19364*/ uint8_t unknown19364[12];



/*20580*/ uint32_t tributeActive; // 0 = off, 1=on
/*20584*/ TributeStruct tributes[MAX_TRIBUTES]; // Current tribute loadout
/*20624*/ uint8_t unknown20624[92]; // Added 88 bytes for HoT
/*20628*/ float expGroupLeadAA; // Current group lead exp points
/*20632*/ uint32_t unknown20632;


conf/zoneopcodes.xml


<opcode id="38F9" name="OP_NpcMoveUpdate" updated="10/21/09">
<comment>Position updates</comment>
<payload dir="server" typename="uint8_t" sizechecktype="none"/>
</opcode>

<opcode id="59A8" name="OP_DeleteSpawn" updated="10/21/09">
<comment>old DeleteSpawnCode</comment>
<payload dir="both" typename="deleteSpawnStruct" sizechecktype="match"/>
</opcode>

<opcode id="002B" name="OP_ZoneEntry" updated="09/07/10">
<comment>old ZoneEntryCode</comment>
<payload dir="client" typename="ClientZoneEntryStruct" sizechecktype="match"/>
<payload dir="server" typename="uint8_t" sizechecktype="none"/>
</opcode>

<opcode id="5F85" name="OP_GuildMOTD" updated="10/21/09">
<comment>GuildMOTD</comment>
<payload dir="server" typename="guildMOTDStruct" sizechecktype="none"/>
</opcode>

<opcode id="2370" name="OP_InspectAnswer" updated="10/21/09">
<comment>old InspectDataCode</comment>
<payload dir="both" typename="inspectDataStruct" sizechecktype="match"/>
</opcode>

<opcode id="000F" name="OP_SendZonePoints" updated="10/21/09">
<comment>Coords in a zone that will port you to another zone</comment>
<payload dir="server" typename="zonePointsStruct" sizechecktype="none"/>
</opcode>

<opcode id="2257" name="OP_TargetMouse" updated="10/21/09">
<comment>Targeting a person - old ClientTargetCode</comment>
<payload dir="both" typename="clientTargetStruct" sizechecktype="match"/>
</opcode>

<opcode id="27BF" name="OP_GroupFollow2" updated="10/21/09">
<payload dir="server" typename="groupFollowStruct" sizechecktype="match"/>
<comment>Player joins your group</comment>
</opcode>

<opcode id="167B" name="OP_GroupDisband" updated="10/21/09">
<comment>You disband from group</comment>
<payload dir="server" typename="groupDisbandStruct" sizechecktype="match"/>
</opcode>

<opcode id="72F8" name="OP_Stamina" updated="10/21/09">
<comment>Server updating on hunger/thirst</comment>
<payload dir="server" typename="staminaStruct" sizechecktype="match"/>
</opcode>

<opcode id="3E50" name="OP_Consider" updated="10/21/09">
<comment>old ConsiderCode</comment>
<payload dir="both" typename="considerStruct" sizechecktype="match"/>
</opcode>

<opcode id="2963" name="OP_Buff" updated="10/21/09">
<comment>old BuffDropCode</comment>
<payload dir="both" typename="buffStruct" sizechecktype="match"/>
</opcode>

<opcode id="5F0D" name="OP_GroundSpawn" updated="06/12/09">
<comment>old MakeDropCode</comment>
<payload dir="server" typename="makeDropStruct" sizechecktype="none"/>
<payload dir="client" typename="uint8_t" sizechecktype="none"/>
</opcode>

<opcode id="44AE" name="OP_Logout" updated="10/21/09">
<comment></comment>
<payload dir="server" typename="none" sizechecktype="match"/>
</opcode>

<opcode id="7434" name="OP_RemoveSpawn" updated="06/12/09">
<comment>Remove spawn from zone</comment>
<payload dir="both" typename="removeSpawnStruct" sizechecktype="none"/>
</opcode>

<opcode id="7F9E" name="OP_Death" updated="06/12/09">
<comment>old NewCorpseCode</comment>
<payload dir="server" typename="newCorpseStruct" sizechecktype="match"/>
</opcode>

<opcode id="442A" name="OP_ClickObject" updated="06/12/09">
<comment>old RemDropCode</comment>
<payload dir="both" typename="remDropStruct" sizechecktype="match"/>
</opcode>

<opcode id="50C2" name="OP_BuffFadeMsg" updated="06/12/09">
<comment>old SpellFadeCode</comment>
<payload dir="both" typename="spellFadedStruct" sizechecktype="none"/>
</opcode>

<opcode id="7286" name="OP_CastSpell" updated="06/12/09">
<comment>old StartCastCode</comment>
<payload dir="both" typename="startCastStruct" sizechecktype="match"/>
</opcode>

<opcode id="00BC" name="OP_MoneyOnCorpse" updated="06/12/09">
<comment>old MoneyOnCorpseCode</comment>
<payload dir="server" typename="moneyOnCorpseStruct" sizechecktype="match"/>
</opcode>

<opcode id="5DBC" name="OP_ItemPlayerPacket" updated="09/07/10">
<comment>Inventory/bank items coming over during zone</comment>
<payload dir="server" typename="uint8_t" sizechecktype="none"/>
</opcode>

sammie
10-15-2010, 05:09 PM
As of Oct. 15 patch, you can apply all of these changes to Live except for this line:

/*18324*/ uint8_t unknown18324[2124]; // Added 1088 for HoT

That change is only needed on the Test server at the moment. It will probably be pushed live next week.

hug
10-21-2010, 12:16 PM
As of Oct. 15 patch, you can apply all of these changes to Live except for this line:

/*18324*/ uint8_t unknown18324[2124]; // Added 1088 for HoT

That change is only needed on the Test server at the moment. It will probably be pushed live next week.


Your prediction was correct. It got pushed live today. Made the change and all is well. Thanks!

pita
10-21-2010, 05:26 PM
deleted because I'm a tard. Need to patch the same directory, that I am compiling.

BlueAdept
10-22-2010, 09:44 AM
LOL...happens to everyone eventually :)

sammie
10-27-2010, 02:35 PM
Test Server Patch on 10/25 introduced a problem with debug messages filling the terminal similar to "SpawnShell::fillSpawnStruct - expected length: 123, read: 124 for spawn 'soandso'"

Make the following change and recompile to fix the message:

src/spawnshell.cpp


// unknowns
netStream.skipBytes(8);

spawn->isMercenary = netStream.readUInt8();

// unknowns -- changed from 28 to 54 for HoT Patch 10/25
netStream.skipBytes(54);

// now we're at the end

sammie
01-29-2011, 12:21 AM
The Jan. 26 2011 patch on Test server seems to have introduced a change to how corpse clean-up is handled. No longer is OP_DeleteSpawn sent after a player-related corpse disappears. This includes player corpses, familiars, pets, and swarm pets. As a result SEQ doesn't remove the corpse from the spawn list or the map.

NPC corpses are still handled the old way. The packet order is generally OP_Death, Op_RemoveSpawn, OP_DeleteSpawn. Now on PC related corpses it is just OP_Death, OP_RemoveSpawn.

Spending any length of time in a zone rapidly builds up tons of mobs and eventually SEQ becomes unstable.

It might help to capture plenty of logs this weekend from live servers, just in case. I'm going to keep working on it to see if I can figure out exactly what was changed, this is just a heads up since I'm not sure when this might (if ever) go live.

Razzle
01-29-2011, 12:26 PM
Thanks for the heads up sammie. I was looking at those opcodes earlier this week. Will have to tie removing Player corpses to OP_RemoveSpawn if this goes live probably.

Razzle

sammie
01-29-2011, 10:13 PM
I'm testing a fix tonight that is working so far. I'm sure it's not the proper way to go but it is keeping the spawnlist and map clean.

src/spawnshell.cpp:


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))
{
// Hack to fix corpse clean-up change
deleteItem(tSpawn, rmSpawn->spawnId);
// End Hack

if(!rmSpawn->removeSpawn)
{
// Remove a spawn from outside the update radius
if(showeq_params->useUpdateRadius)
{
// Remove it
deleteItem(tSpawn, rmSpawn->spawnId);
}
else
{
// Set flag to change its icon
if((item=m_spawns.find(rmSpawn->spawnId)))
{
Spawn *s=(Spawn*)item;
s->setNotUpdated(true);
}
}
}
}
else if((len+1)!=sizeof(removeSpawnStruct))
{
seqWarn("OP_RemoveSpawn (dataLen: %d) doesn't match: sizeof(removeSpawnStruct): %d",
len,sizeof(removeSpawnStruct));
}
}


Also, some zone opcode changes if anyone wants to try out the changes on Test. I'm sure there's some others but they are minor ones.

zoneopcodes.xml:


<opcode id="5D24" name="OP_NpcMoveUpdate" updated="01/26/11">
<comment>Position updates</comment>
<payload dir="server" typename="uint8_t" sizechecktype="none"/>
</opcode>

<opcode id="1D85" name="OP_DeleteSpawn" updated="01/26/11">
<comment>old DeleteSpawnCode</comment>
<payload dir="both" typename="deleteSpawnStruct" sizechecktype="match"/>
</opcode>

sammie
02-02-2011, 09:45 PM
Test server patch for 2-2-2011 causes segfault on OP_PlayerProfile. Adding 360 to the structure fixes the segfault, currently testing the following change to everquest.h that seems to fix the problem:

/*10572*/ uint8_t unknown10572[920]; // Test Patch add 360 (was 560) 2-2-2011

Helix2
02-09-2011, 01:51 PM
Thanks sammie, that segfault fix got me flyturds on live servers after the 02/09 2011 patch.

The opcodes for OP_NpcMoveUpdate and OP_DeleteSpawn works also.

I managed to find OP_TargetMouse:



<opcode id="2257" name="OP_TargetMouse" updated="02/09/11">
<comment>Targeting a person - old ClientTargetCode</comment>
<payload dir="both" typename="clientTargetStruct" sizechecktype="match"/>
</opcode>

hug
02-09-2011, 04:55 PM
Did a bit of testing on live and Sammie's segfault fix is working, the opcodes for OP_NpcMoveUpdate and OP_Deletespawn are working, and the changes to spawnshell.cpp are needed for live. The changes to spawnshell.cpp are working for at least mounts and warders, which was all I was able to test. Also seems needed for a few wandering mobs as well.

For some reason, I already had Helix2's opcode for OP_TargetMouse, and it is also correct.

All this info made for a very quick fix. Thanks!!!!!

Helix2
02-17-2011, 11:56 AM
Feb 17 patch blew up OP_NpcMoveUpdate.

This sems to work for me:
<opcode id="3278" name="OP_NpcMoveUpdate" updated="2/17/11">
<comment>Position updates</comment>
<payload dir="server" typename="uint8_t" sizechecktype="none"/>
</opcode>

hug
02-18-2011, 11:43 AM
Works great, thanks!

Railsmurf
03-09-2011, 02:00 PM
Server patch for 9-3-2011 causes segfault with Warning: OP_PlayerProfile (0x6022) (dataLen: 28536) doesn't match: sizeof(charProfileStruct):28176
Im no coder at all but tried to add 320 more to the charProfileStruct as before (see sammie's post above) and it worked for me and i haven't noticed any strange behaviour , running 1 hour now.

Change in everquest.h

/*10572*/ uint8_t unknown10572[920]; // Test Patch add 360 (was 560) 2-2-2011

to:

/*10572*/ uint8_t unknown10572[1280]; // add 360 (was 920) 9-3-2011

Spanners
03-22-2011, 07:52 AM
Thanks Rail, that got me running again !