|
|
|
@ -867,11 +867,22 @@ const int Player::GetBaseStat(ItemAttribute a)const{ |
|
|
|
|
|
|
|
|
|
void PlayerStats::RecalculateEquipStats(){ |
|
|
|
|
baseStats.copyTo(equipStats); |
|
|
|
|
std::map<ItemSet,int>setCounts; |
|
|
|
|
for(int i=int(EquipSlot::HELMET);i<=int(EquipSlot::RING2);i<<=1){ |
|
|
|
|
EquipSlot slot=EquipSlot(i); |
|
|
|
|
Item*equip=Inventory::GetEquip(slot); |
|
|
|
|
if(equip->IsBlank())continue; |
|
|
|
|
for(ItemAttribute a=ItemAttribute(int(ItemAttribute::ENUM_START)+1);a<ItemAttribute::ENUM_END;a=ItemAttribute(int(a)+1)){ |
|
|
|
|
equipStats.get(a)+=equip->GetStats().A(a); |
|
|
|
|
equipStats.A(a)+=equip->GetStats().A(a); |
|
|
|
|
} |
|
|
|
|
if(equip->ItemSet().has_value()){ |
|
|
|
|
setCounts[*equip->ItemSet().value()]++; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
for(const auto&[set,equipCount]:setCounts){ |
|
|
|
|
const Stats&setStats=set[equipCount]; |
|
|
|
|
for(ItemAttribute a=ItemAttribute(int(ItemAttribute::ENUM_START)+1);a<ItemAttribute::ENUM_END;a=ItemAttribute(int(a)+1)){ |
|
|
|
|
equipStats.A(a)+=setStats.A_Read(a); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
for(MenuComponent*component:Menu::equipStatListeners){ |
|
|
|
@ -892,3 +903,7 @@ void PlayerStats::SetBaseStat(ItemAttribute stat,int val){ |
|
|
|
|
void Player::SetBaseStat(ItemAttribute a,int val){ |
|
|
|
|
PlayerStats::SetBaseStat(a,val); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
const std::string&ItemSet::GetSetName()const{ |
|
|
|
|
return name; |
|
|
|
|
} |