Commit f2ebd12e authored by wind2009's avatar wind2009 Committed by GitHub

Update card::get_attribute() and card::get_race() (#624)

* Update card::get_attribute()

* minor fix

* update card::get_race()

---------
Co-authored-by: Chen Bill's avatarsalix5 <salix5566@gmail.com>
parent 189e3a1b
......@@ -1104,21 +1104,18 @@ uint32 card::get_attribute() {
if(temp.attribute != UINT32_MAX) // prevent recursion, return the former value
return temp.attribute;
effect_set effects;
int32 attribute = data.attribute;
auto attribute = data.attribute;
temp.attribute = data.attribute;
filter_effect(EFFECT_ADD_ATTRIBUTE, &effects, FALSE);
filter_effect(EFFECT_REMOVE_ATTRIBUTE, &effects);
filter_effect(EFFECT_REMOVE_ATTRIBUTE, &effects, FALSE);
filter_effect(EFFECT_CHANGE_ATTRIBUTE, &effects);
for (int32 i = 0; i < effects.size(); ++i) {
if (effects[i]->code == EFFECT_ADD_ATTRIBUTE)
attribute |= effects[i]->get_value(this);
else
else if (effects[i]->code == EFFECT_REMOVE_ATTRIBUTE)
attribute &= ~(effects[i]->get_value(this));
temp.attribute = attribute;
}
effects.clear();
filter_effect(EFFECT_CHANGE_ATTRIBUTE, &effects);
for (int32 i = 0; i < effects.size(); ++i) {
attribute = effects[i]->get_value(this);
else if (effects[i]->code == EFFECT_CHANGE_ATTRIBUTE)
attribute = effects[i]->get_value(this);
temp.attribute = attribute;
}
temp.attribute = UINT32_MAX;
......@@ -1174,21 +1171,18 @@ uint32 card::get_race() {
if(temp.race != UINT32_MAX) // prevent recursion, return the former value
return temp.race;
effect_set effects;
int32 race = data.race;
auto race = data.race;
temp.race = data.race;
filter_effect(EFFECT_ADD_RACE, &effects, FALSE);
filter_effect(EFFECT_REMOVE_RACE, &effects);
filter_effect(EFFECT_REMOVE_RACE, &effects, FALSE);
filter_effect(EFFECT_CHANGE_RACE, &effects);
for (int32 i = 0; i < effects.size(); ++i) {
if (effects[i]->code == EFFECT_ADD_RACE)
race |= effects[i]->get_value(this);
else
else if (effects[i]->code == EFFECT_REMOVE_RACE)
race &= ~(effects[i]->get_value(this));
temp.race = race;
}
effects.clear();
filter_effect(EFFECT_CHANGE_RACE, &effects);
for (int32 i = 0; i < effects.size(); ++i) {
race = effects[i]->get_value(this);
else if (effects[i]->code == EFFECT_CHANGE_RACE)
race = effects[i]->get_value(this);
temp.race = race;
}
temp.race = UINT32_MAX;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment