Oh, I had the which-tint-takes-priority code in my testing state there. Here's the correct Client::GetEquipmentColor() method from inventory.cpp:
diff --git a/zone/inventory.cpp b/zone/inventory.cpp
Code:
index e1904d5..c04a6cc 100644
--- a/zone/inventory.cpp
+++ b/zone/inventory.cpp
@@ -2635,9 +2635,16 @@ uint32 Client::GetEquipmentColor(uint8 material_slot) const
if (material_slot > EmuConstants::MATERIAL_END)
return 0;
+ if (m_pp.item_tint[material_slot].RGB.UseTint)
+ return m_pp.item_tint[material_slot].Color; // Priority 1: Prismatic Dye on the slot
+
+ ItemInst* inst = GetInv().GetItem(Inventory::CalcSlotFromMaterial(material_slot));
+ if (inst != nullptr)
+ return inst->GetColor(); // Priority 2: Equipped item's augmented or default tint
+
const Item_Struct *item = database.GetItem(GetEquipment(material_slot));
if(item != nullptr)
- return ((m_pp.item_tint[material_slot].RGB.UseTint) ? m_pp.item_tint[material_slot].Color : item->Color);
+ return item->Color; // Priority 3: Default color for the item from the database
return 0;
}