diff --git a/changelog.txt b/changelog.txt index a866613ee..2ef94660d 100644 --- a/changelog.txt +++ b/changelog.txt @@ -2,6 +2,7 @@ EQEMu Changelog (Started on Sept 24, 2003 15:50) ------------------------------------------------------- == 12/19/2014 == Trevius: (RoF2) Fixed Leadership AA Purchasing and Recipe Search by correcting opcodes. +Trevius: Fixed Armor Tinting (players and NPCs) that was broken during a previous update. == 12/18/2014 == Trevius: Finished lining up the RoF2 Player Profile Struct. Zone times are now normal, and everything from the PP is accurate in game now. diff --git a/common/patches/rof.cpp b/common/patches/rof.cpp index 5fa44c743..8218f1f22 100644 --- a/common/patches/rof.cpp +++ b/common/patches/rof.cpp @@ -5061,11 +5061,6 @@ namespace RoF isbs.augslots[x].unknown = item->AugSlotUnk2[x]; } - // Increased to 6 max aug slots - //isbs.augslots[5].type = 0; - //isbs.augslots[5].visible = 1; - //isbs.augslots[5].unknown = 0; - isbs.ldonpoint_type = item->PointType; isbs.ldontheme = item->LDoNTheme; isbs.ldonprice = item->LDoNPrice; diff --git a/common/patches/rof2.cpp b/common/patches/rof2.cpp index c857eaccf..f1a3d8836 100644 --- a/common/patches/rof2.cpp +++ b/common/patches/rof2.cpp @@ -5076,11 +5076,6 @@ namespace RoF2 isbs.augslots[x].unknown = item->AugSlotUnk2[x]; } - // Increased to 6 max aug slots - //isbs.augslots[5].type = 0; - //isbs.augslots[5].visible = 1; - //isbs.augslots[5].unknown = 0; - isbs.ldonpoint_type = item->PointType; isbs.ldontheme = item->LDoNTheme; isbs.ldonprice = item->LDoNPrice; diff --git a/world/worlddb.cpp b/world/worlddb.cpp index d9315e80e..e65a3a338 100644 --- a/world/worlddb.cpp +++ b/world/worlddb.cpp @@ -213,11 +213,21 @@ void WorldDatabase::GetCharSelectInfo(uint32 account_id, CharacterSelect_Struct* } else { + uint32 color = 0; + if (pp.item_tint[matslot].rgb.use_tint) + { + color = pp.item_tint[matslot].color; + } + else + { + color = inst->GetColor(); + } + // Armor Materials/Models cs->equip[char_num][matslot].material = item->Material; cs->equip[char_num][matslot].elitematerial = item->EliteMaterial; cs->equip[char_num][matslot].heroforgemodel = inst->GetOrnamentHeroModel(matslot); - cs->equip[char_num][matslot].color.color = inst->GetColor(); + cs->equip[char_num][matslot].color.color = color; } } } diff --git a/zone/bot.cpp b/zone/bot.cpp index 33d36d284..ef40e1bcb 100644 --- a/zone/bot.cpp +++ b/zone/bot.cpp @@ -11276,7 +11276,7 @@ void Bot::ProcessBotCommands(Client *c, const Seperator *sep) { if(!results.Success()) return; - int slotmaterial = Inventory::CalcMaterialFromSlot(setslot); + uint8 slotmaterial = Inventory::CalcMaterialFromSlot(setslot); c->GetTarget()->CastToBot()->SendWearChange(slotmaterial); } else { diff --git a/zone/client.cpp b/zone/client.cpp index d2349e02a..181589bf5 100644 --- a/zone/client.cpp +++ b/zone/client.cpp @@ -2685,8 +2685,11 @@ void Client::SetMaterial(int16 in_slot, uint32 item_id) { const Item_Struct* item = database.GetItem(item_id); if (item && (item->ItemClass==ItemClassCommon)) { - uint32 matslot = Inventory::CalcMaterialFromSlot(in_slot); - m_pp.item_material[matslot] = GetEquipmentMaterial(matslot); + uint8 matslot = Inventory::CalcMaterialFromSlot(in_slot); + if (matslot != _MaterialInvalid) + { + m_pp.item_material[matslot] = GetEquipmentMaterial(matslot); + } } } @@ -3016,31 +3019,14 @@ void Client::SetTint(int16 in_slot, uint32 color) { // Still need to reconcile bracer01 versus bracer02 void Client::SetTint(int16 in_slot, Color_Struct& color) { - if (in_slot==MainHead) - m_pp.item_tint[MaterialHead].color=color.color; - else if (in_slot==MainArms) - m_pp.item_tint[MaterialArms].color=color.color; - else if (in_slot==MainWrist1) - m_pp.item_tint[MaterialWrist].color=color.color; - /* - // non-live behavior - else if (in_slot==SLOT_BRACER02) - m_pp.item_tint[MaterialWrist].color=color.color; - */ - else if (in_slot==MainHands) - m_pp.item_tint[MaterialHands].color=color.color; - else if (in_slot==MainPrimary) - m_pp.item_tint[MaterialPrimary].color=color.color; - else if (in_slot==MainSecondary) - m_pp.item_tint[MaterialSecondary].color=color.color; - else if (in_slot==MainChest) - m_pp.item_tint[MaterialChest].color=color.color; - else if (in_slot==MainLegs) - m_pp.item_tint[MaterialLegs].color=color.color; - else if (in_slot==MainFeet) - m_pp.item_tint[MaterialFeet].color=color.color; - database.SaveCharacterMaterialColor(this->CharacterID(), in_slot, color.color); + uint8 matslot = Inventory::CalcMaterialFromSlot(in_slot); + if (matslot != _MaterialInvalid) + { + m_pp.item_tint[matslot].color = color.color; + database.SaveCharacterMaterialColor(this->CharacterID(), in_slot, color.color); + } + } void Client::SetHideMe(bool flag) diff --git a/zone/client_packet.cpp b/zone/client_packet.cpp index fa6b4f249..6d032fed2 100644 --- a/zone/client_packet.cpp +++ b/zone/client_packet.cpp @@ -1425,8 +1425,12 @@ void Client::Handle_Connect_OP_ZoneEntry(const EQApplicationPacket *app) /* Set item material tint */ for (int i = EmuConstants::MATERIAL_BEGIN; i <= EmuConstants::MATERIAL_END; i++) - if (m_pp.item_tint[i].rgb.use_tint == 1 || m_pp.item_tint[i].rgb.use_tint == 255) - m_pp.item_tint[i].rgb.use_tint = 0xFF; + { + if (m_pp.item_tint[i].rgb.use_tint == 1 || m_pp.item_tint[i].rgb.use_tint == 255) + { + m_pp.item_tint[i].rgb.use_tint = 0xFF; + } + } if (level){ level = m_pp.level; } diff --git a/zone/mob.cpp b/zone/mob.cpp index af7c5a8c7..d031564dd 100644 --- a/zone/mob.cpp +++ b/zone/mob.cpp @@ -2781,10 +2781,17 @@ uint32 Mob::GetEquipmentColor(uint8 material_slot) const { const Item_Struct *item; - item = database.GetItem(GetEquipment(material_slot)); - if(item != 0) + if (armor_tint[material_slot]) { - return item->Color; + return armor_tint[material_slot]; + } + else + { + item = database.GetItem(GetEquipment(material_slot)); + if (item != 0) + { + return item->Color; + } } return 0; diff --git a/zone/npc.cpp b/zone/npc.cpp index d9833d856..ddfd1b243 100644 --- a/zone/npc.cpp +++ b/zone/npc.cpp @@ -476,7 +476,7 @@ void NPC::CheckMinMaxLevel(Mob *them) if(themlevel < (*cur)->min_level || themlevel > (*cur)->max_level) { material = Inventory::CalcMaterialFromSlot((*cur)->equip_slot); - if(material != 0xFF) + if (material != _MaterialInvalid) SendWearChange(material); cur = itemlist.erase(cur);