I worked it out. Here's the "real" patch; it deals with only unmemming the spells you need to remove, and everything appears to work perfectly. I will go and have a lie-down now
Paul.
Code:
*** ../../EQEmu-0.7.0-903/zone/client_packet.cpp 2006-10-31 03:04:23.000000000 +0000
--- client_packet.cpp 2006-11-14 16:59:45.000000000 +0000
***************
*** 307,312 ****
--- 307,313 ----
ConnectedOpcodes[OP_SenseHeading] = &Client::Handle_OP_Ignore;
ConnectedOpcodes[OP_FloatListThing] = &Client::Handle_OP_Ignore;
ConnectedOpcodes[OP_WorldUnknown001] = &Client::Handle_OP_Ignore;
+ ConnectedOpcodes[OP_LoadSpellSet] = &Client::Handle_OP_LoadSpellSet;
}
***************
*** 4393,4398 ****
--- 4394,4414 ----
return;
}
+ void Client::Handle_OP_LoadSpellSet(const EQApplicationPacket *app)
+ {
+ if(app->size!=sizeof(LoadSpellSet_Struct))
+ printf("Wrong size of LoadSpellSet_Struct! Expected: %i, Got: %i\n",sizeof(LoadSpellSet_Struct),app->size);
+ else {
+ int i;
+ LoadSpellSet_Struct* set=(LoadSpellSet_Struct*)app->pBuffer;
+ for(i=0;i<MAX_PP_MEMSPELL;i++) {
+ if (set->spell[i] != 0xFFFFFFFF) UnmemSpell(i,true);
+ }
+ }
+ return;
+ }
+
+
void Client::Handle_OP_PetitionBug(const EQApplicationPacket *app)
{
if(app->size!=sizeof(PetitionBug_Struct))
*** ../../EQEmu-0.7.0-903/zone/client_packet.h 2006-08-15 02:18:33.000000000 +0100
--- client_packet.h 2006-11-13 11:17:23.000000000 +0000
***************
*** 207,210 ****
--- 207,211 ----
void Handle_OP_RequestTitles(const EQApplicationPacket *app);
void Handle_OP_PurchaseLeadershipAA(const EQApplicationPacket *app);
void Handle_OP_Ignore(const EQApplicationPacket *app);
+ void Handle_OP_LoadSpellSet(const EQApplicationPacket *app);
*** ../../EQEmu-0.7.0-903/common/eq_packet_structs.h 2006-10-22 21:12:38.000000000 +0100
--- eq_packet_structs.h 2006-11-14 16:42:48.000000000 +0000
***************
*** 3178,3183 ****
--- 3178,3187 ----
uint32 value; //always 4
};
+ struct LoadSpellSet_Struct {
+ uint32 spell[10]; // 0xFFFFFFFF if no action, slot number if to unmem starting at 0
+ };
+
//old structures live here:
#include "eq_old_structs.h"