eqemu-server/common/patches/titanium_structs.h
2016-05-19 22:50:08 -04:00

3541 lines
87 KiB
C++

/* EQEMu: Everquest Server Emulator
Copyright (C) 2001-2016 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 COMMON_TITANIUM_STRUCTS_H
#define COMMON_TITANIUM_STRUCTS_H
namespace Titanium
{
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 UseTint; // if there's a tint this is FF
} RGB;
uint32 Color;
};
};
/*
** Character Selection Struct
** Length: 1704 Bytes
**
*/
struct CharacterSelect_Struct
{
/*0000*/ uint32 Race[10]; // Characters Race
/*0040*/ Color_Struct CS_Colors[10][9]; // Characters Equipment Colors
/*0400*/ uint8 BeardColor[10]; // Characters beard Color
/*0410*/ uint8 HairStyle[10]; // Characters hair style
/*0420*/ 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)
/*0780*/ uint32 SecondaryIDFile[10]; // Characters secondary IDFile number
/*0820*/ uint8 Unknown820[10]; // 10x ff
/*0830*/ uint8 Unknown830[2]; // 2x 00
/*0832*/ uint32 Deity[10]; // Characters Deity
/*0872*/ uint8 GoHome[10]; // 1=Go Home available, 0=not
/*0882*/ uint8 Tutorial[10]; // 1=Tutorial available, 0=not
/*0892*/ uint8 Beard[10]; // Characters Beard Type
/*0902*/ uint8 Unknown902[10]; // 10x ff
/*0912*/ uint32 PrimaryIDFile[10]; // Characters primary IDFile number
/*0952*/ uint8 HairColor[10]; // Characters Hair Color
/*0962*/ uint8 Unknown0962[2]; // 2x 00
/*0964*/ uint32 Zone[10]; // Characters Current Zone
/*1004*/ uint8 Class[10]; // Characters Classes
/*1014*/ uint8 Face[10]; // Characters Face Type
/*1024*/ char Name[10][64]; // Characters Names
/*1664*/ uint8 Gender[10]; // Characters Gender
/*1674*/ uint8 EyeColor1[10]; // Characters Eye Color
/*1684*/ uint8 EyeColor2[10]; // Characters Eye 2 Color
/*1694*/ uint8 Level[10]; // Characters Levels
/*1704*/
};
/*
** 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
*/
/*
showeq -> eqemu
sed -e 's/_t//g' -e 's/seto_0xFF/set_to_0xFF/g'
*/
struct Spawn_Struct {
/*0000*/ uint8 unknown0000;
/*0001*/ uint8 gm; // 0=no, 1=gm
/*0002*/ uint8 unknown0003;
/*0003*/ uint8 aaitle; // 0=none, 1=general, 2=archtype, 3=class
/*0004*/ uint8 unknown0004;
/*0005*/ uint8 anon; // 0=normal, 1=anon, 2=roleplay
/*0006*/ uint8 face; // Face id for players
/*0007*/ char name[64]; // Player's Name
/*0071*/ uint16 deity; // Player's Deity
/*0073*/ uint16 unknown0073;
/*0075*/ float size; // Model size
/*0079*/ uint32 unknown0079;
/*0083*/ uint8 NPC; // 0=player,1=npc,2=pc corpse,3=npc corpse,a
/*0084*/ uint8 invis; // Invis (0=not, 1=invis)
/*0085*/ uint8 haircolor; // Hair color
/*0086*/ uint8 curHp; // Current hp %%% wrong
/*0087*/ uint8 max_hp; // (name prolly wrong)takes on the value 100 for players, 100 or 110 for NPCs and 120 for PC corpses...
/*0088*/ uint8 findable; // 0=can't be found, 1=can be found
/*0089*/ uint8 unknown0089[5];
/*0094*/ signed deltaHeading:10;// change in heading
signed x:19; // x coord
signed padding0054:3; // ***Placeholder
/*0098*/ signed y:19; // y coord
signed animation:10; // animation
signed padding0058:3; // ***Placeholder
/*0102*/ signed z:19; // z coord
signed deltaY:13; // change in y
/*0106*/ signed deltaX:13; // change in x
unsigned heading:12; // heading
signed padding0066:7; // ***Placeholder
/*0110*/ signed deltaZ:13; // change in z
signed padding0070:19; // ***Placeholder
/*0114*/ uint8 eyecolor1; // Player's left eye color
/*0115*/ uint8 unknown0115[24];
/*0139*/ uint8 showhelm; // 0=no, 1=yes
/*0140*/ uint8 unknown0140[4];
/*0144*/ uint8 is_npc; // 0=no, 1=yes
/*0145*/ uint8 hairstyle; // Hair style
/*0146*/ uint8 beardcolor; // Beard color
/*0147*/ uint8 unknown0147[4];
/*0151*/ uint8 level; // Spawn Level
/*0152*/ uint32 PlayerState; // PlayerState controls some animation stuff
/*0156*/ uint8 beard; // Beard style
/*0157*/ char suffix[32]; // Player's suffix (of Veeshan, etc.)
/*0189*/ uint32 petOwnerId; // If this is a pet, the spawn id of owner
/*0193*/ uint8 guildrank; // 0=normal, 1=officer, 2=leader
/*0194*/ uint8 unknown0194[3];
/*0197*/ union
{
struct
{
/*0197*/ uint32 equip_helmet; // Equipment: Helmet Visual
/*0201*/ uint32 equip_chest; // Equipment: Chest Visual
/*0205*/ uint32 equip_arms; // Equipment: Arms Visual
/*0209*/ uint32 equip_bracers; // Equipment: Bracers Visual
/*0213*/ uint32 equip_hands; // Equipment: Hands Visual
/*0217*/ uint32 equip_legs; // Equipment: Legs Visual
/*0221*/ uint32 equip_feet; // Equipment: Feet Visual
/*0225*/ uint32 equip_primary; // Equipment: Primary Visual
/*0229*/ uint32 equip_secondary; // Equipment: Secondary Visual
} equip;
/*0197*/ uint32 equipment[9]; // Array elements correspond to struct equipment above
};
/*0233*/ float runspeed; // Speed when running
/*0036*/ uint8 afk; // 0=no, 1=afk
/*0238*/ uint32 guildID; // Current guild
/*0242*/ char title[32]; // Title
/*0274*/ uint8 unknown0274;
/*0275*/ uint8 helm; // Helm texture
/*0276*/ uint8 set_to_0xFF[8]; // ***Placeholder (all ff)
/*0284*/ uint32 race; // Spawn race
/*0288*/ uint32 unknown0288;
/*0292*/ char lastName[32]; // Player's Lastname
/*0324*/ float walkspeed; // Speed when walking
/*0328*/ uint8 unknown0328;
/*0329*/ uint8 is_pet; // 0=no, 1=yes
/*0330*/ uint8 light; // Spawn's lightsource %%% wrong
/*0331*/ uint8 class_; // Player's class
/*0332*/ uint8 eyecolor2; // Left eye color
/*0333*/ uint8 flymode;
/*0334*/ uint8 gender; // Gender (0=male, 1=female)
/*0335*/ uint8 bodytype; // Bodytype
/*0336*/ uint8 unknown0336[3];
union
{
/*0339*/ 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!
/*0339*/ uint8 mount_color; // drogmor: 0=white, 1=black, 2=green, 3=red
// horse: 0=brown, 1=white, 2=black, 3=tan
};
/*0340*/ uint32 spawnId; // Spawn Id
/*0344*/ uint8 unknown0344[4];
/*0348*/ union
{
struct
{
/*0348*/ Color_Struct color_helmet; // Color of helmet item
/*0352*/ Color_Struct color_chest; // Color of chest item
/*0356*/ Color_Struct color_arms; // Color of arms item
/*0360*/ Color_Struct color_bracers; // Color of bracers item
/*0364*/ Color_Struct color_hands; // Color of hands item
/*0368*/ Color_Struct color_legs; // Color of legs item
/*0372*/ Color_Struct color_feet; // Color of feet item
/*0376*/ Color_Struct color_primary; // Color of primary item
/*0380*/ Color_Struct color_secondary; // Color of secondary item
} equipment_colors;
/*0348*/ Color_Struct colors[9]; // Array elements correspond to struct equipment_colors above
};
/*0384*/ uint8 lfg; // 0=off, 1=lfg on
/*0385*/
};
/*
** 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;
/*0692*/ uint8 unknown692[8];
/*0700*/
};
/*
** 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*/
};
// 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*/ int32 duration;
/*012*/ uint32 counters;
/*016*/ uint32 player_id; //'global' ID of the caster, for wearoff messages
};
struct SpellBuffFade_Struct {
/*000*/ uint32 entityid;
/*004*/ uint8 slot;
/*005*/ uint8 level;
/*006*/ uint8 effect;
/*007*/ uint8 unknown7;
/*008*/ uint32 spellid;
/*012*/ int32 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_;
/*0004*/ uint32 haircolor; // Might be hairstyle
/*0008*/ uint32 beardcolor; // Might be beard
/*0012*/ uint32 beard; // Might be beardcolor
/*0016*/ uint32 gender;
/*0020*/ uint32 race;
/*0024*/ uint32 start_zone;
// 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
/*0028*/ uint32 hairstyle; // Might be haircolor
/*0032*/ uint32 deity;
/*0036*/ uint32 STR;
/*0040*/ uint32 STA;
/*0044*/ uint32 AGI;
/*0048*/ uint32 DEX;
/*0052*/ uint32 WIS;
/*0056*/ uint32 INT;
/*0060*/ uint32 CHA;
/*0064*/ uint32 face; // Could be unknown0076
/*0068*/ uint32 eyecolor1; //its possiable we could have these switched
/*0073*/ uint32 eyecolor2; //since setting one sets the other we really can't check
/*0076*/ uint32 tutorial;
/*0080*/
};
/*
*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 TRIBUTE_NONE = 0xFFFFFFFF;
struct Tribute_Struct {
uint32 tribute;
uint32 tier;
};
// Bandolier item positions
enum
{
bandolierPrimary = 0,
bandolierSecondary,
bandolierRange,
bandolierAmmo
};
//len = 72
struct BandolierItem_Struct
{
uint32 ID;
uint32 Icon;
char Name[64];
};
//len = 320
struct Bandolier_Struct
{
char Name[32];
BandolierItem_Struct Items[consts::BANDOLIER_ITEM_COUNT];
};
//len = 72
struct PotionBeltItem_Struct
{
uint32 ID;
uint32 Icon;
char Name[64];
};
//len = 288
struct PotionBelt_Struct
{
PotionBeltItem_Struct Items[consts::POTION_BELT_ITEM_COUNT];
};
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];
};
};
/**
* A bind point.
* Size: 20 Octets
*/
struct BindStruct {
/*000*/ uint32 zoneId;
/*004*/ float x;
/*008*/ float y;
/*012*/ float z;
/*016*/ float heading;
/*020*/
};
/*
** 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;
static const uint32 MAX_RECAST_TYPES = 20;
/*
showeq -> eqemu
sed -e 's/_t//g' -e 's/MAX_AA/MAX_PP_AA_ARRAY/g' \
-e 's/MAX_SPELL_SLOTS/MAX_PP_MEMSPELL/g' \
-e 's/MAX_KNOWN_SKILLS/MAX_PP_SKILL/g' \
-e 's/MAXRIBUTES/MAX_PLAYER_TRIBUTES/g' \
-e 's/MAX_BUFFS/BUFF_COUNT/g' \
-e 's/MAX_KNOWN_LANGS/MAX_PP_LANGUAGE/g' \
-e 's/MAX_RECASTYPES/MAX_RECAST_TYPES/g' \
-e 's/spellBuff/SpellBuff_Struct/g' \
-e 's/lastName/last_name/g' \
-e 's/guildID/guild_id/g' \
-e 's/itemint/item_tint/g' \
-e 's/MANA/mana/g' \
-e 's/curHp/cur_hp/g' \
-e 's/sSpellBook/spell_book/g' \
-e 's/sMemSpells/mem_spells/g' \
-e 's/uint32[ \t]*disciplines\[MAX_DISCIPLINES\]/Disciplines_Struct disciplines/g' \
-e 's/aa_unspent/aapoints/g' \
-e 's/aa_spent/aapoints_spent/g' \
-e 's/InlineItem[ \t]*potionBelt\[MAX_POTIONS_IN_BELT\]/PotionBelt_Struct potionbelt/g' \
-e 's/ldon_guk_points/ldon_points_guk/g' \
-e 's/ldon_mir_points/ldon_points_mir/g' \
-e 's/ldon_mmc_points/ldon_points_mmc/g' \
-e 's/ldon_ruj_points/ldon_points_ruj/g' \
-e 's/ldonak_points/ldon_points_tak/g' \
-e 's/ldon_avail_points/ldon_points_available/g' \
-e 's/tributeTime/tribute_time_remaining/g' \
-e 's/careerTribute/career_tribute_points/g' \
-e 's/currentTribute/tribute_points/g' \
-e 's/tributeActive/tribute_active/g' \
-e 's/TributeStruct/Tribute_Struct/g' \
-e 's/expGroupLeadAA/group_leadership_exp/g' \
-e 's/expRaidLeadAA/raid_leadership_exp/g' \
-e 's/groupLeadAAUnspent/group_leadership_points/g' \
-e 's/raidLeadAAUnspent/raid_leadership_points/g' \
-e 's/uint32[ \t]*leadershipAAs\[MAX_LEAD_AA\]/LeadershipAA_Struct leader_abilities/g' \
-e 's/BandolierStruct/Bandolier_Struct/g' \
-e 's/MAX_BANDOLIERS/MAX_PLAYER_BANDOLIER/g' \
-e 's/birthdayTime/birthday/g' \
-e 's/lastSaveTime/lastlogin/g' \
-e 's/zoneId/zone_id/g' \
-e 's/hunger/hunger_level/g' \
-e 's/thirst/thirst_level/g' \
-e 's/guildstatus/guildrank/g' \
-e 's/airRemaining/air_remaining/g' \
*/
struct PlayerProfile_Struct
{
/*00000*/ uint32 checksum; //
/*00004*/ uint32 gender; // Player Gender - 0 Male, 1 Female
/*00008*/ uint32 race; // Player race
/*00012*/ uint32 class_; // Player class
/*00016*/ uint32 unknown00016; // ***Placeholder
/*00020*/ uint8 level; // Level of player
/*00021*/ uint8 level1; // Level of player (again?)
/*00022*/ uint8 unknown00022[2]; // ***Placeholder
/*00024*/ BindStruct binds[5]; // Bind points (primary is first)
/*00124*/ uint32 deity; // deity
/*00128*/ uint32 intoxication; // Alcohol level (in ticks till sober?)
/*00132*/ uint32 spellSlotRefresh[MAX_PP_MEMSPELL]; // Refresh time (millis)
/*00168*/ uint32 abilitySlotRefresh;
/*00172*/ uint8 haircolor; // Player hair color
/*00173*/ uint8 beardcolor; // Player beard color
/*00174*/ uint8 eyecolor1; // Player left eye color
/*00175*/ uint8 eyecolor2; // Player right eye color
/*00176*/ uint8 hairstyle; // Player hair style
/*00177*/ uint8 beard; // Player beard type
/*00178*/ uint8 unknown00178[10];
/*00188*/ uint32 item_material[9]; // Item texture/material of worn items
/*00224*/ uint8 unknown00224[44];
/*00268*/ Color_Struct item_tint[9]; // RR GG BB 00
/*00304*/ AA_Array aa_array[MAX_PP_AA_ARRAY]; // AAs
/*02224*/ uint32 points; // Unspent Practice points
/*02228*/ uint32 mana; // Current mana
/*02232*/ uint32 cur_hp; // Current HP without +HP equipment
/*02236*/ uint32 STR; // Strength
/*02240*/ uint32 STA; // Stamina
/*02244*/ uint32 CHA; // Charisma
/*02248*/ uint32 DEX; // Dexterity
/*02252*/ uint32 INT; // Intelligence
/*02256*/ uint32 AGI; // Agility
/*02260*/ uint32 WIS; // Wisdom
/*02264*/ uint8 face; // Player face
/*02265*/ uint8 unknown02264[47];
/*02312*/ uint32 spell_book[MAX_PP_SPELLBOOK]; // List of the Spells in spellbook
/*03912*/ uint8 unknown4184[448]; // all 0xff after last spell
/*04360*/ uint32 mem_spells[MAX_PP_MEMSPELL]; // List of spells memorized
/*04396*/ uint8 unknown04396[32];
/*04428*/ uint32 platinum; // Platinum Pieces on player
/*04432*/ uint32 gold; // Gold Pieces on player
/*04436*/ uint32 silver; // Silver Pieces on player
/*04440*/ uint32 copper; // Copper Pieces on player
/*04444*/ uint32 platinum_cursor; // Platinum Pieces on cursor
/*04448*/ uint32 gold_cursor; // Gold Pieces on cursor
/*04452*/ uint32 silver_cursor; // Silver Pieces on cursor
/*04456*/ uint32 copper_cursor; // Copper Pieces on cursor
/*04460*/ uint32 skills[MAX_PP_SKILL]; // [400] List of skills // 100 dword buffer
/*04860*/ uint8 unknown04760[136];
/*04996*/ uint32 toxicity; // Potion Toxicity (15=too toxic, each potion adds 3)
/*05000*/ uint32 thirst_level; // Drink (ticks till next drink)
/*05004*/ uint32 hunger_level; // Food (ticks till next eat)
/*05008*/ SpellBuff_Struct buffs[BUFF_COUNT]; // Buffs currently on the player
/*05508*/ Disciplines_Struct disciplines; // Known disciplines
/*05908*/ uint32 recastTimers[MAX_RECAST_TYPES]; // Timers (GMT of last use)
/*05988*/ uint8 unknown05008[160];
/*06148*/ uint32 endurance; // Current endurance
/*06152*/ uint32 aapoints_spent; // Number of spent AA points
/*06156*/ uint32 aapoints; // Unspent AA points
/*06160*/ uint8 unknown06160[4];
/*06164*/ Bandolier_Struct bandoliers[consts::BANDOLIERS_SIZE]; // bandolier contents
/*07444*/ uint8 unknown07444[5120];
/*12564*/ PotionBelt_Struct potionbelt; // potion belt
/*12852*/ uint8 unknown12852[8];
/*12860*/ uint32 available_slots;
/*12864*/ uint8 unknown12864[76];
/*12940*/ char name[64]; // Name of player
/*13004*/ char last_name[32]; // Last name of player
/*13036*/ uint32 guild_id; // guildid
/*13040*/ uint32 birthday; // character birthday
/*13044*/ uint32 lastlogin; // character last save time
/*13048*/ uint32 timePlayedMin; // time character played
/*13052*/ uint8 pvp; // 1=pvp, 0=not pvp
/*13053*/ uint8 anon; // 2=roleplay, 1=anon, 0=not anon
/*13054*/ uint8 gm; // 0=no, 1=yes (guessing!)
/*13055*/ uint8 guildrank; // 0=member, 1=officer, 2=guildleader
/*13056*/ uint32 guildbanker;
/*13060*/ uint8 unknown13054[8];
/*13068*/ uint32 exp; // Current Experience
/*13072*/ uint8 unknown13072[8];
/*13080*/ uint32 timeentitledonaccount; // In days, displayed in /played
/*13084*/ uint8 languages[MAX_PP_LANGUAGE]; // List of languages
/*13109*/ uint8 unknown13109[4]; // All 0x00 (language buffer?)
/*13116*/ float x; // Players x position
/*13120*/ float y; // Players y position
/*13124*/ float z; // Players z position
/*13128*/ float heading; // Players heading
/*13132*/ uint8 unknown13132[4]; // ***Placeholder
/*13136*/ uint32 platinum_bank; // Platinum Pieces in Bank
/*13140*/ uint32 gold_bank; // Gold Pieces in Bank
/*13144*/ uint32 silver_bank; // Silver Pieces in Bank
/*13148*/ uint32 copper_bank; // Copper Pieces in Bank
/*13152*/ uint32 platinum_shared; // Shared platinum pieces
/*13156*/ uint8 unknown13156[84];
/*13240*/ uint32 expansions; // Bitmask for expansions
/*13244*/ uint8 unknown13244[12];
/*13256*/ uint32 autosplit; // 0 = off, 1 = on
/*13260*/ uint8 unknown13260[16];
/*13276*/ uint16 zone_id; // see zones.h
/*13278*/ uint16 zoneInstance; // Instance id
/*13280*/ char groupMembers[MAX_GROUP_MEMBERS][64];// all the members in group, including self
/*13664*/ char groupLeader[64]; // Leader of the group ?
/*13728*/ uint8 unknown13728[656];
/*14384*/ uint32 entityid;
/*14388*/ uint32 leadAAActive; // 0 = leader AA off, 1 = leader AA on
/*14392*/ uint8 unknown14392[4];
/*14396*/ int32 ldon_points_guk; // Earned GUK points
/*14400*/ int32 ldon_points_mir; // Earned MIR points
/*14404*/ int32 ldon_points_mmc; // Earned MMC points
/*14408*/ int32 ldon_points_ruj; // Earned RUJ points
/*14412*/ int32 ldon_points_tak; // Earned TAK points
/*14416*/ int32 ldon_points_available; // Available LDON points
/*14420*/ uint8 unknown14420[132];
/*14552*/ uint32 tribute_time_remaining; // Time remaining on tribute (millisecs)
/*14556*/ uint32 career_tribute_points; // Total favor points for this char
/*14560*/ uint32 unknown7208; // *** Placeholder
/*14564*/ uint32 tribute_points; // Current tribute points
/*14568*/ uint32 unknown7216; // *** Placeholder
/*14572*/ uint32 tribute_active; // 0 = off, 1=on
/*14576*/ Tribute_Struct tributes[MAX_PLAYER_TRIBUTES]; // Current tribute loadout
/*14616*/ uint32 unknown14616;
/*14620*/ double group_leadership_exp;
/*14628*/ double raid_leadership_exp;
/*14640*/ uint32 group_leadership_points; // Unspent group lead AA points
/*14644*/ uint32 raid_leadership_points; // Unspent raid lead AA points
/*14644*/ LeadershipAA_Struct leader_abilities; // Leader AA ranks
/*14772*/ uint8 unknown14772[128];
/*14900*/ uint32 air_remaining; // Air supply (seconds)
/*14904*/ uint32 PVPKills;
/*14908*/ uint32 PVPDeaths;
/*14912*/ uint32 PVPCurrentPoints;
/*14916*/ uint32 PVPCareerPoints;
/*14920*/ uint32 PVPBestKillStreak;
/*14924*/ uint32 PVPWorstDeathStreak;
/*14928*/ uint32 PVPCurrentKillStreak;
/*14932*/ PVPStatsEntry_Struct PVPLastKill;
/*15020*/ PVPStatsEntry_Struct PVPLastDeath;
/*15108*/ uint32 PVPNumberOfKillsInLast24Hours;
/*15112*/ PVPStatsEntry_Struct PVPRecentKills[50];
/*19512*/ uint32 expAA; // Exp earned in current AA point
/*19516*/ uint8 unknown19516[40];
/*19556*/ uint32 currentRadCrystals; // Current count of radiant crystals
/*19560*/ uint32 careerRadCrystals; // Total count of radiant crystals ever
/*19564*/ uint32 currentEbonCrystals; // Current count of ebon crystals
/*19568*/ uint32 careerEbonCrystals; // Total count of ebon crystals ever
/*19572*/ uint8 groupAutoconsent; // 0=off, 1=on
/*19573*/ uint8 raidAutoconsent; // 0=off, 1=on
/*19574*/ uint8 guildAutoconsent; // 0=off, 1=on
/*19575*/ uint8 unknown19575; // ***Placeholder (6/29/2005)
/*19576*/ uint32 level3; // Titanium looks here to determine the max leadership points you can bank.
/*19580*/ uint32 showhelm; // 0=no, 1=yes
/*19584*/ uint8 unknown19584[4]; // ***Placeholder (10/27/2005)
/*19588*/ uint32 unknown19588; // *** Placeholder
/*19584*/
};
/*
** 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 target;
};
/*
** 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 speed;
/*03*/ uint8 action;
/*04*/
};
// 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 */
};
// 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 */ float force;
/* 15 */ float meleepush_xy; // see above notes in Action_Struct
/* 19 */ float meleepush_z;
/* 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;
};
/* 9/23/03 reply to /random command */
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];
};*/
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;
time_t 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];
time_t 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 {
uint32 TargetID;
uint32 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[22][64];
/*1416*/uint32 itemicons[22];
/*1504*/char text[288];
/*1792*/
};
//OP_SetDataRate
struct SetDataRate_Struct {
float newdatarate;
};
//OP_SetServerFilter
struct SetServerFilter_Struct {
uint32 filters[29]; //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[32]; // Name of object, usually something like IT63_ACTORDEF
/*76*/ uint32 unknown076; //
// ShowEQ shows an extra field in here...
/*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;
/*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;
uint32 minlevel;
uint32 maxlevel;
};
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 {
BazaarWindowStart_Struct Beginning;
uint32 SellerID;
uint32 NumItems; // Don't know. Don't know the significance of this field.
uint32 SerialNumber;
uint32 Unknown016;
uint32 Unknown020; // Something to do with stats as well
char ItemName[64];
uint32 Cost;
uint32 ItemStat;
};
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: 44 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[16];
};
/*
* 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 {
uint32 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 {
/*000*/ uint32 Action;
/*004*/ uint32 Price;
/*008*/ uint32 TraderID;
/*012*/ char ItemName[64];
/*076*/ uint32 Unknown076;
/*080*/ uint32 ItemID;
/*084*/ uint32 AlreadySold;
/*088*/ uint32 Quantity;
/*092*/ uint32 Unknown092;
};
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
uint32 unknown_one; //unknown, set to one. (network byte order)
char public_note[1]; //variable length.
uint16 zoneinstance; //network byte order
uint16 zone_id; //network byte order
/* 42 + 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 Make_Pet_Struct { //Simple struct for getting pet info
uint8 level;
uint8 class_;
uint16 race;
uint8 texture;
uint8 pettype;
float size;
uint8 type;
uint32 min_dmg;
uint32 max_dmg;
};
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*/ double group_leadership_exp;
/*08*/ uint32 group_leadership_points;
/*12*/ uint32 Unknown12;
/*16*/ double raid_leadership_exp;
/*24*/ uint32 raid_leadership_points;
};
struct UpdateLeadershipAA_Struct {
/*00*/ uint32 ability_id;
/*04*/ uint32 new_rank;
/*08*/ uint32 pointsleft;
/*12*/
};
/**
* Leadership AA update
* Length: 32 Octets
* OpCode: LeadExpUpdate
*/
struct leadExpUpdateStruct {
/*0000*/ uint32 unknown0000; // All zeroes?
/*0004*/ uint32 group_leadership_exp; // Group leadership exp value
/*0008*/ uint32 group_leadership_points; // Unspent group points
/*0012*/ uint32 unknown0012; // Type?
/*0016*/ uint32 unknown0016; // All zeroes?
/*0020*/ uint32 raid_leadership_exp; // Raid leadership exp value
/*0024*/ uint32 raid_leadership_points; // Unspent raid points
/*0028*/ uint32 unknown0028;
};
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*/
};
// Bandolier actions
enum
{
bandolierCreate = 0,
bandolierRemove,
bandolierSet
};
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 unknown004; //set to 1.
/*0008*/ uint32 hotkey_sid;
/*0012*/ uint32 hotkey_sid2;
/*0016*/ uint32 title_sid;
/*0020*/ uint32 desc_sid;
/*0024*/ uint32 class_type;
/*0028*/ uint32 cost;
/*0032*/ uint32 seq;
/*0036*/ uint32 current_level; //1s, MQ2 calls this AARankRequired
/*0040*/ uint32 prereq_skill; //is < 0, abs() is category #
/*0044*/ uint32 prereq_minpoints; //min points in the prereq
/*0048*/ uint32 type;
/*0052*/ uint32 spellid;
/*0056*/ uint32 spell_type;
/*0060*/ uint32 spell_refresh;
/*0064*/ uint32 classes;
/*0068*/ uint32 max_level;
/*0072*/ uint32 last_id;
/*0076*/ uint32 next_id;
/*0080*/ uint32 cost2;
/*0084*/ uint32 unknown80[2]; //0s
/*0088*/ uint32 total_abilities;
/*0092*/ AA_Ability abilities[0];
};
struct AA_List {
SendAA_Struct* aa[0];
};
struct AA_Action {
/*00*/ uint32 action;
/*04*/ uint32 ability;
/*08*/ uint32 target_id;
/*12*/ uint32 exp_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_Array aa_list[MAX_PP_AA_ARRAY];
};
struct AATable_Struct {
AA_Array 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 {
/*000*/ uint32 guild_id; //not sure
/*004*/ char member_name[64];
/*068*/ uint16 zone_id;
/*070*/ uint16 instance_id;
/*072*/ uint32 unknown072;
};
struct VeteranRewardItem
{
/*000*/ uint32 item_id;
/*004*/ char item_name[256];
};
struct VeteranReward
{
/*000*/ uint32 claim_id;
/*004*/ VeteranRewardItem item;
};
struct ExpeditionExpireWarning
{
/*000*/ uint32 unknown000;
/*004*/ uint32 minutes_remaining;
};
struct ExpeditionInfo_Struct
{
/*000*/ uint32 clientid;
/*004*/ uint32 enabled_max;
/*008*/ uint32 max_players;
/*012*/ char expedition_name[128];
/*142*/ char leader_name[64];
};
struct ExpeditionCompassEntry_Struct
{
/*000*/ float unknown000; //seen *((uint32*)) = 1584791871
/*004*/ uint32 enabled; //guess
/*008*/ uint32 unknown008; //seen 1019
/*012*/ float y;
/*016*/ float x;
/*020*/ float z;
};
struct ExpeditionCompass_Struct
{
/*000*/ uint32 clientid;
/*004*/ uint32 count;
/*008*/ ExpeditionCompassEntry_Struct entries[0];
};
struct ExpeditionJoinPrompt_Struct
{
/*000*/ uint32 clientid;
/*004*/ char player_name[64];
/*068*/ char expedition_name[64];
};
struct LFGuild_SearchPlayer_Struct
{
/*00*/ uint32 Command;
/*04*/ uint32 Unknown04;
/*08*/ uint32 FromLevel;
/*12*/ uint32 ToLevel;
/*16*/ uint32 MinAA;
/*20*/ uint32 TimeZone;
/*24*/ uint32 Classes;
};
struct LFGuild_SearchGuild_Struct
{
/*00*/ uint32 Command;
/*04*/ uint32 Unknown04;
/*08*/ uint32 Level;
/*12*/ uint32 AAPoints;
/*16*/ uint32 TimeZone;
/*20*/ uint32 Class;
/*24*/
};
struct LFGuild_PlayerToggle_Struct
{
/*000*/ uint32 Command;
/*004*/ uint8 Unknown004[68];
/*072*/ char Comment[256];
/*328*/ uint8 Unknown328[268];
/*596*/ uint32 TimeZone;
/*600*/ uint8 Toggle;
/*601*/ uint8 Unknown601[7];
/*608*/ uint32 Expires;
/*612*/
};
struct LFGuild_GuildToggle_Struct
{
/*000*/ uint32 Command;
/*004*/ uint8 Unknown004[8];
/*012*/ char Comment[256];
/*268*/ uint8 Unknown268[256];
/*524*/ uint32 FromLevel;
/*528*/ uint32 ToLevel;
/*532*/ uint32 Classes;
/*536*/ uint32 AACount;
/*540*/ uint32 TimeZone;
/*544*/ uint8 Toggle;
/*545*/ uint8 Unknown545[3];
/*548*/ uint32 Expires;
/*552*/ char Name[64];
/*616*/
};
//struct ItemEffect_Struct
//{
// int16 Effect;
// uint8 Type;
// uint8 Level;
// uint8 Level2;
//};
//
//struct Item_Struct
//{
// // "titanium_itemfields_a.h"
// char Name; // "\0"
// char Lore; // "\0"
// char IDFile; // "\0"
// int ID;
//
// int Weight;
//
// // "titanium_itemfields_b.h"
// int NoRent;
// int NoDrop;
// int Size;
// int Slots;
// int Price;
// int Icon;
// char Unk1; // '0'
// char Unk2; // '0'
// int BenefitFlag;
// int Tradeskills;
// int CR;
// int DR;
// int PR;
// int MR;
// int FR;
// int AStr;
// int ASta;
// int AAgi;
// int ADex;
// int ACha;
// int AInt;
// int AWis;
// int HP;
// int Mana;
// int AC;
// int Deity;
// int SkillModValue;
// int SkillModMax;
// int SkillModType;
// int BaneDmgRace;
// int BaneDmgAmt;
// int BaneDmgBody;
// int Magic;
// int CastTime_;
// int ReqLevel;
// int BardType;
// int BardValue;
// int Light;
// int Delay;
// int RecLevel;
// int RecSkill;
// int ElemDmgType;
// int ElemDmgAmt;
// int Range;
// int Damage;
// int Color;
// int Classes;
// int Races;
// char Unk3; // '0'
// int MaxCharges;
// int ItemType;
// int Material;
// int SellRate;
// char Unk4; // '0'
// int _CastTime_;
// char Unk5; // '0'
// int ProcRate;
// int CombatEffects;
// int Shielding;
// int StunResist;
// int StrikeThrough;
// int ExtraDmgSkill;
// int ExtraDmgAmt;
// int SpellShield;
// int Avoidance;
// int Accuracy;
// int CharmFileID;
// int FactionMod1;
// int FactionMod2;
// int FactionMod3;
// int FactionMod4;
// int FactionAmt1;
// int FactionAmt2;
// int FactionAmt3;
// int FactionAmt4;
// char CharmFile; // "\0"
// int AugType;
//
// struct {
// int AugSlotType;
// int AugSlotVisible;
// } AugSlot[5];
//
// int LDoNTheme;
// int LDoNPrice;
// int LDoNSold;
// int BagType;
// int BagSlots;
// int BagSize;
// int BagWR;
// int Book;
// int BookType;
// char Filename; // "\0"
// int BaneDmgRaceAmt;
// int AugRestrict;
// int LoreGroup;
// int PendingLoreFlag;
// int ArtifactFlag;
// int SummonedFlag;
// int Favor;
// int FVNoDrop;
// int Endur;
// int DotShielding;
// int Attack;
// int Regen;
// int ManaRegen;
// int EnduranceRegen;
// int Haste;
// int DamageShield;
// int RecastDelay;
// int RecastType;
// int GuildFavor;
// int AugDistiller;
// char Unk6; // '0'
// char Unk7; // '0'
// int Attunable;
// int NoPet;
// char Unk8; // '0'
// int PointType;
// int PotionBelt;
// int PotionBeltSlots;
// int StackSize;
// int NoTransfer;
// int Stackable;
//
// int ClickEffect;
// int ClickType;
// int ClickLevel2;
// int ClickLevel;
// char ClickName; // '0'
// int ProcEffect;
// int ProcType;
// int ProcLevel2;
// int ProcLevel;
// char ProcName; // '0'
// int WornEffect;
// int WornType;
// int WornLevel2;
// int WornLevel;
// char WornName; // '0'
// int FocusEffect;
// int FocusType;
// int FocusLevel2;
// int FocusLevel;
// char FocusName; // '0'
// int ScrollEffect;
// int ScrollType;
// int ScrollLevel2;
// int ScrollLevel;
// char ScrollName; // '0'
//};
}; /*structs*/
}; /*Titanium*/
#endif /*COMMON_TITANIUM_STRUCTS_H*/