Set bonuses implemented in equip stats.
This commit is contained in:
parent
13104bae66
commit
dc6ecf40c2
@ -108,8 +108,11 @@ public:
|
|||||||
inline int&get(ItemAttribute a){
|
inline int&get(ItemAttribute a){
|
||||||
return attributes[a];
|
return attributes[a];
|
||||||
}
|
}
|
||||||
inline const int get_readOnly(ItemAttribute a){
|
inline const int get_readOnly(ItemAttribute a)const{
|
||||||
return attributes[a];
|
if(attributes.count(a)){
|
||||||
|
return attributes.at(a);
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
inline static AttributeData GetDisplayInfo(ItemAttribute a){
|
inline static AttributeData GetDisplayInfo(ItemAttribute a){
|
||||||
return data[a];
|
return data[a];
|
||||||
|
@ -474,12 +474,11 @@ const Stats&EnhancementInfo::operator[](int level)const{
|
|||||||
return enhancementStats[level];
|
return enhancementStats[level];
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ItemInfo::HasItemSet(){
|
const std::optional<const ItemSet const*>ItemInfo::ItemSet()const{
|
||||||
return ItemSet::sets.count(set);
|
if(ItemSet::sets.count(set)){
|
||||||
}
|
return &ItemSet::sets[set];
|
||||||
|
}
|
||||||
const ItemSet&ItemInfo::ItemSet()const{
|
return {};
|
||||||
return ItemSet::sets[set];
|
|
||||||
};
|
};
|
||||||
|
|
||||||
const Stats&ItemSet::operator[](int setPieces)const{
|
const Stats&ItemSet::operator[](int setPieces)const{
|
||||||
@ -489,7 +488,8 @@ const Stats&ItemSet::operator[](int setPieces)const{
|
|||||||
|
|
||||||
void ItemSet::AddSetBonus(std::string setName,int pieceCount,Stats&bonuses){
|
void ItemSet::AddSetBonus(std::string setName,int pieceCount,Stats&bonuses){
|
||||||
if(pieceCount<=0||pieceCount>=9)ERR("Piece count is invalid! Expecting a value (1-8) but got "<<pieceCount);
|
if(pieceCount<=0||pieceCount>=9)ERR("Piece count is invalid! Expecting a value (1-8) but got "<<pieceCount);
|
||||||
for(int i=pieceCount-1;i<sets[setName].setBonuses.size();i++){
|
sets[setName].name=setName;
|
||||||
|
for(int i=pieceCount;i<sets[setName].setBonuses.size();i++){
|
||||||
sets[setName].setBonuses[i]+=bonuses;
|
sets[setName].setBonuses[i]+=bonuses;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -564,3 +564,7 @@ Stats Item::GetStats()const{
|
|||||||
const size_t EnhancementInfo::size()const{
|
const size_t EnhancementInfo::size()const{
|
||||||
return enhancementStats.size();
|
return enhancementStats.size();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const std::optional<const ItemSet const*>Item::ItemSet()const{
|
||||||
|
return it->ItemSet();
|
||||||
|
};
|
@ -95,11 +95,17 @@ class ItemSet{
|
|||||||
friend class ItemInfo;
|
friend class ItemInfo;
|
||||||
static std::map<std::string,ItemSet>sets;
|
static std::map<std::string,ItemSet>sets;
|
||||||
std::array<Stats,8>setBonuses;
|
std::array<Stats,8>setBonuses;
|
||||||
|
std::string name;
|
||||||
public:
|
public:
|
||||||
|
//NO CONSTRUCTOR REQUIRED!
|
||||||
//Specify the piece count(1-8) for a set bonus to be applied.
|
//Specify the piece count(1-8) for a set bonus to be applied.
|
||||||
static void AddSetBonus(std::string setName,int pieceCount,Stats&bonuses);
|
static void AddSetBonus(std::string setName,int pieceCount,Stats&bonuses);
|
||||||
//Gets a set bonus based on number of pieces (1-8)
|
//Gets a set bonus based on number of pieces (1-8)
|
||||||
const Stats&operator[](int setPieces)const;
|
const Stats&operator[](int setPieces)const;
|
||||||
|
const std::string&GetSetName()const;
|
||||||
|
bool operator<(const ItemSet&rhs)const{
|
||||||
|
return name<rhs.name;
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
class Item{
|
class Item{
|
||||||
@ -127,6 +133,7 @@ public:
|
|||||||
bool IsBlank();
|
bool IsBlank();
|
||||||
static Item BLANK;
|
static Item BLANK;
|
||||||
bool operator==(const Item&rhs)const;
|
bool operator==(const Item&rhs)const;
|
||||||
|
const std::optional<const ItemSet const*>ItemSet()const;
|
||||||
};
|
};
|
||||||
|
|
||||||
class Inventory{
|
class Inventory{
|
||||||
@ -186,7 +193,7 @@ class ItemInfo{
|
|||||||
EquipSlot slot;
|
EquipSlot slot;
|
||||||
EnhancementInfo enhancement;
|
EnhancementInfo enhancement;
|
||||||
Decal*img;
|
Decal*img;
|
||||||
std::string set;
|
std::string set="";
|
||||||
//Returns true if the item can be used, false otherwise
|
//Returns true if the item can be used, false otherwise
|
||||||
std::string useFunc="";
|
std::string useFunc="";
|
||||||
//Custom properties for this specific item's script.
|
//Custom properties for this specific item's script.
|
||||||
@ -212,9 +219,7 @@ public:
|
|||||||
float CastTime();
|
float CastTime();
|
||||||
float CooldownTime();
|
float CooldownTime();
|
||||||
EquipSlot Slot();
|
EquipSlot Slot();
|
||||||
bool HasItemSet();
|
const std::optional<const ItemSet const*>ItemSet()const;
|
||||||
//NOTE: Not every item has a set! Verify with HasItemSet() first!
|
|
||||||
const ItemSet&ItemSet()const;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
class ItemOverlay{
|
class ItemOverlay{
|
||||||
|
@ -867,11 +867,22 @@ const int Player::GetBaseStat(ItemAttribute a)const{
|
|||||||
|
|
||||||
void PlayerStats::RecalculateEquipStats(){
|
void PlayerStats::RecalculateEquipStats(){
|
||||||
baseStats.copyTo(equipStats);
|
baseStats.copyTo(equipStats);
|
||||||
|
std::map<ItemSet,int>setCounts;
|
||||||
for(int i=int(EquipSlot::HELMET);i<=int(EquipSlot::RING2);i<<=1){
|
for(int i=int(EquipSlot::HELMET);i<=int(EquipSlot::RING2);i<<=1){
|
||||||
EquipSlot slot=EquipSlot(i);
|
EquipSlot slot=EquipSlot(i);
|
||||||
Item*equip=Inventory::GetEquip(slot);
|
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)){
|
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){
|
for(MenuComponent*component:Menu::equipStatListeners){
|
||||||
@ -892,3 +903,7 @@ void PlayerStats::SetBaseStat(ItemAttribute stat,int val){
|
|||||||
void Player::SetBaseStat(ItemAttribute a,int val){
|
void Player::SetBaseStat(ItemAttribute a,int val){
|
||||||
PlayerStats::SetBaseStat(a,val);
|
PlayerStats::SetBaseStat(a,val);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const std::string&ItemSet::GetSetName()const{
|
||||||
|
return name;
|
||||||
|
}
|
@ -39,7 +39,7 @@ All rights reserved.
|
|||||||
#define VERSION_MAJOR 0
|
#define VERSION_MAJOR 0
|
||||||
#define VERSION_MINOR 2
|
#define VERSION_MINOR 2
|
||||||
#define VERSION_PATCH 1
|
#define VERSION_PATCH 1
|
||||||
#define VERSION_BUILD 3614
|
#define VERSION_BUILD 3623
|
||||||
|
|
||||||
#define stringify(a) stringify_(a)
|
#define stringify(a) stringify_(a)
|
||||||
#define stringify_(a) #a
|
#define stringify_(a) #a
|
||||||
|
Loading…
x
Reference in New Issue
Block a user