From cd8cd90a38a1bb48c9258cf06337d6d1db1762f6 Mon Sep 17 00:00:00 2001 From: Uleat Date: Wed, 1 Jun 2016 08:54:26 -0400 Subject: [PATCH] Implemented EQEmu::TextureProfile --- changelog.txt | 1 + common/eq_packet_structs.h | 40 ++-------- common/extprofile.h | 2 +- common/patches/rof.cpp | 30 ++++---- common/patches/rof2.cpp | 30 ++++---- common/patches/rof2_structs.h | 120 +++++++++++++++++------------- common/patches/rof_structs.h | 120 +++++++++++++++++------------- common/patches/sod.cpp | 28 +++---- common/patches/sod_structs.h | 83 +++++++++------------ common/patches/sof.cpp | 18 ++--- common/patches/sof_structs.h | 83 +++++++++------------ common/patches/titanium.cpp | 8 +- common/patches/titanium_structs.h | 46 +++++++----- common/patches/uf.cpp | 34 ++++----- common/patches/uf_structs.h | 83 +++++++++------------ common/textures.cpp | 7 +- common/textures.h | 51 ++++++++++--- world/worlddb.cpp | 20 ++--- zone/beacon.cpp | 2 +- zone/bot.cpp | 18 ++--- zone/client.cpp | 6 +- zone/corpse.cpp | 6 +- zone/encounter.cpp | 2 +- zone/lua_general.cpp | 18 ++--- zone/mob.cpp | 25 +++---- zone/mob.h | 6 +- zone/npc.cpp | 2 +- zone/zonedb.cpp | 38 +++++----- zone/zonedump.h | 2 +- 29 files changed, 467 insertions(+), 462 deletions(-) diff --git a/changelog.txt b/changelog.txt index 8708d1cd9..003ac4555 100644 --- a/changelog.txt +++ b/changelog.txt @@ -2,6 +2,7 @@ EQEMu Changelog (Started on Sept 24, 2003 15:50) ------------------------------------------------------- == 06/01/2016 == Uleat: Implemented EQEmu::TintProfile +Uleat: Implemented EQEmu::TextureProfile == 05/31/2016 == Uleat: Converted enumeration MaterialSlots to EQEmu::textures::TextureSlot diff --git a/common/eq_packet_structs.h b/common/eq_packet_structs.h index 23a92082c..7674f138f 100644 --- a/common/eq_packet_structs.h +++ b/common/eq_packet_structs.h @@ -126,22 +126,9 @@ struct LDoNTrapTemplate // All clients translate the character select information to some degree -struct EquipStruct -{ - uint32 Material; - uint32 Unknown1; - uint32 EliteMaterial; - uint32 HeroForgeModel; - uint32 Material2; // Same as material? -}; - struct CharSelectEquip { - uint32 Material; - uint32 Unknown1; - uint32 EliteMaterial; - uint32 HeroForgeModel; - uint32 Material2; + EQEmu::Texture_Struct Textures; EQEmu::Tint_Struct Color; }; @@ -158,7 +145,7 @@ struct CharacterSelectEntry_Struct uint16 Instance; uint8 Gender; uint8 Face; - CharSelectEquip Equip[9]; + CharSelectEquip Equip[EQEmu::textures::TextureCount]; uint8 Unknown15; // Seen FF uint8 Unknown19; // Seen FF uint32 DrakkinTattoo; @@ -267,22 +254,7 @@ struct Spawn_Struct { /*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 - { - /*0000*/ EquipStruct equip_helmet; // Equipment: Helmet visual - /*0000*/ EquipStruct equip_chest; // Equipment: Chest visual - /*0000*/ EquipStruct equip_arms; // Equipment: Arms visual - /*0000*/ EquipStruct equip_bracers; // Equipment: Wrist visual - /*0000*/ EquipStruct equip_hands; // Equipment: Hands visual - /*0000*/ EquipStruct equip_legs; // Equipment: Legs visual - /*0000*/ EquipStruct equip_feet; // Equipment: Boots visual - /*0000*/ EquipStruct equip_primary; // Equipment: Main visual - /*0000*/ EquipStruct equip_secondary; // Equipment: Off visual - } equip; - /*0000*/ EquipStruct equipment[EQEmu::textures::TextureCount]; -}; +/*0197*/ EQEmu::TextureProfile equipment; /*0233*/ float runspeed; // Speed when running /*0036*/ uint8 afk; // 0=no, 1=afk /*0238*/ uint32 guildID; // Current guild @@ -854,7 +826,7 @@ struct SuspendedMinion_Struct /*002*/ uint32 HP; /*006*/ uint32 Mana; /*010*/ SpellBuff_Struct Buffs[BUFF_COUNT]; - /*510*/ uint32 Items[EQEmu::textures::TextureCount]; + /*510*/ EQEmu::TextureShortProfile Items; /*546*/ char Name[64]; /*610*/ }; @@ -962,7 +934,7 @@ struct PlayerProfile_Struct /*0304*/ uint8 ability_time_minutes; /*0305*/ uint8 ability_time_hours; //place holder /*0306*/ uint8 unknown0306[6]; // @bp Spacer/Flag? -/*0312*/ uint32 item_material[EQEmu::textures::TextureCount]; // Item texture/material of worn/held items +/*0312*/ EQEmu::TextureShortProfile item_material; // Item texture/material of worn/held items /*0348*/ uint8 unknown0348[44]; /*0392*/ EQEmu::TintProfile item_tint; /*0428*/ AA_Array aa_array[MAX_PP_AA_ARRAY]; @@ -2118,7 +2090,7 @@ struct Illusion_Struct { //size: 256 - SoF /*092*/ uint32 drakkin_heritage; // /*096*/ uint32 drakkin_tattoo; // /*100*/ uint32 drakkin_details; // -/*104*/ uint32 armor_tint[EQEmu::textures::TextureCount]; // +/*104*/ EQEmu::TintProfile armor_tint; // /*140*/ uint8 eyecolor1; // Field Not Identified in any Illusion Struct /*141*/ uint8 eyecolor2; // Field Not Identified in any Illusion Struct /*142*/ uint8 unknown138[114]; // diff --git a/common/extprofile.h b/common/extprofile.h index b376a9edd..e53480631 100644 --- a/common/extprofile.h +++ b/common/extprofile.h @@ -40,7 +40,7 @@ struct ExtendedProfile_Struct { uint16 old_pet_hp; /* Not Used */ uint16 old_pet_mana; /* Not Used */ SpellBuff_Struct pet_buffs[BUFF_COUNT]; /* Not Used */ - uint32 pet_items[EQEmu::textures::TextureCount]; /* Not Used */ + EQEmu::TextureShortProfile pet_items; /* Not Used */ char merc_name[64]; /* Used */ uint32 aa_effects; /* Used */ diff --git a/common/patches/rof.cpp b/common/patches/rof.cpp index d14cfb810..61c9c1105 100644 --- a/common/patches/rof.cpp +++ b/common/patches/rof.cpp @@ -2070,7 +2070,7 @@ namespace RoF for (int r = 0; r < 9; r++) { - outapp->WriteUInt32(emu->item_material[r]); + outapp->WriteUInt32(emu->item_material.Slot[r].Material); outapp->WriteUInt32(0); outapp->WriteUInt32(0); outapp->WriteUInt32(0); @@ -3047,11 +3047,11 @@ namespace RoF eq_cse->Face = emu_cse->Face; for (int equip_index = 0; equip_index < EQEmu::textures::TextureCount; equip_index++) { - eq_cse->Equip[equip_index].Material = emu_cse->Equip[equip_index].Material; - eq_cse->Equip[equip_index].Unknown1 = emu_cse->Equip[equip_index].Unknown1; - eq_cse->Equip[equip_index].EliteMaterial = emu_cse->Equip[equip_index].EliteMaterial; - eq_cse->Equip[equip_index].HeroForgeModel = emu_cse->Equip[equip_index].HeroForgeModel; - eq_cse->Equip[equip_index].Material2 = emu_cse->Equip[equip_index].Material2; + eq_cse->Equip[equip_index].Textures.Material = emu_cse->Equip[equip_index].Textures.Material; + eq_cse->Equip[equip_index].Textures.Unknown1 = emu_cse->Equip[equip_index].Textures.Unknown1; + eq_cse->Equip[equip_index].Textures.EliteMaterial = emu_cse->Equip[equip_index].Textures.EliteMaterial; + eq_cse->Equip[equip_index].Textures.HeroForgeModel = emu_cse->Equip[equip_index].Textures.HeroForgeModel; + eq_cse->Equip[equip_index].Textures.Material2 = emu_cse->Equip[equip_index].Textures.Material2; eq_cse->Equip[equip_index].Color.Color = emu_cse->Equip[equip_index].Color.Color; } @@ -4090,17 +4090,17 @@ namespace RoF } } - structs::EquipStruct *Equipment = (structs::EquipStruct *)Buffer; + structs::Texture_Struct *Equipment = (structs::Texture_Struct *)Buffer; for (k = 0; k < 9; k++) { - Equipment[k].Material = emu->equipment[k].Material; - Equipment[k].Unknown1 = emu->equipment[k].Unknown1; - Equipment[k].EliteMaterial = emu->equipment[k].EliteMaterial; - Equipment[k].HeroForgeModel = emu->equipment[k].HeroForgeModel; - Equipment[k].Material2 = emu->equipment[k].Material2; + Equipment[k].Material = emu->equipment.Slot[k].Material; + Equipment[k].Unknown1 = emu->equipment.Slot[k].Unknown1; + Equipment[k].EliteMaterial = emu->equipment.Slot[k].EliteMaterial; + Equipment[k].HeroForgeModel = emu->equipment.Slot[k].HeroForgeModel; + Equipment[k].Material2 = emu->equipment.Slot[k].Material2; } - Buffer += (sizeof(structs::EquipStruct) * 9); + Buffer += (sizeof(structs::Texture_Struct) * 9); } else { @@ -4110,13 +4110,13 @@ namespace RoF VARSTRUCT_ENCODE_TYPE(uint32, Buffer, 0); VARSTRUCT_ENCODE_TYPE(uint32, Buffer, 0); - VARSTRUCT_ENCODE_TYPE(uint32, Buffer, emu->equipment[EQEmu::textures::TexturePrimary].Material); + VARSTRUCT_ENCODE_TYPE(uint32, Buffer, emu->equipment.Primary.Material); VARSTRUCT_ENCODE_TYPE(uint32, Buffer, 0); VARSTRUCT_ENCODE_TYPE(uint32, Buffer, 0); VARSTRUCT_ENCODE_TYPE(uint32, Buffer, 0); VARSTRUCT_ENCODE_TYPE(uint32, Buffer, 0); - VARSTRUCT_ENCODE_TYPE(uint32, Buffer, emu->equipment[EQEmu::textures::TextureSecondary].Material); + VARSTRUCT_ENCODE_TYPE(uint32, Buffer, emu->equipment.Secondary.Material); VARSTRUCT_ENCODE_TYPE(uint32, Buffer, 0); VARSTRUCT_ENCODE_TYPE(uint32, Buffer, 0); VARSTRUCT_ENCODE_TYPE(uint32, Buffer, 0); diff --git a/common/patches/rof2.cpp b/common/patches/rof2.cpp index d05dbf027..0638b4ad3 100644 --- a/common/patches/rof2.cpp +++ b/common/patches/rof2.cpp @@ -2154,7 +2154,7 @@ namespace RoF2 for (int r = 0; r < 9; r++) { - outapp->WriteUInt32(emu->item_material[r]); + outapp->WriteUInt32(emu->item_material.Slot[r].Material); outapp->WriteUInt32(0); outapp->WriteUInt32(0); outapp->WriteUInt32(0); @@ -3140,11 +3140,11 @@ namespace RoF2 eq_cse->Face = emu_cse->Face; for (int equip_index = 0; equip_index < EQEmu::textures::TextureCount; equip_index++) { - eq_cse->Equip[equip_index].Material = emu_cse->Equip[equip_index].Material; - eq_cse->Equip[equip_index].Unknown1 = emu_cse->Equip[equip_index].Unknown1; - eq_cse->Equip[equip_index].EliteMaterial = emu_cse->Equip[equip_index].EliteMaterial; - eq_cse->Equip[equip_index].HeroForgeModel = emu_cse->Equip[equip_index].HeroForgeModel; - eq_cse->Equip[equip_index].Material2 = emu_cse->Equip[equip_index].Material2; + eq_cse->Equip[equip_index].Textures.Material = emu_cse->Equip[equip_index].Textures.Material; + eq_cse->Equip[equip_index].Textures.Unknown1 = emu_cse->Equip[equip_index].Textures.Unknown1; + eq_cse->Equip[equip_index].Textures.EliteMaterial = emu_cse->Equip[equip_index].Textures.EliteMaterial; + eq_cse->Equip[equip_index].Textures.HeroForgeModel = emu_cse->Equip[equip_index].Textures.HeroForgeModel; + eq_cse->Equip[equip_index].Textures.Material2 = emu_cse->Equip[equip_index].Textures.Material2; eq_cse->Equip[equip_index].Color.Color = emu_cse->Equip[equip_index].Color.Color; } @@ -4313,17 +4313,17 @@ namespace RoF2 } } - structs::EquipStruct *Equipment = (structs::EquipStruct *)Buffer; + structs::Texture_Struct *Equipment = (structs::Texture_Struct *)Buffer; for (k = 0; k < 9; k++) { - Equipment[k].Material = emu->equipment[k].Material; - Equipment[k].Unknown1 = emu->equipment[k].Unknown1; - Equipment[k].EliteMaterial = emu->equipment[k].EliteMaterial; - Equipment[k].HeroForgeModel = emu->equipment[k].HeroForgeModel; - Equipment[k].Material2 = emu->equipment[k].Material2; + Equipment[k].Material = emu->equipment.Slot[k].Material; + Equipment[k].Unknown1 = emu->equipment.Slot[k].Unknown1; + Equipment[k].EliteMaterial = emu->equipment.Slot[k].EliteMaterial; + Equipment[k].HeroForgeModel = emu->equipment.Slot[k].HeroForgeModel; + Equipment[k].Material2 = emu->equipment.Slot[k].Material2; } - Buffer += (sizeof(structs::EquipStruct) * 9); + Buffer += (sizeof(structs::Texture_Struct) * 9); } else { @@ -4333,13 +4333,13 @@ namespace RoF2 VARSTRUCT_ENCODE_TYPE(uint32, Buffer, 0); VARSTRUCT_ENCODE_TYPE(uint32, Buffer, 0); - VARSTRUCT_ENCODE_TYPE(uint32, Buffer, emu->equipment[EQEmu::textures::TexturePrimary].Material); + VARSTRUCT_ENCODE_TYPE(uint32, Buffer, emu->equipment.Primary.Material); VARSTRUCT_ENCODE_TYPE(uint32, Buffer, 0); VARSTRUCT_ENCODE_TYPE(uint32, Buffer, 0); VARSTRUCT_ENCODE_TYPE(uint32, Buffer, 0); VARSTRUCT_ENCODE_TYPE(uint32, Buffer, 0); - VARSTRUCT_ENCODE_TYPE(uint32, Buffer, emu->equipment[EQEmu::textures::TextureSecondary].Material); + VARSTRUCT_ENCODE_TYPE(uint32, Buffer, emu->equipment.Secondary.Material); VARSTRUCT_ENCODE_TYPE(uint32, Buffer, 0); VARSTRUCT_ENCODE_TYPE(uint32, Buffer, 0); VARSTRUCT_ENCODE_TYPE(uint32, Buffer, 0); diff --git a/common/patches/rof2_structs.h b/common/patches/rof2_structs.h index 4c84174b7..ee9ae9c29 100644 --- a/common/patches/rof2_structs.h +++ b/common/patches/rof2_structs.h @@ -176,7 +176,8 @@ struct Tint_Struct }; }; -struct TintProfile { +struct TintProfile +{ union { struct { Tint_Struct Head; @@ -193,13 +194,43 @@ struct TintProfile { }; }; -struct CharSelectEquip +/* +* Visible equiptment. +* Size: 20 Octets +*/ +struct Texture_Struct { uint32 Material; uint32 Unknown1; uint32 EliteMaterial; uint32 HeroForgeModel; - uint32 Material2; + uint32 Material2; // Same as material? +}; + +// Needs more research regarding new slots +//struct TextureProfile +//{ +// union { +// struct { +// Texture_Struct Head; +// Texture_Struct Chest; +// Texture_Struct Arms; +// Texture_Struct Wrist; +// Texture_Struct Hands; +// Texture_Struct Legs; +// Texture_Struct Feet; +// Texture_Struct Primary; +// Texture_Struct Secondary; +// }; +// Texture_Struct Slot[EQEmu::textures::TextureCount]; +// }; +// +// TextureProfile(); +//}; + +struct CharSelectEquip +{ + Texture_Struct Textures; Tint_Struct Color; }; @@ -248,21 +279,6 @@ struct CharacterSelect_Struct /*004*/ CharacterSelectEntry_Struct Entries[0]; }; -/* -* Visible equiptment. -* Size: 20 Octets -*/ -struct EquipStruct -{ - /*00*/ uint32 Material; - /*04*/ uint32 Unknown1; - /*08*/ uint32 EliteMaterial; - /*12*/ uint32 HeroForgeModel; - /*16*/ uint32 Material2; // Same as material? - /*20*/ -}; - - struct Membership_Entry_Struct { /*000*/ uint32 purchase_id; // Seen 1, then increments 90287 to 90300 @@ -471,17 +487,17 @@ struct Spawn_Struct { struct { - /*0000*/ EquipStruct equip_helmet; // Equiptment: Helmet visual - /*0000*/ EquipStruct equip_chest; // Equiptment: Chest visual - /*0000*/ EquipStruct equip_arms; // Equiptment: Arms visual - /*0000*/ EquipStruct equip_bracers; // Equiptment: Wrist visual - /*0000*/ EquipStruct equip_hands; // Equiptment: Hands visual - /*0000*/ EquipStruct equip_legs; // Equiptment: Legs visual - /*0000*/ EquipStruct equip_feet; // Equiptment: Boots visual - /*0000*/ EquipStruct equip_primary; // Equiptment: Main visual - /*0000*/ EquipStruct equip_secondary; // Equiptment: Off visual + /*0000*/ Texture_Struct equip_helmet; // Equiptment: Helmet visual + /*0000*/ Texture_Struct equip_chest; // Equiptment: Chest visual + /*0000*/ Texture_Struct equip_arms; // Equiptment: Arms visual + /*0000*/ Texture_Struct equip_bracers; // Equiptment: Wrist visual + /*0000*/ Texture_Struct equip_hands; // Equiptment: Hands visual + /*0000*/ Texture_Struct equip_legs; // Equiptment: Legs visual + /*0000*/ Texture_Struct equip_feet; // Equiptment: Boots visual + /*0000*/ Texture_Struct equip_primary; // Equiptment: Main visual + /*0000*/ Texture_Struct equip_secondary; // Equiptment: Off visual } equip; - /*0000*/ EquipStruct equipment[9]; + /*0000*/ Texture_Struct equipment[9]; }; /*0000*/ //char title[0]; // only read if(hasTitleOrSuffix & 4) @@ -1080,34 +1096,34 @@ union { struct { - /*00184*/ EquipStruct equip_helmet; // Equipment: Helmet visual - /*00204*/ EquipStruct equip_chest; // Equipment: Chest visual - /*00224*/ EquipStruct equip_arms; // Equipment: Arms visual - /*00244*/ EquipStruct equip_bracers; // Equipment: Wrist visual - /*00264*/ EquipStruct equip_hands; // Equipment: Hands visual - /*00284*/ EquipStruct equip_legs; // Equipment: Legs visual - /*00304*/ EquipStruct equip_feet; // Equipment: Boots visual - /*00324*/ EquipStruct equip_primary; // Equipment: Main visual - /*00344*/ EquipStruct equip_secondary; // Equipment: Off visual + /*00184*/ Texture_Struct equip_helmet; // Equipment: Helmet visual + /*00204*/ Texture_Struct equip_chest; // Equipment: Chest visual + /*00224*/ Texture_Struct equip_arms; // Equipment: Arms visual + /*00244*/ Texture_Struct equip_bracers; // Equipment: Wrist visual + /*00264*/ Texture_Struct equip_hands; // Equipment: Hands visual + /*00284*/ Texture_Struct equip_legs; // Equipment: Legs visual + /*00304*/ Texture_Struct equip_feet; // Equipment: Boots visual + /*00324*/ Texture_Struct equip_primary; // Equipment: Main visual + /*00344*/ Texture_Struct equip_secondary; // Equipment: Off visual // Below slots are just guesses, but all 0s anyway... - /*00364*/ EquipStruct equip_charm; // Equipment: Non-visual - /*00384*/ EquipStruct equip_ear1; // Equipment: Non-visual - /*00404*/ EquipStruct equip_ear2; // Equipment: Non-visual - /*00424*/ EquipStruct equip_face; // Equipment: Non-visual - /*00444*/ EquipStruct equip_neck; // Equipment: Non-visual - /*00464*/ EquipStruct equip_shoulder; // Equipment: Non-visual - /*00484*/ EquipStruct equip_bracer2; // Equipment: Non-visual - /*00504*/ EquipStruct equip_range; // Equipment: Non-visual - /*00524*/ EquipStruct equip_ring1; // Equipment: Non-visual - /*00544*/ EquipStruct equip_ring2; // Equipment: Non-visual - /*00564*/ EquipStruct equip_waist; // Equipment: Non-visual - /*00584*/ EquipStruct equip_powersource;// Equipment: Non-visual - /*00604*/ EquipStruct equip_ammo; // Equipment: Non-visual + /*00364*/ Texture_Struct equip_charm; // Equipment: Non-visual + /*00384*/ Texture_Struct equip_ear1; // Equipment: Non-visual + /*00404*/ Texture_Struct equip_ear2; // Equipment: Non-visual + /*00424*/ Texture_Struct equip_face; // Equipment: Non-visual + /*00444*/ Texture_Struct equip_neck; // Equipment: Non-visual + /*00464*/ Texture_Struct equip_shoulder; // Equipment: Non-visual + /*00484*/ Texture_Struct equip_bracer2; // Equipment: Non-visual + /*00504*/ Texture_Struct equip_range; // Equipment: Non-visual + /*00524*/ Texture_Struct equip_ring1; // Equipment: Non-visual + /*00544*/ Texture_Struct equip_ring2; // Equipment: Non-visual + /*00564*/ Texture_Struct equip_waist; // Equipment: Non-visual + /*00584*/ Texture_Struct equip_powersource;// Equipment: Non-visual + /*00604*/ Texture_Struct equip_ammo; // Equipment: Non-visual } equip; - /*00184*/ EquipStruct equipment[22]; // Total Slots + /*00184*/ Texture_Struct equipment[22]; // Total Slots }; /*00624*/ uint32 equip2_count; // Seen 9 -/*00628*/ EquipStruct equipment2[EQEmu::textures::TextureCount]; // Appears to be Visible slots, but all 0s +/*00628*/ Texture_Struct equipment2[EQEmu::textures::TextureCount]; // Appears to be Visible slots, but all 0s /*00808*/ uint32 tint_count; // Seen 9 /*00812*/ TintProfile item_tint; // RR GG BB 00 /*00848*/ uint32 tint_count2; // Seen 9 diff --git a/common/patches/rof_structs.h b/common/patches/rof_structs.h index 6c884bbeb..1c957889a 100644 --- a/common/patches/rof_structs.h +++ b/common/patches/rof_structs.h @@ -176,7 +176,8 @@ struct Tint_Struct }; }; -struct TintProfile { +struct TintProfile +{ union { struct { Tint_Struct Head; @@ -193,13 +194,43 @@ struct TintProfile { }; }; -struct CharSelectEquip +/* +* Visible equiptment. +* Size: 20 Octets +*/ +struct Texture_Struct { uint32 Material; uint32 Unknown1; uint32 EliteMaterial; uint32 HeroForgeModel; - uint32 Material2; + uint32 Material2; // Same as material? +}; + +// Needs more research regarding new slots +//struct TextureProfile +//{ +// union { +// struct { +// Texture_Struct Head; +// Texture_Struct Chest; +// Texture_Struct Arms; +// Texture_Struct Wrist; +// Texture_Struct Hands; +// Texture_Struct Legs; +// Texture_Struct Feet; +// Texture_Struct Primary; +// Texture_Struct Secondary; +// }; +// Texture_Struct Slot[EQEmu::textures::TextureCount]; +// }; +// +// TextureProfile(); +//}; + +struct CharSelectEquip +{ + Texture_Struct Textures; Tint_Struct Color; }; @@ -248,21 +279,6 @@ struct CharacterSelect_Struct /*004*/ CharacterSelectEntry_Struct Entries[0]; }; -/* -* Visible equiptment. -* Size: 20 Octets -*/ -struct EquipStruct -{ - /*00*/ uint32 Material; - /*04*/ uint32 Unknown1; - /*08*/ uint32 EliteMaterial; - /*12*/ uint32 HeroForgeModel; - /*16*/ uint32 Material2; // Same as material? - /*20*/ -}; - - struct Membership_Entry_Struct { /*000*/ uint32 purchase_id; // Seen 1, then increments 90287 to 90300 @@ -465,17 +481,17 @@ struct Spawn_Struct { struct { - /*0000*/ EquipStruct equip_helmet; // Equiptment: Helmet visual - /*0000*/ EquipStruct equip_chest; // Equiptment: Chest visual - /*0000*/ EquipStruct equip_arms; // Equiptment: Arms visual - /*0000*/ EquipStruct equip_bracers; // Equiptment: Wrist visual - /*0000*/ EquipStruct equip_hands; // Equiptment: Hands visual - /*0000*/ EquipStruct equip_legs; // Equiptment: Legs visual - /*0000*/ EquipStruct equip_feet; // Equiptment: Boots visual - /*0000*/ EquipStruct equip_primary; // Equiptment: Main visual - /*0000*/ EquipStruct equip_secondary; // Equiptment: Off visual + /*0000*/ Texture_Struct equip_helmet; // Equiptment: Helmet visual + /*0000*/ Texture_Struct equip_chest; // Equiptment: Chest visual + /*0000*/ Texture_Struct equip_arms; // Equiptment: Arms visual + /*0000*/ Texture_Struct equip_bracers; // Equiptment: Wrist visual + /*0000*/ Texture_Struct equip_hands; // Equiptment: Hands visual + /*0000*/ Texture_Struct equip_legs; // Equiptment: Legs visual + /*0000*/ Texture_Struct equip_feet; // Equiptment: Boots visual + /*0000*/ Texture_Struct equip_primary; // Equiptment: Main visual + /*0000*/ Texture_Struct equip_secondary; // Equiptment: Off visual } equip; - /*0000*/ EquipStruct equipment[9]; + /*0000*/ Texture_Struct equipment[9]; }; /*0000*/ //char title[0]; // only read if(hasTitleOrSuffix & 4) @@ -1063,34 +1079,34 @@ union { struct { - /*00184*/ EquipStruct equip_helmet; // Equiptment: Helmet visual - /*00204*/ EquipStruct equip_chest; // Equiptment: Chest visual - /*00224*/ EquipStruct equip_arms; // Equiptment: Arms visual - /*00244*/ EquipStruct equip_bracers; // Equiptment: Wrist visual - /*00264*/ EquipStruct equip_hands; // Equiptment: Hands visual - /*00284*/ EquipStruct equip_legs; // Equiptment: Legs visual - /*00304*/ EquipStruct equip_feet; // Equiptment: Boots visual - /*00324*/ EquipStruct equip_primary; // Equiptment: Main visual - /*00344*/ EquipStruct equip_secondary; // Equiptment: Off visual + /*00184*/ Texture_Struct equip_helmet; // Equiptment: Helmet visual + /*00204*/ Texture_Struct equip_chest; // Equiptment: Chest visual + /*00224*/ Texture_Struct equip_arms; // Equiptment: Arms visual + /*00244*/ Texture_Struct equip_bracers; // Equiptment: Wrist visual + /*00264*/ Texture_Struct equip_hands; // Equiptment: Hands visual + /*00284*/ Texture_Struct equip_legs; // Equiptment: Legs visual + /*00304*/ Texture_Struct equip_feet; // Equiptment: Boots visual + /*00324*/ Texture_Struct equip_primary; // Equiptment: Main visual + /*00344*/ Texture_Struct equip_secondary; // Equiptment: Off visual // Below slots are just guesses, but all 0s anyway... - /*00364*/ EquipStruct equip_charm; // Equiptment: Non-visual - /*00384*/ EquipStruct equip_ear1; // Equiptment: Non-visual - /*00404*/ EquipStruct equip_ear2; // Equiptment: Non-visual - /*00424*/ EquipStruct equip_face; // Equiptment: Non-visual - /*00444*/ EquipStruct equip_neck; // Equiptment: Non-visual - /*00464*/ EquipStruct equip_shoulder; // Equiptment: Non-visual - /*00484*/ EquipStruct equip_bracer2; // Equiptment: Non-visual - /*00504*/ EquipStruct equip_range; // Equiptment: Non-visual - /*00524*/ EquipStruct equip_ring1; // Equiptment: Non-visual - /*00544*/ EquipStruct equip_ring2; // Equiptment: Non-visual - /*00564*/ EquipStruct equip_waist; // Equiptment: Non-visual - /*00584*/ EquipStruct equip_powersource; // Equiptment: Non-visual - /*00604*/ EquipStruct equip_ammo; // Equiptment: Non-visual + /*00364*/ Texture_Struct equip_charm; // Equiptment: Non-visual + /*00384*/ Texture_Struct equip_ear1; // Equiptment: Non-visual + /*00404*/ Texture_Struct equip_ear2; // Equiptment: Non-visual + /*00424*/ Texture_Struct equip_face; // Equiptment: Non-visual + /*00444*/ Texture_Struct equip_neck; // Equiptment: Non-visual + /*00464*/ Texture_Struct equip_shoulder; // Equiptment: Non-visual + /*00484*/ Texture_Struct equip_bracer2; // Equiptment: Non-visual + /*00504*/ Texture_Struct equip_range; // Equiptment: Non-visual + /*00524*/ Texture_Struct equip_ring1; // Equiptment: Non-visual + /*00544*/ Texture_Struct equip_ring2; // Equiptment: Non-visual + /*00564*/ Texture_Struct equip_waist; // Equiptment: Non-visual + /*00584*/ Texture_Struct equip_powersource; // Equiptment: Non-visual + /*00604*/ Texture_Struct equip_ammo; // Equiptment: Non-visual } equip; - /*00184*/ EquipStruct equipment[22]; + /*00184*/ Texture_Struct equipment[22]; }; /*00624*/ uint32 equip2_count; // Seen 9 -/*00628*/ EquipStruct equipment2[9]; // Appears to be Visible slots, but all 0s +/*00628*/ Texture_Struct equipment2[9]; // Appears to be Visible slots, but all 0s /*00808*/ uint32 tint_count; // Seen 9 /*00812*/ TintProfile item_tint; // RR GG BB 00 /*00848*/ uint32 tint_count2; // Seen 9 diff --git a/common/patches/sod.cpp b/common/patches/sod.cpp index ccc0edf15..916333041 100644 --- a/common/patches/sod.cpp +++ b/common/patches/sod.cpp @@ -1554,9 +1554,9 @@ namespace SoD OUT(beard); // OUT(unknown00178[10]); for (r = 0; r < 9; r++) { - eq->equipment[r].Material = emu->item_material[r]; - eq->equipment[r].Unknown1 = 0; - eq->equipment[r].EliteMaterial = 0; + eq->equipment.Slot[r].Material = emu->item_material.Slot[r].Material; + eq->equipment.Slot[r].Unknown1 = 0; + eq->equipment.Slot[r].EliteMaterial = 0; //eq->colors[r].color = emu->colors[r].color; } for (r = 0; r < 7; r++) { @@ -1994,9 +1994,9 @@ namespace SoD eq_cse->Face = emu_cse->Face; for (int equip_index = 0; equip_index < EQEmu::textures::TextureCount; equip_index++) { - eq_cse->Equip[equip_index].Material = emu_cse->Equip[equip_index].Material; - eq_cse->Equip[equip_index].Unknown1 = emu_cse->Equip[equip_index].Unknown1; - eq_cse->Equip[equip_index].EliteMaterial = emu_cse->Equip[equip_index].EliteMaterial; + eq_cse->Equip[equip_index].Textures.Material = emu_cse->Equip[equip_index].Textures.Material; + eq_cse->Equip[equip_index].Textures.Unknown1 = emu_cse->Equip[equip_index].Textures.Unknown1; + eq_cse->Equip[equip_index].Textures.EliteMaterial = emu_cse->Equip[equip_index].Textures.EliteMaterial; eq_cse->Equip[equip_index].Color.Color = emu_cse->Equip[equip_index].Color.Color; } @@ -2563,7 +2563,7 @@ namespace SoD float SpawnSize = emu->size; if (!((emu->NPC == 0) || (emu->race <= 12) || (emu->race == 128) || (emu->race == 130) || (emu->race == 330) || (emu->race == 522))) { - PacketSize -= (sizeof(structs::EquipStruct) * 9); + PacketSize -= (sizeof(structs::Texture_Struct) * 9); if (emu->size == 0) { @@ -2773,11 +2773,11 @@ namespace SoD VARSTRUCT_ENCODE_TYPE(uint32, Buffer, 0); VARSTRUCT_ENCODE_TYPE(uint32, Buffer, 0); - VARSTRUCT_ENCODE_TYPE(uint32, Buffer, emu->equipment[EQEmu::textures::TexturePrimary].Material); + VARSTRUCT_ENCODE_TYPE(uint32, Buffer, emu->equipment.Primary.Material); VARSTRUCT_ENCODE_TYPE(uint32, Buffer, 0); VARSTRUCT_ENCODE_TYPE(uint32, Buffer, 0); - VARSTRUCT_ENCODE_TYPE(uint32, Buffer, emu->equipment[EQEmu::textures::TextureSecondary].Material); + VARSTRUCT_ENCODE_TYPE(uint32, Buffer, emu->equipment.Secondary.Material); VARSTRUCT_ENCODE_TYPE(uint32, Buffer, 0); VARSTRUCT_ENCODE_TYPE(uint32, Buffer, 0); } @@ -2785,15 +2785,15 @@ namespace SoD if ((emu->NPC == 0) || (emu->race <= 12) || (emu->race == 128) || (emu->race == 130) || (emu->race == 330) || (emu->race == 522)) { - structs::EquipStruct *Equipment = (structs::EquipStruct *)Buffer; + structs::Texture_Struct *Equipment = (structs::Texture_Struct *)Buffer; for (k = 0; k < 9; k++) { - Equipment[k].Material = emu->equipment[k].Material; - Equipment[k].Unknown1 = emu->equipment[k].Unknown1; - Equipment[k].EliteMaterial = emu->equipment[k].EliteMaterial; + Equipment[k].Material = emu->equipment.Slot[k].Material; + Equipment[k].Unknown1 = emu->equipment.Slot[k].Unknown1; + Equipment[k].EliteMaterial = emu->equipment.Slot[k].EliteMaterial; } - Buffer += (sizeof(structs::EquipStruct) * 9); + Buffer += (sizeof(structs::Texture_Struct) * 9); } if (strlen(emu->title)) { diff --git a/common/patches/sod_structs.h b/common/patches/sod_structs.h index bf45e2fda..6affabfe3 100644 --- a/common/patches/sod_structs.h +++ b/common/patches/sod_structs.h @@ -135,7 +135,8 @@ struct Tint_Struct }; }; -struct TintProfile { +struct TintProfile +{ union { struct { Tint_Struct Head; @@ -152,11 +153,40 @@ struct TintProfile { }; }; -struct CharSelectEquip +/* +* Visible equiptment. +* Size: 12 Octets +*/ +struct Texture_Struct { uint32 Material; uint32 Unknown1; uint32 EliteMaterial; +}; + +struct TextureProfile +{ + union { + struct { + Texture_Struct Head; + Texture_Struct Chest; + Texture_Struct Arms; + Texture_Struct Wrist; + Texture_Struct Hands; + Texture_Struct Legs; + Texture_Struct Feet; + Texture_Struct Primary; + Texture_Struct Secondary; + }; + Texture_Struct Slot[EQEmu::textures::TextureCount]; + }; + + TextureProfile(); +}; + +struct CharSelectEquip +{ + Texture_Struct Textures; Tint_Struct Color; }; @@ -169,7 +199,7 @@ struct CharacterSelectEntry_Struct /*0000*/ uint8 Beard; // /*0001*/ uint8 HairColor; // /*0000*/ uint8 Face; // -/*0000*/ CharSelectEquip Equip[9]; +/*0000*/ CharSelectEquip Equip[EQEmu::textures::TextureCount]; /*0000*/ uint32 PrimaryIDFile; // /*0000*/ uint32 SecondaryIDFile; // /*0000*/ uint8 Unknown15; // 0xff @@ -202,19 +232,6 @@ struct CharacterSelect_Struct /*0008*/ CharacterSelectEntry_Struct Entries[0]; }; -/* -* Visible equiptment. -* Size: 12 Octets -*/ -struct EquipStruct -{ -/*00*/ uint32 Material; -/*04*/ uint32 Unknown1; -/*08*/ uint32 EliteMaterial; -/*12*/ -}; - - /* ** Generic Spawn Struct ** Length: 897 Octets @@ -334,22 +351,7 @@ struct Spawn_Struct /*0000*/ TintProfile equipment_tint; // skip these bytes if not a valid player race -/*0000*/ union - { - struct - { - /*0000*/ EquipStruct equip_helmet; // Equiptment: Helmet visual - /*0000*/ EquipStruct equip_chest; // Equiptment: Chest visual - /*0000*/ EquipStruct equip_arms; // Equiptment: Arms visual - /*0000*/ EquipStruct equip_bracers; // Equiptment: Wrist visual - /*0000*/ EquipStruct equip_hands; // Equiptment: Hands visual - /*0000*/ EquipStruct equip_legs; // Equiptment: Legs visual - /*0000*/ EquipStruct equip_feet; // Equiptment: Boots visual - /*0000*/ EquipStruct equip_primary; // Equiptment: Main visual - /*0000*/ EquipStruct equip_secondary; // Equiptment: Off visual - } equip; - /*0000*/ EquipStruct equipment[9]; - }; +/*0000*/ TextureProfile equipment; /*0000*/ //char title[0]; // only read if(hasTitleOrSuffix & 4) /*0000*/ //char suffix[0]; // only read if(hasTitleOrSuffix & 8) @@ -905,22 +907,7 @@ struct PlayerProfile_Struct /*00216*/ uint8 hairstyle; // Player hair style /*00217*/ uint8 beard; // Player beard type /*00218*/ uint8 unknown00178[14]; //[10]14 on Live? was 10 -/*00232*/ union - { - struct - { - /*00228*/ EquipStruct equip_helmet; // Equiptment: Helmet visual - /*00240*/ EquipStruct equip_chest; // Equiptment: Chest visual - /*00252*/ EquipStruct equip_arms; // Equiptment: Arms visual - /*00264*/ EquipStruct equip_bracers; // Equiptment: Wrist visual - /*00276*/ EquipStruct equip_hands; // Equiptment: Hands visual - /*00288*/ EquipStruct equip_legs; // Equiptment: Legs visual - /*00300*/ EquipStruct equip_feet; // Equiptment: Boots visual - /*00312*/ EquipStruct equip_primary; // Equiptment: Main visual - /*00324*/ EquipStruct equip_secondary; // Equiptment: Off visual - } equip; - /*00228*/ EquipStruct equipment[9]; //Live Shows [108] for this part - }; +/*00232*/ TextureProfile equipment; /*00340*/ uint8 unknown00224[156]; // Live Shows [160] /*00496*/ TintProfile item_tint; // RR GG BB 00 /*00532*/ AA_Array aa_array[MAX_PP_AA_ARRAY]; // [3600] AAs 12 bytes each diff --git a/common/patches/sof.cpp b/common/patches/sof.cpp index 1ef8240dc..7944605f4 100644 --- a/common/patches/sof.cpp +++ b/common/patches/sof.cpp @@ -1210,9 +1210,9 @@ namespace SoF OUT(beard); // OUT(unknown00178[10]); for (r = 0; r < 9; r++) { - eq->equipment[r].Material = emu->item_material[r]; - eq->equipment[r].Unknown1 = 0; - eq->equipment[r].EliteMaterial = 0; + eq->equipment.Slot[r].Material = emu->item_material.Slot[r].Material; + eq->equipment.Slot[r].Unknown1 = 0; + eq->equipment.Slot[r].EliteMaterial = 0; //eq->colors[r].color = emu->colors[r].color; } for (r = 0; r < 7; r++) { @@ -1650,9 +1650,9 @@ namespace SoF eq_cse->Face = emu_cse->Face; for (int equip_index = 0; equip_index < EQEmu::textures::TextureCount; equip_index++) { - eq_cse->Equip[equip_index].Material = emu_cse->Equip[equip_index].Material; - eq_cse->Equip[equip_index].Unknown1 = emu_cse->Equip[equip_index].Unknown1; - eq_cse->Equip[equip_index].EliteMaterial = emu_cse->Equip[equip_index].EliteMaterial; + eq_cse->Equip[equip_index].Textures.Material = emu_cse->Equip[equip_index].Textures.Material; + eq_cse->Equip[equip_index].Textures.Unknown1 = emu_cse->Equip[equip_index].Textures.Unknown1; + eq_cse->Equip[equip_index].Textures.EliteMaterial = emu_cse->Equip[equip_index].Textures.EliteMaterial; eq_cse->Equip[equip_index].Color.Color = emu_cse->Equip[equip_index].Color.Color; } @@ -2081,9 +2081,9 @@ namespace SoF eq->drakkin_heritage = emu->drakkin_heritage; eq->gender = emu->gender; for (k = 0; k < 9; k++) { - eq->equipment[k].Material = emu->equipment[k].Material; - eq->equipment[k].Unknown1 = emu->equipment[k].Unknown1; - eq->equipment[k].EliteMaterial = emu->equipment[k].EliteMaterial; + eq->equipment.Slot[k].Material = emu->equipment.Slot[k].Material; + eq->equipment.Slot[k].Unknown1 = emu->equipment.Slot[k].Unknown1; + eq->equipment.Slot[k].EliteMaterial = emu->equipment.Slot[k].EliteMaterial; eq->equipment_tint.Slot[k].Color = emu->equipment_tint.Slot[k].Color; } eq->StandState = emu->StandState; diff --git a/common/patches/sof_structs.h b/common/patches/sof_structs.h index 19e413082..66c3f93bf 100644 --- a/common/patches/sof_structs.h +++ b/common/patches/sof_structs.h @@ -135,7 +135,8 @@ struct Tint_Struct }; }; -struct TintProfile { +struct TintProfile +{ union { struct { Tint_Struct Head; @@ -152,11 +153,40 @@ struct TintProfile { }; }; -struct CharSelectEquip +/* +* Visible equiptment. +* Size: 12 Octets +*/ +struct Texture_Struct { uint32 Material; uint32 Unknown1; uint32 EliteMaterial; +}; + +struct TextureProfile +{ + union { + struct { + Texture_Struct Head; + Texture_Struct Chest; + Texture_Struct Arms; + Texture_Struct Wrist; + Texture_Struct Hands; + Texture_Struct Legs; + Texture_Struct Feet; + Texture_Struct Primary; + Texture_Struct Secondary; + }; + Texture_Struct Slot[EQEmu::textures::TextureCount]; + }; + + TextureProfile(); +}; + +struct CharSelectEquip +{ + Texture_Struct Textures; Tint_Struct Color; }; @@ -169,7 +199,7 @@ struct CharacterSelectEntry_Struct /*0000*/ uint8 Beard; // /*0001*/ uint8 HairColor; // /*0000*/ uint8 Face; // -/*0000*/ CharSelectEquip Equip[9]; +/*0000*/ CharSelectEquip Equip[EQEmu::textures::TextureCount]; /*0000*/ uint32 PrimaryIDFile; // /*0000*/ uint32 SecondaryIDFile; // /*0000*/ uint8 Unknown15; // 0xff @@ -200,19 +230,6 @@ struct CharacterSelect_Struct /*0008*/ CharacterSelectEntry_Struct Entries[0]; }; -/* -* Visible equiptment. -* Size: 12 Octets -*/ -struct EquipStruct -{ -/*00*/ uint32 Material; -/*04*/ uint32 Unknown1; -/*08*/ uint32 EliteMaterial; -/*12*/ -}; - - /* ** Generic Spawn Struct ** Length: 897 Octets @@ -239,22 +256,7 @@ struct Spawn_Struct { /*0018*/ uint8 unknown0018[4]; // /*0022*/ uint8 gender; // Gender (0=male, 1=female, 2=monster) /*0023*/ uint8 unknown0023[4]; // -/*0027*/ union - { - struct - { - /*0027*/ EquipStruct equip_helmet; // Equiptment: Helmet visual - /*0039*/ EquipStruct equip_chest; // Equiptment: Chest visual - /*0051*/ EquipStruct equip_arms; // Equiptment: Arms visual - /*0063*/ EquipStruct equip_bracers; // Equiptment: Wrist visual - /*0075*/ EquipStruct equip_hands; // Equiptment: Hands visual - /*0087*/ EquipStruct equip_legs; // Equiptment: Legs visual - /*0099*/ EquipStruct equip_feet; // Equiptment: Boots visual - /*0111*/ EquipStruct equip_primary; // Equiptment: Main visual - /*0123*/ EquipStruct equip_secondary; // Equiptment: Off visual - } equip; - /*0027*/ EquipStruct equipment[9]; - }; +/*0027*/ TextureProfile equipment; /*0135*/ uint8 StandState; // Seems to be required to be set to 0x64 for normal animation. /*0136*/ uint8 unknown0136; @@ -884,22 +886,7 @@ struct PlayerProfile_Struct //23576 Octets /*00216*/ uint8 hairstyle; // Player hair style /*00217*/ uint8 beard; // Player beard type /*00218*/ uint8 unknown00178[10]; //[10]14 on Live? -/*00228*/ union - { - struct - { - /*00228*/ EquipStruct equip_helmet; // Equiptment: Helmet visual - /*00240*/ EquipStruct equip_chest; // Equiptment: Chest visual - /*00252*/ EquipStruct equip_arms; // Equiptment: Arms visual - /*00264*/ EquipStruct equip_bracers; // Equiptment: Wrist visual - /*00276*/ EquipStruct equip_hands; // Equiptment: Hands visual - /*00288*/ EquipStruct equip_legs; // Equiptment: Legs visual - /*00300*/ EquipStruct equip_feet; // Equiptment: Boots visual - /*00312*/ EquipStruct equip_primary; // Equiptment: Main visual - /*00324*/ EquipStruct equip_secondary; // Equiptment: Off visual - } equip; - /*00228*/ EquipStruct equipment[9]; //Live Shows [108] for this part - }; +/*00228*/ TextureProfile equipment; /*00336*/ uint8 unknown00224[156]; // Live Shows [160] /*00496*/ TintProfile item_tint; // RR GG BB 00 /*00544*/ AA_Array aa_array[MAX_PP_AA_ARRAY]; // [3600] AAs 12 bytes each diff --git a/common/patches/titanium.cpp b/common/patches/titanium.cpp index 36941d421..2f971de8a 100644 --- a/common/patches/titanium.cpp +++ b/common/patches/titanium.cpp @@ -904,7 +904,7 @@ namespace Titanium OUT(beard); // OUT(unknown00178[10]); for (r = 0; r < 9; r++) { - OUT(item_material[r]); + OUT(item_material.Slot[r].Material); OUT(item_tint.Slot[r].Color); } // OUT(unknown00224[48]); @@ -1231,7 +1231,7 @@ namespace Titanium eq->HairStyle[char_index] = emu_cse->HairStyle; for (int index = 0; index < EQEmu::textures::TextureCount; ++index) { - eq->Equip[char_index][index] = emu_cse->Equip[index].Material; + eq->Equip[char_index].Slot[index].Material = emu_cse->Equip[index].Textures.Material; } eq->SecondaryIDFile[char_index] = emu_cse->SecondaryIDFile; @@ -1268,7 +1268,7 @@ namespace Titanium eq->HairStyle[char_index] = 0; for (int index = 0; index < EQEmu::textures::TextureCount; ++index) { - eq->Equip[char_index][index] = 0; + eq->Equip[char_index].Slot[index].Material = 0; } eq->SecondaryIDFile[char_index] = 0; @@ -1600,7 +1600,7 @@ namespace Titanium eq->guildrank = emu->guildrank; // eq->unknown0194[3] = emu->unknown0194[3]; for (k = 0; k < 9; k++) { - eq->equipment[k] = emu->equipment[k].Material; + eq->equipment.Slot[k].Material = emu->equipment.Slot[k].Material; eq->equipment_tint.Slot[k].Color = emu->equipment_tint.Slot[k].Color; } for (k = 0; k < 8; k++) { diff --git a/common/patches/titanium_structs.h b/common/patches/titanium_structs.h index 21364e070..997aecc5d 100644 --- a/common/patches/titanium_structs.h +++ b/common/patches/titanium_structs.h @@ -148,6 +148,31 @@ struct TintProfile { }; }; +struct Texture_Struct +{ + uint32 Material; +}; + +struct TextureProfile +{ + union { + struct { + Texture_Struct Head; + Texture_Struct Chest; + Texture_Struct Arms; + Texture_Struct Wrist; + Texture_Struct Hands; + Texture_Struct Legs; + Texture_Struct Feet; + Texture_Struct Primary; + Texture_Struct Secondary; + }; + Texture_Struct Slot[EQEmu::textures::TextureCount]; + }; + + TextureProfile(); +}; + /* ** Character Selection Struct ** Length: 1704 Bytes @@ -159,7 +184,7 @@ struct CharacterSelect_Struct /*0040*/ TintProfile CS_Colors[10]; // Characters Equipment Colors - packet requires length for 10 characters..but, client is limited to 8 /*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) +/*0420*/ TextureProfile Equip[10]; // Characters texture array /*0780*/ uint32 SecondaryIDFile[10]; // Characters secondary IDFile number /*0820*/ uint8 Unknown820[10]; // 10x ff /*0830*/ uint8 Unknown830[2]; // 2x 00 @@ -256,22 +281,7 @@ struct Spawn_Struct { /*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 - }; +/*0197*/ TextureProfile equipment; /*0233*/ float runspeed; // Speed when running /*0036*/ uint8 afk; // 0=no, 1=afk /*0238*/ uint32 guildID; // Current guild @@ -812,7 +822,7 @@ struct PlayerProfile_Struct /*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 +/*00188*/ TextureProfile item_material; // Item texture/material of worn items /*00224*/ uint8 unknown00224[44]; /*00268*/ TintProfile item_tint; // RR GG BB 00 /*00304*/ AA_Array aa_array[MAX_PP_AA_ARRAY]; // AAs diff --git a/common/patches/uf.cpp b/common/patches/uf.cpp index 8472c1034..66bc0b777 100644 --- a/common/patches/uf.cpp +++ b/common/patches/uf.cpp @@ -1807,9 +1807,9 @@ namespace UF OUT(beard); // OUT(unknown00178[10]); for (r = 0; r < 9; r++) { - eq->equipment[r].Material = emu->item_material[r]; - eq->equipment[r].Unknown1 = 0; - eq->equipment[r].EliteMaterial = 0; + eq->equipment.Slot[r].Material = emu->item_material.Slot[r].Material; + eq->equipment.Slot[r].Unknown1 = 0; + eq->equipment.Slot[r].EliteMaterial = 0; //eq->colors[r].color = emu->colors[r].color; } for (r = 0; r < 7; r++) { @@ -2291,9 +2291,9 @@ namespace UF eq_cse->Face = emu_cse->Face; for (int equip_index = 0; equip_index < EQEmu::textures::TextureCount; equip_index++) { - eq_cse->Equip[equip_index].Material = emu_cse->Equip[equip_index].Material; - eq_cse->Equip[equip_index].Unknown1 = emu_cse->Equip[equip_index].Unknown1; - eq_cse->Equip[equip_index].EliteMaterial = emu_cse->Equip[equip_index].EliteMaterial; + eq_cse->Equip[equip_index].Textures.Material = emu_cse->Equip[equip_index].Textures.Material; + eq_cse->Equip[equip_index].Textures.Unknown1 = emu_cse->Equip[equip_index].Textures.Unknown1; + eq_cse->Equip[equip_index].Textures.EliteMaterial = emu_cse->Equip[equip_index].Textures.EliteMaterial; eq_cse->Equip[equip_index].Color.Color = emu_cse->Equip[equip_index].Color.Color; } @@ -2858,7 +2858,7 @@ namespace UF float SpawnSize = emu->size; if (!((emu->NPC == 0) || (emu->race <= 12) || (emu->race == 128) || (emu->race == 130) || (emu->race == 330) || (emu->race == 522))) { - PacketSize -= (sizeof(structs::EquipStruct) * 9); + PacketSize -= (sizeof(structs::Texture_Struct) * 9); if (emu->size == 0) { @@ -3070,19 +3070,19 @@ namespace UF VARSTRUCT_ENCODE_TYPE(uint32, Buffer, 0); VARSTRUCT_ENCODE_TYPE(uint32, Buffer, 0); - if (emu->equipment[EQEmu::textures::TexturePrimary].Material > 99999) { + if (emu->equipment.Primary.Material > 99999) { VARSTRUCT_ENCODE_TYPE(uint32, Buffer, 63); } else { - VARSTRUCT_ENCODE_TYPE(uint32, Buffer, emu->equipment[EQEmu::textures::TexturePrimary].Material); + VARSTRUCT_ENCODE_TYPE(uint32, Buffer, emu->equipment.Primary.Material); } VARSTRUCT_ENCODE_TYPE(uint32, Buffer, 0); VARSTRUCT_ENCODE_TYPE(uint32, Buffer, 0); - if (emu->equipment[EQEmu::textures::TextureSecondary].Material > 99999) { + if (emu->equipment.Secondary.Material > 99999) { VARSTRUCT_ENCODE_TYPE(uint32, Buffer, 63); } else { - VARSTRUCT_ENCODE_TYPE(uint32, Buffer, emu->equipment[EQEmu::textures::TextureSecondary].Material); + VARSTRUCT_ENCODE_TYPE(uint32, Buffer, emu->equipment.Secondary.Material); } VARSTRUCT_ENCODE_TYPE(uint32, Buffer, 0); @@ -3091,19 +3091,19 @@ namespace UF if ((emu->NPC == 0) || (emu->race <= 12) || (emu->race == 128) || (emu->race == 130) || (emu->race == 330) || (emu->race == 522)) { - structs::EquipStruct *Equipment = (structs::EquipStruct *)Buffer; + structs::Texture_Struct *Equipment = (structs::Texture_Struct *)Buffer; for (k = 0; k < 9; k++) { - if (emu->equipment[k].Material > 99999) { + if (emu->equipment.Slot[k].Material > 99999) { Equipment[k].Material = 63; } else { - Equipment[k].Material = emu->equipment[k].Material; + Equipment[k].Material = emu->equipment.Slot[k].Material; } - Equipment[k].Unknown1 = emu->equipment[k].Unknown1; - Equipment[k].EliteMaterial = emu->equipment[k].EliteMaterial; + Equipment[k].Unknown1 = emu->equipment.Slot[k].Unknown1; + Equipment[k].EliteMaterial = emu->equipment.Slot[k].EliteMaterial; } - Buffer += (sizeof(structs::EquipStruct) * 9); + Buffer += (sizeof(structs::Texture_Struct) * 9); } if (strlen(emu->title)) { diff --git a/common/patches/uf_structs.h b/common/patches/uf_structs.h index 00a2e4aad..284e8a336 100644 --- a/common/patches/uf_structs.h +++ b/common/patches/uf_structs.h @@ -135,7 +135,8 @@ struct Tint_Struct }; }; -struct TintProfile { +struct TintProfile +{ union { struct { Tint_Struct Head; @@ -152,11 +153,40 @@ struct TintProfile { }; }; -struct CharSelectEquip +/* +* Visible equiptment. +* Size: 12 Octets +*/ +struct Texture_Struct { uint32 Material; uint32 Unknown1; uint32 EliteMaterial; +}; + +struct TextureProfile +{ + union { + struct { + Texture_Struct Head; + Texture_Struct Chest; + Texture_Struct Arms; + Texture_Struct Wrist; + Texture_Struct Hands; + Texture_Struct Legs; + Texture_Struct Feet; + Texture_Struct Primary; + Texture_Struct Secondary; + }; + Texture_Struct Slot[EQEmu::textures::TextureCount]; + }; + + TextureProfile(); +}; + +struct CharSelectEquip +{ + Texture_Struct Textures; Tint_Struct Color; }; @@ -169,7 +199,7 @@ struct CharacterSelectEntry_Struct /*0000*/ uint8 Beard; // /*0001*/ uint8 HairColor; // /*0000*/ uint8 Face; // -/*0000*/ CharSelectEquip Equip[9]; +/*0000*/ CharSelectEquip Equip[EQEmu::textures::TextureCount]; /*0000*/ uint32 PrimaryIDFile; // /*0000*/ uint32 SecondaryIDFile; // /*0000*/ uint8 Unknown15; // 0xff @@ -202,19 +232,6 @@ struct CharacterSelect_Struct /*0008*/ CharacterSelectEntry_Struct Entries[0]; }; -/* -* Visible equiptment. -* Size: 12 Octets -*/ -struct EquipStruct -{ -/*00*/ uint32 Material; -/*04*/ uint32 Unknown1; -/*08*/ uint32 EliteMaterial; -/*12*/ -}; - - /* ** Generic Spawn Struct ** Length: 897 Octets @@ -334,22 +351,7 @@ struct Spawn_Struct /*0000*/ TintProfile equipment_tint; // skip these bytes if not a valid player race -/*0000*/ union - { - struct - { - /*0000*/ EquipStruct equip_helmet; // Equiptment: Helmet visual - /*0000*/ EquipStruct equip_chest; // Equiptment: Chest visual - /*0000*/ EquipStruct equip_arms; // Equiptment: Arms visual - /*0000*/ EquipStruct equip_bracers; // Equiptment: Wrist visual - /*0000*/ EquipStruct equip_hands; // Equiptment: Hands visual - /*0000*/ EquipStruct equip_legs; // Equiptment: Legs visual - /*0000*/ EquipStruct equip_feet; // Equiptment: Boots visual - /*0000*/ EquipStruct equip_primary; // Equiptment: Main visual - /*0000*/ EquipStruct equip_secondary; // Equiptment: Off visual - } equip; - /*0000*/ EquipStruct equipment[9]; - }; +/*0000*/ TextureProfile equipment; /*0000*/ //char title[0]; // only read if(hasTitleOrSuffix & 4) /*0000*/ //char suffix[0]; // only read if(hasTitleOrSuffix & 8) @@ -954,22 +956,7 @@ struct PlayerProfile_Struct /*00230*/ uint8 hairstyle; // Player hair style /*00231*/ uint8 beard; // Player beard type /*00232*/ uint8 unknown00232[4]; // was 14 -/*00236*/ union - { - struct - { - /*00236*/ EquipStruct equip_helmet; // Equiptment: Helmet visual - /*00248*/ EquipStruct equip_chest; // Equiptment: Chest visual - /*00260*/ EquipStruct equip_arms; // Equiptment: Arms visual - /*00272*/ EquipStruct equip_bracers; // Equiptment: Wrist visual - /*00284*/ EquipStruct equip_hands; // Equiptment: Hands visual - /*00296*/ EquipStruct equip_legs; // Equiptment: Legs visual - /*00308*/ EquipStruct equip_feet; // Equiptment: Boots visual - /*00320*/ EquipStruct equip_primary; // Equiptment: Main visual - /*00332*/ EquipStruct equip_secondary; // Equiptment: Off visual - } equip; - /*00236*/ EquipStruct equipment[9]; //Underfoot Shows [108] for this part - }; +/*00236*/ TextureProfile equipment; /*00344*/ uint8 unknown00344[168]; // Underfoot Shows [160] /*00512*/ TintProfile item_tint; // RR GG BB 00 /*00548*/ AA_Array aa_array[MAX_PP_AA_ARRAY]; // [3600] AAs 12 bytes each diff --git a/common/textures.cpp b/common/textures.cpp index bbad13b26..7993ec384 100644 --- a/common/textures.cpp +++ b/common/textures.cpp @@ -85,7 +85,12 @@ EQEmu::TextureProfile::TextureProfile() { - memset(&Texture, 0, (sizeof(uint32) * textures::TextureCount)); + memset(&Slot, 0, (sizeof(Texture_Struct) * textures::TextureCount)); +} + +EQEmu::TextureShortProfile::TextureShortProfile() +{ + memset(&Slot, 0, (sizeof(uint32) * textures::TextureCount)); } EQEmu::TintProfile::TintProfile() diff --git a/common/textures.h b/common/textures.h index 598f5dd3a..a6333a03f 100644 --- a/common/textures.h +++ b/common/textures.h @@ -54,25 +54,56 @@ namespace EQEmu } /*textures*/ + struct Texture_Struct { + uint32 Material; + uint32 Unknown1; + uint32 EliteMaterial; + uint32 HeroForgeModel; + uint32 Material2; // Same as material? + }; + struct TextureProfile { union { struct { - uint32 Head; - uint32 Chest; - uint32 Arms; - uint32 Wrist; - uint32 Hands; - uint32 Legs; - uint32 Feet; - uint32 Primary; - uint32 Secondary; + Texture_Struct Head; + Texture_Struct Chest; + Texture_Struct Arms; + Texture_Struct Wrist; + Texture_Struct Hands; + Texture_Struct Legs; + Texture_Struct Feet; + Texture_Struct Primary; + Texture_Struct Secondary; }; - uint32 Texture[textures::TextureCount]; + Texture_Struct Slot[textures::TextureCount]; }; TextureProfile(); }; + struct TextureShort_Struct { + uint32 Material; + }; + + struct TextureShortProfile { + union { + struct { + TextureShort_Struct Head; + TextureShort_Struct Chest; + TextureShort_Struct Arms; + TextureShort_Struct Wrist; + TextureShort_Struct Hands; + TextureShort_Struct Legs; + TextureShort_Struct Feet; + TextureShort_Struct Primary; + TextureShort_Struct Secondary; + }; + TextureShort_Struct Slot[textures::TextureCount]; + }; + + TextureShortProfile(); + }; + struct Tint_Struct { union { struct { diff --git a/world/worlddb.cpp b/world/worlddb.cpp index 7df66b85a..c1995535f 100644 --- a/world/worlddb.cpp +++ b/world/worlddb.cpp @@ -118,11 +118,11 @@ void WorldDatabase::GetCharSelectInfo(uint32 accountID, EQApplicationPacket **ou cse->Face = (uint8)atoi(row[15]); for (uint32 matslot = 0; matslot < EQEmu::textures::TextureCount; matslot++) { // Processed below - cse->Equip[matslot].Material = 0; - cse->Equip[matslot].Unknown1 = 0; - cse->Equip[matslot].EliteMaterial = 0; - cse->Equip[matslot].HeroForgeModel = 0; - cse->Equip[matslot].Material2 = 0; + cse->Equip[matslot].Textures.Material = 0; + cse->Equip[matslot].Textures.Unknown1 = 0; + cse->Equip[matslot].Textures.EliteMaterial = 0; + cse->Equip[matslot].Textures.HeroForgeModel = 0; + cse->Equip[matslot].Textures.Material2 = 0; cse->Equip[matslot].Color.Color = 0; } @@ -262,12 +262,12 @@ void WorldDatabase::GetCharSelectInfo(uint32 accountID, EQApplicationPacket **ou // Weapon Models if (inst->GetOrnamentationIDFile() != 0) { idfile = inst->GetOrnamentationIDFile(); - cse->Equip[matslot].Material = idfile; + cse->Equip[matslot].Textures.Material = idfile; } else { if (strlen(item->IDFile) > 2) { idfile = atoi(&item->IDFile[2]); - cse->Equip[matslot].Material = idfile; + cse->Equip[matslot].Textures.Material = idfile; } } if (matslot == EQEmu::textures::TexturePrimary) { @@ -287,9 +287,9 @@ void WorldDatabase::GetCharSelectInfo(uint32 accountID, EQApplicationPacket **ou } // Armor Materials/Models - cse->Equip[matslot].Material = item->Material; - cse->Equip[matslot].EliteMaterial = item->EliteMaterial; - cse->Equip[matslot].HeroForgeModel = inst->GetOrnamentHeroModel(matslot); + cse->Equip[matslot].Textures.Material = item->Material; + cse->Equip[matslot].Textures.EliteMaterial = item->EliteMaterial; + cse->Equip[matslot].Textures.HeroForgeModel = inst->GetOrnamentHeroModel(matslot); cse->Equip[matslot].Color.Color = color; } } diff --git a/zone/beacon.cpp b/zone/beacon.cpp index 21943ecee..27f86fce7 100644 --- a/zone/beacon.cpp +++ b/zone/beacon.cpp @@ -56,7 +56,7 @@ Beacon::Beacon(Mob *at_mob, int lifetime) :Mob ( nullptr, nullptr, 0, 0, 0, INVISIBLE_MAN, 0, BT_NoTarget, 0, 0, 0, 0, 0, at_mob->GetPosition(), 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, EQEmu::TintProfile(), 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ), remove_timer(lifetime), spell_timer(0) diff --git a/zone/bot.cpp b/zone/bot.cpp index 67b7beb82..edbc4e8eb 100644 --- a/zone/bot.cpp +++ b/zone/bot.cpp @@ -2961,16 +2961,16 @@ void Bot::FillSpawnStruct(NewSpawn_Struct* ns, Mob* ForWho) { if (inst) { item = inst->GetItem(); if (item != 0) { - ns->spawn.equipment[i].Material = item->Material; - ns->spawn.equipment[i].EliteMaterial = item->EliteMaterial; - ns->spawn.equipment[i].HeroForgeModel = item->HerosForgeModel; - if (armor_tint[i]) - ns->spawn.equipment_tint.Slot[i].Color = armor_tint[i]; + ns->spawn.equipment.Slot[i].Material = item->Material; + ns->spawn.equipment.Slot[i].EliteMaterial = item->EliteMaterial; + ns->spawn.equipment.Slot[i].HeroForgeModel = item->HerosForgeModel; + if (armor_tint.Slot[i].Color) + ns->spawn.equipment_tint.Slot[i].Color = armor_tint.Slot[i].Color; else ns->spawn.equipment_tint.Slot[i].Color = item->Color; } else { - if (armor_tint[i]) - ns->spawn.equipment_tint.Slot[i].Color = armor_tint[i]; + if (armor_tint.Slot[i].Color) + ns->spawn.equipment_tint.Slot[i].Color = armor_tint.Slot[i].Color; } } } @@ -2980,7 +2980,7 @@ void Bot::FillSpawnStruct(NewSpawn_Struct* ns, Mob* ForWho) { item = inst->GetItem(); if(item) { if(strlen(item->IDFile) > 2) - ns->spawn.equipment[EQEmu::textures::TexturePrimary].Material = atoi(&item->IDFile[2]); + ns->spawn.equipment.Primary.Material = atoi(&item->IDFile[2]); ns->spawn.equipment_tint.Primary.Color = GetEquipmentColor(EQEmu::textures::TexturePrimary); } @@ -2991,7 +2991,7 @@ void Bot::FillSpawnStruct(NewSpawn_Struct* ns, Mob* ForWho) { item = inst->GetItem(); if(item) { if(strlen(item->IDFile) > 2) - ns->spawn.equipment[EQEmu::textures::TextureSecondary].Material = atoi(&item->IDFile[2]); + ns->spawn.equipment.Secondary.Material = atoi(&item->IDFile[2]); ns->spawn.equipment_tint.Secondary.Color = GetEquipmentColor(EQEmu::textures::TextureSecondary); } diff --git a/zone/client.cpp b/zone/client.cpp index 6ec655dc7..c10a26312 100644 --- a/zone/client.cpp +++ b/zone/client.cpp @@ -100,7 +100,7 @@ Client::Client(EQStreamInterface* ieqs) 0, // Drakkin Heritage 0, // Drakkin Tattoo 0, // Drakkin Details - 0, // Armor Tint + EQEmu::TintProfile(), // Armor Tint 0xff, // AA Title 0, // see_invis 0, // see_invis_undead @@ -2732,7 +2732,7 @@ void Client::SetMaterial(int16 in_slot, uint32 item_id) { uint8 matslot = Inventory::CalcMaterialFromSlot(in_slot); if (matslot != EQEmu::textures::TextureInvalid) { - m_pp.item_material[matslot] = GetEquipmentMaterial(matslot); + m_pp.item_material.Slot[matslot].Material = GetEquipmentMaterial(matslot); } } } @@ -6286,7 +6286,7 @@ void Client::Doppelganger(uint16 spell_id, Mob *target, const char *name_overrid made_npc->d_melee_texture1 = GetEquipmentMaterial(EQEmu::textures::TexturePrimary); made_npc->d_melee_texture2 = GetEquipmentMaterial(EQEmu::textures::TextureSecondary); for (int i = EQEmu::textures::TextureBegin; i <= EQEmu::textures::LastTexture; i++) { - made_npc->armor_tint[i] = GetEquipmentColor(i); + made_npc->armor_tint.Slot[i].Color = GetEquipmentColor(i); } made_npc->loottable_id = 0; diff --git a/zone/corpse.cpp b/zone/corpse.cpp index e5d12b8dd..98fd4923f 100644 --- a/zone/corpse.cpp +++ b/zone/corpse.cpp @@ -153,7 +153,7 @@ Corpse::Corpse(NPC* in_npc, ItemList* in_itemlist, uint32 in_npctypeid, const NP in_npc->GetDeity(),in_npc->GetLevel(),in_npc->GetNPCTypeID(),in_npc->GetSize(),0, in_npc->GetPosition(), in_npc->GetInnateLightType(), in_npc->GetTexture(),in_npc->GetHelmTexture(), 0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0xff,0,0,0,0,0,0,0,0,0,0,0,0,0,0), + 0,0,0,0,0,0,0,0,0,0,EQEmu::TintProfile(),0xff,0,0,0,0,0,0,0,0,0,0,0,0,0,0), corpse_decay_timer(in_decaytime), corpse_rez_timer(0), corpse_delay_timer(RuleI(NPC, CorpseUnlockTimer)), @@ -244,7 +244,7 @@ Corpse::Corpse(Client* client, int32 in_rezexp) : Mob ( client->GetPP().drakkin_heritage, // uint32 in_drakkin_heritage, client->GetPP().drakkin_tattoo, // uint32 in_drakkin_tattoo, client->GetPP().drakkin_details, // uint32 in_drakkin_details, - 0, // uint32 in_armor_tint[_MaterialCount], + EQEmu::TintProfile(), // uint32 in_armor_tint[_MaterialCount], 0xff, // uint8 in_aa_title, 0, // uint8 in_see_invis, // see through invis 0, // uint8 in_see_invis_undead, // see through invis vs. undead @@ -474,7 +474,7 @@ in_helmtexture, 0, 0, 0, -0, +EQEmu::TintProfile(), 0xff, 0, 0, diff --git a/zone/encounter.cpp b/zone/encounter.cpp index 01d4ef670..1eff0ca59 100644 --- a/zone/encounter.cpp +++ b/zone/encounter.cpp @@ -36,7 +36,7 @@ Encounter::Encounter(const char* enc_name) :Mob ( nullptr, nullptr, 0, 0, 0, INVISIBLE_MAN, 0, BT_NoTarget, 0, 0, 0, 0, 0, glm::vec4(0,0,0,0), 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, EQEmu::TintProfile(), 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ) { encounter_name[0] = 0; diff --git a/zone/lua_general.cpp b/zone/lua_general.cpp index 59103cf9e..d47420fe1 100644 --- a/zone/lua_general.cpp +++ b/zone/lua_general.cpp @@ -1400,15 +1400,15 @@ void lua_create_npc(luabind::adl::object table, float x, float y, float z, float LuaCreateNPCParse(drakkin_heritage, uint32, 0); LuaCreateNPCParse(drakkin_tattoo, uint32, 0); LuaCreateNPCParse(drakkin_details, uint32, 0); - LuaCreateNPCParse(armor_tint[0], uint32, 0); - LuaCreateNPCParse(armor_tint[1], uint32, 0); - LuaCreateNPCParse(armor_tint[2], uint32, 0); - LuaCreateNPCParse(armor_tint[3], uint32, 0); - LuaCreateNPCParse(armor_tint[4], uint32, 0); - LuaCreateNPCParse(armor_tint[5], uint32, 0); - LuaCreateNPCParse(armor_tint[6], uint32, 0); - LuaCreateNPCParse(armor_tint[7], uint32, 0); - LuaCreateNPCParse(armor_tint[8], uint32, 0); + LuaCreateNPCParse(armor_tint.Head.Color, uint32, 0); + LuaCreateNPCParse(armor_tint.Chest.Color, uint32, 0); + LuaCreateNPCParse(armor_tint.Arms.Color, uint32, 0); + LuaCreateNPCParse(armor_tint.Wrist.Color, uint32, 0); + LuaCreateNPCParse(armor_tint.Hands.Color, uint32, 0); + LuaCreateNPCParse(armor_tint.Legs.Color, uint32, 0); + LuaCreateNPCParse(armor_tint.Feet.Color, uint32, 0); + LuaCreateNPCParse(armor_tint.Primary.Color, uint32, 0); + LuaCreateNPCParse(armor_tint.Secondary.Color, uint32, 0); LuaCreateNPCParse(min_dmg, uint32, 2); LuaCreateNPCParse(max_dmg, uint32, 4); LuaCreateNPCParse(attack_count, int16, 0); diff --git a/zone/mob.cpp b/zone/mob.cpp index 2918aa413..f76902da9 100644 --- a/zone/mob.cpp +++ b/zone/mob.cpp @@ -73,7 +73,7 @@ Mob::Mob(const char* in_name, uint32 in_drakkin_heritage, uint32 in_drakkin_tattoo, uint32 in_drakkin_details, - uint32 in_armor_tint[EQEmu::textures::TextureCount], + EQEmu::TintProfile in_armor_tint, uint8 in_aa_title, uint8 in_see_invis, // see through invis/ivu @@ -280,14 +280,7 @@ Mob::Mob(const char* in_name, for (i = 0; i < EQEmu::textures::TextureCount; i++) { - if (in_armor_tint) - { - armor_tint[i] = in_armor_tint[i]; - } - else - { - armor_tint[i] = 0; - } + armor_tint.Slot[i].Color = in_armor_tint.Slot[i].Color; } m_Delta = glm::vec4(); @@ -1159,9 +1152,9 @@ void Mob::FillSpawnStruct(NewSpawn_Struct* ns, Mob* ForWho) // Only Player Races Wear Armor if (Mob::IsPlayerRace(race) || i > 6) { - ns->spawn.equipment[i].Material = GetEquipmentMaterial(i); - ns->spawn.equipment[i].EliteMaterial = IsEliteMaterialItem(i); - ns->spawn.equipment[i].HeroForgeModel = GetHerosForgeModel(i); + ns->spawn.equipment.Slot[i].Material = GetEquipmentMaterial(i); + ns->spawn.equipment.Slot[i].EliteMaterial = IsEliteMaterialItem(i); + ns->spawn.equipment.Slot[i].HeroForgeModel = GetHerosForgeModel(i); ns->spawn.equipment_tint.Slot[i].Color = GetEquipmentColor(i); } } @@ -2821,7 +2814,7 @@ void Mob::SetSlotTint(uint8 material_slot, uint8 red_tint, uint8 green_tint, uin color |= (green_tint & 0xFF) << 8; color |= (blue_tint & 0xFF); color |= (color) ? (0xFF << 24) : 0; - armor_tint[material_slot] = color; + armor_tint.Slot[material_slot].Color = color; auto outapp = new EQApplicationPacket(OP_WearChange, sizeof(WearChange_Struct)); WearChange_Struct* wc = (WearChange_Struct*)outapp->pBuffer; @@ -2838,7 +2831,7 @@ void Mob::SetSlotTint(uint8 material_slot, uint8 red_tint, uint8 green_tint, uin void Mob::WearChange(uint8 material_slot, uint16 texture, uint32 color, uint32 hero_forge_model) { - armor_tint[material_slot] = color; + armor_tint.Slot[material_slot].Color = color; auto outapp = new EQApplicationPacket(OP_WearChange, sizeof(WearChange_Struct)); WearChange_Struct* wc = (WearChange_Struct*)outapp->pBuffer; @@ -2966,9 +2959,9 @@ uint32 Mob::GetEquipmentColor(uint8 material_slot) const { const EQEmu::ItemBase *item; - if (armor_tint[material_slot]) + if (armor_tint.Slot[material_slot].Color) { - return armor_tint[material_slot]; + return armor_tint.Slot[material_slot].Color; } item = database.GetItem(GetEquipment(material_slot)); diff --git a/zone/mob.h b/zone/mob.h index e4c9ad875..a282fb89c 100644 --- a/zone/mob.h +++ b/zone/mob.h @@ -113,7 +113,7 @@ public: uint32 in_drakkin_heritage, uint32 in_drakkin_tattoo, uint32 in_drakkin_details, - uint32 in_armor_tint[EQEmu::textures::TextureCount], + 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 @@ -384,7 +384,7 @@ public: inline uint8 GetDrakkinHeritage() const { return drakkin_heritage; } inline uint8 GetDrakkinTattoo() const { return drakkin_tattoo; } inline uint8 GetDrakkinDetails() const { return drakkin_details; } - inline uint32 GetArmorTint(uint8 i) const { return armor_tint[(i < EQEmu::textures::TextureCount) ? i : 0]; } + inline uint32 GetArmorTint(uint8 i) const { return armor_tint.Slot[(i < EQEmu::textures::TextureCount) ? i : 0].Color; } inline uint8 GetClass() const { return class_; } inline uint8 GetLevel() const { return level; } inline uint8 GetOrigLevel() const { return orig_level; } @@ -1248,7 +1248,7 @@ protected: uint32 drakkin_heritage; uint32 drakkin_tattoo; uint32 drakkin_details; - uint32 armor_tint[EQEmu::textures::TextureCount]; + EQEmu::TintProfile armor_tint; uint8 aa_title; diff --git a/zone/npc.cpp b/zone/npc.cpp index 77f6d492f..d1d9e8a44 100644 --- a/zone/npc.cpp +++ b/zone/npc.cpp @@ -94,7 +94,7 @@ NPC::NPC(const NPCType* d, Spawn2* in_respawn, const glm::vec4& position, int if d->drakkin_heritage, d->drakkin_tattoo, d->drakkin_details, - (uint32*)d->armor_tint, + d->armor_tint, 0, d->see_invis, // pass see_invis/see_ivu flags to mob constructor d->see_invis_undead, diff --git a/zone/zonedb.cpp b/zone/zonedb.cpp index 62120accb..1c37d4689 100644 --- a/zone/zonedb.cpp +++ b/zone/zonedb.cpp @@ -2068,10 +2068,10 @@ const NPCType* ZoneDatabase::LoadNPCTypesData(uint32 npc_type_id, bool bulk_load uint32 armor_tint_id = atoi(row[63]); - temp_npctype_data->armor_tint[0] = (atoi(row[64]) & 0xFF) << 16; - temp_npctype_data->armor_tint[0] |= (atoi(row[65]) & 0xFF) << 8; - temp_npctype_data->armor_tint[0] |= (atoi(row[66]) & 0xFF); - temp_npctype_data->armor_tint[0] |= (temp_npctype_data->armor_tint[0]) ? (0xFF << 24) : 0; + temp_npctype_data->armor_tint.Head.Color = (atoi(row[64]) & 0xFF) << 16; + temp_npctype_data->armor_tint.Head.Color |= (atoi(row[65]) & 0xFF) << 8; + temp_npctype_data->armor_tint.Head.Color |= (atoi(row[66]) & 0xFF); + temp_npctype_data->armor_tint.Head.Color |= (temp_npctype_data->armor_tint.Head.Color) ? (0xFF << 24) : 0; if (armor_tint_id != 0) { std::string armortint_query = StringFormat( @@ -2093,17 +2093,17 @@ const NPCType* ZoneDatabase::LoadNPCTypesData(uint32 npc_type_id, bool bulk_load auto armorTint_row = armortint_results.begin(); for (int index = EQEmu::textures::TextureBegin; index <= EQEmu::textures::LastTexture; index++) { - temp_npctype_data->armor_tint[index] = atoi(armorTint_row[index * 3]) << 16; - temp_npctype_data->armor_tint[index] |= atoi(armorTint_row[index * 3 + 1]) << 8; - temp_npctype_data->armor_tint[index] |= atoi(armorTint_row[index * 3 + 2]); - temp_npctype_data->armor_tint[index] |= (temp_npctype_data->armor_tint[index]) ? (0xFF << 24) : 0; + temp_npctype_data->armor_tint.Slot[index].Color = atoi(armorTint_row[index * 3]) << 16; + temp_npctype_data->armor_tint.Slot[index].Color |= atoi(armorTint_row[index * 3 + 1]) << 8; + temp_npctype_data->armor_tint.Slot[index].Color |= atoi(armorTint_row[index * 3 + 2]); + temp_npctype_data->armor_tint.Slot[index].Color |= (temp_npctype_data->armor_tint.Slot[index].Color) ? (0xFF << 24) : 0; } } } // Try loading npc_types tint fields if armor tint is 0 or query failed to get results if (armor_tint_id == 0) { for (int index = EQEmu::textures::TextureChest; index < EQEmu::textures::TextureCount; index++) { - temp_npctype_data->armor_tint[index] = temp_npctype_data->armor_tint[0]; + temp_npctype_data->armor_tint.Slot[index].Color = temp_npctype_data->armor_tint.Slot[0].Color; // odd way to 'zero-out' the array... } } @@ -2301,15 +2301,15 @@ const NPCType* ZoneDatabase::GetMercType(uint32 id, uint16 raceid, uint32 client tmpNPCType->bodytype = 1; uint32 armor_tint_id = atoi(row[36]); - tmpNPCType->armor_tint[0] = (atoi(row[37]) & 0xFF) << 16; - tmpNPCType->armor_tint[0] |= (atoi(row[38]) & 0xFF) << 8; - tmpNPCType->armor_tint[0] |= (atoi(row[39]) & 0xFF); - tmpNPCType->armor_tint[0] |= (tmpNPCType->armor_tint[0]) ? (0xFF << 24) : 0; + tmpNPCType->armor_tint.Slot[0].Color = (atoi(row[37]) & 0xFF) << 16; + tmpNPCType->armor_tint.Slot[0].Color |= (atoi(row[38]) & 0xFF) << 8; + tmpNPCType->armor_tint.Slot[0].Color |= (atoi(row[39]) & 0xFF); + tmpNPCType->armor_tint.Slot[0].Color |= (tmpNPCType->armor_tint.Slot[0].Color) ? (0xFF << 24) : 0; if (armor_tint_id == 0) for (int index = EQEmu::textures::TextureChest; index <= EQEmu::textures::LastTexture; index++) - tmpNPCType->armor_tint[index] = tmpNPCType->armor_tint[0]; - else if (tmpNPCType->armor_tint[0] == 0) { + tmpNPCType->armor_tint.Slot[index].Color = tmpNPCType->armor_tint.Slot[0].Color; + else if (tmpNPCType->armor_tint.Slot[0].Color == 0) { std::string armorTint_query = StringFormat("SELECT red1h, grn1h, blu1h, " "red2c, grn2c, blu2c, " "red3a, grn3a, blu3a, " @@ -2328,10 +2328,10 @@ const NPCType* ZoneDatabase::GetMercType(uint32 id, uint16 raceid, uint32 client auto armorTint_row = results.begin(); for (int index = EQEmu::textures::TextureBegin; index <= EQEmu::textures::LastTexture; index++) { - tmpNPCType->armor_tint[index] = atoi(armorTint_row[index * 3]) << 16; - tmpNPCType->armor_tint[index] |= atoi(armorTint_row[index * 3 + 1]) << 8; - tmpNPCType->armor_tint[index] |= atoi(armorTint_row[index * 3 + 2]); - tmpNPCType->armor_tint[index] |= (tmpNPCType->armor_tint[index]) ? (0xFF << 24) : 0; + tmpNPCType->armor_tint.Slot[index].Color = atoi(armorTint_row[index * 3]) << 16; + tmpNPCType->armor_tint.Slot[index].Color |= atoi(armorTint_row[index * 3 + 1]) << 8; + tmpNPCType->armor_tint.Slot[index].Color |= atoi(armorTint_row[index * 3 + 2]); + tmpNPCType->armor_tint.Slot[index].Color |= (tmpNPCType->armor_tint.Slot[index].Color) ? (0xFF << 24) : 0; } } } else diff --git a/zone/zonedump.h b/zone/zonedump.h index 743e1a94c..6782881fe 100644 --- a/zone/zonedump.h +++ b/zone/zonedump.h @@ -86,7 +86,7 @@ struct NPCType uint32 drakkin_heritage; uint32 drakkin_tattoo; uint32 drakkin_details; - uint32 armor_tint[EQEmu::textures::TextureCount]; + EQEmu::TintProfile armor_tint; uint32 min_dmg; uint32 max_dmg; int16 attack_count;