mirror of
https://github.com/EQEmu/Server.git
synced 2025-12-12 22:01:30 +00:00
Implemented EQEmu::TextureProfile
This commit is contained in:
parent
ae3c98c692
commit
cd8cd90a38
@ -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
|
||||
|
||||
@ -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]; //
|
||||
|
||||
@ -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 */
|
||||
|
||||
@ -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);
|
||||
|
||||
@ -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);
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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))
|
||||
{
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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;
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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++) {
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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))
|
||||
{
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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()
|
||||
|
||||
@ -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 {
|
||||
|
||||
@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@ -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)
|
||||
|
||||
18
zone/bot.cpp
18
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);
|
||||
}
|
||||
|
||||
@ -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;
|
||||
|
||||
|
||||
@ -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,
|
||||
|
||||
@ -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;
|
||||
|
||||
@ -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);
|
||||
|
||||
25
zone/mob.cpp
25
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));
|
||||
|
||||
@ -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;
|
||||
|
||||
|
||||
@ -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,
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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;
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user