|
@@ -3871,11 +3871,29 @@ bool CGameHandler::makeBattleAction(BattleAction &ba)
|
|
|
}
|
|
|
case Battle::DEFEND:
|
|
|
{
|
|
|
- //defensive stance //TODO: remove this bonus when stack becomes active
|
|
|
+ //defensive stance
|
|
|
SetStackEffect sse;
|
|
|
- sse.effect.push_back(Bonus(Bonus::STACK_GETS_TURN, Bonus::PRIMARY_SKILL, Bonus::OTHER, 20, -1, PrimarySkill::DEFENSE, Bonus::PERCENT_TO_ALL));
|
|
|
- sse.effect.push_back(Bonus(Bonus::STACK_GETS_TURN, Bonus::PRIMARY_SKILL, Bonus::OTHER, gs->curB->battleGetStackByID(ba.stackNumber)->valOfBonuses(Bonus::DEFENSIVE_STANCE),
|
|
|
- -1, PrimarySkill::DEFENSE, Bonus::ADDITIVE_VALUE));
|
|
|
+ Bonus bonus1(Bonus::STACK_GETS_TURN, Bonus::PRIMARY_SKILL, Bonus::OTHER, 20, -1, PrimarySkill::DEFENSE, Bonus::PERCENT_TO_ALL);
|
|
|
+ Bonus bonus2(Bonus::STACK_GETS_TURN, Bonus::PRIMARY_SKILL, Bonus::OTHER, stack->valOfBonuses(Bonus::DEFENSIVE_STANCE),
|
|
|
+ -1, PrimarySkill::DEFENSE, Bonus::ADDITIVE_VALUE);
|
|
|
+ TBonusListPtr defence = stack->getBonuses(Selector::typeSubtype(Bonus::PRIMARY_SKILL, PrimarySkill::DEFENSE));
|
|
|
+ int oldDefenceValue = defence->totalValue();
|
|
|
+
|
|
|
+ defence->push_back(std::make_shared<Bonus>(bonus1));
|
|
|
+ defence->push_back(std::make_shared<Bonus>(bonus2));
|
|
|
+
|
|
|
+ int difference = defence->totalValue() - oldDefenceValue;
|
|
|
+
|
|
|
+ MetaString text;
|
|
|
+ stack->addText(text, MetaString::GENERAL_TXT, 120);
|
|
|
+ stack->addNameReplacement(text);
|
|
|
+ text.addReplacement(difference);
|
|
|
+
|
|
|
+ sse.battleLog.push_back(text);
|
|
|
+
|
|
|
+ sse.effect.push_back(bonus1);
|
|
|
+ sse.effect.push_back(bonus2);
|
|
|
+
|
|
|
sse.stacks.push_back(ba.stackNumber);
|
|
|
sendAndApply(&sse);
|
|
|
|