From ad8e834fe8bd3aadd4a9c3de50d4c0b1733c040f Mon Sep 17 00:00:00 2001 From: Akkadius Date: Mon, 15 Dec 2014 23:14:55 -0600 Subject: [PATCH] Dropping client 6.2 support --- common/CMakeLists.txt | 12 - common/eq_dictionary.cpp | 7 - common/eq_dictionary.h | 1 - common/patches/client62.cpp | 1341 ----------- common/patches/client62.h | 37 - common/patches/client62_constants.h | 212 -- common/patches/client62_itemfields.h | 166 -- common/patches/client62_ops.h | 54 - common/patches/client62_structs.h | 3163 -------------------------- common/patches/patches.cpp | 3 - utils/patches/patch_6.2.conf | 539 ----- world/clientlist.cpp | 6 +- zone/lua_general.cpp | 1 - zone/tasks.cpp | 14 - 14 files changed, 2 insertions(+), 5554 deletions(-) delete mode 100644 common/patches/client62.cpp delete mode 100644 common/patches/client62.h delete mode 100644 common/patches/client62_constants.h delete mode 100644 common/patches/client62_itemfields.h delete mode 100644 common/patches/client62_ops.h delete mode 100644 common/patches/client62_structs.h delete mode 100644 utils/patches/patch_6.2.conf diff --git a/common/CMakeLists.txt b/common/CMakeLists.txt index 06547f418..d547c4c88 100644 --- a/common/CMakeLists.txt +++ b/common/CMakeLists.txt @@ -67,7 +67,6 @@ SET(common_sources worldconn.cpp xml_parser.cpp platform.cpp - patches/client62.cpp patches/patches.cpp patches/sod.cpp patches/sof.cpp @@ -193,11 +192,6 @@ SET(common_headers worldconn.h xml_parser.h zone_numbers.h - patches/client62.h - patches/client62_constants.h - patches/client62_itemfields.h - patches/client62_ops.h - patches/client62_structs.h patches/patches.h patches/sod.h patches/sod_constants.h @@ -251,11 +245,6 @@ SET(common_headers ) SOURCE_GROUP(Patches FILES - patches/client62.h - patches/client62_itemfields.h - patches/client62_ops.h - patches/client62_constants.h - patches/client62_structs.h patches/patches.h patches/sod.h patches/sod_itemfields.h @@ -291,7 +280,6 @@ SOURCE_GROUP(Patches FILES patches/underfoot_ops.h patches/underfoot_constants.h patches/underfoot_structs.h - patches/client62.cpp patches/patches.cpp patches/sod.cpp patches/sof.cpp diff --git a/common/eq_dictionary.cpp b/common/eq_dictionary.cpp index 3756ca8fe..37414853e 100644 --- a/common/eq_dictionary.cpp +++ b/common/eq_dictionary.cpp @@ -548,7 +548,6 @@ uint16 EQLimits::InventoryMapSize(int16 map, uint32 version) { }, { // local[MapBank] /*Unknown*/ NOT_USED, -/*62*/ Client62::consts::MAP_BANK_SIZE, /*Titanium*/ Titanium::consts::MAP_BANK_SIZE, /*SoF*/ EmuConstants::MAP_BANK_SIZE, /*SoD*/ EmuConstants::MAP_BANK_SIZE, @@ -698,7 +697,6 @@ uint16 EQLimits::InventoryMapSize(int16 map, uint32 version) { }, { // local[MapCorpse] /*Unknown*/ NOT_USED, -/*62*/ Client62::consts::MAP_CORPSE_SIZE, /*Titanium*/ Titanium::consts::MAP_CORPSE_SIZE, /*SoF*/ SoF::consts::MAP_CORPSE_SIZE, /*SoD*/ SoD::consts::MAP_CORPSE_SIZE, @@ -728,7 +726,6 @@ uint16 EQLimits::InventoryMapSize(int16 map, uint32 version) { }, { // local[MapInspect] /*Unknown*/ NOT_USED, -/*62*/ Client62::consts::MAP_INSPECT_SIZE, /*Titanium*/ Titanium::consts::MAP_INSPECT_SIZE, /*SoF*/ SoF::consts::MAP_INSPECT_SIZE, /*SoD*/ SoD::consts::MAP_INSPECT_SIZE, @@ -1006,7 +1003,6 @@ uint64 EQLimits::CursorBitmask(uint32 version) { bool EQLimits::AllowsEmptyBagInBag(uint32 version) { static const bool local[_EmuClientCount] = { /*Unknown*/ false, -/*62*/ Client62::limits::ALLOWS_EMPTY_BAG_IN_BAG, /*Titanium*/ Titanium::limits::ALLOWS_EMPTY_BAG_IN_BAG, /*SoF*/ SoF::limits::ALLOWS_EMPTY_BAG_IN_BAG, /*SoD*/ SoD::limits::ALLOWS_EMPTY_BAG_IN_BAG, @@ -1027,8 +1023,6 @@ bool EQLimits::AllowsEmptyBagInBag(uint32 version) { bool EQLimits::AllowsClickCastFromBag(uint32 version) { static const bool local[_EmuClientCount] = { /*Unknown*/ false, -/*62*/ Client62::limits::ALLOWS_CLICK_CAST_FROM_BAG, -/*Titanium*/ Titanium::limits::ALLOWS_CLICK_CAST_FROM_BAG, /*SoF*/ SoF::limits::ALLOWS_CLICK_CAST_FROM_BAG, /*SoD*/ SoD::limits::ALLOWS_CLICK_CAST_FROM_BAG, /*Underfoot*/ Underfoot::limits::ALLOWS_CLICK_CAST_FROM_BAG, @@ -1088,7 +1082,6 @@ uint16 EQLimits::ItemContainerSize(uint32 version) { bool EQLimits::CoinHasWeight(uint32 version) { static const bool local[_EmuClientCount] = { /*Unknown*/ true, -/*62*/ Client62::limits::COIN_HAS_WEIGHT, /*Titanium*/ Titanium::limits::COIN_HAS_WEIGHT, /*SoF*/ SoF::limits::COIN_HAS_WEIGHT, /*SoD*/ SoD::limits::COIN_HAS_WEIGHT, diff --git a/common/eq_dictionary.h b/common/eq_dictionary.h index a17ade924..43511072f 100644 --- a/common/eq_dictionary.h +++ b/common/eq_dictionary.h @@ -26,7 +26,6 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA #include "eq_constants.h" #include "clientversions.h" #include -#include "../common/patches/client62_constants.h" #include "../common/patches/titanium_constants.h" #include "../common/patches/sof_constants.h" #include "../common/patches/sod_constants.h" diff --git a/common/patches/client62.cpp b/common/patches/client62.cpp deleted file mode 100644 index 102414b16..000000000 --- a/common/patches/client62.cpp +++ /dev/null @@ -1,1341 +0,0 @@ -#include "../debug.h" -#include "client62.h" -#include "../opcodemgr.h" -#include "../logsys.h" -#include "../eq_stream_ident.h" -#include "../crc32.h" - -#include "../eq_packet_structs.h" -#include "../misc_functions.h" -#include "../string_util.h" -#include "../item.h" -#include "../clientversions.h" -#include "client62_structs.h" - -namespace Client62 -{ - static const char *name = "6.2"; - static OpcodeManager *opcodes = nullptr; - static Strategy struct_strategy; - - char* SerializeItem(const ItemInst *inst, int16 slot_id_in, uint32 *length, uint8 depth); - - // server to client inventory location converters - static inline int16 ServerToClient62Slot(uint32 ServerSlot); - static inline int16 ServerToClient62CorpseSlot(uint32 ServerCorpse); - - // client to server inventory location converters - static inline uint32 Client62ToServerSlot(int16 Client62Slot); - static inline uint32 Client62ToServerCorpseSlot(int16 Client62Corpse); - - void Register(EQStreamIdentifier &into) - { - //create our opcode manager if we havent already - if (opcodes == nullptr) { - //TODO: get this file name from the config file - std::string opfile = "patch_"; - opfile += name; - opfile += ".conf"; - //load up the opcode manager. - //TODO: figure out how to support shared memory with multiple patches... - opcodes = new RegularOpcodeManager(); - if (!opcodes->LoadOpcodes(opfile.c_str())) { - _log(NET__OPCODES, "Error loading opcodes file %s. Not registering patch %s.", opfile.c_str(), name); - return; - } - } - - //ok, now we have what we need to register. - - EQStream::Signature signature; - std::string pname; - - //register our world signature. - pname = std::string(name) + "_world"; - signature.ignore_eq_opcode = 0; - signature.first_length = sizeof(structs::LoginInfo_Struct); - signature.first_eq_opcode = opcodes->EmuToEQ(OP_SendLoginInfo); - into.RegisterPatch(signature, pname.c_str(), &opcodes, &struct_strategy); - - //register our zone signature. - pname = std::string(name) + "_zone"; - signature.ignore_eq_opcode = opcodes->EmuToEQ(OP_AckPacket); - signature.first_length = sizeof(structs::ClientZoneEntry_Struct); - signature.first_eq_opcode = opcodes->EmuToEQ(OP_ZoneEntry); - into.RegisterPatch(signature, pname.c_str(), &opcodes, &struct_strategy); - - _log(NET__IDENTIFY, "Registered patch %s", name); - } - - void Reload() - { - //we have a big problem to solve here when we switch back to shared memory - //opcode managers because we need to change the manager pointer, which means - //we need to go to every stream and replace it's manager. - - if (opcodes != nullptr) { - //TODO: get this file name from the config file - std::string opfile = "patch_"; - opfile += name; - opfile += ".conf"; - if (!opcodes->ReloadOpcodes(opfile.c_str())) { - _log(NET__OPCODES, "Error reloading opcodes file %s for patch %s.", opfile.c_str(), name); - return; - } - _log(NET__OPCODES, "Reloaded opcodes for patch %s", name); - } - } - - Strategy::Strategy() : StructStrategy() - { - //all opcodes default to passthrough. -#include "ss_register.h" -#include "client62_ops.h" - } - - std::string Strategy::Describe() const - { - std::string r; - r += "Patch "; - r += name; - return(r); - } - - const EQClientVersion Strategy::ClientVersion() const - { - return EQClient62; - } - -#include "ss_define.h" - -// ENCODE methods - EAT_ENCODE(OP_GuildMemberLevelUpdate); // added ; - - EAT_ENCODE(OP_ZoneServerReady); // added ; - - ENCODE(OP_Action) - { - ENCODE_LENGTH_EXACT(Action_Struct); - SETUP_DIRECT_ENCODE(Action_Struct, structs::Action_Struct); - - OUT(target); - OUT(source); - OUT(level); - OUT(instrument_mod); - OUT(sequence); - OUT(type); - //OUT(damage); - OUT(spell); - OUT(buff_unknown); // if this is 4, a buff icon is made - - FINISH_ENCODE(); - } - - ENCODE(OP_AdventureMerchantSell) - { - ENCODE_LENGTH_EXACT(Adventure_Sell_Struct); - SETUP_DIRECT_ENCODE(Adventure_Sell_Struct, structs::Adventure_Sell_Struct); - - eq->unknown000 = 1; - OUT(npcid); - eq->slot = ServerToClient62Slot(emu->slot); - OUT(charges); - OUT(sell_price); - - FINISH_ENCODE(); - } - - ENCODE(OP_ApplyPoison) - { - ENCODE_LENGTH_EXACT(ApplyPoison_Struct); - SETUP_DIRECT_ENCODE(ApplyPoison_Struct, structs::ApplyPoison_Struct); - - eq->inventorySlot = ServerToClient62Slot(emu->inventorySlot); - OUT(success); - - FINISH_ENCODE(); - } - - ENCODE(OP_BazaarSearch) - { - EQApplicationPacket *in = *p; - *p = nullptr; - - char *Buffer = (char *)in->pBuffer; - - uint8 SubAction = VARSTRUCT_DECODE_TYPE(uint8, Buffer); - - if (SubAction != BazaarSearchResults) - { - dest->FastQueuePacket(&in, ack_req); - - return; - } - - unsigned char *__emu_buffer = in->pBuffer; - - BazaarSearchResults_Struct *emu = (BazaarSearchResults_Struct *)__emu_buffer; - - int EntryCount = in->size / sizeof(BazaarSearchResults_Struct); - - if (EntryCount == 0 || (in->size % sizeof(BazaarSearchResults_Struct)) != 0) - { - _log(NET__STRUCTS, "Wrong size on outbound %s: Got %d, expected multiple of %d", opcodes->EmuToName(in->GetOpcode()), in->size, sizeof(BazaarSearchResults_Struct)); - delete in; - return; - } - in->size = EntryCount * sizeof(structs::BazaarSearchResults_Struct); - - in->pBuffer = new unsigned char[in->size]; - - memset(in->pBuffer, 0, in->size); - - structs::BazaarSearchResults_Struct *eq = (structs::BazaarSearchResults_Struct *)in->pBuffer; - - for (int i = 0; i < EntryCount; ++i, ++emu, ++eq) - { - OUT(Beginning.Action); - OUT(NumItems); - OUT(SerialNumber); - OUT(SellerID); - OUT(Cost); - OUT(ItemStat); - memcpy(eq->ItemName, emu->ItemName, sizeof(eq->ItemName)); - } - - delete[] __emu_buffer; - dest->FastQueuePacket(&in, ack_req); - } - - ENCODE(OP_BecomeTrader) - { - ENCODE_LENGTH_EXACT(BecomeTrader_Struct); - SETUP_DIRECT_ENCODE(BecomeTrader_Struct, structs::BecomeTrader_Struct); - - OUT(ID); - OUT(Code); - - FINISH_ENCODE(); - } - - ENCODE(OP_CharInventory) - { - //consume the packet - EQApplicationPacket *in = *p; - *p = nullptr; - - //store away the emu struct - unsigned char *__emu_buffer = in->pBuffer; - - int itemcount = in->size / sizeof(InternalSerializedItem_Struct); - if (itemcount == 0 || (in->size % sizeof(InternalSerializedItem_Struct)) != 0) { - _log(NET__STRUCTS, "Wrong size on outbound %s: Got %d, expected multiple of %d", opcodes->EmuToName(in->GetOpcode()), in->size, sizeof(InternalSerializedItem_Struct)); - delete in; - return; - } - InternalSerializedItem_Struct *eq = (InternalSerializedItem_Struct *)in->pBuffer; - - //do the transform... - int r; - std::string serial_string; - for (r = 0; r < itemcount; r++, eq++) { - uint32 length; - char *serialized = SerializeItem((ItemInst*)eq->inst, eq->slot_id, &length, 0); - if (serialized) { - serial_string.append(serialized, length + 1); - safe_delete_array(serialized); - } - else { - _log(NET__STRUCTS, "Serialization failed on item slot %d during OP_CharInventory. Item skipped.", eq->slot_id); - } - - } - - in->size = serial_string.length(); - in->pBuffer = new unsigned char[in->size]; - memcpy(in->pBuffer, serial_string.c_str(), serial_string.length()); - - delete[] __emu_buffer; - dest->FastQueuePacket(&in, ack_req); - } - - ENCODE(OP_DeleteCharge) { ENCODE_FORWARD(OP_MoveItem); } - - ENCODE(OP_DeleteItem) - { - ENCODE_LENGTH_EXACT(DeleteItem_Struct); - SETUP_DIRECT_ENCODE(DeleteItem_Struct, structs::DeleteItem_Struct); - - eq->from_slot = ServerToClient62Slot(emu->from_slot); - eq->to_slot = ServerToClient62Slot(emu->to_slot); - OUT(number_in_stack); - - FINISH_ENCODE(); - } - - ENCODE(OP_DeleteSpawn) - { - SETUP_DIRECT_ENCODE(DeleteSpawn_Struct, structs::DeleteSpawn_Struct); - - OUT(spawn_id); - - FINISH_ENCODE(); - } - - ENCODE(OP_GuildMemberList) - { - //consume the packet - EQApplicationPacket *in = *p; - *p = nullptr; - - //store away the emu struct - unsigned char *__emu_buffer = in->pBuffer; - Internal_GuildMembers_Struct *emu = (Internal_GuildMembers_Struct *)in->pBuffer; - - //make a new EQ buffer. - uint32 pnl = strlen(emu->player_name); - uint32 length = sizeof(structs::GuildMembers_Struct) + pnl + - emu->count * sizeof(structs::GuildMemberEntry_Struct) - + emu->name_length + emu->note_length; - in->pBuffer = new uint8[length]; - in->size = length; - //no memset since we fill every byte. - - uint8 *buffer; - buffer = in->pBuffer; - - //easier way to setup GuildMembers_Struct - //set prefix name - strcpy((char *)buffer, emu->player_name); - buffer += pnl; - *buffer = '\0'; - buffer++; - - //add member count. - *((uint32 *)buffer) = htonl(emu->count); - buffer += sizeof(uint32); - - if (emu->count > 0) { - Internal_GuildMemberEntry_Struct *emu_e = emu->member; - const char *emu_name = (const char *)(__emu_buffer + - sizeof(Internal_GuildMembers_Struct)+ //skip header - emu->count * sizeof(Internal_GuildMemberEntry_Struct) //skip static length member data - ); - const char *emu_note = (emu_name + - emu->name_length + //skip name contents - emu->count //skip string terminators - ); - - structs::GuildMemberEntry_Struct *e = (structs::GuildMemberEntry_Struct *) buffer; - - uint32 r; - for (r = 0; r < emu->count; r++, emu_e++) { - - //the order we set things here must match the struct - - //nice helper macro - /*#define SlideStructString(field, str) \ - strcpy(e->field, str.c_str()); \ - e = (GuildMemberEntry_Struct *) ( ((uint8 *)e) + str.length() )*/ -#define SlideStructString(field, str) \ - { \ - int sl = strlen(str); \ - memcpy(e->field, str, sl+1); \ - e = (structs::GuildMemberEntry_Struct *) ( ((uint8 *)e) + sl ); \ - str += sl + 1; \ - } -#define PutFieldN(field) e->field = htonl(emu_e->field) - - SlideStructString(name, emu_name); - PutFieldN(level); - PutFieldN(banker); - PutFieldN(class_); - PutFieldN(rank); - PutFieldN(time_last_on); - PutFieldN(tribute_enable); - PutFieldN(total_tribute); - PutFieldN(last_tribute); - SlideStructString(public_note, emu_note); - e->zoneinstance = 0; - e->zone_id = htons(emu_e->zone_id); -#undef SlideStructString -#undef PutFieldN - - e++; - } - } - - delete[] __emu_buffer; - dest->FastQueuePacket(&in, ack_req); - } - - ENCODE(OP_Illusion) - { - ENCODE_LENGTH_EXACT(Illusion_Struct); - SETUP_DIRECT_ENCODE(Illusion_Struct, structs::Illusion_Struct); - - OUT(spawnid); - OUT_str(charname); - - if (emu->race > 473) - eq->race = 1; - else - OUT(race); - - OUT(gender); - OUT(texture); - OUT(helmtexture); - OUT(face); - OUT(hairstyle); - OUT(haircolor); - OUT(beard); - OUT(beardcolor); - OUT(size); - - FINISH_ENCODE(); - } - - ENCODE(OP_ItemLinkResponse) { ENCODE_FORWARD(OP_ItemPacket); } - - ENCODE(OP_ItemPacket) - { - //consume the packet - EQApplicationPacket *in = *p; - *p = nullptr; - - //store away the emu struct - unsigned char *__emu_buffer = in->pBuffer; - ItemPacket_Struct *old_item_pkt = (ItemPacket_Struct *)__emu_buffer; - InternalSerializedItem_Struct *int_struct = (InternalSerializedItem_Struct *)(old_item_pkt->SerializedItem); - - uint32 length; - char *serialized = SerializeItem((const ItemInst *)int_struct->inst, int_struct->slot_id, &length, 0); - - if (!serialized) { - _log(NET__STRUCTS, "Serialization failed on item slot %d.", int_struct->slot_id); - delete in; - return; - } - in->size = length + 5; // ItemPacketType + Serialization + \0 - in->pBuffer = new unsigned char[in->size]; - ItemPacket_Struct *new_item_pkt = (ItemPacket_Struct *)in->pBuffer; - new_item_pkt->PacketType = old_item_pkt->PacketType; - memcpy(new_item_pkt->SerializedItem, serialized, length + 1); - - delete[] __emu_buffer; - safe_delete_array(serialized); - dest->FastQueuePacket(&in, ack_req); - } - - ENCODE(OP_LeadershipExpUpdate) - { - SETUP_DIRECT_ENCODE(LeadershipExpUpdate_Struct, structs::LeadershipExpUpdate_Struct); - - OUT(group_leadership_exp); - OUT(group_leadership_points); - OUT(raid_leadership_exp); - OUT(raid_leadership_points); - - FINISH_ENCODE(); - } - - ENCODE(OP_LootItem) - { - ENCODE_LENGTH_EXACT(LootingItem_Struct); - SETUP_DIRECT_ENCODE(LootingItem_Struct, structs::LootingItem_Struct); - - OUT(lootee); - OUT(looter); - eq->slot_id = ServerToClient62CorpseSlot(emu->slot_id); - OUT(auto_loot); - - FINISH_ENCODE(); - } - - ENCODE(OP_MoveItem) - { - ENCODE_LENGTH_EXACT(MoveItem_Struct); - SETUP_DIRECT_ENCODE(MoveItem_Struct, structs::MoveItem_Struct); - - eq->from_slot = ServerToClient62Slot(emu->from_slot); - eq->to_slot = ServerToClient62Slot(emu->to_slot); - OUT(number_in_stack); - - FINISH_ENCODE(); - } - - ENCODE(OP_NewSpawn) { ENCODE_FORWARD(OP_ZoneSpawns); } - - ENCODE(OP_OnLevelMessage) - { - ENCODE_LENGTH_EXACT(OnLevelMessage_Struct); - SETUP_DIRECT_ENCODE(OnLevelMessage_Struct, structs::OnLevelMessage_Struct); - - OUT_str(Title); - OUT_str(Text); - OUT(Buttons); - OUT(Duration); - OUT(PopupID); - - eq->unknown4236 = 0x00000000; - eq->unknown4240 = 0xffffffff; - - FINISH_ENCODE(); - } - - ENCODE(OP_PetBuffWindow) - { - ENCODE_LENGTH_EXACT(PetBuff_Struct); - SETUP_DIRECT_ENCODE(PetBuff_Struct, PetBuff_Struct); - - OUT(petid); - OUT(buffcount); - - int EQBuffSlot = 0; - - for (uint32 EmuBuffSlot = 0; EmuBuffSlot < BUFF_COUNT; ++EmuBuffSlot) - { - if (emu->spellid[EmuBuffSlot]) - { - eq->spellid[EQBuffSlot] = emu->spellid[EmuBuffSlot]; - eq->ticsremaining[EQBuffSlot++] = emu->ticsremaining[EmuBuffSlot]; - } - } - - FINISH_ENCODE(); - } - - ENCODE(OP_PlayerProfile) - { - SETUP_DIRECT_ENCODE(PlayerProfile_Struct, structs::PlayerProfile_Struct); - - uint32 r; - - memset(eq->unknown3224, 0xff, 448); - memset(eq->unknown3704, 0xff, 32); - - // OUT(checksum); - OUT(gender); - OUT(race); - OUT(class_); - OUT(level); - eq->level2 = emu->level; - - eq->bind_zone_id = emu->binds[0].zoneId; - eq->bind_x[0] = emu->binds[0].x; - eq->bind_y[0] = emu->binds[0].y; - eq->bind_z[0] = emu->binds[0].z; - eq->bind_heading[0] = emu->binds[0].heading; - //just making this up base on organization of struct: - eq->zone_safe_x = emu->binds[4].x; - eq->zone_safe_y = emu->binds[4].y; - eq->zone_safe_z = emu->binds[4].z; - eq->zone_safe_heading = emu->binds[4].heading; - - OUT(deity); - OUT(intoxication); - OUT_array(spellSlotRefresh, structs::MAX_PP_MEMSPELL); - OUT(abilitySlotRefresh); - // OUT(unknown0166[4]); - OUT(haircolor); - OUT(beardcolor); - OUT(eyecolor1); - OUT(eyecolor2); - OUT(hairstyle); - OUT(beard); - for (r = 0; r < 9; r++) { - OUT(item_material[r]); - OUT(item_tint[r].color); - - } - for (r = 0; r < structs::MAX_PP_AA_ARRAY; r++) { - OUT(aa_array[r].AA); - OUT(aa_array[r].value); - } - OUT(points); - OUT(mana); - OUT(cur_hp); - OUT(STR); - OUT(STA); - OUT(CHA); - OUT(DEX); - OUT(INT); - OUT(AGI); - OUT(WIS); - OUT(face); - OUT_array(spell_book, structs::MAX_PP_SPELLBOOK); - OUT_array(mem_spells, structs::MAX_PP_MEMSPELL); - OUT(platinum); - OUT(gold); - OUT(silver); - OUT(copper); - OUT(platinum_cursor); - OUT(gold_cursor); - OUT(silver_cursor); - OUT(copper_cursor); - - OUT_array(skills, structs::MAX_PP_SKILL); // 1:1 direct copy (100 dword) - - OUT(toxicity); - OUT(thirst_level); - OUT(hunger_level); - for (r = 0; r < structs::BUFF_COUNT; r++) { - OUT(buffs[r].slotid); - OUT(buffs[r].level); - OUT(buffs[r].bard_modifier); - OUT(buffs[r].effect); - OUT(buffs[r].spellid); - OUT(buffs[r].duration); - OUT(buffs[r].counters); - // OUT(buffs[r].player_id); - } - for (r = 0; r < structs::MAX_PP_DISCIPLINES; r++) { - OUT(disciplines.values[r]); - } - // OUT_array(recastTimers, structs::MAX_RECAST_TYPES); - OUT(endurance); - OUT(aapoints_spent); - OUT(aapoints); - for (r = 0; r < structs::MAX_PLAYER_BANDOLIER; r++) { - OUT_str(bandoliers[r].name); - uint32 k; - for (k = 0; k < structs::MAX_PLAYER_BANDOLIER_ITEMS; k++) { - OUT(bandoliers[r].items[k].item_id); - OUT(bandoliers[r].items[k].icon); - OUT_str(bandoliers[r].items[k].item_name); - } - } - for (r = 0; r < structs::MAX_PLAYER_BANDOLIER_ITEMS; r++) { - OUT(potionbelt.items[r].item_id); - OUT(potionbelt.items[r].icon); - OUT_str(potionbelt.items[r].item_name); - } - // OUT(available_slots); - OUT_str(name); - OUT_str(last_name); - OUT(guild_id); - OUT(birthday); - OUT(lastlogin); - OUT(timePlayedMin); - OUT(pvp); - OUT(anon); - OUT(gm); - OUT(guildrank); - OUT(exp); - OUT_array(languages, structs::MAX_PP_LANGUAGE); - OUT(x); - OUT(y); - OUT(z); - OUT(heading); - OUT(platinum_bank); - OUT(gold_bank); - OUT(silver_bank); - OUT(copper_bank); - OUT(platinum_shared); - OUT(expansions); - OUT(autosplit); - OUT(zone_id); - OUT(zoneInstance); - for (r = 0; r < structs::MAX_GROUP_MEMBERS; r++) { - OUT_str(groupMembers[r]); - } - // OUT_str(groupLeader); //this is prolly right after groupMembers, but I dont feel like checking. - // OUT(leadAAActive); - OUT(ldon_points_guk); - OUT(ldon_points_mir); - OUT(ldon_points_mmc); - OUT(ldon_points_ruj); - OUT(ldon_points_tak); - OUT(ldon_points_available); - OUT(tribute_time_remaining); - OUT(career_tribute_points); - OUT(tribute_points); - OUT(tribute_active); - for (r = 0; r < structs::MAX_PLAYER_TRIBUTES; r++) { - OUT(tributes[r].tribute); - OUT(tributes[r].tier); - } - OUT(group_leadership_exp); - OUT(raid_leadership_exp); - OUT(group_leadership_points); - OUT(raid_leadership_points); - OUT_array(leader_abilities.ranks, structs::MAX_LEADERSHIP_AA_ARRAY); - OUT(air_remaining); - OUT(entityid); - OUT(leadAAActive); - OUT(expAA); - OUT(currentRadCrystals); - OUT(careerRadCrystals); - OUT(currentEbonCrystals); - OUT(careerEbonCrystals); - OUT(groupAutoconsent); - OUT(raidAutoconsent); - OUT(guildAutoconsent); - // OUT(showhelm); - - //set the checksum... - CRC32::SetEQChecksum(__packet->pBuffer, sizeof(structs::PlayerProfile_Struct) - 4); - - FINISH_ENCODE(); - } - - ENCODE(OP_ReadBook) - { - // no apparent slot translation needed -U - EQApplicationPacket *in = *p; - *p = nullptr; - - unsigned char *__emu_buffer = in->pBuffer; - - BookText_Struct *emu_BookText_Struct = (BookText_Struct *)__emu_buffer; - - in->size = sizeof(structs::BookText_Struct) + strlen(emu_BookText_Struct->booktext); - - in->pBuffer = new unsigned char[in->size]; - - structs::BookText_Struct *eq_BookText_Struct = (structs::BookText_Struct*)in->pBuffer; - - eq_BookText_Struct->window = emu_BookText_Struct->window; - eq_BookText_Struct->type = emu_BookText_Struct->type; - strcpy(eq_BookText_Struct->booktext, emu_BookText_Struct->booktext); - - delete[] __emu_buffer; - dest->FastQueuePacket(&in, ack_req); - } - - ENCODE(OP_RespondAA) - { - ENCODE_LENGTH_EXACT(AATable_Struct); - SETUP_DIRECT_ENCODE(AATable_Struct, structs::AATable_Struct); - - unsigned int r; - for (r = 0; r < MAX_PP_AA_ARRAY; r++) { - OUT(aa_list[r].aa_skill); - OUT(aa_list[r].aa_value); - } - - FINISH_ENCODE(); - } - - ENCODE(OP_SendAATable) - { - ENCODE_LENGTH_ATLEAST(SendAA_Struct); - - SETUP_VAR_ENCODE(SendAA_Struct); - ALLOC_VAR_ENCODE(structs::SendAA_Struct, sizeof(structs::SendAA_Struct) + emu->total_abilities*sizeof(structs::AA_Ability)); - - // Check clientver field to verify this AA should be sent for SoF - // clientver 1 is for all clients and 2 is for 6.2 - if (emu->clientver <= 2) - { - OUT(id); - OUT(hotkey_sid); - OUT(hotkey_sid2); - OUT(title_sid); - OUT(desc_sid); - OUT(class_type); - OUT(cost); - OUT(seq); - OUT(current_level); - OUT(prereq_skill); - OUT(prereq_minpoints); - OUT(type); - OUT(spellid); - OUT(spell_type); - OUT(spell_refresh); - OUT(classes); - OUT(berserker); - OUT(max_level); - OUT(last_id); - OUT(next_id); - OUT(cost2); - OUT(unknown80[0]); - OUT(unknown80[1]); - OUT(total_abilities); - unsigned int r; - for (r = 0; r < emu->total_abilities; r++) { - OUT(abilities[r].skill_id); - OUT(abilities[r].base1); - OUT(abilities[r].base2); - OUT(abilities[r].slot); - } - } - - FINISH_ENCODE(); - } - - ENCODE(OP_SendCharInfo) - { - ENCODE_LENGTH_EXACT(CharacterSelect_Struct); - SETUP_DIRECT_ENCODE(CharacterSelect_Struct, structs::CharacterSelect_Struct); - - int r; - for (r = 0; r < 10; r++) { - OUT(zone[r]); - OUT(eyecolor1[r]); - OUT(eyecolor2[r]); - OUT(hairstyle[r]); - OUT(primary[r]); - OUT(race[r]); - OUT(class_[r]); - OUT_str(name[r]); - OUT(gender[r]); - OUT(level[r]); - OUT(secondary[r]); - OUT(face[r]); - OUT(beard[r]); - int k; - for (k = 0; k < 9; k++) { - eq->equip[r][k] = emu->equip[r][k].material; - eq->cs_colors[r][k].color = emu->equip[r][k].color.color; - } - OUT(haircolor[r]); - OUT(gohome[r]); - OUT(deity[r]); - OUT(beardcolor[r]); - } - - FINISH_ENCODE(); - } - - ENCODE(OP_ShopPlayerSell) - { - ENCODE_LENGTH_EXACT(Merchant_Purchase_Struct); - SETUP_DIRECT_ENCODE(Merchant_Purchase_Struct, structs::Merchant_Purchase_Struct); - - OUT(npcid); - eq->itemslot = ServerToClient62Slot(emu->itemslot); - OUT(quantity); - OUT(price); - - FINISH_ENCODE(); - } - - ENCODE(OP_Track) - { - EQApplicationPacket *in = *p; - *p = nullptr; - - unsigned char *__emu_buffer = in->pBuffer; - Track_Struct *emu = (Track_Struct *)__emu_buffer; - - int EntryCount = in->size / sizeof(Track_Struct); - - if (EntryCount == 0 || ((in->size % sizeof(Track_Struct))) != 0) - { - _log(NET__STRUCTS, "Wrong size on outbound %s: Got %d, expected multiple of %d", opcodes->EmuToName(in->GetOpcode()), in->size, sizeof(Track_Struct)); - delete in; - return; - } - - in->size = sizeof(structs::Track_Struct) * EntryCount; - in->pBuffer = new unsigned char[in->size]; - structs::Track_Struct *eq = (structs::Track_Struct *) in->pBuffer; - - for (int i = 0; i < EntryCount; ++i, ++eq, ++emu) - { - OUT(entityid); - OUT(padding002); - OUT(distance); - } - - delete[] __emu_buffer; - dest->FastQueuePacket(&in, ack_req); - } - - ENCODE(OP_TributeItem) - { - ENCODE_LENGTH_EXACT(TributeItem_Struct); - SETUP_DIRECT_ENCODE(TributeItem_Struct, structs::TributeItem_Struct); - - eq->slot = ServerToClient62Slot(emu->slot); - OUT(quantity); - OUT(tribute_master_id); - OUT(tribute_points); - - FINISH_ENCODE(); - } - - ENCODE(OP_WearChange) - { - ENCODE_LENGTH_EXACT(WearChange_Struct); - SETUP_DIRECT_ENCODE(WearChange_Struct, structs::WearChange_Struct); - - OUT(spawn_id); - OUT(material); - OUT(color.color); - OUT(wear_slot_id); - - FINISH_ENCODE(); - } - - ENCODE(OP_ZoneEntry) { ENCODE_FORWARD(OP_ZoneSpawns); } - - ENCODE(OP_ZoneSpawns) - { - //consume the packet - EQApplicationPacket *in = *p; - *p = nullptr; - - //store away the emu struct - unsigned char *__emu_buffer = in->pBuffer; - Spawn_Struct *emu = (Spawn_Struct *)__emu_buffer; - - //determine and verify length - int entrycount = in->size / sizeof(Spawn_Struct); - if (entrycount == 0 || (in->size % sizeof(Spawn_Struct)) != 0) { - _log(NET__STRUCTS, "Wrong size on outbound %s: Got %d, expected multiple of %d", opcodes->EmuToName(in->GetOpcode()), in->size, sizeof(Spawn_Struct)); - delete in; - return; - } - - //make the EQ struct. - in->size = sizeof(structs::Spawn_Struct)*entrycount; - in->pBuffer = new unsigned char[in->size]; - structs::Spawn_Struct *eq = (structs::Spawn_Struct *) in->pBuffer; - - //zero out the packet. We could avoid this memset by setting all fields (including unknowns) - //in the loop. - memset(in->pBuffer, 0, in->size); - - //do the transform... - int r; - int k; - for (r = 0; r < entrycount; r++, eq++, emu++) { - eq->gm = emu->gm; - eq->aaitle = emu->aaitle; - eq->anon = emu->anon; - eq->face = emu->face; - strcpy(eq->name, emu->name); - eq->deity = emu->deity; - eq->size = emu->size; - eq->NPC = emu->NPC; - eq->invis = emu->invis; - eq->haircolor = emu->haircolor; - eq->curHp = emu->curHp; - eq->max_hp = emu->max_hp; - eq->findable = emu->findable; - eq->deltaHeading = emu->deltaHeading; - eq->x = emu->x; - eq->y = emu->y; - eq->animation = emu->animation; - eq->z = emu->z; - eq->deltaY = emu->deltaY; - eq->deltaX = emu->deltaX; - eq->heading = emu->heading; - eq->deltaZ = emu->deltaZ; - eq->eyecolor1 = emu->eyecolor1; - // eq->showhelm = emu->showhelm; - eq->is_npc = emu->is_npc; - eq->hairstyle = emu->hairstyle; - eq->beard = emu->beard; - eq->level = emu->level; - eq->beardcolor = emu->beardcolor; - strcpy(eq->suffix, emu->suffix); - eq->petOwnerId = emu->petOwnerId; - eq->guildrank = emu->guildrank; - for (k = 0; k < 9; k++) { - eq->equipment[k] = emu->equipment[k].material; - eq->colors[k].color = emu->colors[k].color; - } - for (k = 0; k < 8; k++) { - eq->set_to_0xFF[k] = 0xFF; - } - eq->runspeed = emu->runspeed; - eq->afk = emu->afk; - eq->guildID = emu->guildID; - strcpy(eq->title, emu->title); - eq->helm = emu->helm; - eq->race = emu->race; - strcpy(eq->lastName, emu->lastName); - eq->walkspeed = emu->walkspeed; - eq->is_pet = emu->is_pet; - eq->light = emu->light; - eq->class_ = emu->class_; - eq->eyecolor2 = emu->eyecolor2; - eq->gender = emu->gender; - eq->bodytype = emu->bodytype; - eq->equip_chest2 = emu->equip_chest2; - eq->spawnId = emu->spawnId; - eq->lfg = emu->lfg; - eq->flymode = emu->flymode; - } - - //kill off the emu structure and send the eq packet. - delete[] __emu_buffer; - dest->FastQueuePacket(&in, ack_req); - } - -// DECODE methods - DECODE(OP_AdventureMerchantSell) - { - DECODE_LENGTH_EXACT(structs::Adventure_Sell_Struct); - SETUP_DIRECT_DECODE(Adventure_Sell_Struct, structs::Adventure_Sell_Struct); - - IN(npcid); - emu->slot = Client62ToServerSlot(eq->slot); - IN(charges); - IN(sell_price); - - FINISH_DIRECT_DECODE(); - } - - DECODE(OP_ApplyPoison) - { - DECODE_LENGTH_EXACT(structs::ApplyPoison_Struct); - SETUP_DIRECT_DECODE(ApplyPoison_Struct, structs::ApplyPoison_Struct); - - emu->inventorySlot = Client62ToServerSlot(eq->inventorySlot); - IN(success); - - FINISH_DIRECT_DECODE(); - } - - DECODE(OP_AugmentItem) - { - DECODE_LENGTH_EXACT(structs::AugmentItem_Struct); - SETUP_DIRECT_DECODE(AugmentItem_Struct, structs::AugmentItem_Struct); - - emu->container_slot = Client62ToServerSlot(eq->container_slot); - emu->augment_slot = eq->augment_slot; - - FINISH_DIRECT_DECODE(); - } - - DECODE(OP_CastSpell) - { - DECODE_LENGTH_EXACT(structs::CastSpell_Struct); - SETUP_DIRECT_DECODE(CastSpell_Struct, structs::CastSpell_Struct); - - IN(slot); - IN(spell_id); - emu->inventoryslot = Client62ToServerSlot(eq->inventoryslot); - IN(target_id); - - FINISH_DIRECT_DECODE(); - } - - DECODE(OP_CharacterCreate) - { - DECODE_LENGTH_EXACT(structs::CharCreate_Struct); - SETUP_DIRECT_DECODE(CharCreate_Struct, structs::CharCreate_Struct); - - IN(class_); - IN(beardcolor); - IN(beard); - IN(haircolor); - IN(gender); - IN(race); - IN(start_zone); - IN(hairstyle); - IN(deity); - IN(STR); - IN(STA); - IN(AGI); - IN(DEX); - IN(WIS); - IN(INT); - IN(CHA); - IN(face); - IN(eyecolor1); - IN(eyecolor2); - IN(tutorial); - - FINISH_DIRECT_DECODE(); - } - - DECODE(OP_Consume) - { - DECODE_LENGTH_EXACT(structs::Consume_Struct); - SETUP_DIRECT_DECODE(Consume_Struct, structs::Consume_Struct); - - emu->slot = Client62ToServerSlot(eq->slot); - IN(auto_consumed); - IN(type); - - FINISH_DIRECT_DECODE(); - } - - DECODE(OP_DeleteItem) - { - DECODE_LENGTH_EXACT(structs::DeleteItem_Struct); - SETUP_DIRECT_DECODE(DeleteItem_Struct, structs::DeleteItem_Struct); - - emu->from_slot = Client62ToServerSlot(eq->from_slot); - emu->to_slot = Client62ToServerSlot(eq->to_slot); - IN(number_in_stack); - - FINISH_DIRECT_DECODE(); - } - - DECODE(OP_FaceChange) - { - DECODE_LENGTH_EXACT(structs::FaceChange_Struct); - SETUP_DIRECT_DECODE(FaceChange_Struct, structs::FaceChange_Struct); - - IN(haircolor); - IN(beardcolor); - IN(eyecolor1); - IN(eyecolor2); - IN(hairstyle); - IN(beard); - IN(face); - - FINISH_DIRECT_DECODE(); - } - - DECODE(OP_ItemLinkClick) - { - DECODE_LENGTH_EXACT(structs::ItemViewRequest_Struct); - SETUP_DIRECT_DECODE(ItemViewRequest_Struct, structs::ItemViewRequest_Struct); - MEMSET_IN(ItemViewRequest_Struct); - - IN(item_id); - int r; - for (r = 0; r < 5; r++) { - IN(augments[r]); - } - IN(link_hash); - - FINISH_DIRECT_DECODE(); - } - - DECODE(OP_LootItem) - { - DECODE_LENGTH_EXACT(structs::LootingItem_Struct); - SETUP_DIRECT_DECODE(LootingItem_Struct, structs::LootingItem_Struct); - - IN(lootee); - IN(looter); - emu->slot_id = Client62ToServerCorpseSlot(eq->slot_id); - IN(auto_loot); - - FINISH_DIRECT_DECODE(); - } - - DECODE(OP_MoveItem) - { - DECODE_LENGTH_EXACT(structs::MoveItem_Struct); - SETUP_DIRECT_DECODE(MoveItem_Struct, structs::MoveItem_Struct); - - _log(NET__ERROR, "Moved item from %u to %u", eq->from_slot, eq->to_slot); - - emu->from_slot = Client62ToServerSlot(eq->from_slot); - emu->to_slot = Client62ToServerSlot(eq->to_slot); - IN(number_in_stack); - - FINISH_DIRECT_DECODE(); - } - - DECODE(OP_ReadBook) - { - // no apparent slot translation needed -U - DECODE_LENGTH_ATLEAST(structs::BookRequest_Struct); - SETUP_DIRECT_DECODE(BookRequest_Struct, structs::BookRequest_Struct); - - IN(window); - IN(type); - strn0cpy(emu->txtfile, eq->txtfile, sizeof(emu->txtfile)); - - FINISH_DIRECT_DECODE(); - } - - DECODE(OP_SetServerFilter) - { - DECODE_LENGTH_EXACT(structs::SetServerFilter_Struct); - SETUP_DIRECT_DECODE(SetServerFilter_Struct, structs::SetServerFilter_Struct); - - int r; - for (r = 0; r < 25; r++) { - IN(filters[r]); - } - emu->filters[25] = 1; - emu->filters[26] = 1; - emu->filters[27] = 1; - emu->filters[28] = 1; - - FINISH_DIRECT_DECODE(); - } - - DECODE(OP_ShopPlayerSell) - { - DECODE_LENGTH_EXACT(structs::Merchant_Purchase_Struct); - SETUP_DIRECT_DECODE(Merchant_Purchase_Struct, structs::Merchant_Purchase_Struct); - - IN(npcid); - emu->itemslot = Client62ToServerSlot(eq->itemslot); - IN(quantity); - IN(price); - - FINISH_DIRECT_DECODE(); - } - - DECODE(OP_TradeSkillCombine) - { - DECODE_LENGTH_EXACT(structs::NewCombine_Struct); - SETUP_DIRECT_DECODE(NewCombine_Struct, structs::NewCombine_Struct); - - emu->container_slot = Client62ToServerSlot(eq->container_slot); - IN(guildtribute_slot); - - FINISH_DIRECT_DECODE(); - } - - DECODE(OP_TributeItem) - { - DECODE_LENGTH_EXACT(structs::TributeItem_Struct); - SETUP_DIRECT_DECODE(TributeItem_Struct, structs::TributeItem_Struct); - - emu->slot = Client62ToServerSlot(eq->slot); - IN(quantity); - IN(tribute_master_id); - IN(tribute_points); - - FINISH_DIRECT_DECODE(); - } - - DECODE(OP_WearChange) - { - DECODE_LENGTH_EXACT(structs::WearChange_Struct); - SETUP_DIRECT_DECODE(WearChange_Struct, structs::WearChange_Struct); - IN(spawn_id); - IN(material); - IN(color.color); - IN(wear_slot_id); - FINISH_DIRECT_DECODE(); - } - - DECODE(OP_WhoAllRequest) - { - DECODE_LENGTH_EXACT(structs::Who_All_Struct); - SETUP_DIRECT_DECODE(Who_All_Struct, structs::Who_All_Struct); - - memcpy(emu->whom, eq->whom, sizeof(emu->whom)); - IN(wrace); - IN(wclass); - IN(lvllow); - IN(lvlhigh); - IN(gmlookup); - emu->type = 3; - - FINISH_DIRECT_DECODE(); - } - -// file scope helper methods - char *SerializeItem(const ItemInst *inst, int16 slot_id_in, uint32 *length, uint8 depth) - { - char *serialization = nullptr; - char *instance = nullptr; - const char *protection = (const char *)"\\\\\\\\\\"; - char *sub_items[10] = { nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr }; - bool stackable = inst->IsStackable(); - int16 slot_id = ServerToClient62Slot(slot_id_in); - uint32 merchant_slot = inst->GetMerchantSlot(); - int16 charges = inst->GetCharges(); - const Item_Struct *item = inst->GetUnscaledItem(); - int i; - uint32 sub_length; - - // not sure if 6.2 has a recast timer timestamp field..but, something seems amiss between this and Ti's ordering - MakeAnyLenString(&instance, - "%i|%i|%i|%i|%i|%i|%i|%i|%i|%i|", - stackable ? charges : 1, - 0, - //(merchant_slot == 0) ? slot_id : merchant_slot, // change when translator activated - (merchant_slot == 0) ? slot_id_in : merchant_slot, - inst->GetPrice(), - (merchant_slot == 0) ? 1 : inst->GetMerchantCount(), - inst->IsScaling() ? inst->GetExp() / 100 : 0, - //merchant_slot, //instance ID, bullshit for now - // The 'Merchant Slot' needs to be some unique id for bazaar to work properly - (merchant_slot == 0) ? inst->GetSerialNumber() : merchant_slot, - inst->IsAttuned() ? 1 : 0, //not sure where this field is - (stackable ? ((inst->GetItem()->ItemType == ItemTypePotion) ? charges : 0) : charges), - 0 - ); - - for (i = 0; i<10; i++) { - ItemInst *sub = inst->GetItem(i); - if (sub) { - sub_items[i] = SerializeItem(sub, 0, &sub_length, depth + 1); - } - } - - - *length = MakeAnyLenString(&serialization, - "%.*s%s" // For leading quotes (and protection) if a subitem; - "%s" // Instance data - "%.*s\"" // Quotes (and protection, if needed) around static data - "%i" // item->ItemClass so we can do |%s instead of %s| -#define I(field) "|%i" -#define C(field) "|%s" -#define S(field) "|%s" -#define F(field) "|%f" -#include "client62_itemfields.h" - "%.*s\"" // Quotes (and protection, if needed) around static data - "|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s" // Sub items - "%.*s%s" // For trailing quotes (and protection) if a subitem; - , depth ? depth - 1 : 0, protection, (depth) ? "\"" : "" - , instance - , depth, protection - , item->ItemClass -#define I(field) ,item->field -#define C(field) ,field -#define S(field) ,item->field -#define F(field) ,item->field -#include "client62_itemfields.h" - , depth, protection - , sub_items[0] ? sub_items[0] : "" - , sub_items[1] ? sub_items[1] : "" - , sub_items[2] ? sub_items[2] : "" - , sub_items[3] ? sub_items[3] : "" - , sub_items[4] ? sub_items[4] : "" - , sub_items[5] ? sub_items[5] : "" - , sub_items[6] ? sub_items[6] : "" - , sub_items[7] ? sub_items[7] : "" - , sub_items[8] ? sub_items[8] : "" - , sub_items[9] ? sub_items[9] : "" - , (depth) ? depth - 1 : 0, protection, (depth) ? "\"" : "" - ); - - for (i = 0; i < 10; i++) { - if (sub_items[i]) - safe_delete_array(sub_items[i]); - } - - safe_delete_array(instance); - - return serialization; - } - - static inline int16 ServerToClient62Slot(uint32 ServerSlot) - { - //int16 Client62Slot; - if (ServerSlot == INVALID_INDEX) - return INVALID_INDEX; - - return ServerSlot; // deprecated - } - - static inline int16 ServerToClient62CorpseSlot(uint32 ServerCorpse) - { - //int16 Client62Corpse; - return ServerCorpse; - } - - static inline uint32 Client62ToServerSlot(int16 Client62Slot) - { - //uint32 ServerSlot; - if (Client62Slot == INVALID_INDEX) - return INVALID_INDEX; - - return Client62Slot; // deprecated - } - - static inline uint32 Client62ToServerCorpseSlot(int16 Client62Corpse) - { - //uint32 ServerCorpse; - return Client62Corpse; - } -} -// end namespace Client62 diff --git a/common/patches/client62.h b/common/patches/client62.h deleted file mode 100644 index 08d1a9716..000000000 --- a/common/patches/client62.h +++ /dev/null @@ -1,37 +0,0 @@ -#ifndef CLIENT62_H_ -#define CLIENT62_H_ - -#include "../struct_strategy.h" -#include "../item.h" - -class EQStreamIdentifier; - -namespace Client62 { - - //these are the only public member of this namespace. - extern void Register(EQStreamIdentifier &into); - extern void Reload(); - - - - //you should not directly access anything below.. - //I just dont feel like making a seperate header for it. - - class Strategy : public StructStrategy { - public: - Strategy(); - - protected: - - virtual std::string Describe() const; - virtual const EQClientVersion ClientVersion() const; - - //magic macro to declare our opcode processors - #include "ss_declare.h" - #include "client62_ops.h" - - }; - -}; - -#endif /*CLIENT62_H_*/ diff --git a/common/patches/client62_constants.h b/common/patches/client62_constants.h deleted file mode 100644 index 0e672a5de..000000000 --- a/common/patches/client62_constants.h +++ /dev/null @@ -1,212 +0,0 @@ -/* -EQEMu: Everquest Server Emulator - -Copyright (C) 2001-2014 EQEMu Development Team (http://eqemulator.net) - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; version 2 of the License. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY except by those people which sell it, which -are required to give you total support for your newly bought product; -without even the implied warranty of MERCHANTABILITY or FITNESS FOR -A PARTICULAR PURPOSE. See the GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - -*/ - -#ifndef CLIENT62_CONSTANTS_H_ -#define CLIENT62_CONSTANTS_H_ - -#include "../types.h" - -namespace Client62 { - namespace maps { - typedef enum : int16 { - // this needs work to match actual client equivilents - MapPossessions = 0, - MapBank, - MapSharedBank, - MapTrade, - MapWorld, - MapLimbo, - MapTribute, - MapTrophyTribute, - MapGuildTribute, - MapMerchant, - MapDeleted, - MapCorpse, - MapBazaar, - MapInspect, - MapRealEstate, - MapViewMODPC, - MapViewMODBank, - MapViewMODSharedBank, - MapViewMODLimbo, - MapAltStorage, - MapArchived, - MapMail, - MapGuildTrophyTribute, - MapOther, - _MapCount - } InventoryMaps; - } - - namespace slots { - typedef enum : int16 { - MainCharm = 0, - MainEar1, - MainHead, - MainFace, - MainEar2, - MainNeck, - MainShoulders, - MainArms, - MainBack, - MainWrist1, - MainWrist2, - MainRange, - MainHands, - MainPrimary, - MainSecondary, - MainFinger1, - MainFinger2, - MainChest, - MainLegs, - MainFeet, - MainWaist, - MainAmmo, - MainGeneral1, - MainGeneral2, - MainGeneral3, - MainGeneral4, - MainGeneral5, - MainGeneral6, - MainGeneral7, - MainGeneral8, - MainCursor, - _MainCount, - _MainEquipmentBegin = MainCharm, - _MainEquipmentEnd = MainAmmo, - _MainEquipmentCount = (_MainEquipmentEnd - _MainEquipmentBegin + 1), - _MainGeneralBegin = MainGeneral1, - _MainGeneralEnd = MainGeneral8, - _MainGeneralCount = (_MainGeneralEnd - _MainGeneralBegin + 1) - } EquipmentSlots; - } - - namespace consts { - static const uint16 MAP_POSSESSIONS_SIZE = slots::_MainCount; - static const uint16 MAP_BANK_SIZE = 16; - static const uint16 MAP_SHARED_BANK_SIZE = 2; - static const uint16 MAP_TRADE_SIZE = 8; - static const uint16 MAP_WORLD_SIZE = 10; - static const uint16 MAP_LIMBO_SIZE = 36; - static const uint16 MAP_TRIBUTE_SIZE = 0; //? - static const uint16 MAP_TROPHY_TRIBUTE_SIZE = 0; - static const uint16 MAP_GUILD_TRIBUTE_SIZE = 0; - static const uint16 MAP_MERCHANT_SIZE = 0; - static const uint16 MAP_DELETED_SIZE = 0; - static const uint16 MAP_CORPSE_SIZE = slots::_MainCount; - static const uint16 MAP_BAZAAR_SIZE = 80; - static const uint16 MAP_INSPECT_SIZE = slots::_MainEquipmentCount; - static const uint16 MAP_REAL_ESTATE_SIZE = 0; - static const uint16 MAP_VIEW_MOD_PC_SIZE = MAP_POSSESSIONS_SIZE; - static const uint16 MAP_VIEW_MOD_BANK_SIZE = MAP_BANK_SIZE; - static const uint16 MAP_VIEW_MOD_SHARED_BANK_SIZE = MAP_SHARED_BANK_SIZE; - static const uint16 MAP_VIEW_MOD_LIMBO_SIZE = MAP_LIMBO_SIZE; - static const uint16 MAP_ALT_STORAGE_SIZE = 0; - static const uint16 MAP_ARCHIVED_SIZE = 0; - static const uint16 MAP_MAIL_SIZE = 0; - static const uint16 MAP_GUILD_TROPHY_TRIBUTE_SIZE = 0; - static const uint16 MAP_KRONO_SIZE = NOT_USED; - static const uint16 MAP_OTHER_SIZE = 0; - - static const int16 EQUIPMENT_BEGIN = slots::MainCharm; - static const int16 EQUIPMENT_END = slots::MainAmmo; - static const uint16 EQUIPMENT_SIZE = slots::_MainEquipmentCount; - - static const int16 GENERAL_BEGIN = slots::MainGeneral1; - static const int16 GENERAL_END = slots::MainGeneral8; - static const uint16 GENERAL_SIZE = slots::_MainGeneralCount; - static const int16 GENERAL_BAGS_BEGIN = 251; - static const int16 GENERAL_BAGS_END_OFFSET = 79; - static const int16 GENERAL_BAGS_END = GENERAL_BAGS_BEGIN + GENERAL_BAGS_END_OFFSET; - - static const int16 CURSOR = slots::MainCursor; - static const int16 CURSOR_BAG_BEGIN = 331; - static const int16 CURSOR_BAG_END_OFFSET = 9; - static const int16 CURSOR_BAG_END = CURSOR_BAG_BEGIN + CURSOR_BAG_END_OFFSET; - - static const int16 BANK_BEGIN = 2000; - static const int16 BANK_END = 2015; - static const int16 BANK_BAGS_BEGIN = 2031; - static const int16 BANK_BAGS_END_OFFSET = 159; - static const int16 BANK_BAGS_END = BANK_BAGS_BEGIN + BANK_BAGS_END_OFFSET; - - static const int16 SHARED_BANK_BEGIN = 2500; - static const int16 SHARED_BANK_END = 2501; - static const int16 SHARED_BANK_BAGS_BEGIN = 2531; - static const int16 SHARED_BANK_BAGS_END_OFFSET = 19; - static const int16 SHARED_BANK_BAGS_END = SHARED_BANK_BAGS_BEGIN + SHARED_BANK_BAGS_END_OFFSET; - - static const int16 TRADE_BEGIN = 3000; - static const int16 TRADE_END = 3007; - static const int16 TRADE_NPC_END = 3003; - static const int16 TRADE_BAGS_BEGIN = 3031; - static const int16 TRADE_BAGS_END_OFFSET = 79; - static const int16 TRADE_BAGS_END = TRADE_BAGS_BEGIN + TRADE_BAGS_END_OFFSET; - - static const int16 WORLD_BEGIN = 4000; - static const int16 WORLD_END = 4009; - - static const int16 TRIBUTE_BEGIN = 400; - static const int16 TRIBUTE_END = 404; - - static const int16 CORPSE_BEGIN = slots::MainGeneral1; - static const int16 CORPSE_END = slots::MainGeneral1 + slots::MainCursor; - - static const uint16 ITEM_COMMON_SIZE = 5; - static const uint16 ITEM_CONTAINER_SIZE = 10; - - static const uint32 BANDOLIERS_COUNT = 4; // count = number of bandolier instances - static const uint32 BANDOLIER_SIZE = 4; // size = number of equipment slots in bandolier instance - static const uint32 POTION_BELT_SIZE = 4; - } - - namespace limits { - static const bool ALLOWS_EMPTY_BAG_IN_BAG = false; - static const bool ALLOWS_CLICK_CAST_FROM_BAG = false; - static const bool COIN_HAS_WEIGHT = true; - } - -}; //end namespace Client62 - -#endif /*CLIENT62_CONSTANTS_H_*/ - -/* -Client62 Notes: - ** Integer-based inventory ** -ok Possessions: 0 - 30 (Corpse: 22 - 52 [Offset 22]) -ok [Equipment: 0 - 21] -ok [General: 22 - 29] -ok [Cursor: 30] -ok General Bags: 251 - 330 -ok Cursor Bags: 331 - 340 - -ok Bank: 2000 - 2015 -ok Bank Bags: 2031 - 2190 - -ok Shared Bank: 2500 - 2501 -ok Shared Bank Bags: 2531 - 2550 - - Trade: 3000 - 3007 - (Trade Bags: 3031 - 3110 -- server values) - - World: 4000 - 4009 - -*/ diff --git a/common/patches/client62_itemfields.h b/common/patches/client62_itemfields.h deleted file mode 100644 index 22419208b..000000000 --- a/common/patches/client62_itemfields.h +++ /dev/null @@ -1,166 +0,0 @@ -/* - - -These fields must be in the order of how they are serialized! - - - -*/ - - -/* 000 */ //I(ItemClass) Leave this one off on purpose -/* 001 */ S(Name) -/* 002 */ S(Lore) -/* 003 */ S(IDFile) -/* 004 */ I(ID) -/* 005 */ I(Weight) -/* 006 */ I(NoRent) -/* 007 */ I(NoDrop) -/* 008 */ I(Size) -/* 009 */ I(Slots) -/* 010 */ I(Price) -/* 011 */ I(Icon) -/* 012 */ C("0") -/* 013 */ C("0") -/* 014 */ I(BenefitFlag) -/* 015 */ I(Tradeskills) -/* 016 */ I(CR) -/* 017 */ I(DR) -/* 018 */ I(PR) -/* 019 */ I(MR) -/* 020 */ I(FR) -/* 021 */ I(AStr) -/* 022 */ I(ASta) -/* 023 */ I(AAgi) -/* 024 */ I(ADex) -/* 025 */ I(ACha) -/* 026 */ I(AInt) -/* 027 */ I(AWis) -/* 028 */ I(HP) -/* 029 */ I(Mana) -/* 030 */ I(AC) -/* 031 */ I(Deity) -/* 032 */ C("0") -/* 033 */ I(SkillModValue) -/* 034 */ I(SkillModType) -/* 035 */ I(BaneDmgRace) -/* 036 */ I(BaneDmgAmt) -/* 037 */ I(BaneDmgBody) -/* 038 */ I(Magic) -/* 039 */ I(CastTime_) -/* 040 */ I(ReqLevel) -/* 041 */ I(BardType) -/* 042 */ I(BardValue) -/* 043 */ I(Light) -/* 044 */ I(Delay) -/* 045 */ I(RecLevel) -/* 046 */ I(RecSkill) -/* 047 */ I(ElemDmgType) -/* 048 */ I(ElemDmgAmt) -/* 049 */ I(Range) -/* 050 */ I(Damage) -/* 051 */ I(Color) -/* 052 */ I(Classes) -/* 053 */ I(Races) -/* 054 */ C("0") -/* 055 */ I(MaxCharges) -/* 056 */ I(ItemType) -/* 057 */ I(Material) -/* 058 */ F(SellRate) -/* 059 */ C("0") -/* 060 */ I(CastTime_) -/* 061 */ C("0") -/* 062 */ I(ProcRate) -/* 063 */ I(CombatEffects) -/* 064 */ I(Shielding) -/* 065 */ I(StunResist) -/* 066 */ I(StrikeThrough) -/* 067 */ I(ExtraDmgSkill) -/* 068 */ I(ExtraDmgAmt) -/* 069 */ I(SpellShield) -/* 070 */ I(Avoidance) -/* 071 */ I(Accuracy) -/* 072 */ I(CharmFileID) -/* 073 */ I(FactionMod1) -/* 074 */ I(FactionMod2) -/* 075 */ I(FactionMod3) -/* 076 */ I(FactionMod4) -/* 077 */ I(FactionAmt1) -/* 078 */ I(FactionAmt2) -/* 079 */ I(FactionAmt3) -/* 080 */ I(FactionAmt4) -/* 081 */ S(CharmFile) -/* 082 */ I(AugType) -/* 083 */ I(AugSlotType[0]) -/* 084 */ I(AugSlotType[1]) -/* 085 */ I(AugSlotType[2]) -/* 086 */ I(AugSlotType[3]) -/* 087 */ I(AugSlotType[4]) -/* 088 */ I(LDoNTheme) -/* 089 */ I(LDoNPrice) -/* 090 */ I(LDoNSold) -/* 091 */ I(BagType) -/* 092 */ I(BagSlots) -/* 093 */ I(BagSize) -/* 094 */ I(BagWR) -/* 095 */ I(Book) -/* 096 */ I(BookType) -/* 097 */ S(Filename) -/* 098 */ I(BaneDmgRaceAmt) -/* 099 */ I(AugRestrict) -/* 100 */ I(LoreFlag) -/* 101 */ I(PendingLoreFlag) -/* 102 */ I(ArtifactFlag) -/* 103 */ I(SummonedFlag) -/* 104 */ I(Favor) -/* 105 */ I(FVNoDrop) -/* 106 */ I(Endur) -/* 107 */ I(DotShielding) -/* 108 */ I(Attack) -/* 109 */ I(Regen) -/* 110 */ I(ManaRegen) -/* 111 */ I(Haste) -/* 112 */ I(DamageShield) -/* 113 */ I(RecastDelay) -/* 114 */ I(RecastType) -/* 115 */ I(GuildFavor) -/* 116 */ I(AugDistiller) -/* 117 */ C("0") -/* 118 */ C("0") -/* 119 */ I(Attuneable) -/* 120 */ I(NoPet) -/* 121 */ C("0") -/* 122 */ I(PointType) -/* 123 */ I(PotionBelt) -/* 124 */ I(PotionBeltSlots) -/* 125 */ I(StackSize) -/* 126 */ I(Click.Effect) -/* 127 */ I(Click.Type) -/* 128 */ I(Click.Level2) -/* 129 */ I(Click.Level) -/* 130 */ C("0") -/* 131 */ I(Proc.Effect) -/* 132 */ I(Proc.Type) -/* 133 */ I(Proc.Level2) -/* 134 */ I(Proc.Level) -/* 135 */ C("0") -/* 136 */ I(Worn.Effect) -/* 137 */ I(Worn.Type) -/* 138 */ I(Worn.Level2) -/* 139 */ I(Worn.Level) -/* 140 */ C("0") -/* 141 */ I(Focus.Effect) -/* 142 */ I(Focus.Type) -/* 143 */ I(Focus.Level2) -/* 144 */ I(Focus.Level) -/* 145 */ C("0") -/* 146 */ I(Scroll.Effect) -/* 147 */ I(Scroll.Type) -/* 148 */ I(Scroll.Level2) -/* 149 */ I(Scroll.Level) -/* 150 */ C("0") -#undef I -#undef C -#undef S -#undef F - diff --git a/common/patches/client62_ops.h b/common/patches/client62_ops.h deleted file mode 100644 index eb7ff2205..000000000 --- a/common/patches/client62_ops.h +++ /dev/null @@ -1,54 +0,0 @@ -// out-going packets that require an ENCODE translation: -E(OP_Action) -E(OP_AdventureMerchantSell) -E(OP_ApplyPoison) -E(OP_BazaarSearch) -E(OP_BecomeTrader) -E(OP_CharInventory) -E(OP_DeleteCharge) -E(OP_DeleteItem) -E(OP_DeleteSpawn) -E(OP_GuildMemberLevelUpdate) -E(OP_GuildMemberList) -E(OP_Illusion) -E(OP_ItemLinkResponse) -E(OP_ItemPacket) -E(OP_LeadershipExpUpdate) -E(OP_LootItem) -E(OP_MoveItem) -E(OP_NewSpawn) -E(OP_OnLevelMessage) -E(OP_PetBuffWindow) -E(OP_PlayerProfile) -E(OP_ReadBook) -E(OP_RespondAA) -E(OP_SendAATable) -E(OP_SendCharInfo) -E(OP_ShopPlayerSell) -E(OP_Track) -E(OP_TributeItem) -E(OP_WearChange) -E(OP_ZoneEntry) -E(OP_ZoneServerReady) -E(OP_ZoneSpawns) -// incoming packets that require a DECODE translation: -D(OP_AdventureMerchantSell) -D(OP_ApplyPoison) -D(OP_AugmentItem) -D(OP_CastSpell) -D(OP_CharacterCreate) -D(OP_Consume) -D(OP_DeleteItem) -D(OP_FaceChange) -D(OP_ItemLinkClick) -D(OP_LootItem) -D(OP_MoveItem) -D(OP_ReadBook) -D(OP_SetServerFilter) -D(OP_ShopPlayerSell) -D(OP_TradeSkillCombine) -D(OP_TributeItem) -D(OP_WearChange) -D(OP_WhoAllRequest) -#undef E -#undef D diff --git a/common/patches/client62_structs.h b/common/patches/client62_structs.h deleted file mode 100644 index 691eeba21..000000000 --- a/common/patches/client62_structs.h +++ /dev/null @@ -1,3163 +0,0 @@ -#ifndef CLIENT62_STRUCTS_H_ -#define CLIENT62_STRUCTS_H_ - -namespace Client62 { - namespace structs { - - -static const uint32 BUFF_COUNT = 25; -/* -** Compiler override to ensure -** byte aligned structures -*/ -#pragma pack(1) - -struct LoginInfo_Struct { -/*000*/ char login_info[64]; -/*064*/ uint8 unknown064[124]; -/*188*/ uint8 zoning; // 01 if zoning, 00 if not -/*189*/ uint8 unknown189[275]; -/*488*/ -}; - -struct EnterWorld_Struct { -/*000*/ char name[64]; -/*064*/ uint32 tutorial; // 01 on "Enter Tutorial", 00 if not -/*068*/ uint32 return_home; // 01 on "Return Home", 00 if not -}; - -/* Name Approval Struct */ -/* Len: */ -/* Opcode: 0x8B20*/ -struct NameApproval -{ - char name[64]; - uint32 race; - uint32 class_; - uint32 deity; -}; - -/* -** Entity identification struct -** Size: 4 bytes -** OPCodes: OP_DeleteSpawn, OP_Assist -*/ -struct EntityId_Struct -{ -/*00*/ uint32 entity_id; -/*04*/ -}; - -struct Duel_Struct -{ - uint32 duel_initiator; - uint32 duel_target; -}; - -struct DuelResponse_Struct -{ - uint32 target_id; - uint32 entity_id; - uint32 unknown; -}; -/* - Cofruben: - Adventure stuff,not a net one,just one for our use -*/ -static const uint32 ADVENTURE_COLLECT = 0; -static const uint32 ADVENTURE_MASSKILL = 1; -static const uint32 ADVENTURE_NAMED = 2; -static const uint32 ADVENTURE_RESCUE = 3; - -struct AdventureInfo { - uint32 QuestID; - uint32 NPCID; - bool in_use; - uint32 status; - bool ShowCompass; - uint32 Objetive;// can be item to collect,mobs to kill,boss to kill and someone to rescue. - uint32 ObjetiveValue;// number of items,or number of needed mob kills. - char text[512]; - uint8 type; - uint32 minutes; - uint32 points; - float x; - float y; - uint32 zoneid; - uint32 zonedungeonid; -}; -/////////////////////////////////////////////////////////////////////////////// - - -/* -** Color_Struct -** Size: 4 bytes -** Used for convenience -** Merth: Gave struct a name so gcc 2.96 would compile -** -*/ -struct Color_Struct -{ - union - { - struct - { - uint8 blue; - uint8 green; - uint8 red; - uint8 use_tint; // if there's a tint this is FF - } rgb; - uint32 color; - }; -}; - -/* -** Character Selection Struct -** Length: 1676 Bytes -** -*/ -struct CharacterSelect_Struct { -/*0000*/ uint32 zone[10]; // Characters Current Zone -/*0040*/ uint8 eyecolor1[10]; // Characters Eye Color -/*0050*/ uint8 eyecolor2[10]; // Characters Eye 2 Color -/*0060*/ uint8 hairstyle[10]; // Characters hair style -/*0070*/ uint8 unknown0070[2]; -/*0072*/ uint32 primary[10]; // Characters primary IDFile number -/*0112*/ uint32 race[10]; // Characters Race -/*0152*/ uint8 class_[10]; // Characters Classes -/*0162*/ char name[10][64]; // Characters Names -/*0802*/ uint8 gender[10]; // Characters Gender -/*0812*/ uint8 level[10]; // Characters Levels -/*0822*/ uint8 unknown0822[2]; -/*0824*/ uint32 secondary[10]; // Characters secondary IDFile number -/*0864*/ uint8 face[10]; // Characters Face Type -/*0874*/ uint8 beard[10]; // Characters Beard Type -/*0884*/ uint32 equip[10][9]; // 0=helm, 1=chest, 2=arm, 3=bracer, 4=hand, 5=leg, 6=boot, 7=melee1, 8=melee2 (Might not be) -/*1244*/ uint8 haircolor[10]; // Characters Hair Color -/*1254*/ uint8 gohome[10]; // 1=Go Home available, 0=not -/*1264*/ Color_Struct cs_colors[10][9]; // Characters Equipment Colors -/*1624*/ uint32 deity[10]; // Characters Deity -/*1664*/ uint8 beardcolor[10]; // Characters beard Color -/*1674*/ uint8 unknown1674[2]; -/*1676*/ -}; - -/* -** Generic Spawn Struct -** Length: 257 Bytes -** Fields from old struct not yet found: -** float size; -** float walkspeed; // probably one of the ff 33 33 33 3f -** float runspeed; // probably one of the ff 33 33 33 3f -** uint8 traptype; // 65 is disarmable trap, 66 and 67 are invis triggers/traps -** uint8 npc_armor_graphic; // 0xFF=Player, 0=none, 1=leather, 2=chain, 3=steelplate -** uint8 npc_helm_graphic; // 0xFF=Player, 0=none, 1=leather, 2=chain, 3=steelplate -** -*/ - -/* -** Generic Spawn Struct -** Length: 383 Octets -** Used in: -** spawnZoneStruct -** dbSpawnStruct -** petStruct -** newSpawnStruct -*/ -struct Spawn_Struct -{ -/*0000*/ uint8 NPC; // 0=player,1=npc,2=pc corpse,3=npc corpse,a -/*0001*/ uint8 set_to_0xFF[8]; // ***Placeholder (all ff) -/*0009*/ uint8 curHp; // Current hp -/*0010*/ char lastName[32]; // Player's Lastname -/*0042*/ uint8 bodytype; // Bodytype -/*0043*/ uint8 unknown0042[7]; -/*0050*/ uint32 petOwnerId; // If this is a pet, the spawn id of owner -/*0054*/ signed deltaHeading:10;// change in heading - signed x:19; // x coord - signed padding0054:3; // ***Placeholder -/*0058*/ signed y:19; // y coord - signed animation:10; // ***Placeholder (seems like speed) - signed padding0058:3; // animation -/*0062*/ signed z:19; // z coord - signed deltaY:13; // change in y -/*0066*/ signed deltaX:13; // change in x - unsigned heading:12; // heading - signed padding0066:7; // ***Placeholder -/*0070*/ signed deltaZ:13; // change in z - signed padding0070:19; // ***Placeholder -/*0074*/ uint16 deity; // Player's Deity -/*0076*/ uint8 unknown[2]; -/*0078*/ union - { - struct - { - /*0078*/ uint32 equip_helmet; // Equipment: Helmet Visual - /*0082*/ uint32 equip_chest; // Equipment: Chest Visual - /*0086*/ uint32 equip_arms; // Equipment: Arms Visual - /*0090*/ uint32 equip_bracers; // Equipment: Bracers Visual - /*0094*/ uint32 equip_hands; // Equipment: Hands Visual - /*0098*/ uint32 equip_legs; // Equipment: Legs Visual - /*0102*/ uint32 equip_feet; // Equipment: Feet Visual - /*0106*/ uint32 equip_primary; // Equipment: Primary Visual - /*0110*/ uint32 equip_secondary; // Equipment: Secondary Visual - } equip; - /*0078*/ uint32 equipment[9]; // Array elements correspond to struct equipment above - }; -/*0114*/ uint8 unknown0114[5]; -/*0119*/ uint8 afk; // 0=no, 1=afk -/*0120*/ uint32 spawnId; // Spawn Id -/*0124*/ uint8 is_pet; // 0=no, 1=yes -/*0125*/ uint8 gm; // 0=no, 1=gm -/*0126*/ uint8 unknown0126[4]; -/*0130*/ uint8 aaitle; // 0=none, 1=general, 2=archtype, 3=class -/*0131*/ uint8 unknown0132[24]; -/*0155*/ uint8 anon; // 0=normal, 1=anon, 2=roleplay -/*0156*/ uint8 unknown0156; -/*0157*/ uint8 face; // Face id for players -/*0159*/ uint8 helm; -/*0159*/ uint8 unknown0159; -/*0160*/ float runspeed; // Speed when running -/*0164*/ uint8 eyecolor1; // Player's left eye color -/*0165*/ uint8 beard; //not 100% verified, but slightly verified -/*0166*/ uint8 is_npc; // 0=no, 1=yes -/*0167*/ uint8 flymode; //seems to be 3 for 'useable' npc classes -/*0168*/ uint32 guildID; // Current guild -/*0172*/ union - { - struct - { - /*0172*/ Color_Struct color_helmet; // Color of helmet item - /*0176*/ Color_Struct color_chest; // Color of chest item - /*0180*/ Color_Struct color_arms; // Color of arms item - /*0184*/ Color_Struct color_bracers; // Color of bracers item - /*0188*/ Color_Struct color_hands; // Color of hands item - /*0192*/ Color_Struct color_legs; // Color of legs item - /*0196*/ Color_Struct color_feet; // Color of feet item - /*0200*/ Color_Struct color_primary; // Color of primary item - /*0204*/ Color_Struct color_secondary; // Color of secondary item - } equipment_colors; - /*0172*/ Color_Struct colors[9]; // Array elements correspond to struct equipment_colors above - }; -/*0208*/ uint8 hairstyle; -/*0209*/ float walkspeed; // Speed when walking -/*0213*/ uint8 unknown0213[3]; -/*0216*/ uint8 class_; // Player's class -/*0217*/ uint8 beardcolor; // Beard color -/*0218*/ float size; // Model size -/*0222*/ uint8 findable; // 0=can't be found, 1=can be found -/*0223*/ float unknown_float; -/*0227*/ char suffix[32]; // Player's suffix (of Veeshan, etc.) -/*0259*/ uint8 unknown0259[4]; //[0] is sometimes 100 -/*0263*/ uint8 guildrank; // 0=normal, 1=officer, 2=leader -/*0264*/ uint8 unknown0264[3]; -union -{ -/*0267*/ uint8 equip_chest2; // Second place in packet for chest texture (usually 0xFF in live packets) - // Not sure why there are 2 of them, but it effects chest texture! -/*0267*/ uint8 mount_color; // drogmor: 0=white, 1=black, 2=green, 3=red - // horse: 0=brown, 1=white, 2=black, 3=tan -}; -/*0268*/ uint32 race; // Spawn race -/*0272*/ uint8 invis; // Invis (0=not, 1=invis) -/*0273*/ uint8 unknown0276[5]; -/*0278*/ uint8 lfg; // 0=off, 1=lfg on -/*0279*/ uint8 level; // Spawn Level -/*0280*/ uint8 haircolor; // Hair color -/*0281*/ uint8 max_hp; //(name prolly wrong)takes on the value 100 for players, 100 or 110 for NPCs and 120 for PC corpses... -/*0282*/ uint8 light; // Spawn's lightsource -/*0283*/ uint8 gender; // Gender (0=male, 1=female) -/*0284*/ char name[64]; // Player's Name -/*0348*/ uint8 eyecolor2; // Left eye color -/*0349*/ char title[32]; // Title -/*0381*/ uint8 unknown0381[2]; -}; /*0383*/ - -/* -** New Spawn -** Length: 176 Bytes -** OpCode: 4921 -*/ -struct NewSpawn_Struct -{ - struct Spawn_Struct spawn; // Spawn Information -}; - -struct ClientZoneEntry_Struct { -/*0000*/ uint32 unknown00; -/*0004*/ char char_name[64]; // Character Name -}; - -/* -** Server Zone Entry Struct -** Length: 452 Bytes -** OPCodes: OP_ServerZoneEntry -** -*/ -struct ServerZoneEntry_Struct -{ - struct NewSpawn_Struct player; -}; - -struct NewZone_Struct { -/*0000*/ char char_name[64]; // Character Name -/*0064*/ char zone_short_name[32]; // Zone Short Name -/*0096*/ char zone_long_name[278]; // Zone Long Name -/*0374*/ uint8 ztype; // Zone type (usually FF) -/*0375*/ uint8 fog_red[4]; // Zone fog (red) -/*0379*/ uint8 fog_green[4]; // Zone fog (green) -/*0383*/ uint8 fog_blue[4]; // Zone fog (blue) -/*0387*/ uint8 unknown323; -/*0388*/ float fog_minclip[4]; -/*0404*/ float fog_maxclip[4]; -/*0420*/ float gravity; -/*0424*/ uint8 time_type; -/*0425*/ uint8 rain_chance[4]; -/*0429*/ uint8 rain_duration[4]; -/*0433*/ uint8 snow_chance[4]; -/*0437*/ uint8 snow_duration[4]; -/*0441*/ uint8 unknown360[33]; -/*0474*/ uint8 sky; // Sky Type -/*0475*/ uint8 unknown331[13]; // ***Placeholder -/*0488*/ float zone_exp_multiplier; // Experience Multiplier -/*0492*/ float safe_y; // Zone Safe Y -/*0496*/ float safe_x; // Zone Safe X -/*0500*/ float safe_z; // Zone Safe Z -/*0504*/ float max_z; // Guessed -/*0508*/ float underworld; // Underworld, min z (Not Sure?) -/*0512*/ float minclip; // Minimum View Distance -/*0516*/ float maxclip; // Maximum View DIstance -/*0520*/ uint8 unknown_end[84]; // ***Placeholder -/*0604*/ char zone_short_name2[68]; -/*0672*/ char unknown672[12]; -/*0684*/ uint16 zone_id; -/*0686*/ uint16 zone_instance; -/*0688*/ uint32 unknown688; -/*0682*/ uint8 unknown692[4]; -}; - -/* -** Memorize Spell Struct -** Length: 12 Bytes -** -*/ -struct MemorizeSpell_Struct { -uint32 slot; // Spot in the spell book/memorized slot -uint32 spell_id; // Spell id (200 or c8 is minor healing, etc) -uint32 scribing; // 1 if memorizing a spell, set to 0 if scribing to book, 2 if un-memming -uint32 unknown12; -}; - -/* -** Make Charmed Pet -** Length: 12 Bytes -** -*/ -struct Charm_Struct { -/*00*/ uint32 owner_id; -/*04*/ uint32 pet_id; -/*08*/ uint32 command; // 1: make pet, 0: release pet -/*12*/ -}; - -struct InterruptCast_Struct -{ - uint32 spawnid; - uint32 messageid; - char message[0]; -}; - -struct DeleteSpell_Struct -{ -/*000*/int16 spell_slot; -/*002*/uint8 unknowndss002[2]; -/*004*/uint8 success; -/*005*/uint8 unknowndss006[3]; -/*008*/ -}; - -struct ManaChange_Struct -{ - uint32 new_mana; // New Mana AMount - uint32 stamina; - uint32 spell_id; - uint32 unknown12; -}; - -struct SwapSpell_Struct -{ - uint32 from_slot; - uint32 to_slot; - - -}; - -struct BeginCast_Struct -{ - // len = 8 -/*000*/ uint16 caster_id; -/*002*/ uint16 spell_id; -/*004*/ uint32 cast_time; // in miliseconds -}; - -struct CastSpell_Struct -{ - uint32 slot; - uint32 spell_id; - uint32 inventoryslot; // slot for clicky item, 0xFFFF = normal cast - uint32 target_id; - uint8 cs_unknown[4]; -}; - -/* -** SpawnAppearance_Struct -** Changes client appearance for all other clients in zone -** Size: 8 bytes -** Used in: OP_SpawnAppearance -** -*/ -struct SpawnAppearance_Struct -{ -/*0000*/ uint16 spawn_id; // ID of the spawn -/*0002*/ uint16 type; // Values associated with the type -/*0004*/ uint32 parameter; // Type of data sent -/*0008*/ -}; - - -// solar: this is used inside profile -struct SpellBuff_Struct -{ -/*000*/ uint8 slotid; //badly named... seems to be 2 for a real buff, 0 otherwise -/*001*/ uint8 level; -/*002*/ uint8 bard_modifier; -/*003*/ uint8 effect; //not real -/*004*/ uint32 spellid; -/*008*/ uint32 duration; -/*012*/ uint32 counters; -/*014*/ uint8 Unknown012[4]; -}; - -struct SpellBuffFade_Struct { -/*000*/ uint32 entityid; -/*004*/ uint8 slot; -/*005*/ uint8 level; -/*006*/ uint8 effect; -/*007*/ uint8 unknown7; -/*008*/ uint32 spellid; -/*012*/ uint32 duration; -/*016*/ uint32 unknown016; -/*020*/ uint32 unknown020; //prolly global player ID -/*024*/ uint32 slotid; -/*028*/ uint32 bufffade; -/*032*/ -}; - -struct ItemNamePacket_Struct { -/*000*/ uint32 item_id; -/*004*/ uint32 unkown004; -/*008*/ char name[64]; -/*072*/ -}; - -// Length: 10 -struct ItemProperties_Struct { - -uint8 unknown01[2]; -uint8 charges; -uint8 unknown02[13]; -}; - -struct GMTrainee_Struct -{ - /*000*/ uint32 npcid; - /*004*/ uint32 playerid; - /*008*/ uint32 skills[PACKET_SKILL_ARRAY_SIZE]; - /*408*/ uint8 unknown408[40]; - /*448*/ -}; - -struct GMTrainEnd_Struct -{ - /*000*/ uint32 npcid; - /*004*/ uint32 playerid; - /*008*/ -}; - -struct GMSkillChange_Struct { -/*000*/ uint16 npcid; -/*002*/ uint8 unknown1[2]; // something like PC_ID, but not really. stays the same thru the session though -/*002*/ uint16 skillbank; // 0 if normal skills, 1 if languages -/*002*/ uint8 unknown2[2]; -/*008*/ uint16 skill_id; -/*010*/ uint8 unknown3[2]; -}; -struct ConsentResponse_Struct { - char grantname[64]; - char ownername[64]; - uint8 permission; - char zonename[32]; -}; - -/* -** Name Generator Struct -** Length: 72 bytes -** OpCode: 0x0290 -*/ -struct NameGeneration_Struct -{ -/*0000*/ uint32 race; -/*0004*/ uint32 gender; -/*0008*/ char name[64]; -/*0072*/ -}; - -/* -** Character Creation struct -** Length: 140 Bytes -** OpCode: 0x0113 -*/ -struct CharCreate_Struct -{ - /*0000*/ uint32 class_; //guess - /*0004*/ char name[64]; - /*0068*/ uint32 beardcolor; // credit goes to vesuvias for appearance stuff - /*0072*/ uint32 beard; - /*0076*/ uint32 haircolor; - /*0080*/ int32 gender; - /*0084*/ int32 race; - /*0088*/ int32 start_zone; - /*0092*/ int32 hairstyle; - /*0096*/ uint32 deity; - ///*0072*/ int32 deity; - - - // 0 = odus - // 1 = qeynos - // 2 = halas - // 3 = rivervale - // 4 = freeport - // 5 = neriak - // 6 = gukta/grobb - // 7 = ogguk - // 8 = kaladim - // 9 = gfay - // 10 = felwithe - // 11 = akanon - // 12 = cabalis - // 13 = shar vahl - - -/*0100*/ int32 STR; -/*0104*/ int32 STA; -/*0108*/ int32 AGI; -/*0112*/ int32 DEX; -/*0116*/ int32 WIS; -/*0120*/ int32 INT; -/*0124*/ int32 CHA; -/*0128*/ uint32 face; -/*0132*/ uint32 eyecolor1; //its possiable we could have these switched -/*0136*/ uint32 eyecolor2; //since setting one sets the other we really can't check -/*0140*/ uint32 tutorial; //assumptions are bad! But guessed -}; - -/* - *Used in PlayerProfile - */ -struct AA_Array -{ - uint32 AA; - uint32 value; -}; - - -static const uint32 MAX_PP_DISCIPLINES = 100; - -struct Disciplines_Struct { - uint32 values[MAX_PP_DISCIPLINES]; -}; - -static const uint32 MAX_PLAYER_TRIBUTES = 5; -static const uint32 MAX_PLAYER_BANDOLIER = 4; -static const uint32 MAX_PLAYER_BANDOLIER_ITEMS = 4; -static const uint32 TRIBUTE_NONE = 0xFFFFFFFF; -struct Tribute_Struct { - uint32 tribute; - uint32 tier; -}; - -//len = 72 -struct BandolierItem_Struct { - uint32 item_id; - uint32 icon; - char item_name[64]; -}; - -//len = 320 -enum { //bandolier item positions - bandolierMainHand = 0, - bandolierOffHand, - bandolierRange, - bandolierAmmo -}; -struct Bandolier_Struct { - char name[32]; - BandolierItem_Struct items[MAX_PLAYER_BANDOLIER_ITEMS]; -}; -struct PotionBelt_Struct { - BandolierItem_Struct items[MAX_PLAYER_BANDOLIER_ITEMS]; -}; - -static const uint32 MAX_GROUP_LEADERSHIP_AA_ARRAY = 16; -static const uint32 MAX_RAID_LEADERSHIP_AA_ARRAY = 16; -static const uint32 MAX_LEADERSHIP_AA_ARRAY = (MAX_GROUP_LEADERSHIP_AA_ARRAY+MAX_RAID_LEADERSHIP_AA_ARRAY); -struct GroupLeadershipAA_Struct { - union { - struct { - uint32 groupAAMarkNPC; - uint32 groupAANPCHealth; - uint32 groupAADelegateMainAssist; - uint32 groupAADelegateMarkNPC; - uint32 groupAA4; - uint32 groupAA5; - uint32 groupAAInspectBuffs; - uint32 groupAA7; - uint32 groupAASpellAwareness; - uint32 groupAAOffenseEnhancement; - uint32 groupAAManaEnhancement; - uint32 groupAAHealthEnhancement; - uint32 groupAAHealthRegeneration; - uint32 groupAAFindPathToPC; - uint32 groupAAHealthOfTargetsTarget; - uint32 groupAA15; - }; - uint32 ranks[MAX_GROUP_LEADERSHIP_AA_ARRAY]; - }; -}; - -struct RaidLeadershipAA_Struct { - union { - struct { - uint32 raidAAMarkNPC; - uint32 raidAANPCHealth; - uint32 raidAADelegateMainAssist; - uint32 raidAADelegateMarkNPC; - uint32 raidAA4; - uint32 raidAA5; - uint32 raidAA6; - uint32 raidAASpellAwareness; - uint32 raidAAOffenseEnhancement; - uint32 raidAAManaEnhancement; - uint32 raidAAHealthEnhancement; - uint32 raidAAHealthRegeneration; - uint32 raidAAFindPathToPC; - uint32 raidAAHealthOfTargetsTarget; - uint32 raidAA14; - uint32 raidAA15; - }; - uint32 ranks[MAX_RAID_LEADERSHIP_AA_ARRAY]; - }; -}; - -struct LeadershipAA_Struct { - union { - struct { - GroupLeadershipAA_Struct group; - RaidLeadershipAA_Struct raid; - }; - uint32 ranks[MAX_LEADERSHIP_AA_ARRAY]; - }; -}; - -/* -** Player Profile -** -** Length: 4308 bytes -** OpCode: 0x006a - */ -static const uint32 MAX_PP_LANGUAGE = 28; -static const uint32 MAX_PP_SPELLBOOK = 400; -static const uint32 MAX_PP_MEMSPELL = 9; -static const uint32 MAX_PP_SKILL = PACKET_SKILL_ARRAY_SIZE; // 100 - actual skills buffer size -static const uint32 MAX_PP_AA_ARRAY = 240; -static const uint32 MAX_GROUP_MEMBERS = 6; -struct PlayerProfile_Struct -{ -/*0000*/ uint32 checksum; // Checksum from CRC32::SetEQChecksum -/*0004*/ char name[64]; // Name of player sizes not right -/*0068*/ char last_name[32]; // Last name of player sizes not right -/*0100*/ uint32 gender; // Player Gender - 0 Male, 1 Female -/*0104*/ uint32 race; // Player race -/*0108*/ uint32 class_; // Player class -/*0112*/ uint32 unknown0112; // -/*0116*/ uint32 level; // Level of player (might be one byte) -/*0120*/ uint32 bind_zone_id; // Zone player is bound in -/*0124*/ uint32 unknown0124[4]; -/*0140*/ float bind_x[4]; // Bind loc x coord -/*0156*/ float zone_safe_x; -/*0160*/ float bind_y[4]; // Bind loc y coord -/*0176*/ float zone_safe_y; -/*0180*/ float bind_z[4]; // Bind loc z coord -/*0196*/ float zone_safe_z; -/*0200*/ float bind_heading[4]; // -/*0216*/ float zone_safe_heading; -/*0220*/ uint32 deity; // deity -/*0224*/ uint32 guild_id; -/*0228*/ uint32 birthday; // characters bday -/*0232*/ uint32 lastlogin; // last login or zone time -/*0236*/ uint32 timePlayedMin; // in minutes -/*0240*/ uint8 pvp; -/*0241*/ uint8 level2; //no idea why this is here, but thats how it is on live -/*0242*/ uint8 anon; // 2=roleplay, 1=anon, 0=not anon -/*0243*/ uint8 gm; -/*0244*/ uint8 guildrank; -/*0245*/ uint8 unknown0245[7]; // -/*0252*/ uint32 intoxication; -/*0256*/ uint32 spellSlotRefresh[MAX_PP_MEMSPELL]; //in ms -/*0292*/ uint32 abilitySlotRefresh; -/*0296*/ uint8 haircolor; // Player hair color -/*0297*/ uint8 beardcolor; // Player beard color -/*0298*/ uint8 eyecolor1; // Player left eye color -/*0299*/ uint8 eyecolor2; // Player right eye color -/*0300*/ uint8 hairstyle; // Player hair style -/*0301*/ uint8 beard; // Beard type -/*0302*/ uint8 ability_time_seconds; //The following four spots are unknown right now..... -/*0303*/ uint8 ability_number; //ability used -/*0304*/ uint8 ability_time_minutes; -/*0305*/ uint8 ability_time_hours;//place holder -/*0306*/ uint8 unknown0306[6]; // @bp Spacer/Flag? -/*0312*/ uint32 item_material[9]; // Item texture/material of worn/held items -/*0348*/ uint8 unknown0256[44]; -/*0396*/ Color_Struct item_tint[9]; -/*0432*/ AA_Array aa_array[MAX_PP_AA_ARRAY]; -/*2348*/ float unknown2348; //seen ~128, ~47 -/*2352*/ char servername[32]; // length probably not right -/*2384*/ char title[32]; //length might be wrong -/*2416*/ char suffix[32]; //length might be wrong -/*2448*/ uint32 guildid2; // -/*2452*/ uint32 exp; // Current Experience -/*2456*/ uint32 unknown1496; -/*2460*/ uint32 points; // Unspent Practice points -/*2464*/ uint32 mana; // current mana -/*2468*/ uint32 cur_hp; // current hp -/*2472*/ uint32 unknown1512; // 0x05 -/*2476*/ uint32 STR; // Strength -/*2480*/ uint32 STA; // Stamina -/*2484*/ uint32 CHA; // Charisma -/*2488*/ uint32 DEX; // Dexterity -/*2492*/ uint32 INT; // Intelligence -/*2496*/ uint32 AGI; // Agility -/*2500*/ uint32 WIS; // Wisdom -/*2504*/ uint8 face; // Player face -/*2505*/ uint8 unknown1545[47]; // ? -/*2552*/ uint8 languages[MAX_PP_LANGUAGE]; -/*2580*/ uint8 unknown1620[4]; -/*2584*/ uint32 spell_book[MAX_PP_SPELLBOOK]; -/*4184*/ uint8 unknown3224[448]; // all 0xff -/*4632*/ uint32 mem_spells[MAX_PP_MEMSPELL]; -/*4668*/ uint8 unknown3704[32]; // -/*4700*/ float y; // Player y position -/*4704*/ float x; // Player x position -/*4708*/ float z; // Player z position -/*4712*/ float heading; // Direction player is facing -/*4716*/ uint8 unknown3756[4]; // -/*4720*/ int32 platinum; // Platinum Pieces on player -/*4724*/ int32 gold; // Gold Pieces on player -/*4728*/ int32 silver; // Silver Pieces on player -/*4732*/ int32 copper; // Copper Pieces on player -/*4736*/ int32 platinum_bank; // Platinum Pieces in Bank -/*4740*/ int32 gold_bank; // Gold Pieces in Bank -/*4744*/ int32 silver_bank; // Silver Pieces in Bank -/*4748*/ int32 copper_bank; // Copper Pieces in Bank -/*4752*/ int32 platinum_cursor; // Platinum on cursor -/*4756*/ int32 gold_cursor; // Gold on cursor -/*4760*/ int32 silver_cursor; // Silver on cursor -/*4764*/ int32 copper_cursor; // Copper on cursor -/*4768*/ int32 platinum_shared; // Platinum shared between characters -/*4772*/ uint8 unknown3812[24]; -/*4796*/ uint32 skills[MAX_PP_SKILL]; // 100 dword buffer -/*5196*/ uint8 unknown5096[184]; -/*5380*/ uint32 pvp2; // -/*5384*/ uint32 unknown4420; // -/*5388*/ uint32 pvptype; // -/*5392*/ uint32 unknown4428; // -/*5396*/ uint32 ability_down; // Doodman - Guessing -/*5400*/ uint8 unknown4436[8]; // -/*5408*/ uint32 autosplit; //not used right now -/*5412*/ uint8 unknown4448[8]; -/*5420*/ uint32 zone_change_count; // Number of times user has zoned in their career (guessing) -/*5424*/ uint8 unknown4460[28]; // -/*5452*/ uint32 expansions; // expansion setting, bit field of expansions avaliable -/*5456*/ int32 toxicity; //from drinking potions, seems to increase by 3 each time you drink -/*5460*/ char unknown4496[16]; // -/*5476*/ int32 hunger_level; -/*5480*/ int32 thirst_level; -/*5484*/ uint32 ability_up; -/*5488*/ char unknown4524[16]; -/*5504*/ uint16 zone_id; // Current zone of the player -/*5506*/ uint16 zoneInstance; // Instance ID -/*5508*/ SpellBuff_Struct buffs[BUFF_COUNT]; // Buffs currently on the player -/*6008*/ char groupMembers[6][64]; // -/*6392*/ char unknown6392[656]; -/*7048*/ uint32 entityid; -/*7052*/ uint32 leadAAActive; -/*7056*/ uint32 unknown7056; -/*7060*/ int32 ldon_points_guk; //client uses these as signed -/*7064*/ int32 ldon_points_mir; -/*7068*/ int32 ldon_points_mmc; -/*7072*/ int32 ldon_points_ruj; -/*7076*/ int32 ldon_points_tak; -/*7080*/ int32 ldon_points_available; -/*7084*/ uint8 unknown5940[112]; -/*7196*/ uint32 tribute_time_remaining; //in miliseconds -/*7200*/ uint32 unknown6048; -/*7204*/ uint32 career_tribute_points; -/*7208*/ uint32 unknown6056; -/*7212*/ uint32 tribute_points; -/*7216*/ uint32 unknown6064; -/*7220*/ uint32 tribute_active; //1=active -/*7224*/ Tribute_Struct tributes[MAX_PLAYER_TRIBUTES]; -/*7264*/ Disciplines_Struct disciplines; //fathernitwit: 10-06-04 -/*7664*/ char unknown7464[240]; -/*7904*/ uint32 endurance; -/*7908*/ uint32 group_leadership_exp; //0-1000 -/*7912*/ uint32 raid_leadership_exp; //0-2000 -/*7916*/ uint32 group_leadership_points; -/*7920*/ uint32 raid_leadership_points; -/*7924*/ LeadershipAA_Struct leader_abilities; -/*8052*/ uint8 unknown8052[132]; -/*8184*/ uint32 air_remaining; -/*8188*/ uint8 unknown8188[4608]; -/*12796*/ uint32 aapoints_spent; -/*12800*/ uint32 expAA; -/*12804*/ uint32 aapoints; //avaliable, unspent -/*12808*/ uint8 unknown12808[36]; -/*12844*/ Bandolier_Struct bandoliers[MAX_PLAYER_BANDOLIER]; -/*14124*/ uint8 unknown14124[5120]; -/*19244*/ PotionBelt_Struct potionbelt; //there should be 3 more of these -/*19532*/ uint8 unknown19532[8]; -/*19540*/ uint32 currentRadCrystals; // Current count of radiant crystals -/*19544*/ uint32 careerRadCrystals; // Total count of radiant crystals ever -/*19548*/ uint32 currentEbonCrystals; // Current count of ebon crystals -/*19552*/ uint32 careerEbonCrystals; // Total count of ebon crystals ever -/*19556*/ uint8 groupAutoconsent; // 0=off, 1=on -/*19557*/ uint8 raidAutoconsent; // 0=off, 1=on -/*19558*/ uint8 guildAutoconsent; // 0=off, 1=on -/*19559*/ uint8 unknown19559[5]; // ***Placeholder (6/29/2005) -/*19564*/ uint32 unknown15964; -/*19568*/ -}; - -/* -** Client Target Struct -** Length: 2 Bytes -** OpCode: 6221 -*/ -struct ClientTarget_Struct { -/*000*/ uint32 new_target; // Target ID -}; - -/* -** Target Rejection Struct -** Length: 12 Bytes -** OpCode: OP_TargetReject -*/ -struct TargetReject_Struct { -/*00*/ uint8 unknown00[12]; -}; - -struct PetCommand_Struct { -/*000*/ uint32 command; -/*004*/ uint32 unknown; -}; - -/* -** Delete Spawn -** Length: 4 Bytes -** OpCode: OP_DeleteSpawn -*/ -struct DeleteSpawn_Struct -{ -/*00*/ uint32 spawn_id; // Spawn ID to delete -/*04*/ -}; - -/* -** Channel Message received or sent -** Length: 144 Bytes + Variable Length + 1 -** OpCode: OP_ChannelMessage -** -*/ -struct ChannelMessage_Struct -{ -/*000*/ char targetname[64]; // Tell recipient -/*064*/ char sender[64]; // The senders name (len might be wrong) -/*128*/ uint32 language; // Language -/*132*/ uint32 chan_num; // Channel -/*136*/ uint32 cm_unknown4[2]; // ***Placeholder -/*144*/ uint32 skill_in_language; // The players skill in this language? might be wrong -/*148*/ char message[0]; // Variable length message -}; - -/* -** Special Message -** Length: 4 Bytes + Variable Text Length + 1 -** OpCode: OP_SpecialMesg -** -*/ -/* - Theres something wrong with this... example live packet: -Server->Client: [ Opcode: OP_SpecialMesg (0x0fab) Size: 244 ] - 0: 01 02 00 0A 00 00 00 09 - 05 00 00 42 61 72 73 74 | ...........Barst - 16: 72 65 20 53 6F 6E 67 77 - 65 61 76 65 72 00 7C F9 | re Songweaver.|. - 32: FF FF 84 FF FF FF 03 00 - 00 00 47 72 65 65 74 69 | ..........Greeti - -*/ -struct SpecialMesg_Struct -{ -/*00*/ char header[3]; // 04 04 00 <-- for #emote style msg -/*03*/ uint32 msg_type; // Color of text (see MT_*** below) -/*07*/ uint32 target_spawn_id; // Who is it being said to? -/*11*/ char sayer[1]; // Who is the source of the info -/*12*/ uint8 unknown12[12]; -/*24*/ char message[1]; // What is being said? -}; - -/* -** When somebody changes what they're wearing -** or give a pet a weapon (model changes) -** Length: 16 Bytes -** Opcode: 9220 -*/ -struct WearChange_Struct{ -/*000*/ uint16 spawn_id; -/*002*/ uint16 material; -/*004*/ Color_Struct color; -/*009*/ uint8 wear_slot_id; -}; - -/* -** Type: Bind Wound Structure -** Length: 8 Bytes -*/ -//Fixed for 7-14-04 patch -struct BindWound_Struct -{ -/*002*/ uint16 to; // TargetID -/*004*/ uint16 unknown2; // ***Placeholder -/*006*/ uint16 type; -/*008*/ uint16 unknown6; -}; - - -/* -** Type: Zone Change Request (before hand) -** Length: 88 bytes -** OpCode: a320 -*/ - -struct ZoneChange_Struct { -/*000*/ char char_name[64]; // Character Name -/*064*/ uint16 zoneID; -/*066*/ uint16 instanceID; -/*068*/ float y; -/*072*/ float x; -/*076*/ float z; -/*080*/ uint32 zone_reason; //0x0A == death, I think -/*084*/ int32 success; // =0 client->server, =1 server->client, -X=specific error -/*088*/ -}; - -struct RequestClientZoneChange_Struct { -/*00*/ uint16 zone_id; -/*02*/ uint16 instance_id; -/*04*/ float y; -/*08*/ float x; -/*12*/ float z; -/*16*/ float heading; -/*20*/ uint32 type; //unknown... values -}; - -struct Animation_Struct { -/*00*/ uint16 spawnid; -/*02*/ uint8 action; -/*03*/ uint8 value; -/*04*/ -}; - -// solar: this is what causes the caster to animate and the target to -// get the particle effects around them when a spell is cast -// also causes a buff icon -struct Action_Struct -{ - /* 00 */ uint16 target; // id of target - /* 02 */ uint16 source; // id of caster - /* 04 */ uint16 level; // level of caster - /* 06 */ uint16 instrument_mod; - /* 08 */ uint32 unknown08; - /* 12 */ uint16 unknown16; -// some kind of sequence that's the same in both actions -// as well as the combat damage, to tie em together? - /* 14 */ uint32 sequence; - /* 18 */ uint32 unknown18; - /* 22 */ uint8 type; // 231 (0xE7) for spells - /* 23 */ uint32 unknown23; - /* 27 */ uint16 spell; // spell id being cast - /* 29 */ uint8 unknown29; -// this field seems to be some sort of success flag, if it's 4 - /* 30 */ uint8 buff_unknown; // if this is 4, a buff icon is made - /* 31 */ -}; - -// solar: this is what prints the You have been struck. and the regular -// melee messages like You try to pierce, etc. It's basically the melee -// and spell damage message -struct CombatDamage_Struct -{ -/* 00 */ uint16 target; -/* 02 */ uint16 source; -/* 04 */ uint8 type; //slashing, etc. 231 (0xE7) for spells -/* 05 */ uint16 spellid; -/* 07 */ uint32 damage; -/* 11 */ uint32 unknown11; -/* 15 */ uint32 sequence; // see above notes in Action_Struct -/* 19 */ uint32 unknown19; -/* 23 */ -}; - -/* -** Consider Struct -** Length: 24 Bytes -** OpCode: 3721 -*/ -struct Consider_Struct{ -/*000*/ uint32 playerid; // PlayerID -/*004*/ uint32 targetid; // TargetID -/*008*/ uint32 faction; // Faction -/*0012*/ uint32 level; // Level -/*016*/ int32 cur_hp; // Current Hitpoints -/*020*/ int32 max_hp; // Maximum Hitpoints -/*024*/ uint8 pvpcon; // Pvp con flag 0/1 -/*025*/ uint8 unknown3[3]; -}; - -/* -** Spawn Death Blow -** Length: 32 Bytes -** OpCode: 0114 -*/ -struct Death_Struct -{ -/*000*/ uint32 spawn_id; -/*004*/ uint32 killer_id; -/*008*/ uint32 corpseid; // was corpseid -/*012*/ uint32 attack_skill; // was type -/*016*/ uint32 spell_id; -/*020*/ uint32 bindzoneid; //bindzoneid? -/*024*/ uint32 damage; -/*028*/ uint32 unknown028; -}; - -struct BecomeCorpse_Struct { - uint32 spawn_id; - float y; - float x; - float z; -}; - -/* -** Spawn position update -** Struct sent from server->client to update position of -** another spawn's position update in zone (whether NPC or PC) -** -*/ -struct PlayerPositionUpdateServer_Struct -{ -/*0000*/ uint16 spawn_id; -/*0002*/ int32 delta_heading:10, // change in heading - x_pos:19, // x coord - padding0002:3; // ***Placeholder -/*0006*/ int32 y_pos:19, // y coord - animation:10, // animation - padding0006:3; // ***Placeholder -/*0010*/ int32 z_pos:19, // z coord - delta_y:13; // change in y -/*0014*/ int32 delta_x:13, // change in x - heading:12, // heading - padding0014:7; // ***Placeholder -/*0018*/ int32 delta_z:13, // change in z - padding0018:19; // ***Placeholder -/*0022*/ -}; - -/* -** Player position update -** Struct sent from client->server to update -** player position on server -** -*/ -struct PlayerPositionUpdateClient_Struct -{ -/*0000*/ uint16 spawn_id; -/*0022*/ uint16 sequence; //increments one each packet -/*0004*/ float y_pos; // y coord -/*0008*/ float delta_z; // Change in z -/*0016*/ float delta_x; // Change in x -/*0012*/ float delta_y; // Change in y -/*0020*/ int32 animation:10, // animation - delta_heading:10, // change in heading - padding0020:12; // ***Placeholder (mostly 1) -/*0024*/ float x_pos; // x coord -/*0028*/ float z_pos; // z coord -/*0034*/ uint16 heading:12, // Directional heading - padding0004:4; // ***Placeholder -/*0032*/ uint8 unknown0006[2]; // ***Placeholder -/*0036*/ -}; - -/* -** Spawn HP Update -** Length: 10 Bytes -** OpCode: OP_HPUpdate -*/ -struct SpawnHPUpdate_Struct -{ -/*00*/ uint32 cur_hp; // Id of spawn to update -/*04*/ int32 max_hp; // Maximum hp of spawn -/*08*/ int16 spawn_id; // Current hp of spawn -/*10*/ -}; -struct SpawnHPUpdate_Struct2 -{ -/*01*/ int16 spawn_id; -/*00*/ uint8 hp; -}; -/* -** Stamina -** Length: 8 Bytes -** OpCode: 5721 -*/ -struct Stamina_Struct { -/*00*/ uint32 food; // (low more hungry 127-0) -/*02*/ uint32 water; // (low more thirsty 127-0) -}; - -/* -** Level Update -** Length: 12 Bytes -*/ -struct LevelUpdate_Struct -{ -/*00*/ uint32 level; // New level -/*04*/ uint32 level_old; // Old level -/*08*/ uint32 exp; // Current Experience -}; - -/* -** Experience Update -** Length: 14 Bytes -** OpCode: 9921 -*/ -struct ExpUpdate_Struct -{ -/*0000*/ uint32 exp; // Current experience ratio from 0 to 330 -/*0004*/ uint32 aaxp; // @BP ?? -}; - -/* -** Item Packet Struct - Works on a variety of opcodes -** Packet Types: See ItemPacketType enum -** -*/ -enum ItemPacketType -{ - ItemPacketViewLink = 0x00, - ItemPacketTradeView = 0x65, - ItemPacketLoot = 0x66, - ItemPacketTrade = 0x67, - ItemPacketCharInventory = 0x69, - ItemPacketSummonItem = 0x6A, - ItemPacketTributeItem = 0x6C, - ItemPacketMerchant = 0x64, - ItemPacketWorldContainer = 0x6B -}; -struct ItemPacket_Struct -{ -/*00*/ ItemPacketType PacketType; -/*04*/ char SerializedItem[1]; -/*xx*/ -}; - -struct BulkItemPacket_Struct -{ -/*00*/ char SerializedItem[0]; -/*xx*/ -}; - -struct Consume_Struct -{ -/*0000*/ uint32 slot; -/*0004*/ uint32 auto_consumed; // 0xffffffff when auto eating e7030000 when right click -/*0008*/ uint8 c_unknown1[4]; -/*0012*/ uint8 type; // 0x01=Food 0x02=Water -/*0013*/ uint8 unknown13[3]; -}; - -struct DeleteItem_Struct -{ -/*0000*/ uint32 from_slot; -/*0004*/ uint32 to_slot; -/*0008*/ uint32 number_in_stack; -/*0012*/ -}; - -struct MoveItem_Struct -{ -/*0000*/ uint32 from_slot; -/*0004*/ uint32 to_slot; -/*0008*/ uint32 number_in_stack; -/*0012*/ -}; - -// -// from_slot/to_slot -// -1 - destroy -// 0 - cursor -// 1 - inventory -// 2 - bank -// 3 - trade -// 4 - shared bank -// -// cointype -// 0 - copeer -// 1 - silver -// 2 - gold -// 3 - platinum -// -static const uint32 COINTYPE_PP = 3; -static const uint32 COINTYPE_GP = 2; -static const uint32 COINTYPE_SP = 1; -static const uint32 COINTYPE_CP = 0; - -struct MoveCoin_Struct -{ - int32 from_slot; - int32 to_slot; - int32 cointype1; - int32 cointype2; - int32 amount; -}; -struct TradeCoin_Struct{ - uint32 trader; - uint8 slot; - uint16 unknown5; - uint8 unknown7; - uint32 amount; -}; -struct TradeMoneyUpdate_Struct{ - uint32 trader; - uint32 type; - uint32 amount; -}; -/* -** Surname struct -** Size: 100 bytes -*/ -struct Surname_Struct -{ -/*0000*/ char name[64]; -/*0064*/ uint32 unknown0064; -/*0068*/ char lastname[32]; -/*0100*/ -}; - -struct GuildsListEntry_Struct { - char name[64]; -}; - -static const uint32 MAX_NUMBER_GUILDS = 1500; -struct GuildsList_Struct { - uint8 head[64]; // First on guild list seems to be empty... - GuildsListEntry_Struct Guilds[MAX_NUMBER_GUILDS]; -}; - -struct GuildUpdate_Struct { - uint32 guildID; - GuildsListEntry_Struct entry; -}; - -/* -** Money Loot -** Length: 22 Bytes -** OpCode: 5020 -*/ -struct moneyOnCorpseStruct { -/*0000*/ uint8 response; // 0 = someone else is, 1 = OK, 2 = not at this time -/*0001*/ uint8 unknown1; // = 0x5a -/*0002*/ uint8 unknown2; // = 0x40 -/*0003*/ uint8 unknown3; // = 0 -/*0004*/ uint32 platinum; // Platinum Pieces -/*0008*/ uint32 gold; // Gold Pieces - -/*0012*/ uint32 silver; // Silver Pieces -/*0016*/ uint32 copper; // Copper Pieces -}; - -//opcode = 0x5220 -// size 292 - - -struct LootingItem_Struct { -/*000*/ uint32 lootee; -/*002*/ uint32 looter; -/*004*/ uint16 slot_id; -/*006*/ uint8 unknown3[2]; -/*008*/ uint32 auto_loot; -}; - -struct GuildManageStatus_Struct{ - uint32 guildid; - uint32 oldrank; - uint32 newrank; - char name[64]; -}; -// Guild invite, remove -struct GuildJoin_Struct{ -/*000*/ uint32 guildid; -/*004*/ uint32 unknown04; -/*008*/ uint32 level; -/*012*/ uint32 class_; -/*016*/ uint32 rank;//0 member, 1 officer, 2 leader -/*020*/ uint32 zoneid; -/*024*/ uint32 unknown24; -/*028*/ char name[64]; -/*092*/ -}; -struct GuildInviteAccept_Struct { - char inviter[64]; - char newmember[64]; - uint32 response; - uint32 guildeqid; -}; -struct GuildManageRemove_Struct { - uint32 guildeqid; - char member[64]; -}; -struct GuildCommand_Struct { - char othername[64]; - char myname[64]; - uint16 guildeqid; - uint8 unknown[2]; // for guildinvite all 0's, for remove 0=0x56, 2=0x02 - uint32 officer; -}; - -// 4244 bytes. Is not really an 'OnLevelMessage', it causes a popup box to display in the client -// Text looks like HTML. -struct OnLevelMessage_Struct { -/*0000*/ char Title[128]; -/*0128*/ char Text[4096]; -/*4224*/ uint32 Buttons; -/*4228*/ uint32 Duration; -/*4232*/ uint32 PopupID; -/*4236*/ uint32 unknown4236; -/*4240*/ uint32 unknown4240; -/*4244*/ -}; - -// Opcode OP_GMZoneRequest -// Size = 88 bytes -struct GMZoneRequest_Struct { -/*0000*/ char charname[64]; -/*0064*/ uint32 zone_id; -/*0068*/ float x; -/*0072*/ float y; -/*0076*/ float z; -/*0080*/ char unknown0080[4]; -/*0084*/ uint32 success; // 0 if command failed, 1 if succeeded? -/*0088*/ -// /*072*/ int8 success; // =0 client->server, =1 server->client, -X=specific error -// /*073*/ uint8 unknown0073[3]; // =0 ok, =ffffff error -}; - -struct GMSummon_Struct { -/* 0*/ char charname[64]; -/* 30*/ char gmname[64]; -/* 60*/ uint32 success; -/* 61*/ uint32 zoneID; -/*92*/ int32 y; -/*96*/ int32 x; -/*100*/ int32 z; -/*104*/ uint32 unknown2; // E0 E0 56 00 -}; - -struct GMGoto_Struct { // x,y is swapped as compared to summon and makes sense as own packet -/* 0*/ char charname[64]; - -/* 64*/ char gmname[64]; -/* 128*/ uint32 success; -/* 132*/ uint32 zoneID; - -/*136*/ int32 y; -/*140*/ int32 x; -/*144*/ int32 z; -/*148*/ uint32 unknown2; // E0 E0 56 00 -}; - -struct GMLastName_Struct { - char name[64]; - char gmname[64]; - char lastname[64]; - uint16 unknown[4]; // 0x00, 0x00 - // 0x01, 0x00 = Update the clients -}; - -//Combat Abilities -struct CombatAbility_Struct { - uint32 m_target; //the ID of the target mob - uint32 m_atk; - uint32 m_skill; -}; - -//Instill Doubt -struct Instill_Doubt_Struct { - uint8 i_id; - uint8 ia_unknown; - uint8 ib_unknown; - uint8 ic_unknown; - uint8 i_atk; - - uint8 id_unknown; - uint8 ie_unknown; - uint8 if_unknown; - uint8 i_type; - uint8 ig_unknown; - uint8 ih_unknown; - uint8 ii_unknown; -}; - -struct GiveItem_Struct { - uint16 to_entity; - int16 to_equipSlot; - uint16 from_entity; - int16 from_equipSlot; -}; - -struct RandomReq_Struct { - uint32 low; - uint32 high; -}; - -/* solar: 9/23/03 reply to /random command; struct from Zaphod */ -struct RandomReply_Struct { -/* 00 */ uint32 low; -/* 04 */ uint32 high; -/* 08 */ uint32 result; -/* 12 */ char name[64]; -/* 76 */ -}; - -struct LFG_Struct { -/* -Wrong size on OP_LFG. Got: 80, Expected: 68 - 0: 00 00 00 00 01 00 00 00 - 00 00 00 00 64 00 00 00 | ............d... - 16: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00 | ................ - 32: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00 | ................ - 48: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00 | ................ - 64: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00 | ................ -Wrong size on OP_LFG. Got: 80, Expected: 68 - 0: 00 00 00 00 01 00 00 00 - 3F 00 00 00 41 00 00 00 | ........?...A... - 16: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00 | ................ - 32: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00 | ................ - 48: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00 | ................ - 64: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00 | ................ -Wrong size on OP_LFG. Got: 80, Expected: 68 - 0: 00 00 00 00 01 00 00 00 - 3F 00 00 00 41 00 00 00 | ........?...A... - 16: 46 72 75 62 20 66 72 75 - 62 20 66 72 75 62 00 00 | Frub frub frub.. - 32: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00 | ................ - 48: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00 | ................ - 64: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00 | ................ -*/ -/*000*/ uint32 unknown000; -/*004*/ uint32 value; // 0x00 = off 0x01 = on -/*008*/ uint32 unknown008; -/*012*/ uint32 unknown012; -/*016*/ char name[64]; -}; - -/* -** LFG_Appearance_Struct -** Packet sent to clients to notify when someone in zone toggles LFG flag -** Size: 8 bytes -** Used in: OP_LFGAppearance -** -*/ -struct LFG_Appearance_Struct -{ -/*0000*/ uint32 spawn_id; // ID of the client -/*0004*/ uint8 lfg; // 1=LFG, 0=Not LFG -/*0005*/ char unknown0005[3]; // -/*0008*/ -}; - - -// EverQuest Time Information: -// 72 minutes per EQ Day -// 3 minutes per EQ Hour -// 6 seconds per EQ Tick (2 minutes EQ Time) -// 3 seconds per EQ Minute - -struct TimeOfDay_Struct { - uint8 hour; - uint8 minute; - uint8 day; - uint8 month; - uint32 year; -}; - -// Darvik: shopkeeper structs -struct Merchant_Click_Struct { -/*000*/ uint32 npcid; // Merchant NPC's entity id -/*004*/ uint32 playerid; -/*008*/ uint32 command; //1=open, 0=cancel/close -/*012*/ float rate; //cost multiplier, dosent work anymore -}; -/* -Unknowns: -0 is e7 from 01 to // MAYBE SLOT IN PURCHASE -1 is 03 -2 is 00 -3 is 00 -4 is ?? -5 is ?? -6 is 00 from a0 to -7 is 00 from 3f to */ -/* -0 is F6 to 01 -1 is CE CE -4A 4A -00 00 -00 E0 -00 CB -00 90 -00 3F -*/ - - - -struct Merchant_Sell_Struct { -/*000*/ uint32 npcid; // Merchant NPC's entity id -/*004*/ uint32 playerid; // Player's entity id -/*008*/ uint32 itemslot; - uint32 unknown12; -/*016*/ uint8 quantity; // Already sold -/*017*/ uint8 Unknown016[3]; -/*020*/ uint32 price; -}; -struct Merchant_Purchase_Struct { -/*000*/ uint32 npcid; // Merchant NPC's entity id -/*004*/ uint32 itemslot; // Player's entity id -/*008*/ uint32 quantity; -/*012*/ uint32 price; -}; -struct Merchant_DelItem_Struct{ -/*000*/ uint32 npcid; // Merchant NPC's entity id -/*004*/ uint32 playerid; // Player's entity id -/*008*/ uint32 itemslot; -}; -struct Adventure_Purchase_Struct { -/*000*/ uint32 some_flag; //set to 1 generally... -/*000*/ uint32 npcid; -/*004*/ uint32 itemid; -/*008*/ uint32 variable; -}; - -struct Adventure_Sell_Struct { -/*000*/ uint32 unknown000; //0x01 -/*004*/ uint32 npcid; -/*008*/ uint32 slot; -/*012*/ uint32 charges; -/*016*/ uint32 sell_price; -}; - -struct AdventurePoints_Update_Struct { -/*000*/ uint32 ldon_available_points; // Total available points -/*004*/ uint8 unkown_apu004[20]; -/*024*/ uint32 ldon_guk_points; // Earned Deepest Guk points -/*028*/ uint32 ldon_mirugal_points; // Earned Mirugal' Mebagerie points -/*032*/ uint32 ldon_mistmoore_points; // Earned Mismoore Catacombs Points -/*036*/ uint32 ldon_rujarkian_points; // Earned Rujarkian Hills points -/*040*/ uint32 ldon_takish_points; // Earned Takish points -/*044*/ uint8 unknown_apu042[216]; -}; - - -struct AdventureFinish_Struct{ - uint32 win_lose;//Cofruben: 00 is a lose,01 is win. - uint32 points; -}; -//OP_AdventureRequest -struct AdventureRequest_Struct{ - uint32 risk;//1 normal,2 hard. - uint32 entity_id; -}; -struct AdventureRequestResponse_Struct{ - uint32 unknown000; - char text[2048]; - uint32 timetoenter; - uint32 timeleft; - uint32 risk; - float x; - float y; - float z; - uint32 showcompass; - uint32 unknown2080; -}; - - - -/*struct Item_Shop_Struct { - uint16 merchantid; - uint8 itemtype; - Item_Struct item; - uint8 iss_unknown001[6]; -};*/ - -/* -** Illusion_Struct -** Changes client visible features -** Size: 168 bytes -** Used In: OP_Illusion, #face, Mob::SendIllusionPacket() -** Fields from the deprecated struct: -** uint8 unknown_26; //Always 26 -** uint8 haircolor; -** uint8 beardcolor; -** uint8 eyecolor1; // the eyecolors always seem to be the same, maybe left and right eye? -** uint8 eyecolor2; -** uint8 hairstyle; -** uint8 aa_title; -** uint8 luclinface; // and beard -** Updated by Father Nitwit for 7-14-04 patch -** -*/ - -struct Illusion_Struct { -/*000*/ uint32 spawnid; -/*004*/ char charname[64]; -/*068*/ uint16 race; -/*070*/ char unknown070[2]; -/*072*/ uint8 gender; -/*073*/ uint8 texture; -/*074*/ uint8 helmtexture; -/*075*/ uint8 unknown075; -/*076*/ uint32 face; -/*080*/ uint8 hairstyle; -/*081*/ uint8 haircolor; -/*082*/ uint8 beard; -/*083*/ uint8 beardcolor; -/*084*/ float size; -/*088*/ char unknown084[80]; -/*168*/ -}; - - -struct ZonePoint_Entry { -/*0000*/ uint32 iterator; -/*0004*/ float y; -/*0008*/ float x; -/*0012*/ float z; -/*0016*/ float heading; -/*0020*/ uint16 zoneid; -/*0022*/ uint16 zoneinstance; // LDoN instance -}; - -struct ZonePoints { -/*0000*/ uint32 count; -/*0004*/ struct ZonePoint_Entry zpe[0]; // Always add one extra to the end after all zonepoints -}; - -struct SkillUpdate_Struct { -/*00*/ uint32 skillId; -/*04*/ uint32 value; -/*08*/ -}; - -struct ZoneUnavail_Struct { - //This actually varies, but... - char zonename[16]; - int16 unknown[4]; -}; - -struct GroupGeneric_Struct { - char name1[64]; - char name2[64]; -}; - -struct GroupCancel_Struct { - char name1[64]; - char name2[64]; - uint8 toggle; -}; - -struct GroupUpdate_Struct { -/*0000*/ uint32 action; -/*0004*/ char yourname[64]; -/*0068*/ char membername[5][64]; -/*0388*/ char leadersname[64]; -}; - -struct GroupUpdate2_Struct { -/*0000*/ uint32 action; -/*0004*/ char yourname[64]; -/*0068*/ char membername[5][64]; -/*0388*/ char leadersname[64]; -/*0452*/ GroupLeadershipAA_Struct leader_aas; -/*0580*/ uint8 unknown[188]; -/*0768*/ -}; -struct GroupJoin_Struct { -/*0000*/ uint32 action; -/*0004*/ char yourname[64]; -/*0068*/ char membername[64]; -/*0132*/ uint8 unknown[84]; -}; - -struct FaceChange_Struct { -/*000*/ uint8 haircolor; -/*001*/ uint8 beardcolor; -/*002*/ uint8 eyecolor1; // the eyecolors always seem to be the same, maybe left and right eye? -/*003*/ uint8 eyecolor2; -/*004*/ uint8 hairstyle; -/*005*/ uint8 beard; // vesuvias -/*006*/ uint8 face; -//vesuvias: -//there are only 10 faces for barbs changing woad just -//increase the face value by ten so if there were 8 woad -//designs then there would be 80 barb faces -}; - -/* -** Trade request from one client to another -** Used to initiate a trade -** Size: 8 bytes -** Used in: OP_TradeRequest -*/ -struct TradeRequest_Struct { -/*00*/ uint32 to_mob_id; -/*04*/ uint32 from_mob_id; -/*08*/ -}; - -struct TradeAccept_Struct { -/*00*/ uint32 from_mob_id; -/*04*/ uint32 unknown4; //seems to be garbage -/*08*/ -}; - -/* -** Cancel Trade struct -** Sent when a player cancels a trade -** Size: 8 bytes -** Used In: OP_CancelTrade -** -*/ -struct CancelTrade_Struct { -/*00*/ uint32 fromid; -/*04*/ uint32 action; -/*08*/ -}; - -struct PetitionUpdate_Struct { - uint32 petnumber; // Petition Number - uint32 color; // 0x00 = green, 0x01 = yellow, 0x02 = red - uint32 status; - uint32 senttime; // 4 has to be 0x1F - char accountid[32]; - char gmsenttoo[64]; - int32 quetotal; - char charname[64]; -}; - -struct Petition_Struct { - uint32 petnumber; - uint32 urgency; - char accountid[32]; - char lastgm[32]; - uint32 zone; - //char zone[32]; - char charname[64]; - uint32 charlevel; - uint32 charclass; - uint32 charrace; - uint32 unknown; - //time_t senttime; // Time? - uint32 checkouts; - uint32 unavail; - //uint8 unknown5[4]; - uint32 senttime; - uint32 unknown2; - char petitiontext[1024]; - char gmtext[1024]; -}; - - -struct Who_All_Struct { // 76 length total -/*000*/ char whom[64]; -/*064*/ uint32 wrace; // FF FF = no race - -/*066*/ uint32 wclass; // FF FF = no class -/*068*/ uint32 lvllow; // FF FF = no numbers -/*070*/ uint32 lvlhigh; // FF FF = no numbers -/*072*/ uint32 gmlookup; // FF FF = not doing /who all gm -/*074*/ uint32 unknown074; -/*076*/ uint8 unknown076[64]; -/*140*/ -}; - -struct Stun_Struct { // 4 bytes total - uint32 duration; // Duration of stun -}; - -struct AugmentItem_Struct { -/*00*/ int16 container_slot; -/*02*/ char unknown02[2]; -/*04*/ int32 augment_slot; -/*08*/ -}; - -// OP_Emote -struct Emote_Struct { -/*0000*/ uint32 unknown01; -/*0004*/ char message[1024]; -/*1028*/ -}; - -// Inspect -struct Inspect_Struct { - uint16 TargetID; - uint16 PlayerID; -}; -//OP_InspectAnswer -struct InspectResponse_Struct{//Cofruben:need to send two of this for the inspect response. -/*000*/ uint32 TargetID; -/*004*/ uint32 playerid; -/*008*/ char itemnames[21][64]; -/*1352*/char unknown_zero[64];//fill with zero's. -/*1416*/uint32 itemicons[21]; -/*1500*/uint32 unknown_zero2; -/*1504*/char text[288]; -}; - -//OP_SetDataRate -struct SetDataRate_Struct { - float newdatarate; -}; - -//OP_SetServerFilter -struct SetServerFilter_Struct { - uint32 filters[25]; //see enum eqFilterType -}; - -//Op_SetServerFilterAck -struct SetServerFilterAck_Struct { - uint8 blank[8]; -}; -struct IncreaseStat_Struct{ - /*0000*/ uint8 unknown0; - /*0001*/ uint8 str; - /*0002*/ uint8 sta; - /*0003*/ uint8 agi; - /*0004*/ uint8 dex; - /*0005*/ uint8 int_; - /*0006*/ uint8 wis; - /*0007*/ uint8 cha; - /*0008*/ uint8 fire; - /*0009*/ uint8 cold; - /*0010*/ uint8 magic; - /*0011*/ uint8 poison; - /*0012*/ uint8 disease; - /*0013*/ char unknown13[116]; - /*0129*/ uint8 str2; - /*0130*/ uint8 sta2; - /*0131*/ uint8 agi2; - /*0132*/ uint8 dex2; - /*0133*/ uint8 int_2; - /*0134*/ uint8 wis2; - /*0135*/ uint8 cha2; - /*0136*/ uint8 fire2; - /*0137*/ uint8 cold2; - /*0138*/ uint8 magic2; - /*0139*/ uint8 poison2; - /*0140*/ uint8 disease2; -}; - -struct GMName_Struct { - char oldname[64]; - char gmname[64]; - char newname[64]; - uint8 badname; - uint8 unknown[3]; -}; - -struct GMDelCorpse_Struct { - char corpsename[64]; - char gmname[64]; - uint8 unknown; -}; - -struct GMKick_Struct { - char name[64]; - char gmname[64]; - uint8 unknown; -}; - - -struct GMKill_Struct { - char name[64]; - char gmname[64]; - uint8 unknown; -}; - - -struct GMEmoteZone_Struct { - char text[512]; -}; - -// This is where the Text is sent to the client. -// Use ` as a newline character in the text. -// Variable length. -struct BookText_Struct { - uint8 window; // where to display the text (0xFF means new window) - uint8 type; //type: 0=scroll, 1=book, 2=item info.. prolly others. - char booktext[1]; // Variable Length -}; -// This is the request to read a book. -// This is just a "text file" on the server -// or in our case, the 'name' column in our books table. -struct BookRequest_Struct { - uint8 window; // where to display the text (0xFF means new window) - uint8 type; //type: 0=scroll, 1=book, 2=item info.. prolly others. - char txtfile[1]; // Variable Length -}; - -/* -** Object/Ground Spawn struct -** Used for Forges, Ovens, ground spawns, items dropped to ground, etc -** Size: 92 bytes -** OpCodes: OP_CreateObject -** Last Updated: Oct-17-2003 -** -*/ -struct Object_Struct { -/*00*/ uint32 linked_list_addr[2];// They are, get this, prev and next, ala linked list -/*08*/ uint16 unknown008[2]; // -/*12*/ uint32 drop_id; // Unique object id for zone -/*16*/ uint16 zone_id; // Redudant, but: Zone the object appears in -/*18*/ uint16 zone_instance; // -/*20*/ uint32 unknown020; // -/*24*/ uint32 unknown024; // -/*28*/ float heading; // heading -/*32*/ float z; // z coord -/*36*/ float x; // x coord -/*40*/ float y; // y coord -/*44*/ char object_name[20]; // Name of object, usually something like IT63_ACTORDEF -/*64*/ float unknown064; // seems like coords, not always valid, all 0 on most world objects -/*68*/ float unknown068; // seems like coords, not always valid, all 0 on most world objects -/*72*/ float unknown072; // seems like coords, not always valid, all 0 on most world objects -/*76*/ uint32 unknown076; // -/*80*/ uint32 object_type; // Type of object, not directly translated to OP_OpenObject -/*84*/ uint32 unknown084; //set to 0xFF -/*88*/ uint32 spawn_id; // Spawn Id of client interacting with object -/*92*/ -}; -// 01 = generic drop, 02 = armor, 19 = weapon -//[13:40] and 0xff seems to be indicative of the tradeskill/openable items that end up returning the old style item type in the OP_OpenObject - -/* -** Click Object Struct -** Client clicking on zone object (forge, groundspawn, etc) -** Size: 8 bytes -** Last Updated: Oct-17-2003 -** -*/ -struct ClickObject_Struct { -/*00*/ uint32 drop_id; -/*04*/ uint32 player_id; -/*08*/ -}; - -struct Shielding_Struct { - uint32 target_id; -}; - -/* -** Click Object Acknowledgement Struct -** Response to client clicking on a World Container (ie, forge) -** -*/ -struct ClickObjectAck_Struct { -/*00*/ uint32 player_id; // Entity Id of player who clicked object -/*04*/ uint32 drop_id; // Zone-specified unique object identifier -/*08*/ uint32 open; // 1=opening, 0=closing -/*12*/ uint32 type; // See object.h, "Object Types" -/*16*/ uint32 unknown16; // -/*20*/ uint32 icon; // Icon to display for tradeskill containers -/*24*/ uint32 unknown24; // -/*28*/ char object_name[64]; // Object name to display -/*92*/ -}; - -/* -** This is different now, mostly unknown -** -*/ -struct CloseContainer_Struct { -/*00*/ uint32 player_id; // Entity Id of player who clicked object -/*04*/ uint32 drop_id; // Zone-specified unique object identifier -/*08*/ uint32 open; // 1=opening, 0=closing -/*12*/ uint32 unknown12[12]; -}; - -/* -** Generic Door Struct -** Length: 52 Octets -** Used in: -** cDoorSpawnsStruct(f721) -** -*/ -struct Door_Struct -{ -/*0000*/ char name[32]; // Filename of Door // Was 10char long before... added the 6 in the next unknown to it: Daeken M. BlackBlade -/*0032*/ float yPos; // y loc -/*0036*/ float xPos; // x loc -/*0040*/ float zPos; // z loc -/*0044*/ float heading; -/*0048*/ uint32 incline; // rotates the whole door -/*0052*/ uint16 size; // 100 is normal, smaller number = smaller model -/*0054*/ uint8 unknown0038[6]; -/*0060*/ uint8 doorId; // door's id # -/*0061*/ uint8 opentype; -/* - * Open types: - * 66 = PORT1414 (Qeynos) - * 55 = BBBOARD (Qeynos) - * 100 = QEYLAMP (Qeynos) - * 56 = CHEST1 (Qeynos) - * 5 = DOOR1 (Qeynos) - */ -/*0062*/ uint8 state_at_spawn; -/*0063*/ uint8 invert_state; // if this is 1, the door is normally open -/*0064*/ uint32 door_param; //this may index zone_points, representing the destination -/*0068*/ uint8 unknown0052[12]; // mostly 0s, the last 3 bytes are something tho -/*0080*/ -}; - - - -struct DoorSpawns_Struct { - struct Door_Struct doors[0]; -}; - -/* - OP Code: Op_ClickDoor - Size: 16 -*/ -struct ClickDoor_Struct { -/*000*/ uint8 doorid; -/*001*/ uint8 unknown001; // This may be some type of action setting -/*002*/ uint8 unknown002; // This is sometimes set after a lever is closed -/*003*/ uint8 unknown003; // Seen 0 -/*004*/ uint8 picklockskill; -/*005*/ uint8 unknown005[3]; -/*008*/ uint32 item_id; -/*012*/ uint16 player_id; -/*014*/ uint8 unknown014[2]; -/*016*/ -}; - -struct MoveDoor_Struct { - uint8 doorid; - uint8 action; -}; - - -struct BecomeNPC_Struct { - uint32 id; - int32 maxlevel; -}; - -struct Underworld_Struct { - float speed; - float y; - float x; - float z; -}; - -struct Resurrect_Struct { - uint32 unknown00; - uint16 zone_id; - uint16 instance_id; - float y; - float x; - float z; - char your_name[64]; - uint32 unknown88; - char rezzer_name[64]; - uint32 spellid; - char corpse_name[64]; - uint32 action; -/* 228 */ -}; - -struct SetRunMode_Struct { - uint8 mode; - uint8 unknown[3]; -}; - -//EnvDamage is EnvDamage2 without a few bytes at the end. - -struct EnvDamage2_Struct { -/*0000*/ uint32 id; -/*0004*/ uint16 unknown4; -/*0006*/ uint32 damage; -/*0010*/ uint8 unknown10[12]; -/*0022*/ uint8 dmgtype; //FA = Lava; FC = Falling -/*0023*/ uint8 unknown2[4]; -/*0027*/ uint16 constant; //Always FFFF -/*0029*/ uint16 unknown29; -}; - -//Bazaar Stuff =D - -struct BazaarWindowStart_Struct { - uint8 Action; - uint8 Unknown001; - uint16 Unknown002; -}; - - -struct BazaarWelcome_Struct { - BazaarWindowStart_Struct beginning; - uint32 traders; - uint32 items; - uint8 unknown1[8]; -}; - -struct BazaarSearch_Struct { - BazaarWindowStart_Struct beginning; - uint32 traderid; - uint32 class_; - uint32 race; - uint32 stat; - uint32 slot; - uint32 type; - char name[64]; - uint32 minprice; - uint32 maxprice; -}; -struct BazaarInspect_Struct{ - uint32 item_id; - uint32 unknown; - char name[64]; -}; -struct BazaarReturnDone_Struct{ - uint32 type; - uint32 traderid; - uint32 unknown8; - uint32 unknown12; - uint32 unknown16; -}; - -struct BazaarSearchResults_Struct { -/*000*/ BazaarWindowStart_Struct Beginning; -/*004*/ uint32 NumItems; -/*008*/ uint32 SerialNumber; -/*012*/ uint32 SellerID; -/*016*/ uint32 Cost; -/*020*/ uint32 ItemStat; -/*024*/ char ItemName[64]; -/*088*/ -}; - -struct ServerSideFilters_Struct { -uint8 clientattackfilters; // 0) No, 1) All (players) but self, 2) All (players) but group -uint8 npcattackfilters; // 0) No, 1) Ignore NPC misses (all), 2) Ignore NPC Misses + Attacks (all but self), 3) Ignores NPC Misses + Attacks (all but group) -uint8 clientcastfilters; // 0) No, 1) Ignore PC Casts (all), 2) Ignore PC Casts (not directed towards self) -uint8 npccastfilters; // 0) No, 1) Ignore NPC Casts (all), 2) Ignore NPC Casts (not directed towards self) -}; - -/* -** Client requesting item statistics -** Size: 32 bytes -** Used In: OP_ItemLinkClick -** Last Updated: 2/15/2009 -** -*/ -struct ItemViewRequest_Struct { -/*000*/ uint32 item_id; -/*004*/ uint32 augments[5]; -/*024*/ uint32 link_hash; -/*028*/ char unknown028[4]; -/*032*/ -}; - - -/* - * Client to server packet - */ -struct PickPocket_Struct { -// Size 18 - uint32 to; - uint32 from; - uint16 myskill; - uint8 type; // -1 you are being picked, 0 failed , 1 = plat, 2 = gold, 3 = silver, 4 = copper, 5 = item - uint8 unknown1; // 0 for response, unknown for input - uint32 coin; - uint8 lastsix[2]; -}; -/* - * Server to client packet - */ - -struct sPickPocket_Struct { - // Size 28 = coin/fail - uint32 to; - uint32 from; - uint32 myskill; - uint32 type; - uint32 coin; - char itemname[64]; -}; - -struct LogServer_Struct { -// Op_Code OP_LOGSERVER -/*000*/ uint32 unknown000; -/*004*/ uint32 unknown004; -/*008*/ uint32 unknown008; -/*012*/ uint32 unknown012; // htonl(1) on live -/*016*/ uint32 unknown016; // htonl(1) on live -/*020*/ uint8 unknown020[12]; -/*032*/ char worldshortname[32]; -/*064*/ uint8 unknown064[32]; -/*096*/ char unknown096[16]; // 'pacman' on live -/*112*/ char unknown112[16]; // '64.37,148,36' on live -/*126*/ uint8 unknown128[48]; -/*176*/ uint32 unknown176; // htonl(0x00002695) -/*180*/ char unknown180[80]; // 'eqdataexceptions@mail.station.sony.com' on live -/*260*/ uint8 unknown260; // 0x01 on live -/*261*/ uint8 unknown261; // 0x01 on live -/*262*/ uint8 unknown262[2]; -/*264*/ -}; - -struct ApproveWorld_Struct { -// Size 544 -// Op_Code OP_ApproveWorld - uint8 unknown544[544]; -}; - -struct ClientError_Struct -{ -/*00001*/ char type; -/*00001*/ char unknown0001[69]; -/*00069*/ char character_name[64]; -/*00134*/ char unknown134[192]; -/*00133*/ char message[31994]; -/*32136*/ -}; - -struct MobHealth -{ - /*0000*/ uint8 hp; //health percent - /*0001*/ uint16 id;//mobs id -}; - -struct Track_Struct { - uint16 entityid; - uint16 padding002; - float distance; -}; - -struct Tracking_Struct { - Track_Struct Entrys[0]; -}; - -/* -** ZoneServerInfo_Struct -** Zone server information -** Size: 130 bytes -** Used In: OP_ZoneServerInfo -** -*/ -struct ZoneServerInfo_Struct -{ -/*0000*/ char ip[128]; -/*0128*/ uint16 port; -}; - -struct WhoAllPlayer{ - uint32 formatstring; - uint32 pidstring; - char* name; - uint32 rankstring; - char* guild; - uint32 unknown80[2]; - uint32 zonestring; - uint32 zone; - uint32 class_; - uint32 level; - uint32 race; - char* account; - uint32 unknown100; -}; - -struct WhoAllReturnStruct { - uint32 id; - uint32 playerineqstring; - char line[27]; - uint8 unknown35; //0A - uint32 unknown36;//0s - uint32 playersinzonestring; - uint32 unknown44[2]; //0s - uint32 unknown52;//1 - uint32 unknown56;//1 - uint32 playercount;//1 - struct WhoAllPlayer player[0]; -}; - -struct Trader_Struct { - uint32 code; - uint32 itemid[160]; - uint32 unknown; - uint32 itemcost[80]; -}; - -struct ClickTrader_Struct { - uint32 code; - uint32 unknown[161];//damn soe this is totally pointless :/ but at least your finally using memset! Good job :) -LE - uint32 itemcost[80]; -}; - -struct GetItems_Struct{ - uint32 items[80]; -}; - -struct BecomeTrader_Struct -{ - uint32 ID; - uint32 Code; -}; - -struct Trader_ShowItems_Struct{ - uint32 code; - uint32 traderid; - uint32 unknown08[3]; -}; - -struct TraderBuy_Struct{ - uint32 unknown0; - uint32 traderid; - uint32 itemid; - uint32 unknown8; - uint32 price; - uint32 quantity; - uint32 slot_num; - char itemname[60]; -}; - -struct TraderItemUpdate_Struct{ - uint32 unknown0; - uint32 traderid; - uint8 fromslot; - uint8 toslot; //7? - uint16 charges; -}; - -struct MoneyUpdate_Struct{ - int32 platinum; - int32 gold; - int32 silver; - int32 copper; -}; - -struct TraderDelItem_Struct{ - uint32 slotid; - uint32 quantity; - uint32 unknown; -}; - -struct TraderClick_Struct{ - uint32 traderid; - uint32 unknown4[2]; - uint32 approval; -}; - -struct FormattedMessage_Struct{ - uint32 unknown0; - uint32 string_id; - uint32 type; - char message[0]; -}; -struct SimpleMessage_Struct{ - uint32 string_id; - uint32 color; - uint32 unknown8; -}; - -struct GuildMemberEntry_Struct { - char name[1]; //variable length - uint32 level; //network byte order - uint32 banker; //1=yes, 0=no, network byte order - uint32 class_; //network byte order - uint32 rank; //network byte order - uint32 time_last_on; //network byte order - uint32 tribute_enable; //network byte order - uint32 total_tribute; //total guild tribute donated, network byte order - uint32 last_tribute; //unix timestamp - char public_note[1]; //variable length. - uint16 zoneinstance; //network byte order - uint16 zone_id; //network byte order -/* 38 + strings */ -}; - -struct GuildMembers_Struct { //just for display purposes, this is not actually used in the message encoding. - char player_name[1]; //variable length. - uint32 count; //network byte order - GuildMemberEntry_Struct member[0]; -}; - -struct GuildMOTD_Struct{ -/*0000*/ uint32 unknown0; -/*0004*/ char name[64]; -/*0068*/ char setby_name[64]; -/*0132*/ uint32 unknown132; -/*0136*/ char motd[512]; -}; -struct GuildUpdate_PublicNote{ - uint32 unknown0; - char name[64]; - char target[64]; - char note[100]; //we are cutting this off at 100, actually around 252 -}; -struct GuildDemoteStruct{ - char name[64]; - char target[64]; -}; -struct GuildRemoveStruct{ - char target[64]; - char name[64]; - uint32 unknown128; - uint32 leaderstatus; //? -}; -struct GuildMakeLeader{ - char name[64]; - char target[64]; -}; -struct BugStruct{ -/*0000*/ char chartype[64]; -/*0064*/ char name[96]; -/*0160*/ char ui[128]; -/*0288*/ float x; -/*0292*/ float y; -/*0296*/ float z; -/*0300*/ float heading; -/*0304*/ uint32 unknown304; -/*0308*/ uint32 type; -/*0312*/ char unknown312[2144]; -/*2456*/ char bug[1024]; -/*3480*/ char placeholder[2]; -/*3482*/ char system_info[4098]; -}; - -struct Ground_Spawn{ - float max_x; - float max_y; - float min_x; - float min_y; - float max_z; - float heading; - char name[16]; - uint32 item; - uint32 max_allowed; - uint32 respawntimer; -}; -struct Ground_Spawns { - struct Ground_Spawn spawn[50]; //Assigned max number to allow -}; -struct PetitionBug_Struct{ - uint32 petition_number; - uint32 unknown4; - char accountname[64]; - uint32 zoneid; - char name[64]; - uint32 level; - uint32 class_; - uint32 race; - uint32 unknown152[3]; - uint32 time; - uint32 unknown168; - char text[1028]; -}; - -struct DyeStruct -{ - union - { - struct - { - struct Color_Struct head; - struct Color_Struct chest; - struct Color_Struct arms; - struct Color_Struct wrists; - struct Color_Struct hands; - struct Color_Struct legs; - struct Color_Struct feet; - struct Color_Struct primary; // you can't actually dye this - struct Color_Struct secondary; // or this - } - dyes; - struct Color_Struct dye[9]; - }; -}; - -struct ApproveZone_Struct { - char name[64]; - uint32 zoneid; - uint32 approve; -}; -struct ZoneInSendName_Struct { - uint32 unknown0; - char name[64]; - char name2[64]; - uint32 unknown132; -}; -struct ZoneInSendName_Struct2 { - uint32 unknown0; - char name[64]; - uint32 unknown68[145]; -}; - -static const uint32 MAX_TRIBUTE_TIERS = 10; - -struct StartTribute_Struct { - uint32 client_id; - uint32 tribute_master_id; - uint32 response; -}; - -struct TributeLevel_Struct { - uint32 level; //backwards byte order! - uint32 tribute_item_id; //backwards byte order! - uint32 cost; //backwards byte order! -}; - -struct TributeAbility_Struct { - uint32 tribute_id; //backwards byte order! - uint32 tier_count; //backwards byte order! - TributeLevel_Struct tiers[MAX_TRIBUTE_TIERS]; - char name[0]; -}; - -struct GuildTributeAbility_Struct { - uint32 guild_id; - TributeAbility_Struct ability; -}; - -struct SelectTributeReq_Struct { - uint32 client_id; //? maybe action ID? - uint32 tribute_id; - uint32 unknown8; //seen E3 00 00 00 -}; - -struct SelectTributeReply_Struct { - uint32 client_id; //echoed from request. - uint32 tribute_id; - char desc[0]; -}; - -struct TributeInfo_Struct { - uint32 active; //0 == inactive, 1 == active - uint32 tributes[MAX_PLAYER_TRIBUTES]; //-1 == NONE - uint32 tiers[MAX_PLAYER_TRIBUTES]; //all 00's - uint32 tribute_master_id; -}; - -struct TributeItem_Struct { - uint32 slot; - uint32 quantity; - uint32 tribute_master_id; - int32 tribute_points; -}; - -struct TributePoint_Struct { - int32 tribute_points; - uint32 unknown04; - int32 career_tribute_points; - uint32 unknown12; -}; - -struct TributeMoney_Struct { - uint32 platinum; - uint32 tribute_master_id; - int32 tribute_points; -}; - - -struct Split_Struct -{ - uint32 platinum; - uint32 gold; - uint32 silver; - uint32 copper; -}; - - -/* -** New Combine Struct -** Client requesting to perform a tradeskill combine -** Size: 4 bytes -** Used In: OP_TradeSkillCombine -** Last Updated: Oct-15-2003 -** -*/ -struct NewCombine_Struct { -/*00*/ int16 container_slot; -/*02*/ int16 guildtribute_slot; -/*04*/ -}; - - -//client requesting favorite recipies -struct TradeskillFavorites_Struct { - uint32 object_type; - uint32 some_id; - uint32 favorite_recipes[500]; -}; - -//search request -struct RecipesSearch_Struct { - uint32 object_type; //same as in favorites - uint32 some_id; //same as in favorites - uint32 mintrivial; - uint32 maxtrivial; - char query[56]; - uint32 unknown4; //is set to 00 03 00 00 - uint32 unknown5; //is set to 4C DD 12 00 -/*80*/ -}; - -//one sent for each item, from server in reply to favorites or search -struct RecipeReply_Struct { - uint32 object_type; - uint32 some_id; //same as in favorites - uint32 component_count; - uint32 recipe_id; - uint32 trivial; - char recipe_name[64]; -/*84*/ -}; - -//received and sent back as an ACK with different reply_code -struct RecipeAutoCombine_Struct { - uint32 object_type; - uint32 some_id; - uint32 unknown1; //echoed in reply - uint32 recipe_id; - uint32 reply_code; // 93 64 e1 00 (junk) in request - // 00 00 00 00 in successful reply - // f5 ff ff ff in 'you dont have all the stuff' reply -}; - -struct LevelAppearance_Struct { //Sends a little graphic on level up - uint32 spawn_id; - uint32 parm1; - uint32 value1a; - uint32 value1b; - uint32 parm2; - uint32 value2a; - uint32 value2b; - uint32 parm3; - uint32 value3a; - uint32 value3b; - uint32 parm4; - uint32 value4a; - uint32 value4b; - uint32 parm5; - uint32 value5a; - uint32 value5b; -/*64*/ -}; -struct MerchantList{ - uint32 id; - uint32 slot; - uint32 item; -}; -struct TempMerchantList{ - uint32 npcid; - uint32 slot; - uint32 item; - uint32 charges; //charges/quantity - uint32 origslot; -}; - - -struct FindPerson_Point { - float y; - float x; - float z; -}; - -struct FindPersonRequest_Struct { - uint32 npc_id; - FindPerson_Point client_pos; -}; - -//variable length packet of points -struct FindPersonResult_Struct { - FindPerson_Point dest; - FindPerson_Point path[0]; //last element must be the same as dest -}; - -struct MobRename_Struct { -/*000*/ char old_name[64]; -/*064*/ char old_name_again[64]; //not sure what the difference is -/*128*/ char new_name[64]; -/*192*/ uint32 unknown192; //set to 0 -/*196*/ uint32 unknown196; //set to 1 -/*200*/ -}; - -struct PlayMP3_Struct { - char filename[0]; -}; - -//this is for custom title display in the skill window -struct TitleEntry_Struct { - uint32 skill_id; - uint32 skill_value; - char title[1]; -}; - -struct Titles_Struct { - uint32 title_count; - TitleEntry_Struct titles[0]; -}; - -//this is for title selection by the client -struct TitleListEntry_Struct { - uint32 unknown0; //title ID - char prefix[1]; //variable length, null terminated - char postfix[1]; //variable length, null terminated -}; - -struct TitleList_Struct { - uint32 title_count; - TitleListEntry_Struct titles[0]; //list of title structs - //uint32 unknown_ending; seen 0x7265, 0 -}; - -struct SetTitle_Struct { - uint32 is_suffix; //guessed: 0 = prefix, 1 = suffix - uint32 title_id; -}; - -struct SetTitleReply_Struct { - uint32 is_suffix; //guessed: 0 = prefix, 1 = suffix - char title[32]; - uint32 entity_id; -}; - -struct TaskDescription_Struct { -/*000*/ uint32 activity_count; //not right. -/*004*/ uint32 taskid; -/*008*/ uint8 unk; -/*009*/ uint32 id3; -/*013*/ uint32 unknown13; -/*017*/ char name[1]; //variable length, 0 terminated -/*018*/ uint32 unknown18; -/*022*/ uint32 unknown22; -/*026*/ char desc[1]; //variable length, 0 terminated -/*027*/ uint32 reward_count; //not sure -/*031*/ uint32 unknown31; -/*035*/ uint32 unknown35; -/*039*/ uint16 unknown39; -/*041*/ char reward_link[1]; //variable length, 0 terminated -/*042*/ uint32 unknown43; //maybe crystal count? -}; - -struct TaskMemberList_Struct { -/*00*/ uint32 gopher_id; -/*04*/ uint32 unknown04; -/*08*/ uint32 member_count; //1 less than the number of members -/*12*/ char list_pointer[0]; -/* list is of the form: - char member_name[1] //null terminated string - uint8 task_leader //boolean flag -*/ -}; - - -struct TaskActivity_Struct { -/*000*/ uint32 activity_count; //not right -/*004*/ uint32 id3; -/*008*/ uint32 taskid; -/*012*/ uint32 activity_id; -/*016*/ uint32 unknown016; -/*020*/ uint32 activity_type; -/*024*/ uint32 unknown024; -/*028*/ uint32 unknown28; -/*032*/ char mob_name[1]; //variable length, 0 terminated -/*033*/ char item_name[1]; //variable length, 0 terminated -/*034*/ uint32 goal_count; -/*038*/ uint32 unknown38; //0xFFFFFFFF -/*042*/ uint32 unknown42; //0xFFFFFFFF -/*046*/ uint32 unknown46; //saw 0x151,0x156 -/*050*/ uint32 unknown50; //saw 0x404,0 -/*054*/ char activity_name[1]; //variable length, 0 terminated... commonly empty -/*055*/ uint32 done_count; -/*059*/ uint32 unknown59; //=1 except on unknown and terminal activities? -/*063*/ -}; - -struct TaskHistoryEntry_Struct { - uint32 task_id; - char name[1]; - uint32 completed_time; -}; -struct TaskHistory_Struct { - uint32 completed_count; - TaskHistoryEntry_Struct entries[0]; -}; - -struct AcceptNewTask_Struct { - uint32 task_id; //set to 0 for 'decline' - uint32 task_master_id; //entity ID -}; - -//was all 0's from client, server replied with same op, all 0's -struct CancelTask_Struct { - uint32 unknown0; - uint32 unknown4; -}; - -struct AvaliableTask_Struct { - uint32 task_index; //no idea, seen 0x1 - uint32 task_master_id; //entity ID - uint32 task_id; - uint32 unknown012; - uint32 activity_count; //not sure, seen 2 - char desc[1]; //variable length, 0 terminated - uint32 reward_platinum;//not sure on these - uint32 reward_gold; - uint32 reward_silver; - uint32 reward_copper; - char some_name[1]; //variable length, 0 terminated - uint8 unknown1; - uint32 unknown2; //0xFFFFFFFF - uint32 unknown3; //0xFFFFFFFF - uint32 unknown4; //seen 0x16 - uint8 unknown5; -}; - - -struct BankerChange_Struct { - uint32 platinum; - uint32 gold; - uint32 silver; - uint32 copper; - uint32 platinum_bank; - uint32 gold_bank; - uint32 silver_bank; - uint32 copper_bank; -}; - -struct LeadershipExpUpdate_Struct { -/*00*/ uint32 group_leadership_exp; -/*04*/ uint32 group_leadership_points; -/*08*/ uint32 raid_leadership_exp; -/*12*/ uint32 raid_leadership_points; -}; - -struct UpdateLeadershipAA_Struct { -/*00*/ uint32 ability_id; -/*04*/ uint32 new_rank; -/*08*/ uint32 pointsleft; -/*12*/ -}; - - -struct RaidGeneral_Struct { -/*00*/ uint32 action; //=10 -/*04*/ char player_name[64]; //should both be the player's name -/*04*/ char leader_name[64]; -/*132*/ uint32 parameter; -}; - -struct RaidAdd_Struct { -/*000*/ uint32 action; //=0 -/*004*/ char player_name[64]; //should both be the player's name -/*068*/ char leader_name[64]; -/*132*/ uint8 _class; -/*133*/ uint8 level; -/*134*/ uint8 has_group; -/*135*/ uint8 unknown135; //seems to be 0x42 or 0 -}; - -struct RaidCreate_Struct { -/*00*/ uint32 action; //=8 -/*04*/ char leader_name[64]; -/*68*/ uint32 leader_id; -}; - -struct RaidMemberInfo_Struct { -/*00*/ uint8 group_number; -/*01*/ char member_name[1]; //dyanmic length, null terminated '\0' -/*00*/ uint8 unknown00; -/*01*/ uint8 _class; -/*02*/ uint8 level; -/*03*/ uint8 is_raid_leader; -/*04*/ uint8 is_group_leader; -/*05*/ uint8 main_tank; //not sure -/*06*/ uint8 unknown06[5]; //prolly more flags -}; - -struct RaidDetails_Struct { -/*000*/ uint32 action; //=6,20 -/*004*/ char leader_name[64]; -/*068*/ uint32 unknown68[4]; -/*084*/ LeadershipAA_Struct abilities; //ranks in backwards byte order -/*128*/ uint8 unknown128[142]; -/*354*/ uint32 leader_id; -}; - -struct RaidMembers_Struct { -/*000*/ RaidDetails_Struct details; -/*358*/ uint32 member_count; //including leader -/*362*/ RaidMemberInfo_Struct members[1]; -/*...*/ RaidMemberInfo_Struct empty; //seem to have an extra member with a 0 length name on the end -}; - -struct DynamicWall_Struct { -/*00*/ char name[32]; -/*32*/ float y; -/*36*/ float x; -/*40*/ float z; -/*44*/ uint32 something; -/*48*/ uint32 unknown48; //0 -/*52*/ uint32 one_hundred; //0x64 -/*56*/ uint32 unknown56; //0 -/*60*/ uint32 something2; -/*64*/ int32 unknown64; //-1 -/*68*/ uint32 unknown68; //0 -/*72*/ uint32 unknown72; //0 -/*76*/ uint32 unknown76; //0x100 -/*80*/ -}; - -enum { //bandolier actions - BandolierCreate = 0, - BandolierRemove = 1, - BandolierSet = 2 -}; - -struct BandolierCreate_Struct { -/*00*/ uint32 action; //0 for create -/*04*/ uint8 number; -/*05*/ char name[32]; -/*37*/ uint16 unknown37; //seen 0x93FD -/*39*/ uint8 unknown39; //0 -}; - -struct BandolierDelete_Struct { -/*00*/ uint32 action; -/*04*/ uint8 number; -/*05*/ uint8 unknown05[35]; -}; - -struct BandolierSet_Struct { -/*00*/ uint32 action; -/*04*/ uint8 number; -/*05*/ uint8 unknown05[35]; -}; - -struct Arrow_Struct { -/*000*/ uint32 type; //unsure on name, seems to be 0x1, dosent matter -/*005*/ uint8 unknown004[12]; -/*016*/ float src_y; -/*020*/ float src_x; -/*024*/ float src_z; -/*028*/ uint8 unknown028[12]; -/*040*/ float velocity; //4 is normal, 20 is quite fast -/*044*/ float launch_angle; //0-450ish, not sure the units, 140ish is straight -/*048*/ float tilt; //on the order of 125 -/*052*/ uint8 unknown052[8]; -/*060*/ float arc; -/*064*/ uint8 unknown064[12]; -/*076*/ uint32 source_id; -/*080*/ uint32 target_id; //entity ID -/*084*/ uint32 item_id; //1 to about 150ish -/*088*/ uint32 unknown088; //seen 125, dosent seem to change anything.. -/*092*/ uint32 unknown092; //seen 16, dosent seem to change anything -/*096*/ uint8 unknown096[5]; -/*101*/ char model_name[16]; -/*117*/ uint8 unknown117[19]; -}; - -//made a bunch of trivial structs for stuff for opcode finder to use -struct Consent_Struct { - char name[1]; //always at least a null -}; - -struct AdventureMerchant_Struct { - uint32 unknown_flag; //seems to be 1 - uint32 entity_id; -}; - -struct Save_Struct { - uint8 unknown00[192]; -}; - -struct GMToggle_Struct { - uint8 unknown0[64]; - uint32 toggle; -}; - -struct GroupInvite_Struct { - char invitee_name[64]; - char inviter_name[64]; -// uint8 unknown128[65]; -}; - -struct ColoredText_Struct { - uint32 color; - char msg[1]; -}; - -struct UseAA_Struct { - uint32 begin; - uint32 ability; - uint32 end; -}; - -struct AA_Ability { -/*00*/ uint32 skill_id; -/*04*/ uint32 base1; -/*08*/ uint32 base2; -/*12*/ uint32 slot; -}; - -struct SendAA_Struct { -/*0000*/ uint32 id; -/*0004*/ uint32 hotkey_sid; -/*0008*/ uint32 hotkey_sid2; -/*0012*/ uint32 title_sid; -/*0016*/ uint32 desc_sid; -/*0020*/ uint32 class_type; -/*0024*/ uint32 cost; -/*0028*/ uint32 seq; -/*0032*/ uint32 current_level; //1s, MQ2 calls this AARankRequired -/*0036*/ uint32 prereq_skill; //is < 0, abs() is category # -/*0040*/ uint32 prereq_minpoints; //min points in the prereq -/*0044*/ uint32 type; -/*0048*/ uint32 spellid; -/*0052*/ uint32 spell_type; -/*0056*/ uint32 spell_refresh; -/*0060*/ uint16 classes; -/*0062*/ uint16 berserker; //seems to be 1 if its a berserker ability -/*0064*/ uint32 max_level; -/*0068*/ uint32 last_id; -/*0072*/ uint32 next_id; -/*0076*/ uint32 cost2; -/*0080*/ uint32 unknown80[2]; //0s -/*0084*/ uint32 total_abilities; -/*0088*/ AA_Ability abilities[0]; -}; - -struct AA_List { - SendAA_Struct* aa[0]; -}; - -struct AA_Action { -/*00*/ uint32 action; -/*04*/ uint32 ability; -/*08*/ uint32 unknown08; -/*12*/ uint32 exp_value; -}; - -struct AA_Skills { //this should be removed and changed to AA_Array -/*00*/ uint32 aa_skill; -/*04*/ uint32 aa_value; -}; - -struct AAExpUpdate_Struct { -/*00*/ uint32 unknown00; //seems to be a value from AA_Action.ability -/*04*/ uint32 aapoints_unspent; -/*08*/ uint8 aaxp_percent; //% of exp that goes to AAs -/*09*/ uint8 unknown09[3]; //live dosent always zero these, so they arnt part of aaxp_percent -}; - - -struct AltAdvStats_Struct { -/*000*/ uint32 experience; -/*004*/ uint16 unspent; -/*006*/ uint16 unknown006; -/*008*/ uint8 percentage; -/*009*/ uint8 unknown009[3]; -}; - -struct PlayerAA_Struct { - AA_Skills aa_list[MAX_PP_AA_ARRAY]; -}; - -struct AATable_Struct { - AA_Skills aa_list[MAX_PP_AA_ARRAY]; -}; - -struct Weather_Struct { - uint32 val1; //generall 0x000000FF - uint32 type; //0x31=rain, 0x02=snow(i think), 0 = normal - uint32 mode; -}; - -struct ZoneInUnknown_Struct { - uint32 val1; - uint32 val2; - uint32 val3; -}; - -struct MobHealth_Struct { - uint16 entity_id; - uint8 hp; -}; - -struct AnnoyingZoneUnknown_Struct { - uint32 entity_id; - uint32 value; //always 4 -}; - -struct ApplyPoison_Struct { - uint32 inventorySlot; - uint32 success; -}; - -struct GuildMemberUpdate_Struct { -/*00*/ uint32 guild_id; //not sure -/*04*/ char member_name[64]; -/*68*/ uint16 zone_id; -/*70*/ uint16 instance_id; -/*72*/ uint32 unknown072; -}; - - }; //end namespace structs -}; //end namespace Client62 - -#endif /*CLIENT62_STRUCTS_H_*/ - - - - - - - - - - diff --git a/common/patches/patches.cpp b/common/patches/patches.cpp index 50d77a43f..b993b57dd 100644 --- a/common/patches/patches.cpp +++ b/common/patches/patches.cpp @@ -2,7 +2,6 @@ #include "../debug.h" #include "patches.h" -#include "client62.h" #include "titanium.h" #include "underfoot.h" #include "sof.h" @@ -11,7 +10,6 @@ #include "rof2.h" void RegisterAllPatches(EQStreamIdentifier &into) { - Client62::Register(into); Titanium::Register(into); SoF::Register(into); SoD::Register(into); @@ -21,7 +19,6 @@ void RegisterAllPatches(EQStreamIdentifier &into) { } void ReloadAllPatches() { - Client62::Reload(); Titanium::Reload(); SoF::Reload(); SoD::Reload(); diff --git a/utils/patches/patch_6.2.conf b/utils/patches/patch_6.2.conf deleted file mode 100644 index 8eca3dd4e..000000000 --- a/utils/patches/patch_6.2.conf +++ /dev/null @@ -1,539 +0,0 @@ -#ShowEQ Import Notes: -# ZERO THE FILE first -# sed 's/0x[0-9a-fA-F]{4}/0x0000/g' -#Unknown Mapping: -#OP_Action2 -> OP_Damage -#OP_EnvDamage -> OP_Damage ---> might have been a one time mistake -#Name Differences: -#OP_CancelInvite -> OP_GroupCancelInvite -#OP_GMFind -> OP_FindPersonRequest - -OP_Unknown=0x0000 -OP_ExploreUnknown=0x0292 #used for unknown explorer -#world packets -OP_ApproveWorld=0x41b1 # ShowEQ 06/29/05 -OP_LogServer=0x4668 # EQEmu 06/29/05 -OP_MOTD=0x7fea # EQEmu 06/29/05 -OP_SendLoginInfo=0x2792 # EQEmu 06/29/05 -OP_DeleteCharacter=0x0920 # ShowEQ 06/29/05 -OP_SendCharInfo=0x732c # EQEmu 06/29/05 -OP_ExpansionInfo=0x5c78 # EQEmu 06/29/05 -OP_CharacterCreate=0x6160 # EQEmu 06/29/05 -OP_RandomNameGenerator=0x23d4 # ShowEQ 06/29/05 -OP_GuildsList=0x6957 # ShowEQ 06/29/05 -OP_ApproveName=0x46b1 # EQEmu 06/29/05 -OP_EnterWorld=0x7262 # EQEmu 06/29/05 -OP_PostEnterWorld=0x0df0 # EQEmu 06/29/05 -OP_World_Client_CRC1=0x254d # ShowEQ 06/29/05 -OP_World_Client_CRC2=0x16c9 # ShowEQ 06/29/05 -OP_SetChatServer=0x6238 # EQEmu 06/29/05 -OP_SetChatServer2=0x6536 # EQEmu 06/29/05 -OP_ZoneServerInfo=0x407c # EQEmu 06/29/05 -OP_WorldComplete=0x509d # EQEmu 06/29/05 -OP_WorldClientReady=0x5e99 # EQEmu 06/29/05 (Guess - Doodman) -OP_WorldUnknown001=0x7510 # EQEmu 06/29/05 (New to 6/29) -OP_SendSystemStats=0x681b # anonymous system stats reporting -OP_WorldLogout=0x7186 -OP_ZoneUnavail=0x6d95 -OP_WorldLevelTooHigh=0x583b # world->client. Cancels zone in. -OP_CharInacessable=0x28aa # world->client. Cancels zone in. -#OP_InvalidLoginPassword=0x52A4 - -#Zone in opcodes -OP_ZoneEntry=0x2ec9 # ShowEQ 06/29/05 -OP_ZoneInUnknown=0x0000 -OP_AckPacket=0x7752 # ShowEQ 06/29/05 -OP_NewZone=0x7ac5 # ShowEQ 06/29/05 -OP_ReqClientSpawn=0x0e76 # ShowEQ 06/29/05 -OP_ZoneSpawns=0x5ee8 # ShowEQ 06/29/05 -OP_CharInventory=0x15ff # EQEmu 06/29/05 -OP_SetServerFilter=0x7709 # ShowEQ 06/29/05 -OP_LockoutTimerInfo=0x7c12 # EQEmu 06/29/05 -OP_SendZonepoints=0x775d # EQEmu 06/29/05 -OP_SpawnDoor=0x4c24 # ShowEQ 06/29/05 -OP_ReqNewZone=0x47c9 # ShowEQ 06/29/05 -OP_PlayerProfile=0x75df # ShowEQ 06/29/05 -OP_TimeOfDay=0x1580 # ShowEQ 06/29/05 -OP_SendAATable=0x367d # ShowEQ 06/29/05 -OP_ZoneServerReady=0x0000 #dosent exist in this version - - -OP_Logout=0x0701 # EQEmu 06/29/05 -OP_LogoutReply=0x48c2 # ShowEQ 06/29/05 (OP_Logout) -OP_PreLogoutReply=0x711e #0 len packet sent during logout/zoning -OP_LevelUpdate=0x6d44 # ShowEQ 06/29/05 -OP_MobUpdate=0x0000 -OP_Stamina=0x74ab # ShowEQ 06/29/05 - -#Petition Opcodes -OP_PetitionSearch=0x2aec #search term for petition -OP_PetitionSearchResults=0x2aec #(list of?) matches from search -OP_PetitionSearchText=0x0000 #text results of search -OP_Petition=0x251f #0x73cb -OP_PetitionUpdate=0x3813 #guess -OP_PetitionCheckout=0x0000 -OP_PetitionCheckIn=0x0000 -OP_PetitionQue=0x0000 -OP_PetitionUnCheckout=0x0000 -OP_PetitionDelete=0x0000 -OP_DeletePetition=0x0000 -OP_PetitionResolve=0x6ea9 #0x688f # ShowEQ 5/11/05 -OP_PDeletePetition=0x0000 -OP_PetitionBug=0x0000 -OP_PetitionRefresh=0x0000 -OP_PetitionCheckout2=0x0000 -OP_PetitionViewPetition=0x0000 - -#Guild Opcodes -OP_ZoneGuildList=0x68AC -OP_GuildMemberList=0x147d # ShowEQ 06/29/05 -OP_GuildMemberUpdate=0x4cc7 # ShowEQ 06/29/05 -OP_GuildMemberLevelUpdate=0x0000 #dosent exist in this version. -OP_GuildRemove=0x6cce # EQEmu - Doodman (found 8/26/05 -OP_GuildPeace=0x0e37 # EQEmu - Doodman (found 8/26/05 -OP_GuildWar=0x186d # EQEmu - Doodman (found 8/26/05 -OP_GuildLeader=0x1ef1 # EQEmu - Doodman (found 8/26/05) -OP_GuildDemote=0x1f46 # EQEmu - Doodman (found 8/26/05) -OP_GuildMOTD=0x21ed # ShowEQ 06/29/05 -OP_SetGuildMOTD=0x475a # EQEmu - Doodman (found 8/26/05) -OP_GetGuildsList=0x7fec # ShowEQ 06/29/05 -OP_GuildInvite=0x61d0 # EQEmu - Doodman (found 8/26/05) -OP_GuildPublicNote=0x17a2 # EQEmu - Doodman (found 8/26/05) -OP_GuildDelete=0x5a4d # EQEmu - Doodman (found 8/26/05 -OP_GuildInviteAccept=0x0179 # EQEmu - Doodman (found 8/26/05) -OP_GetGuildMOTD=0x3246 -OP_GetGuildMOTDReply=0x5B14 -OP_GuildManageBanker=0x3d1e -OP_GuildBank=0x0000 -#guild opcodes: 549F (clear guild?), 0x0695, 0x0AC0, 0x1864, 0x32cf, 0x4cc7, -# 0x461A, 0x6966, 0x7085 - - -#GM/guide opcodes -OP_GMServers=0x3387 #/servers -OP_GMBecomeNPC=0x7864 #/becomenpc -OP_GMZoneRequest=0x61ff #/zone -OP_GMSearchCorpse=0x7f3e #/searchcorpse -OP_GMHideMe=0x0581 #/hideme -OP_GMGoto=0x69c8 #/goto -OP_GMDelCorpse=0x727a #/delcorpse -OP_GMApproval=0x0000 -OP_GMToggle=0x5ce2 #/toggle -OP_GMZoneRequest2=0x0000 -OP_GMSummon=0x3383 #/summon -OP_GMEmoteZone=0x3905 #/emotezone -OP_GMFind=0x5e6a #/find -OP_GMKick=0x1cee #/kick -OP_GMNameChange=0x0000 - -OP_SafePoint=0x0000 -OP_Bind_Wound=0x4796 -OP_GMTraining=0x613d -OP_GMEndTraining=0x181c -OP_GMTrainSkill=0x3838 -OP_GMEndTrainingResponse=0x0a94 -OP_Animation=0x0b71 # EQEmu 06/29/05 -OP_Taunt=0x5306 -OP_Stun=0x7DCF -OP_MoneyUpdate=0x425c -OP_SendAAStats=0x5966 # EQEmu 06/29/05 -OP_SendExpZonein=0x0587 # ShowEQ 06/29/05 -OP_RespondAA=0x35e8 -OP_UpdateAA=0x0000 -OP_IncreaseStats=0x0000 -OP_ReadBook=0x1496 -OP_CombatAbility=0x5e55 -OP_Dye=0x773f # ShowEQ 06/29/05 -OP_Consume=0x7a83 # ShowEQ 06/29/05 -OP_Begging=0x2c81 # ShowEQ 06/29/05 -OP_InspectRequest=0x2403 -OP_Action2=0x0000 # ShowEQ 06/29/05 -OP_BeginCast=0x3990 # ShowEQ 06/29/05 -OP_WhoAllRequest=0x5cdd # ShowEQ 06/29/05 -OP_ColoredText=0x4bc6 # ShowEQ 06/29/05 -OP_Consent=0x1081 # ShowEQ 06/29/05 -OP_LFGCommand=0x022f # ShowEQ 06/29/05 -OP_LFGGetMatchesRequest=0x6f82 # ShowEQ 06/29/05 -OP_LFGAppearance=0x024d -OP_LFGResponse=0x1fe1 # ShowEQ 5/11/05 -OP_LFGGetMatchesResponse=0x06c5 # ShowEQ 06/29/05 -OP_LootItem=0x2acf # ShowEQ 06/29/05 -OP_Bug=0x3eba # ShowEQ 06/29/05 -OP_BoardBoat=0x67c9 # ShowEQ 06/29/05 -OP_Save=0x6d9b # ShowEQ 06/29/05 -OP_Camp=0x2844 # ShowEQ 06/29/05 -OP_EndLootRequest=0x7fe4 # ShowEQ 06/29/05 -OP_LoadSpellSet=0x403e # ShowEQ 06/29/05 -OP_AutoAttack=0x6c47 # ShowEQ 06/29/05 -OP_AutoFire=0x6c53 -OP_Consider=0x2717 # ShowEQ 06/29/05 -OP_Emote=0x55bc # ShowEQ 06/29/05 -OP_PetCommands=0x58b2 # ShowEQ 06/29/05 -OP_PetBuffWindow=0x4e31 -OP_SpawnAppearance=0x18b7 # ShowEQ 06/29/05 -OP_DeleteSpawn=0x1a64 # ShowEQ 06/29/05 -OP_FormattedMessage=0x42cd # ShowEQ 06/29/05 -OP_WhoAllResponse=0x6686 # ShowEQ 06/29/05 -OP_AutoAttack2=0x0fa6 # ShowEQ 06/29/05 -OP_SetRunMode=0x0342 # ShowEQ 06/29/05 -OP_SimpleMessage=0x5a48 # ShowEQ 06/29/05 -OP_SaveOnZoneReq=0x2baf # ShowEQ 06/29/05 -OP_MoveDoor=0x0ef7 # ShowEQ 06/29/05 -OP_SenseHeading=0x5666 # ShowEQ 06/29/05 -OP_Buff=0x33dc # ShowEQ 06/29/05 -OP_LootComplete=0x20b2 # ShowEQ 06/29/05 -OP_EnvDamage=0x0990 -OP_Split=0x6a53 # ShowEQ 06/29/05 -OP_Surname=0x48fe # ShowEQ 06/29/05 -OP_ClearSurname=0x0000 -OP_MoveItem=0x7657 # ShowEQ 06/29/05 -OP_FaceChange=0x763b # ShowEQ 06/29/05 -OP_ItemPacket=0x3397 # ShowEQ 06/29/05 -OP_ItemLinkResponse=0x1d43 # ShowEQ 06/29/05 -OP_ClientReady=0x5e20 # ShowEQ 06/29/05 -OP_ZoneChange=0x60ef # ShowEQ 06/29/05 -OP_MemorizeSpell=0x05ac # ShowEQ 06/29/05 -OP_ItemLinkClick=0x53e5 # ShowEQ 06/29/05 -OP_SwapSpell=0x36b2 # ShowEQ 06/29/05 -OP_Forage=0x7c32 # ShowEQ 06/29/05 -OP_ConsentResponse=0x6380 # ShowEQ 06/29/05 -OP_BazaarSearch=0x524e # ShowEQ 06/29/05 -OP_NewSpawn=0x4f11 # ShowEQ 06/29/05 -OP_WearChange=0x601d # ShowEQ 06/29/05 -OP_Action=0x4513 # ShowEQ 06/29/05 -OP_SpecialMesg=0x5ef7 # ShowEQ 06/29/05 -OP_Bazaar=0x0000 -OP_LeaveBoat=0x7187 # ShowEQ 06/29/05 -OP_Weather=0x65ca # ShowEQ 06/29/05 -OP_LFPGetMatchesRequest=0x45d0 # ShowEQ 06/29/05 -OP_Illusion=0x7441 # ShowEQ 06/29/05 -OP_TargetMouse=0x2274 # ShowEQ 06/29/05 -OP_InspectAnswer=0x2dd6 # ShowEQ 06/29/05 -OP_GMKill=0x692c # ShowEQ 06/29/05 -OP_MoneyOnCorpse=0x2fca # ShowEQ 06/29/05 -OP_ClickDoor=0x700d # ShowEQ 06/29/05 -OP_LootRequest=0x2316 # ShowEQ 06/29/05 -OP_YellForHelp=0x2e20 # ShowEQ 06/29/05 -OP_ManaChange=0x0b2d # ShowEQ 06/29/05 -OP_ConsentDeny=0x4e8c # ShowEQ 06/29/05 -OP_LFPCommand=0x35a6 # ShowEQ 06/29/05 -OP_RandomReply=0x6cd5 # ShowEQ 06/29/05 -OP_DenyResponse=0x7c66 # ShowEQ 06/29/05 -OP_ConsiderCorpse=0x673c # ShowEQ 06/29/05 -OP_CorpseDrag=0x50c0 # -OP_CorpseDrop=0x7c7c # -OP_ConfirmDelete=0x28f2 # ShowEQ 06/29/05 -OP_MobHealth=0x3d2d # ShowEQ 06/29/05 -OP_SkillUpdate=0x6a93 # ShowEQ 06/29/05 -OP_RandomReq=0x21e0 # ShowEQ 06/29/05 -OP_CastSpell=0x4839 # ShowEQ 06/29/05 -OP_ClientUpdate=0x14cb # ShowEQ 06/29/05 -OP_MobUpdate=0x0000 #not used anymore, here for backwards compat -OP_Report=0x0375 # ShowEQ 06/29/05 -OP_GroundSpawn=0x736b # ShowEQ 06/29/05 -OP_TargetCommand=0x6563 #0x0dfe # ShowEQ 06/29/05 -OP_TargetHoTT=0x3ef6 -OP_LFPGetMatchesResponse=0x63fe # ShowEQ 06/29/05 -OP_Jump=0x4dbc # ShowEQ 06/29/05 -OP_ExpUpdate=0x5ecd # ShowEQ 06/29/05 -OP_AAAction=0x3af4 # ShowEQ 06/29/05 -OP_Death=0x5188 # ShowEQ 06/29/05 -OP_BecomeCorpse=0x128c -OP_GMLastName=0x0c81 # ShowEQ 06/29/05 -OP_InitialMobHealth=0x2ecc # ShowEQ 06/29/05 -OP_Mend=0x14ef # ShowEQ 06/29/05 -OP_MendHPUpdate=0x1ffa # ShowEQ 5/11/05 -OP_Feedback=0x224d # ShowEQ 06/29/05 -OP_TGB=0x5e51 # ShowEQ 06/29/05 -OP_InterruptCast=0x0db3 -OP_Damage=0x1848 # ShowEQ 06/29/05 (OP_Action2) -OP_ChannelMessage=0x1004 # ShowEQ 06/29/05 (OP_CommonMessage) -OP_LevelAppearance=0x358e -OP_MultiLineMsg=0x0000 -OP_Charm=0x10a1 -OP_DeleteSpell=0x3fe6 -OP_ApproveZone=0x0000 -OP_Assist=0x5D02 -OP_AugmentItem=0x539b -OP_BazaarInspect=0x0000 -OP_AAExpUpdate=0x6dd8 # ShowEQ 06/29/05 -OP_ClientError=0x0000 -OP_DeleteItem=0x1c4a -OP_DeleteCharge=0x0841 -OP_ControlBoat=0x0000 -OP_DumpName=0x0000 -OP_FeignDeath=0x2ad8 -OP_Fishing=0x0b36 -OP_Heartbeat=0x0000 -OP_InstillDoubt=0x389e -OP_ItemName=0x0000 -OP_LDoNButton=0x0000 -OP_LDoNOpen=0x083b -OP_MoveCoin=0x1dd9 -OP_ReloadUI=0x0000 -OP_ZonePlayerToBind=0x385e # FNW Discovered on Feb 9, 2007 -OP_Translocate=0x78c1 -OP_Sacrifice=0x5f62 -OP_ApplyPoison=0x4298 - -#bazaar trader stuff stuff: -#become and buy from -#Server->Client: [ Opcode: OP_Unknown (0x2403) Size: 8 ] -# 0: 46 01 00 00 39 01 00 00 | F...9... -OP_TraderDelItem=0x0da9 -OP_BecomeTrader=0x66f9 -OP_TraderShop=0x19d8 -OP_TraderItemUpdate=0x0000 -OP_Trader=0x0681 -OP_ShopItem=0x0000 -OP_TraderBuy=0x0f8e # ShowEQ 06/29/05 -OP_Barter=0x7460 - -#pc/npc trading -OP_TradeRequest=0x372f # ShowEQ 06/29/05 -OP_TradeAcceptClick=0x0065 # ShowEQ 06/29/05 -OP_TradeRequestAck=0x4048 # ShowEQ 06/29/05 -OP_TradeCoins=0x34c1 -OP_FinishTrade=0x6014 -OP_CancelTrade=0x2dc1 # ShowEQ 06/29/05 -OP_TradeMoneyUpdate=0x3e63 #not sure - -#merchant crap -OP_ShopPlayerSell=0x0e13 # ShowEQ 06/29/05 -OP_ShopEnd=0x7e03 # ShowEQ 06/29/05 -OP_ShopEndConfirm=0x0000 -OP_ShopPlayerBuy=0x221e -OP_ShopRequest=0x3c4b # ShowEQ 06/29/05 -OP_ShopDelItem=0x0000 #0x0da9 maybe, 16 bytes though - -#tradeskill stuff: -OP_ClickObject=0x0f47 # ShowEQ 06/29/05 -OP_ClickObjectAction=0x6937 # EQEMu 06/29/05 -OP_RecipeDetails=0x0353 # EQEMu 06/29/05 -OP_RecipesFavorite=0x23f0 -OP_RecipesSearch=0x31f8 # EQEmu 06/29/05 -OP_RecipeReply=0x4ea2 # EQEmu 06/29/05 -OP_RecipeAutoCombine=0x7822 -OP_TradeSkillCombine=0x0b40 # ShowEQ 06/29/05 - -OP_RequestDuel=0x28e1 -OP_DuelResponse=0x2e78 -OP_DuelResponse2=0x3bad #when accepted - -OP_RezzComplete=0x60fa -OP_RezzRequest=0x417a -OP_RezzAnswer=0x6219 -OP_SafeFallSuccess=0x5309 -OP_Shielding=0x0000 -OP_TargetReject=0x0000 -OP_TestBuff=0x0000 -OP_Track=0x5205 # ShowEQ 06/29/05 -OP_TrackTarget=0x71ae -OP_TrackUnknown=0x74e1 #size 0 right after OP_Track - -#Tribute Packets: -OP_OpenGuildTributeMaster=0x60b6 #open guild tribute master window -OP_OpenTributeMaster=0x512e #open tribute master window -OP_OpenTributeReply=0x0000 #reply to open request -OP_SelectTribute=0x625d #clicking on a tribute, and text reply -OP_TributeItem=0x6f6c #donating an item -OP_TributeMoney=0x27b3 #donating money -OP_TributeNPC=0x0000 #seems to be missing now -OP_TributeToggle=0x2688 #activating/deactivating tribute -OP_TributeTimer=0x4665 #a 4 byte tier update, 10 minutes for seconds -OP_TributePointUpdate=0x6463 #16 byte point packet -OP_TributeUpdate=0x5639 # ShowEQ 06/29/05 -OP_GuildTributeInfo=0x5e3d # EQEmu 06/29/05 -OP_TributeInfo=0x152d # EQEmu 06/29/05 -OP_SendGuildTributes=0x5e3a # request packet, 4 bytes -OP_SendTributes=0x067a # request packet, 4 bytes, migth be backwards -OP_CloseTributeMaster=0x7f25 #sent by client when they close window - -#Adventure packets: -OP_LeaveAdventure=0x0c0d -OP_AdventureFinish=0x3906 -OP_AdventureInfoRequest=0x2aaf #right click adventure recruiter -OP_AdventureInfo=0x1db5 #text reply to right click -OP_AdventureRequest=0x43fd -OP_AdventureDetails=0x3f26 -OP_AdventureData=0x0677 -OP_AdventureUpdate=0x64ac -OP_AdventureMerchantRequest=0x0950 -OP_AdventureMerchantResponse=0x4416 -OP_AdventureMerchantPurchase=0x413d -OP_AdventureMerchantSell=0x0097 -OP_AdventurePointsUpdate=0x420a #not sure, followed purchase -OP_AdventureStatsRequest=0x5fc7 -OP_AdventureStatsReply=0x56cd -OP_AdventureLeaderboardRequest=0x230a -OP_AdventureLeaderboardReply=0x0d0f -# request stats: 0x5fc7, reply 0x56cd -# request leaderboard: 0x230a, reply 0x0d0f - -#Group Opcodes -OP_GroupDisband=0x4033 # ShowEQ 06/29/05 -OP_GroupInvite=0x3853 # ShowEQ 06/29/05 -OP_GroupFollow=0x1b48 # ShowEQ 06/29/05 -OP_GroupUpdate=0x66ba # ShowEQ 06/29/05 -OP_GroupAcknowledge=0x0797 -OP_GroupCancelInvite=0x42c9 # ShowEQ 06/29/05 -OP_GroupDelete=0x0000 -OP_GroupFollow2=0x0000 #used with GroupInvite2 -OP_GroupInvite2=0x1f27 #this is sometimes sent instead of OP_GroupInvite -OP_CancelInvite=0x0000 - -OP_RaidJoin=0x0000 # ShowEQ 06/29/05 -OP_RaidInvite=0x1f21 # ShowEQ 06/29/05 -OP_RaidUpdate=0x1974 # EQEmu 06/29/05 - - -OP_ZoneComplete=0x0000 -OP_ItemLinkText=0x0000 -OP_ClearObject=0x8258 -OP_DisciplineUpdate=0x7180 -OP_DisciplineTimer=0x53df -OP_LocInfo=0x0000 -OP_FindPersonRequest=0x3c41 # ShowEQ 06/29/05 -OP_FindPersonReply=0x5711 -OP_ForceFindPerson=0x0000 -OP_LoginComplete=0x0000 -OP_Sound=0x4a1d -#OP_Zone_MissingName01=0x0000 #remove on recompile -OP_MobRename=0x3230 -OP_BankerChange=0x6a5b - -#Rogue packets -OP_SenseTraps=0x24ab # ShowEQ 06/29/05 -OP_PickPocket=0x4a2a -OP_DisarmTraps=0x0000 -OP_Disarm=0x17d9 -OP_Hide=0x6f64 # ShowEQ 06/29/05 -OP_Sneak=0x4312 # ShowEQ 06/29/05 - -#Task packets -#task complete related: 0x54eb (24 bytes), 0x4c8c (8 bytes), 0x6a1d (4 bytes) -OP_TaskActivityComplete=0x54eb -OP_CompletedTasks=0x53c4 # ShowEQ 06/29/05 -OP_TaskDescription=0x682d # ShowEQ 06/29/05 -OP_TaskActivity=0x3ba8 # ShowEQ 06/29/05 -OP_TaskMemberList=0x09b6 #not sure -OP_OpenNewTasksWindow=0x5e7c #combined with OP_AvaliableTask I think -OP_AvaliableTask=0x0000 -OP_AcceptNewTask=0x207f -OP_TaskHistoryRequest=0x3274 -OP_TaskHistoryReply=0x009c -OP_CancelTask=0x4c8c -OP_DeclineAllTasks=0x207f #not sure, 12 bytes - - -OP_RequestClientZoneChange=0x1235 -OP_PurchaseLeadershipAA=0x07f1 -OP_UpdateLeadershipAA=0x3eec -OP_LeadershipExpUpdate=0x7416 -OP_LeadershipExpToggle=0x17bf -OP_GroupUpdateLeaderAA=0x4c3f -OP_MarkNPC=0x5b37 -OP_ClearNPCMarks=0x1794 -OP_DoGroupLeadershipAbility=0x4ffe -OP_DelegateAbility=0x56eb - -#The following 4 Opcodes are for SoF only: -OP_FinishWindow=0x0000 #Trevius 03/15/09 -OP_FinishWindow2=0x0000 #Trevius 03/15/09 -OP_ItemVerifyRequest=0x0000 #Trevius 03/15/09 -OP_ItemVerifyReply=0x0000 #Trevius 03/15/09 - -#discovered opcodes not yet used: -OP_CrashDump=0x6d5d -OP_PlayMP3=0x0000 -OP_FriendsWho=0x41db -OP_MoveLogRequest=0x78e8 #gone I think -OP_MoveLogDisregard=0x0000 #gone I think -OP_ReclaimCrystals=0x12fd -OP_CrystalCountUpdate=0x0000 -OP_DynamicWall=0x0000 -OP_CustomTitles=0x2a28 # ShowEQ 06/29/05 -OP_RequestTitles=0x5eba # EQEmu 06/29/05 -OP_SendTitleList=0x3e89 # EQEmu 06/29/05 -OP_SetTitle=0x1f22 # EQEmu 06/29/05 -OP_SetTitleReply=0x5eab # EQEmu 06/29/05 -OP_Bandolier=0x6f0c -OP_PotionBelt=0x0719 -OP_OpenDiscordMerchant=0x0000 #8 bytes -OP_DiscordMerchantInventory=0x0000 #long item packet -OP_GiveMoney=0x56d4 #16 bytes, pp, gp, sp, cp. -OP_OnLevelMessage=0x1dde -OP_PopupResponse=0x3816 -OP_RequestKnowledgeBase=0x7584 -OP_KnowledgeBase=0x4a52 -OP_PlayerUnderWorld=0x46d9 -OP_PVPStats=0x5cc0 -OP_PVPLeaderBoardRequest=0x61d2 -OP_PVPLeaderBoardReply=0x1a59 -OP_PVPLeaderBoardDetailsRequest=0x06a2 -OP_PVPLeaderBoardDetailsReply=0x246a -OP_WeaponEquip1=0x6c5e -OP_WeaponEquip2=0x63da -OP_WeaponUnequip2=0x381d -OP_VoiceMacroIn=0x2866 -OP_VoiceMacroOut=0x2ec6 - -#named unknowns, to make looking for real unknown easier -OP_AnnoyingZoneUnknown=0x0000 # EQEmu 06/29/05 -OP_Some6ByteHPUpdate=0x0000 #seems to happen when you target group members -OP_SomeItemPacketMaybe=0x497c # EQEmu 06/29/05 -OP_QueryResponseThing=0x6379 -OP_FloatListThing=0x7510 # EQEmu 06/29/05 - -#Login opcodes -OP_SessionReady=0x0001 -OP_Login=0x0002 -OP_ServerListRequest=0x0004 -OP_PlayEverquestRequest=0x000d -OP_PlayEverquestResponse=0x0021 -OP_ChatMessage=0x0016 -OP_LoginAccepted=0x0017 -OP_ServerListResponse=0x0018 -OP_Poll=0x0029 -OP_EnterChat=0x000f -OP_PollResponse=0x0011 - -#raw opcodes -OP_RAWSessionRequest=0x0000 -OP_RAWSessionResponse=0x0000 -OP_RAWCombined=0x0000 -OP_RAWSessionDisconnect=0x0000 -OP_RAWKeepAlive=0x0000 -OP_RAWSessionStatRequest=0x0000 -OP_RAWSessionStatResponse=0x0000 -OP_RAWPacket=0x0000 -OP_RAWFragment=0x0000 -OP_RAWOutOfOrderAck=0x0000 -OP_RAWAck=0x0000 -OP_RAWAppCombined=0x0000 -OP_RAWOutOfSession=0x0000 - -#mail opcodes -OP_Command=0x0000 -OP_MailboxHeader=0x0000 -OP_MailHeader=0x0000 -OP_MailBody=0x0000 -OP_NewMail=0x0000 -OP_SentConfirm=0x0000 - - -#we need to document the differences between these packets to make identifying them easier -OP_MobHealth=0x3d2d # ShowEQ 06/29/05 -OP_HPUpdate=0x217b # ShowEQ 06/29/05 -OP_Some3ByteHPUpdate=0x0000 #initial HP update for mobs -OP_InitialHPUpdate=0x7ac2 # ShowEQ 06/29/05 - -#remove these -#junk -OP_0x0193=0x0000 -OP_0x0347=0x0000 -OP_ConsumeAmmo=0x0000 -OP_EmoteAnim=0x0000 -OP_Deny=0x0000 -OP_SetDataRate=0x0000 - diff --git a/world/clientlist.cpp b/world/clientlist.cpp index a18a9cafc..d0b90a266 100644 --- a/world/clientlist.cpp +++ b/world/clientlist.cpp @@ -1296,7 +1296,6 @@ void ClientList::GetClients(const char *zone_name, std::vector(EQClientUnknown)), - luabind::value("62", static_cast(EQClient62)), luabind::value("Titanium", static_cast(EQClientTitanium)), luabind::value("SoF", static_cast(EQClientSoF)), luabind::value("SoD", static_cast(EQClientSoD)), diff --git a/zone/tasks.cpp b/zone/tasks.cpp index f8f3ba9b2..1e73e3150 100644 --- a/zone/tasks.cpp +++ b/zone/tasks.cpp @@ -2773,13 +2773,6 @@ void TaskManager::SendActiveTaskDescription(Client *c, int TaskID, int SequenceN if(strlen(Tasks[TaskID]->Reward) != 0) { switch(c->GetClientVersion()) { - - case EQClient62: - { - MakeAnyLenString(&RewardTmp, "%c%07i-00001-00001-00001-00001-000013E0ABA6B%s%c", - 0x12, ItemID, Tasks[TaskID]->Reward,0x12); - break; - } case EQClientTitanium: { MakeAnyLenString(&RewardTmp, "%c%06X000000000000000000000000000000014505DC2%s%c", @@ -2807,13 +2800,6 @@ void TaskManager::SendActiveTaskDescription(Client *c, int TaskID, int SequenceN if(Item) { switch(c->GetClientVersion()) { - - case EQClient62: - { - MakeAnyLenString(&RewardTmp, "%c%07i-00001-00001-00001-00001-000013E0ABA6B%s%c", - 0x12, ItemID, Item->Name,0x12); - break; - } case EQClientTitanium: { MakeAnyLenString(&RewardTmp, "%c%06X000000000000000000000000000000014505DC2%s%c",