mirror of
https://github.com/vcmi/vcmi.git
synced 2024-12-26 22:57:00 +02:00
Merge pull request #3785 from dydzio0614/bank-revisit-fix
Empty treasure bank does not ask for enter anymore
This commit is contained in:
commit
55756dbc43
@ -61,7 +61,7 @@ std::string CBank::getHoverText(PlayerColor player) const
|
|||||||
if (!wasVisited(player))
|
if (!wasVisited(player))
|
||||||
return getObjectName();
|
return getObjectName();
|
||||||
|
|
||||||
return getObjectName() + "\n" + visitedTxt(bc == nullptr);
|
return getObjectName() + "\n" + visitedTxt(bankConfig == nullptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
std::vector<Component> CBank::getPopupComponents(PlayerColor player) const
|
std::vector<Component> CBank::getPopupComponents(PlayerColor player) const
|
||||||
@ -72,7 +72,7 @@ std::vector<Component> CBank::getPopupComponents(PlayerColor player) const
|
|||||||
if (!VLC->settings()->getBoolean(EGameSettings::BANKS_SHOW_GUARDS_COMPOSITION))
|
if (!VLC->settings()->getBoolean(EGameSettings::BANKS_SHOW_GUARDS_COMPOSITION))
|
||||||
return {};
|
return {};
|
||||||
|
|
||||||
if (bc == nullptr)
|
if (bankConfig == nullptr)
|
||||||
return {};
|
return {};
|
||||||
|
|
||||||
std::map<CreatureID, int> guardsAmounts;
|
std::map<CreatureID, int> guardsAmounts;
|
||||||
@ -92,7 +92,7 @@ std::vector<Component> CBank::getPopupComponents(PlayerColor player) const
|
|||||||
|
|
||||||
void CBank::setConfig(const BankConfig & config)
|
void CBank::setConfig(const BankConfig & config)
|
||||||
{
|
{
|
||||||
bc = std::make_unique<BankConfig>(config);
|
bankConfig = std::make_unique<BankConfig>(config);
|
||||||
clearSlots(); // remove all stacks, if any
|
clearSlots(); // remove all stacks, if any
|
||||||
|
|
||||||
for(const auto & stack : config.guards)
|
for(const auto & stack : config.guards)
|
||||||
@ -112,14 +112,14 @@ void CBank::setPropertyDer (ObjProperty what, ObjPropertyID identifier)
|
|||||||
daycounter = 1; //yes, 1 since "today" daycounter won't be incremented
|
daycounter = 1; //yes, 1 since "today" daycounter won't be incremented
|
||||||
break;
|
break;
|
||||||
case ObjProperty::BANK_CLEAR:
|
case ObjProperty::BANK_CLEAR:
|
||||||
bc.reset();
|
bankConfig.reset();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void CBank::newTurn(CRandomGenerator & rand) const
|
void CBank::newTurn(CRandomGenerator & rand) const
|
||||||
{
|
{
|
||||||
if (bc == nullptr)
|
if (bankConfig == nullptr)
|
||||||
{
|
{
|
||||||
if (resetDuration != 0)
|
if (resetDuration != 0)
|
||||||
{
|
{
|
||||||
@ -141,6 +141,12 @@ void CBank::onHeroVisit(const CGHeroInstance * h) const
|
|||||||
ChangeObjectVisitors cov(ChangeObjectVisitors::VISITOR_ADD_TEAM, id, h->id);
|
ChangeObjectVisitors cov(ChangeObjectVisitors::VISITOR_ADD_TEAM, id, h->id);
|
||||||
cb->sendAndApply(&cov);
|
cb->sendAndApply(&cov);
|
||||||
|
|
||||||
|
if(!bankConfig && (ID.toEnum() == Obj::CREATURE_BANK || ID.toEnum() == Obj::DRAGON_UTOPIA))
|
||||||
|
{
|
||||||
|
blockingDialogAnswered(h, 1);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
int banktext = 0;
|
int banktext = 0;
|
||||||
switch (ID.toEnum())
|
switch (ID.toEnum())
|
||||||
{
|
{
|
||||||
@ -183,7 +189,7 @@ void CBank::doVisit(const CGHeroInstance * hero) const
|
|||||||
iw.player = hero->getOwner();
|
iw.player = hero->getOwner();
|
||||||
MetaString loot;
|
MetaString loot;
|
||||||
|
|
||||||
if (bc)
|
if (bankConfig)
|
||||||
{
|
{
|
||||||
switch (ID.toEnum())
|
switch (ID.toEnum())
|
||||||
{
|
{
|
||||||
@ -267,21 +273,21 @@ void CBank::doVisit(const CGHeroInstance * hero) const
|
|||||||
|
|
||||||
|
|
||||||
//grant resources
|
//grant resources
|
||||||
if (bc)
|
if (bankConfig)
|
||||||
{
|
{
|
||||||
for (GameResID it : GameResID::ALL_RESOURCES())
|
for (GameResID it : GameResID::ALL_RESOURCES())
|
||||||
{
|
{
|
||||||
if (bc->resources[it] != 0)
|
if (bankConfig->resources[it] != 0)
|
||||||
{
|
{
|
||||||
iw.components.emplace_back(ComponentType::RESOURCE, it, bc->resources[it]);
|
iw.components.emplace_back(ComponentType::RESOURCE, it, bankConfig->resources[it]);
|
||||||
loot.appendRawString("%d %s");
|
loot.appendRawString("%d %s");
|
||||||
loot.replaceNumber(bc->resources[it]);
|
loot.replaceNumber(bankConfig->resources[it]);
|
||||||
loot.replaceName(it);
|
loot.replaceName(it);
|
||||||
cb->giveResource(hero->getOwner(), it, bc->resources[it]);
|
cb->giveResource(hero->getOwner(), it, bankConfig->resources[it]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
//grant artifacts
|
//grant artifacts
|
||||||
for (auto & elem : bc->artifacts)
|
for (auto & elem : bankConfig->artifacts)
|
||||||
{
|
{
|
||||||
iw.components.emplace_back(ComponentType::ARTIFACT, elem);
|
iw.components.emplace_back(ComponentType::ARTIFACT, elem);
|
||||||
loot.appendRawString("%s");
|
loot.appendRawString("%s");
|
||||||
@ -294,7 +300,7 @@ void CBank::doVisit(const CGHeroInstance * hero) const
|
|||||||
iw.text.appendLocalString(EMetaText::ADVOB_TXT, textID);
|
iw.text.appendLocalString(EMetaText::ADVOB_TXT, textID);
|
||||||
if (textID == 34)
|
if (textID == 34)
|
||||||
{
|
{
|
||||||
const auto * strongest = boost::range::max_element(bc->guards, [](const CStackBasicDescriptor & a, const CStackBasicDescriptor & b)
|
const auto * strongest = boost::range::max_element(bankConfig->guards, [](const CStackBasicDescriptor & a, const CStackBasicDescriptor & b)
|
||||||
{
|
{
|
||||||
return a.type->getFightValue() < b.type->getFightValue();
|
return a.type->getFightValue() < b.type->getFightValue();
|
||||||
})->type;
|
})->type;
|
||||||
@ -309,7 +315,7 @@ void CBank::doVisit(const CGHeroInstance * hero) const
|
|||||||
iw.components.clear();
|
iw.components.clear();
|
||||||
iw.text.clear();
|
iw.text.clear();
|
||||||
|
|
||||||
if (!bc->spells.empty())
|
if (!bankConfig->spells.empty())
|
||||||
{
|
{
|
||||||
std::set<SpellID> spells;
|
std::set<SpellID> spells;
|
||||||
|
|
||||||
@ -318,7 +324,7 @@ void CBank::doVisit(const CGHeroInstance * hero) const
|
|||||||
{
|
{
|
||||||
iw.text.appendLocalString(EMetaText::ADVOB_TXT, textID); //pyramid
|
iw.text.appendLocalString(EMetaText::ADVOB_TXT, textID); //pyramid
|
||||||
}
|
}
|
||||||
for(const SpellID & spellId : bc->spells)
|
for(const SpellID & spellId : bankConfig->spells)
|
||||||
{
|
{
|
||||||
const auto * spell = spellId.toEntity(VLC);
|
const auto * spell = spellId.toEntity(VLC);
|
||||||
iw.text.appendName(spellId);
|
iw.text.appendName(spellId);
|
||||||
@ -351,7 +357,7 @@ void CBank::doVisit(const CGHeroInstance * hero) const
|
|||||||
|
|
||||||
//grant creatures
|
//grant creatures
|
||||||
CCreatureSet ourArmy;
|
CCreatureSet ourArmy;
|
||||||
for(const auto & slot : bc->creatures)
|
for(const auto & slot : bankConfig->creatures)
|
||||||
{
|
{
|
||||||
ourArmy.addToSlot(ourArmy.getSlotFor(slot.type->getId()), slot.type->getId(), slot.count);
|
ourArmy.addToSlot(ourArmy.getSlotFor(slot.type->getId()), slot.type->getId(), slot.count);
|
||||||
}
|
}
|
||||||
@ -391,7 +397,7 @@ void CBank::blockingDialogAnswered(const CGHeroInstance *hero, ui32 answer) cons
|
|||||||
{
|
{
|
||||||
if (answer)
|
if (answer)
|
||||||
{
|
{
|
||||||
if (bc) // not looted bank
|
if (bankConfig) // not looted bank
|
||||||
cb->startBattleI(hero, this, true);
|
cb->startBattleI(hero, this, true);
|
||||||
else
|
else
|
||||||
doVisit(hero);
|
doVisit(hero);
|
||||||
|
@ -18,7 +18,7 @@ class CBankInstanceConstructor;
|
|||||||
|
|
||||||
class DLL_LINKAGE CBank : public CArmedInstance
|
class DLL_LINKAGE CBank : public CArmedInstance
|
||||||
{
|
{
|
||||||
std::unique_ptr<BankConfig> bc;
|
std::unique_ptr<BankConfig> bankConfig;
|
||||||
ui32 daycounter;
|
ui32 daycounter;
|
||||||
ui32 resetDuration;
|
ui32 resetDuration;
|
||||||
bool coastVisitable;
|
bool coastVisitable;
|
||||||
@ -47,7 +47,7 @@ public:
|
|||||||
{
|
{
|
||||||
h & static_cast<CArmedInstance&>(*this);
|
h & static_cast<CArmedInstance&>(*this);
|
||||||
h & daycounter;
|
h & daycounter;
|
||||||
h & bc;
|
h & bankConfig;
|
||||||
h & resetDuration;
|
h & resetDuration;
|
||||||
h & coastVisitable;
|
h & coastVisitable;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user