syntax = "proto3"; package eqproto; option cc_enable_arenas = true; option optimize_for = SPEED; message ChannelMessage { MessageType number = 1; int32 language = 2; string from = 3; string to = 4; string message = 5; int32 guilddbid = 6; string deliverto = 7; int32 type = 8; int32 minstatus = 9; int32 fromadmin = 10; bool noreply = 11; bool is_emote = 12; //Is message considered an emote? int32 queued = 13; //only used on channel_message.out events. (*.in uses response_message): 0 not queued, 1 queued, 2 queue full, 3 offline int32 from_entity_id = 16; //(Only in zone requests) Entity to send message from EntityType from_entity_type = 17; //(Only in zone requests) Entity type the message is from float distance = 18; //(optional, only in zone requests) how far should the message travel? (e.g. say) bool skip_sender = 19; //(optional, only in zone requests) should we skip sender? string response_message = 20; //Human-readable response message of request. int32 response_value = 21; //Response value. In cases where a single value is returned, this is utilized (like an entity id) ErrorType response_error = 22; //error (if any), ERR_OK (0) is default string response_type = 23; //defines what message type the response_payload is bytes response_payload = 24; //binary payload to be parsed using response_type } message CommandMessage { string author = 1; //Author of command. This can typically be ignored string command = 2; //command to request repeated string params = 3; //Parameters are an array of strings. string response_message = 4; //Human-readable response message of request. int32 response_value = 5; //Response value. In cases where a single value is returned, this is utilized (like an entity id) ErrorType response_error = 6; //error (if any), ERR_OK (0) is default string response_type = 7; //defines what message type the response_payload is bytes response_payload = 8; //binary payload to be parsed using response_type } //Entity is full of entity data. message Entity { int32 id = 1; //Entity: Unique entity identifier for zone. string name = 2; //Entity: Name of entity EntityType type = 3; //Type of entity int32 hp = 4; //Mob: Current health int32 level = 5; //Mob: Current level Position position = 6; //Mob, Door: Position int32 race = 7; //Mob: Race int32 class = 8; //Mob: Class int32 max_hp = 9; //Mob: Maximum Hitpoints int64 spawn_timestamp = 10; //Entity: When entity was spawned //SpecialAbility special_ability = 11; //Mob: Special abilities mob contains //AuraInfo aura_info = 12; //Mob: Aura information string lastname = 13; //Mob: Last name. Surname for clients GenderType gender = 14; //Mob: Gender BodyType bodytype = 15; //Mob: Body Type DeityType deity = 16; //Mob: Deity uint32 npctype_id = 17; //Mob: When npc was spawned from db, this is it's entry for npctype float size = 18; //Mob, Door: size of mob float runspeed = 19; //Mob: runspeed //int32 light = 20; //Mob: Light level int32 texture = 21; //Mob: texture int32 helmtexture = 22; //Mob: helm texture int32 ac = 23; //Mob: Armor class int32 atk = 24; //Mob: Attack int32 str = 25; //Mob: Strength int32 sta = 26; //Mob: Stamina int32 dex = 27; //Mob: Dexterity int32 agi = 28; //Mob: Agility int32 int = 29; //Mob: Intelligence int32 wis = 30; //Mob: Wisdom int32 cha = 31; //Mob: Charisma int32 haircolor = 32; //Mob: Hair color int32 beardcolor = 33; //Mob: beard color int32 eyecolor1 = 34; //Mob: eye color left? int32 eyecolor2 = 35; //Mob: eye color right? /*uint8 in_eyecolor2, uint8 in_hairstyle, uint8 in_luclinface, uint8 in_beard, uint32 in_drakkin_heritage, uint32 in_drakkin_tattoo, uint32 in_drakkin_details, EQEmu::TintProfile in_armor_tint, uint8 in_aa_title, uint8 in_see_invis, // see through invis uint8 in_see_invis_undead, // see through invis vs. undead uint8 in_see_hide, uint8 in_see_improved_hide, int32 in_hp_regen, int32 in_mana_regen, uint8 in_qglobal, uint8 in_maxlevel, uint32 in_scalerate, uint8 in_armtexture, uint8 in_bracertexture, uint8 in_handtexture, uint8 in_legtexture, uint8 in_feettexture */ //DOOR uint32 door_db_id = 100; //Door: databse ID of door uint32 door_id = 101; //Door: Unique ID of door //string door_zone_name = 102; //Door: zone name of door not needed? string door_name = 103; //Door: name int32 door_incline = 104; //Door: Incline uint32 door_opentype = 105; //Door: Open type uint32 door_guild_id = 106; //Door: Guild ID uint32 door_lockpick = 107; //Door: Lockpick uint32 door_keyitem = 108; //Door: Key item uint32 door_nokeyring = 109; //Door: No key ring uint32 door_trigger_door_id = 110; //Door: trigger door uint32 door_trigger_type = 111; //Door: trigger type uint32 door_param = 112; //Door: parameter int32 door_invert_state = 113; //Door: invert state bool door_disable_timer = 114; //Door: is timer disabled? bool door_is_open = 115; //Door: is it currently open? //string door_destination_zone = 116; //Door: destination zone TODO: not exposed //int32 door_destination_instance_id = 117; //Door: destination instance TODO: not exposed //Position door_destination_position = 118; //Door: destination position TODO: not exposed uint32 door_is_ldon = 119; //Door: is it ldon? uint32 door_client_version_mask = 120; //Door: client version mask } message Entities { repeated Entity entities = 1; } message Position { float x = 1; float y = 2; float z = 3; float h = 4; } message TextureProfile { Texture Head = 1; Texture Chest = 2; Texture Arms = 3; Texture Wrist = 4; Texture Hands = 5; Texture Legs = 6; Texture Feet = 7; Texture Primary = 8; Texture Secondary = 9; } message Texture { uint32 material = 1; uint32 unknown1 = 2; uint32 EliteModel = 3; uint32 HerosForgeModel = 4; uint32 Unknown2 = 5; } message TintProfile { Tint Head = 1; Tint Chest = 2; Tint Arms = 3; Tint Wrist = 4; Tint Hands = 5; Tint Legs = 6; Tint Feet = 7; Tint Primary = 8; Tint Secondary = 9; } message Tint { uint32 Blue = 1; uint32 Green = 2; uint32 Red = 3; uint32 UseTint = 4; // if there's a tint, this is FF uint32 Color = 5; } message Event { OpCode op = 1; //opcode enum bytes payload = 2; //unmarshal based on opcode uint32 entity_id = 3; //target entity_id of event } //OP_Death message DeathEvent { uint32 spawn_id = 1; uint32 killer_id = 2; uint32 corpse_id = 3; uint32 bind_zone_id = 4; uint32 spell_id = 5; uint32 attack_skill_id = 6; uint32 damage = 7; uint32 unknown028 = 8; } //OP_Damage message DamageEvent { uint32 target = 1; uint32 source = 2; uint32 type = 3; //slashing, etc. 231 (0xE7) for spells uint32 spellid = 4; uint32 damage = 5; float force = 6; float meleepush_xy = 7; // see above notes in Action_Struct float meleepush_z = 8; } //OP_Assist OP_Camp message EntityEvent { uint32 entity_id = 1; //source of event trigger. uint32 target_id = 2; //target or other/source/target entity } //OP_ChannelMessage message ChannelMessageEvent { string target_name = 1; // Tell recipient string sender = 2; // The senders name (len might be wrong) uint32 language = 3; // Language MessageType number = 4; // Channel number uint32 cm_unknown4 = 5; // ***Placeholder uint32 skill_in_language = 6; // The players skill in this language? might be wrong string message = 7; // Variable length message } //OP_SpecialMesg message SpecialMessageEvent { string header = 1; // 04 04 00 <-- for #emote style msg MessageType number = 2; // Color of text (see *** below) uint32 target_spawn_id = 3; // Who is it being said to? string sayer = 4; // Who is the source of the info uint32 unknown12 = 5; string message = 6; // What is being said? } //OP_NewZone message NewZoneEvent { string char_name = 1; // Character Name string zone_short_name = 2; // Zone Short Name string zone_long_name = 3; // Zone Long Name uint32 ztype = 4; // Zone type (usually FF) uint32 fog_red = 5; // Zone fog (red) uint32 fog_green = 6; // Zone fog (green) uint32 fog_blue = 7; // Zone fog (blue) uint32 unknown323 = 8; float fog_minclip = 9; float fog_maxclip = 10; float gravity = 11; uint32 time_type = 12; uint32 rain_chance = 13; uint32 rain_duration = 14; uint32 snow_chance = 15; uint32 snow_duration = 16; uint32 unknown360 = 17; uint32 sky = 18; // Sky Type uint32 unknown331 = 19; // ***Placeholder float zone_exp_multiplier = 20; // Experience Multiplier float safe_y = 21; // Zone Safe Y float safe_x = 22; // Zone Safe X float safe_z = 23; // Zone Safe Z float max_z = 24; // Guessed float underworld = 25; // Underworld, min z (Not Sure?) float minclip = 26; // Minimum View Distance float maxclip = 27; // Maximum View DIstance uint32 unknown_end = 28; // ***Placeholder string zone_short_name2 = 29; string unknown672 = 30; uint32 zone_id = 31; uint32 zone_instance = 32; uint32 unknown688 = 33; uint32 unknown692 = 34; float fog_density = 35; uint32 suspend_buffs = 36; } //OP_WearChange message WearChangeEvent { uint32 spawn_id = 1; uint32 material = 2; uint32 unknown06 = 3; uint32 elite_material = 4; // 1 for Drakkin Elite Material uint32 hero_forge_model = 5; // New to VoA uint32 unknown18 = 6; // New to RoF Tint color = 7; uint32 wear_slot_id = 8; } //OP_DeleteSpawn message DeleteSpawnEvent { uint32 spawn_id = 1; // Spawn ID to delete uint32 decay = 2; // 0 = vanish immediately, 1 = 'Decay' sparklies for corpses. } //OP_MobHealth, OP_HPUpdate message HPEvent { uint32 spawn_id = 1; uint32 cur_hp = 2; uint32 max_hp = 3; } //OP_ClientUpdate message PlayerPositionUpdateEvent { uint32 spawn_id = 1; int32 delta_heading = 2; // change in heading int32 x_pos = 3; // x coord int32 padding0002 = 4; // ***Placeholder int32 y_pos = 5; // y coord int32 animation = 6; // animation int32 padding0006 = 7; // ***Placeholder int32 z_pos = 8; // z coord int32 delta_y = 9; // change in y int32 delta_x = 10; // change in x int32 heading = 11; // heading int32 padding0014 = 12; // ***Placeholder int32 delta_z = 13; // change in z int32 padding0018 = 14; // ***Placeholder } //OP_Animation message AnimationEvent { uint32 spawnid = 1; uint32 speed = 2; uint32 action = 3; } //OP_ZoneEntry OP_NewSpawn message SpawnEvent { uint32 unknown0000= 1; uint32 gm = 2; // 0=no, 1=gm uint32 unknown0003 = 3; uint32 aaitle = 4; // 0=none, 1=general, 2=archtype, 3=class uint32 unknown0004 = 5; uint32 anon = 6; // 0=normal, 1=anon, 2=roleplay uint32 face = 7; // Face id for players string name = 8; // Player's Name uint32 deity = 9; // Player's Deity uint32 unknown0073 = 10; float size = 11; // Model size uint32 unknown0079 = 12; uint32 NPC = 13; // 0=player,1=npc,2=pc corpse,3=npc corpse,a uint32 invis = 14; // Invis (0=not, 1=invis) uint32 haircolor = 15; // Hair color uint32 curHp = 16; // Current hp %%% wrong uint32 max_hp = 17; // (name prolly wrong)takes on the value 100 for players, 100 or 110 for NPCs and 120 for PC corpses... uint32 findable = 18; // 0=can't be found, 1=can be found uint32 unknown0089 = 19; int32 deltaHeading = 20; // change in heading int32 x = 21; // x coord int32 padding0054 = 22; // ***Placeholder int32 y = 23; // y coord int32 animation = 24; // animation int32 padding0058 = 25; // ***Placeholder int32 z = 26; // z coord int32 deltaY = 27; // change in y int32 deltaX = 28; // change in x uint32 heading = 29; // heading int32 padding0066 = 30; // ***Placeholder int32 deltaZ = 31; // change in z int32 padding0070 = 32; // ***Placeholder uint32 eyecolor1 = 33; // Player's left eye color uint32 unknown0115 = 34; // Was [24] uint32 StandState = 35; // stand state for SoF+ 0x64 for normal animation uint32 drakkin_heritage = 36; // Added for SoF uint32 drakkin_tattoo = 37; // Added for SoF uint32 drakkin_details = 38; // Added for SoF uint32 showhelm = 39; // 0=no, 1=yes uint32 unknown0140 = 40; uint32 is_npc = 41; // 0=no, 1=yes uint32 hairstyle = 42; // Hair style uint32 beard = 43; // Beard style (not totally, sure but maybe!) uint32 unknown0147 = 44; uint32 level = 45; // Spawn Level uint32 PlayerState = 46; // Controls animation stuff // None = 0, Open = 1, WeaponSheathed = 2, Aggressive = 4, ForcedAggressive = 8, InstrumentEquipped = 16, Stunned = 32, PrimaryWeaponEquipped = 64, SecondaryWeaponEquipped = 128 uint32 beardcolor = 47; // Beard color string suffix = 48; // Player's suffix (of Veeshan, etc.) uint32 petOwnerId = 49; // If this is a pet, the spawn id of owner uint32 guildrank = 50; // 0=normal, 1=officer, 2=leader uint32 unknown0194 = 51; TextureProfile equipment = 52; float runspeed = 53; // Speed when running uint32 afk = 54; // 0=no, 1=afk uint32 guildID = 55; // Current guild string title = 56; // Title uint32 unknown0274 = 57; // non-zero prefixes name with '!' uint32 set_to_0xFF = 58; // ***Placeholder (all ff) uint32 helm = 59; // Helm texture uint32 race = 60; // Spawn race uint32 unknown0288 = 61; string lastName = 62; // Player's Lastname float walkspeed = 63; // Speed when walking uint32 unknown0328 = 64; uint32 is_pet = 65; // 0=no, 1=yes uint32 light = 66; // Spawn's lightsource %%% wrong uint32 class_ = 67; // Player's class uint32 eyecolor2 = 68; // Left eye color uint32 flymode = 69; uint32 gender = 70; // Gender (0=male, 1=female) uint32 bodytype = 71; // Bodytype uint32 unknown0336 = 72; //union uint32 equip_chest2 = 73; // 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! uint32 mount_color = 74; // drogmor: 0=white, 1=black, 2=green, 3=red horse: 0=brown, 1=white, 2=black, 3=tan //endunion uint32 spawnId = 75; // Spawn Id uint32 unknown0344 = 76; uint32 IsMercenary = 77; TintProfile equipment_tint = 78; uint32 lfg = 79; // 0=off, 1=lfg on bool DestructibleObject = 80; // Only used to flag as a destrible object string DestructibleModel = 82; // Model of the Destructible Object - Required - Seen "DEST_TNT_G" string DestructibleName2 = 83; // Secondary name - Not Required - Seen "a_tent" string DestructibleString = 84; // Unknown - Not Required - Seen "ZoneActor_01186" uint32 DestructibleAppearance = 85; // Damage Appearance uint32 DestructibleUnk1 = 86; uint32 DestructibleID1 = 87; uint32 DestructibleID2 = 88; uint32 DestructibleID3 = 89; uint32 DestructibleID4 = 90; uint32 DestructibleUnk2 = 91; uint32 DestructibleUnk3 = 92; uint32 DestructibleUnk4 = 93; uint32 DestructibleUnk5 = 94; uint32 DestructibleUnk6 = 95; uint32 DestructibleUnk7 = 96; uint32 DestructibleUnk8 = 97; uint32 DestructibleUnk9 = 98; bool targetable_with_hotkey = 99; bool show_name= 100; } message AlternateAdvancementStatsEvent { uint32 experience = 1; uint32 unspent = 2; uint32 unknown006 = 3; uint32 percentage = 4; uint32 unknown009 = 5; } message ZoneCompleteEvent { } message UseAAEvent { uint32 begin = 1; uint32 ability = 2; uint32 end = 3; uint32 action = 4; uint32 target_id = 5; uint32 exp_value = 6; } enum ErrorType { ERR_OK = 0; //OK, No error provided ERR_Request = 1; //Request data has something wrong. See response_message for more details. ERR_Internal = 2; //Internal server error. See response message for mode details ERR_Failed = 3; //Failed request. This is when the request succeeds, there are no internal server errors, but the response is a failure. } //EntityType will attempt to identify an entity to it's upper-most type by default enum EntityType { NPC = 0; //Inherits mob Client = 1; //Inherits mob Mob = 2; //Inherits entity Mercenary = 3; //Inherits NPC Corpse = 4; //Inherits mob Door = 5; //Inherits entity Object = 6; //Inherits entity Trap = 7; //Inherits entity Beacon = 9; //Inherits mob Encounter = 10; //Inherits mob } enum DeityType { Unknown = 0; Agnostic_LB = 140; Bertoxxulous = 201; BrellSirilis = 202; CazicThule = 203; ErollisiMarr = 204; Bristlebane = 205; Innoruuk = 206; Karana = 207; MithanielMarr = 208; Prexus = 209; Quellious = 210; RallosZek = 211; RodcetNife = 212; SolusekRo = 213; TheTribunal = 214; Tunare = 215; Veeshan = 216; Agnostic = 396; } enum DeityTypeBit { bit_DeityNone = 0x00000000; bit_DeityAgnostic = 0x00000001; bit_DeityBertoxxulous = 0x00000002; bit_DeityBrellSirilis = 0x00000004; bit_DeityCazicThule = 0x00000008; bit_DeityErollisiMarr = 0x00000010; bit_DeityBristlebane = 0x00000020; bit_DeityInnoruuk = 0x00000040; bit_DeityKarana = 0x00000080; bit_DeityMithanielMarr = 0x00000100; bit_DeityPrexus = 0x00000200; bit_DeityQuellious = 0x00000400; bit_DeityRallosZek = 0x00000800; bit_DeityRodcetNife = 0x00001000; bit_DeitySolusekRo = 0x00002000; bit_DeityTheTribunal = 0x00004000; bit_DeityTunare = 0x00008000; bit_DeityVeeshan = 0x00010000; bit_DeityAll = 0xFFFFFFF; } enum MessageType { //option allow_alias = true; Auction = 0; Group = 2; // FF|F0F0F0 Shout = 3; Auction4 = 4; OOC = 5; Broadcast = 6; Tell = 7; Say = 8; Tell14 = 14; Raid = 15; Guild = 17; GMSayWeird18 = 18; LocalEmote20 = 20; Fellowship = 21; Emote = 22; Say256 = 256; Tell257 = 257; Group258 = 258; Shout259 = 259; Auction260 = 260; OOC261 = 261; Broadcast262 = 262; Tell263 = 263; Say264 = 264; YouHitOther = 265; OtherHitsYou = 266; YouMissOther = 267; OtherMissesYou = 268; Skills = 270; Disciplines = 271; Guild273 = 273; GMSay = 274; MerchantOffer = 275; MerchantBuySell = 276; Fellowship277 = 277; Emote278 = 278; OtherHits = 279; OtherMisses = 280; Who = 281; YellForHelp = 282; NonMelee = 283; WornOff = 284; MoneySplit = 285; LootMessages = 286; DiceRoll = 287; OtherSpells = 288; SpellFailure = 289; Chat = 290; Channel1 = 291; Channel2 = 292; Channel3 = 293; Channel4 = 294; Channel5 = 295; Channel6 = 296; Channel7 = 297; Channel8 = 298; Channel9 = 299; Channel10 = 300; CritMelee = 301; SpellCrits = 302; TooFarAway = 303; NPCRampage = 304; NPCFlurry = 305; NPCEnrage = 306; SayEcho = 307; TellEcho = 308; GroupEcho = 309; GuildEcho = 310; OOCEcho = 311; Auction2 = 312; ShoutECho = 313; EmoteEcho = 314; Chat1Echo = 315; Chat2Echo = 316; Chat3Echo = 317; Chat4Echo = 318; Chat5Echo = 319; Chat6Echo = 320; Chat7Echo = 321; Chat8Echo = 322; Chat9Echo = 323; Chat10Echo = 324; DoTDamage = 325; ItemLink = 326; RaidSay = 327; MyPet = 328; DS = 329; Leadership = 330; PetFlurry = 331; PetCrit = 332; FocusEffect = 333; Experience = 334; System = 335; PetSpell = 336; PetResponse = 337; ItemSpeech = 338; StrikeThrough = 339; Stun = 340; } enum BodyType { //option allow_alias = true; BodyType_Unknown = 0; BodyType_Humanoid = 1; BodyType_Lycanthrope = 2; BodyType_Undead = 3; BodyType_Giant = 4; BodyType_Construct = 5; BodyType_Extraplanar = 6; BodyType_Magical = 7; //this name might be a bit off BodyType_SummonedUndead = 8; BodyType_RaidGiant = 9; BodyType_NoTarget = 11; //no name; can't target this bodytype BodyType_Vampire = 12; BodyType_Atenha_Ra = 13; BodyType_Greater_Akheva = 14; BodyType_Khati_Sha = 15; BodyType_Seru = 16; //not confirmed.... BodyType_Draz_Nurakk = 18; BodyType_Zek = 19; BodyType_Luggald = 20; BodyType_Animal = 21; BodyType_Insect = 22; BodyType_Monster = 23; BodyType_Summoned = 24; //Elemental? BodyType_Plant = 25; BodyType_Dragon = 26; BodyType_Summoned2 = 27; BodyType_Summoned3 = 28; BodyType_VeliousDragon = 30; //might not be a tight set BodyType_Dragon3 = 32; BodyType_Boxes = 33; BodyType_Muramite = 34; //tribal dudes BodyType_NoTarget2 = 60; BodyType_SwarmPet = 63; //is this valid; or made up? BodyType_InvisMan = 66; //no name; seen on 'InvisMan'; can be /targeted BodyType_Special = 67; } enum GenderType { Male = 0; Female = 1; Neutral = 2; } enum OpCode { //option allow_alias = true; OP_Unknown = 0; OP_ExploreUnknown = 1; //Not used OP_0x0193 = 2; //Not used OP_ZoneCompleted = 3; //supported, internally OP_0x0347 OP_AAAction = 4; //supported OP_AAExpUpdate = 5; //supported OP_AcceptNewTask = 6; OP_AckPacket = 7; OP_Action = 8; OP_Action2 = 9; OP_AddNimbusEffect = 10; OP_AdventureData = 11; OP_AdventureDetails = 12; OP_AdventureFinish = 13; OP_AdventureInfo = 14; OP_AdventureInfoRequest = 15; OP_AdventureLeaderboardReply = 16; OP_AdventureLeaderboardRequest = 17; OP_AdventureMerchantPurchase = 18; OP_AdventureMerchantRequest = 19; OP_AdventureMerchantResponse = 20; OP_AdventureMerchantSell = 21; OP_AdventurePointsUpdate = 22; OP_AdventureRequest = 23; OP_AdventureStatsReply = 24; OP_AdventureStatsRequest = 25; OP_AdventureUpdate = 26; OP_AggroMeterLockTarget = 27; OP_AggroMeterTargetInfo = 28; OP_AggroMeterUpdate = 29; OP_AltCurrency = 30; OP_AltCurrencyMerchantReply = 31; OP_AltCurrencyMerchantRequest = 32; OP_AltCurrencyPurchase = 33; OP_AltCurrencyReclaim = 34; OP_AltCurrencySell = 35; OP_AltCurrencySellSelection = 36; OP_Animation = 37; //supported OP_AnnoyingZoneUnknown = 38; OP_ApplyPoison = 39; OP_ApproveName = 40; OP_ApproveWorld = 41; OP_ApproveZone = 42; OP_Assist = 43; //supported OP_AssistGroup = 44; OP_AugmentInfo = 45; OP_AugmentItem = 46; OP_AutoAttack = 47; OP_AutoAttack2 = 48; OP_AutoFire = 49; OP_Bandolier = 50; OP_BankerChange = 51; OP_Barter = 52; OP_Bazaar = 53; OP_BazaarInspect = 54; OP_BazaarSearch = 55; OP_BecomeCorpse = 56; OP_BecomeTrader = 57; OP_Begging = 58; OP_BeginCast = 59; OP_Bind_Wound = 60; OP_BlockedBuffs = 61; OP_BoardBoat = 62; OP_Buff = 63; OP_BuffCreate = 64; OP_BuffRemoveRequest = 65; OP_Bug = 66; OP_CameraEffect = 67; OP_Camp = 68; //supported OP_CancelSneakHide = 69; OP_CancelTask = 70; OP_CancelTrade = 71; OP_CastSpell = 72; OP_ChangeSize = 73; OP_ChannelMessage = 74; OP_CharacterCreate = 75; OP_CharacterCreateRequest = 76; OP_CharInventory = 77; //uses outbuffer, may not be worth working with OP_Charm = 78; OP_ChatMessage = 79; //used by lua OP_ClearAA = 80; OP_ClearBlockedBuffs = 81; OP_ClearLeadershipAbilities = 82; OP_ClearNPCMarks = 83; OP_ClearObject = 84; OP_ClearSurname = 85; OP_ClickDoor = 86; OP_ClickObject = 87; OP_ClickObjectAction = 88; OP_ClientError = 89; OP_ClientReady = 90; OP_ClientTimeStamp = 91; OP_ClientUpdate = 92; //supported OP_CloseContainer = 93; OP_CloseTributeMaster = 94; OP_ColoredText = 95; OP_CombatAbility = 96; OP_Command = 97; OP_CompletedTasks = 98; OP_ConfirmDelete = 99; OP_Consent = 100; OP_ConsentDeny = 101; OP_ConsentResponse = 102; OP_Consider = 103; OP_ConsiderCorpse = 104; OP_Consume = 105; OP_ControlBoat = 106; OP_CorpseDrag = 107; OP_CorpseDrop = 108; OP_CrashDump = 109; OP_CrystalCountUpdate = 110; OP_CrystalCreate = 111; OP_CrystalReclaim = 112; OP_CustomTitles = 113; OP_Damage = 114; //supported OP_Death = 115; //supported OP_DelegateAbility = 116; OP_DeleteCharacter = 117; OP_DeleteCharge = 118; OP_DeleteItem = 119; OP_DeletePetition = 120; OP_DeleteSpawn = 121; //supported OP_DeleteSpell = 122; OP_DenyResponse = 123; OP_Disarm = 124; OP_DisarmTraps = 125; OP_DisciplineTimer = 126; OP_DisciplineUpdate = 127; OP_DiscordMerchantInventory = 128; OP_DoGroupLeadershipAbility = 129; OP_DuelResponse = 130; OP_DuelResponse2 = 131; OP_DumpName = 132; OP_Dye = 133; OP_DynamicWall = 134; OP_DzAddPlayer = 135; OP_DzChooseZone = 136; OP_DzCompass = 137; OP_DzExpeditionEndsWarning = 138; OP_DzExpeditionInfo = 139; OP_DzExpeditionList = 140; OP_DzJoinExpeditionConfirm = 141; OP_DzJoinExpeditionReply = 142; OP_DzLeaderStatus = 143; OP_DzListTimers = 144; OP_DzMakeLeader = 145; OP_DzMemberList = 146; OP_DzMemberStatus = 147; OP_DzPlayerList = 148; OP_DzQuit = 149; OP_DzRemovePlayer = 150; OP_DzSwapPlayer = 151; OP_Emote = 152; OP_EndLootRequest = 153; OP_EnduranceUpdate = 154; OP_EnterChat = 155; OP_EnterWorld = 156; OP_EnvDamage = 157; OP_ExpansionInfo = 158; OP_ExpUpdate = 159; OP_FaceChange = 160; OP_Feedback = 161; OP_FeignDeath = 162; OP_FellowshipUpdate = 163; OP_FindPersonReply = 164; OP_FindPersonRequest = 165; OP_FinishTrade = 166; OP_FinishWindow = 167; OP_FinishWindow2 = 168; OP_Fishing = 169; OP_Fling = 170; OP_FloatListThing = 171; OP_Forage = 172; OP_ForceFindPerson = 173; OP_FormattedMessage = 174; OP_FriendsWho = 175; OP_GetGuildMOTD = 176; OP_GetGuildMOTDReply = 177; OP_GetGuildsList = 178; OP_GiveMoney = 179; OP_GMApproval = 180; OP_GMBecomeNPC = 181; OP_GMDelCorpse = 182; OP_GMEmoteZone = 183; OP_GMEndTraining = 184; OP_GMEndTrainingResponse = 185; OP_GMFind = 186; OP_GMGoto = 187; OP_GMHideMe = 188; OP_GMKick = 189; OP_GMKill = 190; OP_GMLastName = 191; OP_GMNameChange = 192; OP_GMSearchCorpse = 193; OP_GMServers = 194; OP_GMSummon = 195; OP_GMToggle = 196; OP_GMTraining = 197; OP_GMTrainSkill = 198; OP_GMTrainSkillConfirm = 199; OP_GMZoneRequest = 200; OP_GMZoneRequest2 = 201; OP_GroundSpawn = 202; OP_GroupAcknowledge = 203; OP_GroupCancelInvite = 204; OP_GroupDelete = 205; OP_GroupDisband = 206; OP_GroupDisbandOther = 207; OP_GroupDisbandYou = 208; OP_GroupFollow = 209; OP_GroupFollow2 = 210; OP_GroupInvite = 211; OP_GroupInvite2 = 212; OP_GroupLeaderChange = 213; OP_GroupLeadershipAAUpdate = 214; OP_GroupMakeLeader = 215; OP_GroupMentor = 216; OP_GroupRoles = 217; OP_GroupUpdate = 218; OP_GroupUpdateB = 219; OP_GroupUpdateLeaderAA = 220; OP_GuildBank = 221; OP_GuildBankItemList = 222; OP_GuildCreate = 223; OP_GuildDelete = 224; OP_GuildDemote = 225; OP_GuildInvite = 226; OP_GuildInviteAccept = 227; OP_GuildLeader = 228; OP_GuildManageAdd = 229; OP_GuildManageBanker = 230; OP_GuildManageRemove = 231; OP_GuildManageStatus = 232; OP_GuildMemberLevelUpdate = 233; OP_GuildMemberList = 234; OP_GuildMemberUpdate = 235; OP_GuildMOTD = 236; OP_GuildPeace = 237; OP_GuildPromote = 238; OP_GuildPublicNote = 239; OP_GuildRemove = 240; OP_GuildsList = 241; OP_GuildStatus = 242; OP_GuildTributeInfo = 243; OP_GuildUpdateURLAndChannel = 244; OP_GuildWar = 245; OP_Heartbeat = 246; OP_Hide = 247; OP_HideCorpse = 248; OP_HPUpdate = 249; //supported OP_Illusion = 250; OP_IncreaseStats = 251; OP_InitialHPUpdate = 252; OP_InitialMobHealth = 253; OP_InspectAnswer = 254; OP_InspectBuffs = 255; OP_InspectMessageUpdate = 256; OP_InspectRequest = 257; OP_InstillDoubt = 258; OP_InterruptCast = 259; OP_ItemLinkClick = 260; OP_ItemLinkResponse = 261; OP_ItemLinkText = 262; OP_ItemName = 263; OP_ItemPacket = 264; OP_ItemPreview = 265; OP_ItemRecastDelay = 266; OP_ItemVerifyReply = 267; OP_ItemVerifyRequest = 268; OP_ItemViewUnknown = 269; OP_Jump = 270; OP_KeyRing = 271; OP_KnowledgeBase = 272; OP_LDoNButton = 273; OP_LDoNDisarmTraps = 274; OP_LDoNInspect = 275; OP_LDoNOpen = 276; OP_LDoNPickLock = 277; OP_LDoNSenseTraps = 278; OP_LeadershipExpToggle = 279; OP_LeadershipExpUpdate = 280; OP_LeaveAdventure = 281; OP_LeaveBoat = 282; OP_LevelAppearance = 283; OP_LevelUpdate = 284; OP_LFGAppearance = 285; OP_LFGCommand = 286; OP_LFGGetMatchesRequest = 287; OP_LFGGetMatchesResponse = 288; OP_LFGResponse = 289; OP_LFGuild = 290; OP_LFPCommand = 291; OP_LFPGetMatchesRequest = 292; OP_LFPGetMatchesResponse = 293; OP_LinkedReuse = 294; OP_LoadSpellSet = 295; OP_LocInfo = 296; OP_LockoutTimerInfo = 297; OP_Login = 298; OP_LoginAccepted = 299; OP_LoginComplete = 300; OP_LoginUnknown1 = 301; OP_LoginUnknown2 = 302; OP_Logout = 303; OP_LogoutReply = 304; OP_LogServer = 305; OP_LootComplete = 306; OP_LootItem = 307; OP_LootRequest = 308; OP_ManaChange = 309; OP_ManaUpdate = 310; OP_MarkNPC = 311; OP_Marquee = 312; OP_MemorizeSpell = 313; OP_Mend = 314; OP_MendHPUpdate = 315; OP_MercenaryAssign = 316; OP_MercenaryCommand = 317; OP_MercenaryDataRequest = 318; OP_MercenaryDataResponse = 319; OP_MercenaryDataUpdate = 320; OP_MercenaryDataUpdateRequest = 321; OP_MercenaryDismiss = 322; OP_MercenaryHire = 323; OP_MercenarySuspendRequest = 324; OP_MercenarySuspendResponse = 325; OP_MercenaryTimer = 326; OP_MercenaryTimerRequest = 327; OP_MercenaryUnknown1 = 328; OP_MercenaryUnsuspendResponse = 329; OP_MobEnduranceUpdate = 330; OP_MobHealth = 331; //supported OP_MobManaUpdate = 332; OP_MobRename = 333; OP_MobUpdate = 334; // not used anymore, here for lecacy reasons eqextractor OP_MoneyOnCorpse = 335; OP_MoneyUpdate = 336; OP_MOTD = 337; OP_MoveCoin = 338; OP_MoveDoor = 339; OP_MoveItem = 340; OP_MoveLogDisregard = 341; OP_MoveLogRequest = 342; OP_MultiLineMsg = 343; OP_NewSpawn = 344; //supported OP_NewTitlesAvailable = 345; OP_NewZone = 346; //supported OP_OnLevelMessage = 347; OP_OpenContainer = 348; OP_OpenDiscordMerchant = 349; OP_OpenGuildTributeMaster = 350; OP_OpenInventory = 351; OP_OpenNewTasksWindow = 352; OP_OpenTributeMaster = 353; OP_PDeletePetition = 354; OP_PetBuffWindow = 355; OP_PetCommands = 356; OP_PetCommandState = 357; OP_PetHoTT = 358; OP_Petition = 359; OP_PetitionBug = 360; OP_PetitionCheckIn = 361; OP_PetitionCheckout = 362; OP_PetitionCheckout2 = 363; OP_PetitionDelete = 364; OP_PetitionQue = 365; OP_PetitionRefresh = 366; OP_PetitionResolve = 367; OP_PetitionSearch = 368; OP_PetitionSearchResults = 369; OP_PetitionSearchText = 370; OP_PetitionUnCheckout = 371; OP_PetitionUpdate = 372; OP_PickPocket = 373; OP_PlayerProfile = 374; OP_PlayerStateAdd = 375; OP_PlayerStateRemove = 376; OP_PlayEverquestRequest = 377; OP_PlayEverquestResponse = 378; OP_PlayMP3 = 379; OP_Poll = 380; OP_PollResponse = 381; OP_PopupResponse = 382; OP_PostEnterWorld = 383; //this is really OP_WorldAccessGrant OP_PotionBelt = 384; OP_PreLogoutReply = 385; OP_PurchaseLeadershipAA = 386; OP_PVPLeaderBoardDetailsReply = 387; OP_PVPLeaderBoardDetailsRequest = 388; OP_PVPLeaderBoardReply = 389; OP_PVPLeaderBoardRequest = 390; OP_PVPStats = 391; OP_QueryResponseThing = 392; OP_RaidInvite = 393; OP_RaidJoin = 394; OP_RaidUpdate = 395; OP_RandomNameGenerator = 396; OP_RandomReply = 397; OP_RandomReq = 398; OP_ReadBook = 399; OP_RecipeAutoCombine = 400; OP_RecipeDetails = 401; OP_RecipeReply = 402; OP_RecipesFavorite = 403; OP_RecipesSearch = 404; OP_ReclaimCrystals = 405; OP_ReloadUI = 406; OP_RemoveAllDoors = 407; OP_RemoveBlockedBuffs = 408; OP_RemoveNimbusEffect = 409; OP_RemoveTrap = 410; OP_Report = 411; OP_ReqClientSpawn = 412; OP_ReqNewZone = 413; OP_RequestClientZoneChange = 414; OP_RequestDuel = 415; OP_RequestKnowledgeBase = 416; OP_RequestTitles = 417; OP_RespawnWindow = 418; OP_RespondAA = 419; OP_RestState = 420; OP_Rewind = 421; OP_RezzAnswer = 422; OP_RezzComplete = 423; OP_RezzRequest = 424; OP_Sacrifice = 425; OP_SafeFallSuccess = 426; OP_SafePoint = 427; OP_Save = 428; OP_SaveOnZoneReq = 429; OP_SelectTribute = 430; OP_SendAAStats = 431; OP_SendAATable = 432; OP_SendCharInfo = 433; OP_SendExpZonein = 434; OP_SendFindableNPCs = 435; OP_SendGuildTributes = 436; OP_SendLoginInfo = 437; OP_SendMaxCharacters = 438; OP_SendMembership = 439; OP_SendMembershipDetails = 440; OP_SendSystemStats = 441; OP_SendTitleList = 442; OP_SendTributes = 443; OP_SendZonepoints = 444; OP_SenseHeading = 445; OP_SenseTraps = 446; OP_ServerListRequest = 447; OP_ServerListResponse = 448; OP_SessionReady = 449; OP_SetChatServer = 450; OP_SetChatServer2 = 451; OP_SetGroupTarget = 452; OP_SetGuildMOTD = 453; OP_SetGuildRank = 454; OP_SetRunMode = 455; OP_SetServerFilter = 456; OP_SetStartCity = 457; OP_SetTitle = 458; OP_SetTitleReply = 459; OP_Shielding = 460; OP_ShopDelItem = 461; OP_ShopEnd = 462; OP_ShopEndConfirm = 463; OP_ShopItem = 464; OP_ShopPlayerBuy = 465; OP_ShopPlayerSell = 466; OP_ShopRequest = 467; OP_SimpleMessage = 468; OP_SkillUpdate = 469; OP_Sneak = 470; OP_Some3ByteHPUpdate = 471; OP_Some6ByteHPUpdate = 472; OP_SomeItemPacketMaybe = 473; OP_Sound = 474; OP_SpawnAppearance = 475; OP_SpawnDoor = 476; OP_SpawnPositionUpdate = 477; OP_SpecialMesg = 478; //supported OP_SpellEffect = 479; OP_Split = 480; OP_Stamina = 481; OP_Stun = 482; OP_Surname = 483; OP_SwapSpell = 484; OP_TargetBuffs = 485; OP_TargetCommand = 486; OP_TargetHoTT = 487; OP_TargetMouse = 488; OP_TargetReject = 489; OP_TaskActivity = 490; OP_TaskActivityComplete = 491; OP_TaskDescription = 492; OP_TaskHistoryReply = 493; OP_TaskHistoryRequest = 494; OP_TaskMemberList = 495; OP_Taunt = 496; OP_TestBuff = 497; OP_TGB = 498; OP_TimeOfDay = 499; OP_Track = 500; OP_TrackTarget = 501; OP_TrackUnknown = 502; OP_TradeAcceptClick = 503; OP_TradeBusy = 504; OP_TradeCoins = 505; OP_TradeMoneyUpdate = 506; OP_Trader = 507; OP_TraderBuy = 508; OP_TraderDelItem = 509; OP_TradeRequest = 510; OP_TradeRequestAck = 511; OP_TraderItemUpdate = 512; OP_TraderShop = 513; OP_TradeSkillCombine = 514; OP_Translocate = 515; OP_TributeInfo = 516; OP_TributeItem = 517; OP_TributeMoney = 518; OP_TributeNPC = 519; OP_TributePointUpdate = 520; OP_TributeTimer = 521; OP_TributeToggle = 522; OP_TributeUpdate = 523; OP_Untargetable = 524; OP_UpdateAA = 525; OP_UpdateAura = 526; OP_UpdateLeadershipAA = 527; OP_VetClaimReply = 528; OP_VetClaimRequest = 529; OP_VetRewardsAvaliable = 530; OP_VoiceMacroIn = 531; OP_VoiceMacroOut = 532; OP_WeaponEquip1 = 533; OP_WearChange = 534; //supported OP_Weather = 535; OP_Weblink = 536; OP_WhoAllRequest = 537; OP_WhoAllResponse = 538; OP_World_Client_CRC1 = 539; OP_World_Client_CRC2 = 540; OP_WorldClientReady = 541; OP_WorldComplete = 542; OP_WorldLogout = 543; OP_WorldObjectsSent = 544; OP_WorldUnknown001 = 545; OP_XTargetAutoAddHaters = 546; OP_XTargetOpen = 547; OP_XTargetOpenResponse = 548; OP_XTargetRequest = 549; OP_XTargetResponse = 550; OP_YellForHelp = 551; OP_ZoneChange = 552; OP_ZoneComplete = 553; OP_ZoneEntry = 554; //supported OP_ZoneGuildList = 555; OP_ZoneInUnknown = 556; OP_ZonePlayerToBind = 557; OP_ZoneServerInfo = 558; OP_ZoneServerReady = 559; OP_ZoneSpawns = 560; OP_ZoneUnavail = 561; OP_ResetAA = 562; OP_Buddy = 563; OP_ChannelAnnounceJoin = 564; OP_ChannelAnnounceLeave = 565; OP_Ignore = 566; OP_Mail = 567; OP_MailboxChange = 568; OP_MailDeliveryStatus = 569; OP_MailHeader = 570; OP_MailHeaderCount = 571; OP_MailLogin = 572; OP_MailNew = 573; OP_MailSendBody = 574; }