From c08151cb5b4fe314bcfac7668f19f3ff229aa787 Mon Sep 17 00:00:00 2001 From: mateuszb Date: Sat, 17 Oct 2009 14:32:42 +0000 Subject: [PATCH] * bug 123 fixed --- lib/CGameState.cpp | 2 +- lib/NetPacksLib.cpp | 15 +++++++++++---- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/lib/CGameState.cpp b/lib/CGameState.cpp index f941b5c2c..ba383f680 100644 --- a/lib/CGameState.cpp +++ b/lib/CGameState.cpp @@ -526,7 +526,7 @@ std::vector BattleInfo::getAccessibility(int stackID, bool addOccupiable) c { std::vector ret; bool ac[BFIELD_SIZE]; - const CStack *s = getStack(stackID); + const CStack *s = getStack(stackID, false); //this function is called from healedOrResurrected, so our stack can be dead if(s->position < 0) //turrets return std::vector(); diff --git a/lib/NetPacksLib.cpp b/lib/NetPacksLib.cpp index f9e268dd1..26650d48f 100644 --- a/lib/NetPacksLib.cpp +++ b/lib/NetPacksLib.cpp @@ -1016,7 +1016,7 @@ DLL_EXPORT void StacksHealedOrResurrected::applyGs( CGameState *gs ) { for(int g=0; gcurB->stacks[healedStacks[g].stackID]; + CStack * changedStack = gs->curB->getStack(healedStacks[g].stackID, false); //checking if we resurrect a stack that is under a living stack std::vector access = gs->curB->getAccessibility(changedStack->ID, true); @@ -1031,19 +1031,26 @@ DLL_EXPORT void StacksHealedOrResurrected::applyGs( CGameState *gs ) return; //position is already occupied //applying changes + bool resurrected = !changedStack->alive(); //indicates if stack is resurrected or just healed if(!changedStack->alive()) { changedStack->state.insert(ALIVE); } int missingHPfirst = changedStack->MaxHealth() - changedStack->firstHPleft; - changedStack->amount += healedStacks[g].healedHP / changedStack->MaxHealth(); - changedStack->firstHPleft += healedStacks[g].healedHP - changedStack->amount * changedStack->MaxHealth(); + int res = std::min( healedStacks[g].healedHP / changedStack->MaxHealth() , changedStack->baseAmount - changedStack->amount ); + changedStack->amount += res; + changedStack->firstHPleft += healedStacks[g].healedHP - res * changedStack->MaxHealth(); if(changedStack->firstHPleft > changedStack->MaxHealth()) { changedStack->firstHPleft -= changedStack->MaxHealth(); - changedStack->amount += 1; + if(changedStack->baseAmount > changedStack->amount) + { + changedStack->amount += 1; + } } + amin(changedStack->firstHPleft, changedStack->MaxHealth()); //removal of negative effects + if(resurrected) { for(int h=0; heffects.size(); ++h) {