1
0
mirror of https://github.com/vcmi/vcmi.git synced 2024-11-24 08:32:34 +02:00

* it's possible to exchange stacks between heroes

* fixed bugs with displaying stacks health
* 'T' hotkey opens marketplace window
This commit is contained in:
Michał W. Urbańczyk 2009-07-01 07:04:21 +00:00
parent 9aff190899
commit 824061e185
3 changed files with 33 additions and 3 deletions

View File

@ -1561,6 +1561,24 @@ void CAdvMapInt::keyPressed(const SDL_KeyboardEvent & key)
LOCPLINT->openTownWindow(static_cast<const CGTownInstance*>(selection));
return;
}
case SDLK_t:
{
//act on key down if marketplace windows is not already opened
if(key.state != SDL_PRESSED || dynamic_cast<CMarketplaceWindow*>(LOCPLINT->topInt())) return;
//check if we have aby marketplace
std::vector<const CGTownInstance*> towns = LOCPLINT->cb->getTownsInfo();
size_t i = 0;
for(; i<towns.size(); i++)
if(vstd::contains(towns[i]->builtBuildings, 14))
break;
if(i != towns.size()) //if any town has marketplace, open window
LOCPLINT->pushInt(new CMarketplaceWindow);
else //if not - complain
LOCPLINT->showInfoDialog("No available marketplace!", std::vector<SComponent*>(), soundBase::sound_todo);
return;
}
default:
return;
}

View File

@ -67,6 +67,8 @@ static StackState* getStackState(const CGObjectInstance *obj, int pos, bool town
if(!h) return NULL;
StackState *pom = new StackState();
pom->shotsLeft = -1;
pom->healthBonus = h->valOfBonuses(HeroBonus::STACK_HEALTH);
pom->currentHealth = 0;
pom->attackBonus = h->getPrimSkillLevel(0);
pom->defenseBonus = h->getPrimSkillLevel(1);
@ -2033,8 +2035,8 @@ CCreInfoWindow::CCreInfoWindow(int Cid, int Type, int creatureCount, StackState
if(c->shots)
{
printAt(CGI->generaltexth->allTexts[198],155,86,GEOR13,zwykly,bitmap);
if(State)
sprintf(pom,"%d(%d)",c->shots,State->shotsLeft);
if(State && State->shotsLeft >= 0)
sprintf(pom,"%d (%d)",c->shots,State->shotsLeft);
else
SDL_itoa(c->shots,pom,10);
printToWR(pom,276,99,GEOR13,zwykly,bitmap);
@ -2053,7 +2055,10 @@ CCreInfoWindow::CCreInfoWindow(int Cid, int Type, int creatureCount, StackState
//health
printAt(CGI->generaltexth->allTexts[388],155,124,GEOR13,zwykly,bitmap);
SDL_itoa(c->hitPoints + State->healthBonus,pom,10);
if(State && State->healthBonus)
sprintf(pom,"%d (%d)",c->hitPoints, c->hitPoints + State->healthBonus);
else
SDL_itoa(c->hitPoints,pom,10);
printToWR(pom,276,137,GEOR13,zwykly,bitmap);
//remaining health

View File

@ -2656,6 +2656,13 @@ bool CGameHandler::isAllowedExchange( int id1, int id2 )
if(t->visitingHero == o1 || t->garrisonHero == o1)
return true;
}
if(o1->ID == HEROI_TYPE && o2->ID == HEROI_TYPE
&& distance(o1->pos, o2->pos) < 2) //hero stands on the same tile or on the neighbouring tiles
{
//TODO: it's workaround, we should check if first hero visited second and player hasn't closed exchange window
//(to block moving stacks for free [without visiting] beteen heroes)
return true;
}
return false;
}