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,20 +1104,17 @@ uint32 card::get_attribute() { ...@@ -1104,20 +1104,17 @@ uint32 card::get_attribute() {
if(temp.attribute != UINT32_MAX) // prevent recursion, return the former value if(temp.attribute != UINT32_MAX) // prevent recursion, return the former value
return temp.attribute; return temp.attribute;
effect_set effects; effect_set effects;
int32 attribute = data.attribute; auto attribute = data.attribute;
temp.attribute = data.attribute; temp.attribute = data.attribute;
filter_effect(EFFECT_ADD_ATTRIBUTE, &effects, FALSE); 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) { for (int32 i = 0; i < effects.size(); ++i) {
if (effects[i]->code == EFFECT_ADD_ATTRIBUTE) if (effects[i]->code == EFFECT_ADD_ATTRIBUTE)
attribute |= effects[i]->get_value(this); attribute |= effects[i]->get_value(this);
else else if (effects[i]->code == EFFECT_REMOVE_ATTRIBUTE)
attribute &= ~(effects[i]->get_value(this)); attribute &= ~(effects[i]->get_value(this));
temp.attribute = attribute; else if (effects[i]->code == EFFECT_CHANGE_ATTRIBUTE)
}
effects.clear();
filter_effect(EFFECT_CHANGE_ATTRIBUTE, &effects);
for (int32 i = 0; i < effects.size(); ++i) {
attribute = effects[i]->get_value(this); attribute = effects[i]->get_value(this);
temp.attribute = attribute; temp.attribute = attribute;
} }
...@@ -1174,20 +1171,17 @@ uint32 card::get_race() { ...@@ -1174,20 +1171,17 @@ uint32 card::get_race() {
if(temp.race != UINT32_MAX) // prevent recursion, return the former value if(temp.race != UINT32_MAX) // prevent recursion, return the former value
return temp.race; return temp.race;
effect_set effects; effect_set effects;
int32 race = data.race; auto race = data.race;
temp.race = data.race; temp.race = data.race;
filter_effect(EFFECT_ADD_RACE, &effects, FALSE); 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) { for (int32 i = 0; i < effects.size(); ++i) {
if (effects[i]->code == EFFECT_ADD_RACE) if (effects[i]->code == EFFECT_ADD_RACE)
race |= effects[i]->get_value(this); race |= effects[i]->get_value(this);
else else if (effects[i]->code == EFFECT_REMOVE_RACE)
race &= ~(effects[i]->get_value(this)); race &= ~(effects[i]->get_value(this));
temp.race = race; else if (effects[i]->code == EFFECT_CHANGE_RACE)
}
effects.clear();
filter_effect(EFFECT_CHANGE_RACE, &effects);
for (int32 i = 0; i < effects.size(); ++i) {
race = effects[i]->get_value(this); race = effects[i]->get_value(this);
temp.race = race; temp.race = race;
} }
......
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