That is code in eqemu
commom\item.cpp
I have optimize the code. And I think there was a bug that BERSERKER always return false.
Function : ItemCommonInst::IsEquipable
Code:
bool ItemCommonInst::IsEquipable(int16 race, int16 class_) const
{
if (!m_item)
return false;
bool israce = false;
bool isclass = false;
if (m_item->Slots == 0) {
return false;
}
uint32 classes_ = m_item->Common.Classes;
uint32 races_ = m_item->Common.Races;
int32 race_ = 0;
#ifndef PACKETCOLLECTOR
race_ = GetArrayRace(race);
#endif
// Changed by ffchung
// new code start
if( ((1<<(class_-1)) & classes_) > 0 )
{
isclass = true;
}
if( ((1<<(race-1)) & races_) > 0 )
{
isclass = true;
}
// new code end
// old code start
/*
// @merth: can this be optimized? i.e., will (race & common->Races) suffice?
for (int cur_class = 1; cur_class<=15; cur_class++) {
if (classes_ % 2 == 1) {
if (cur_class == class_) {
isclass = true;
}
}
classes_ >>= 1;
}
for (unsigned int cur_race = 1; cur_race <= 15; cur_race++) {
if (races_ % 2 == 1) {
if (cur_race == race_) {
israce = true;
}
}
races_ >>= 1;
}
*/
// old code end
return (israce && isclass);
}