Commit 179a744d authored by VanillaSalt's avatar VanillaSalt

fix

parent a6e1123b
...@@ -465,6 +465,9 @@ int32 card::get_attack() { ...@@ -465,6 +465,9 @@ int32 card::get_attack() {
int32 batk = data.attack; int32 batk = data.attack;
if(batk < 0) if(batk < 0)
batk = 0; batk = 0;
int32 bdef = data.defense;
if(bdef < 0)
bdef = 0;
temp.attack = batk; temp.attack = batk;
int32 atk = -1; int32 atk = -1;
int32 up_atk = 0, upc_atk = 0; int32 up_atk = 0, upc_atk = 0;
...@@ -474,8 +477,10 @@ int32 card::get_attack() { ...@@ -474,8 +477,10 @@ int32 card::get_attack() {
filter_effect(EFFECT_UPDATE_ATTACK, &eset, FALSE); filter_effect(EFFECT_UPDATE_ATTACK, &eset, FALSE);
filter_effect(EFFECT_SET_ATTACK, &eset, FALSE); filter_effect(EFFECT_SET_ATTACK, &eset, FALSE);
filter_effect(EFFECT_SET_ATTACK_FINAL, &eset, FALSE); filter_effect(EFFECT_SET_ATTACK_FINAL, &eset, FALSE);
filter_effect(EFFECT_SET_BASE_ATTACK, &eset, FALSE);
filter_effect(EFFECT_SWAP_ATTACK_FINAL, &eset, FALSE); filter_effect(EFFECT_SWAP_ATTACK_FINAL, &eset, FALSE);
filter_effect(EFFECT_SWAP_BASE_AD, &eset, FALSE);
filter_effect(EFFECT_SET_BASE_ATTACK, &eset, FALSE);
filter_effect(EFFECT_SET_BASE_DEFENSE, &eset, FALSE);
eset.sort(); eset.sort();
int32 rev = FALSE; int32 rev = FALSE;
if(is_affected_by_effect(EFFECT_REVERSE_UPDATE)) if(is_affected_by_effect(EFFECT_REVERSE_UPDATE))
...@@ -490,6 +495,12 @@ int32 card::get_attack() { ...@@ -490,6 +495,12 @@ int32 card::get_attack() {
batk = 0; batk = 0;
eset.remove_item(i); eset.remove_item(i);
continue; continue;
case EFFECT_SET_BASE_DEFENSE:
bdef = eset[i]->get_value(this);
if(bdef < 0)
bdef = 0;
eset.remove_item(i);
continue;
} }
} }
++i; ++i;
...@@ -531,9 +542,17 @@ int32 card::get_attack() { ...@@ -531,9 +542,17 @@ int32 card::get_attack() {
up_atk = 0; up_atk = 0;
upc_atk = 0; upc_atk = 0;
break; break;
case EFFECT_SET_BASE_DEFENSE:
bdef = eset[i]->get_value(this);
if(bdef < 0)
bdef = 0;
break;
case EFFECT_SWAP_AD: case EFFECT_SWAP_AD:
swap_final = !swap_final; swap_final = !swap_final;
break; break;
case EFFECT_SWAP_BASE_AD:
std::swap(batk, bdef);
break;
} }
if(!rev) { if(!rev) {
temp.attack = ((atk < 0) ? batk : atk) + up_atk + upc_atk; temp.attack = ((atk < 0) ? batk : atk) + up_atk + upc_atk;
...@@ -632,6 +651,9 @@ int32 card::get_defense() { ...@@ -632,6 +651,9 @@ int32 card::get_defense() {
return data.defense; return data.defense;
if (temp.defense != -1) if (temp.defense != -1)
return temp.defense; return temp.defense;
int32 batk = data.attack;
if(batk < 0)
batk = 0;
int32 bdef = data.defense; int32 bdef = data.defense;
if(bdef < 0) if(bdef < 0)
bdef = 0; bdef = 0;
...@@ -644,8 +666,10 @@ int32 card::get_defense() { ...@@ -644,8 +666,10 @@ int32 card::get_defense() {
filter_effect(EFFECT_UPDATE_DEFENSE, &eset, FALSE); filter_effect(EFFECT_UPDATE_DEFENSE, &eset, FALSE);
filter_effect(EFFECT_SET_DEFENSE, &eset, FALSE); filter_effect(EFFECT_SET_DEFENSE, &eset, FALSE);
filter_effect(EFFECT_SET_DEFENSE_FINAL, &eset, FALSE); filter_effect(EFFECT_SET_DEFENSE_FINAL, &eset, FALSE);
filter_effect(EFFECT_SET_BASE_DEFENSE, &eset, FALSE);
filter_effect(EFFECT_SWAP_DEFENSE_FINAL, &eset, FALSE); filter_effect(EFFECT_SWAP_DEFENSE_FINAL, &eset, FALSE);
filter_effect(EFFECT_SWAP_BASE_AD, &eset, FALSE);
filter_effect(EFFECT_SET_BASE_ATTACK, &eset, FALSE);
filter_effect(EFFECT_SET_BASE_DEFENSE, &eset, FALSE);
eset.sort(); eset.sort();
int32 rev = FALSE; int32 rev = FALSE;
if(is_affected_by_effect(EFFECT_REVERSE_UPDATE)) if(is_affected_by_effect(EFFECT_REVERSE_UPDATE))
...@@ -654,6 +678,12 @@ int32 card::get_defense() { ...@@ -654,6 +678,12 @@ int32 card::get_defense() {
for(int32 i = 0; i < eset.size();) { for(int32 i = 0; i < eset.size();) {
if((eset[i]->type & EFFECT_TYPE_SINGLE) && eset[i]->is_flag(EFFECT_FLAG_SINGLE_RANGE)) { if((eset[i]->type & EFFECT_TYPE_SINGLE) && eset[i]->is_flag(EFFECT_FLAG_SINGLE_RANGE)) {
switch(eset[i]->code) { switch(eset[i]->code) {
case EFFECT_SET_BASE_ATTACK:
batk = eset[i]->get_value(this);
if(batk < 0)
batk = 0;
eset.remove_item(i);
continue;
case EFFECT_SET_BASE_DEFENSE: case EFFECT_SET_BASE_DEFENSE:
bdef = eset[i]->get_value(this); bdef = eset[i]->get_value(this);
if(bdef < 0) if(bdef < 0)
...@@ -701,9 +731,17 @@ int32 card::get_defense() { ...@@ -701,9 +731,17 @@ int32 card::get_defense() {
up_def = 0; up_def = 0;
upc_def = 0; upc_def = 0;
break; break;
case EFFECT_SET_BASE_ATTACK:
batk = eset[i]->get_value(this);
if(batk < 0)
batk = 0;
break;
case EFFECT_SWAP_AD: case EFFECT_SWAP_AD:
swap_final = !swap_final; swap_final = !swap_final;
break; break;
case EFFECT_SWAP_BASE_AD:
std::swap(batk, bdef);
break;
} }
if(!rev) { if(!rev) {
temp.defense = ((def < 0) ? bdef : def) + up_def + upc_def; temp.defense = ((def < 0) ? bdef : def) + up_def + upc_def;
......
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