浏览代码

Basic config for regular unit placement in Black Tower

Tomasz Zieliński 1 年之前
父节点
当前提交
3ac603767d

+ 2 - 0
lib/mapObjectConstructors/CBankInstanceConstructor.cpp

@@ -33,6 +33,7 @@ void CBankInstanceConstructor::initTypeData(const JsonNode & input)
 	bankResetDuration = static_cast<si32>(input["resetDuration"].Float());
 	blockVisit = input["blockedVisitable"].Bool();
 	coastVisitable = input["coastVisitable"].Bool();
+	regularUnitPlacement = input["regularUnitPlacement"].Bool();
 }
 
 BankConfig CBankInstanceConstructor::generateConfig(IGameCallback * cb, const JsonNode & level, CRandomGenerator & rng) const
@@ -57,6 +58,7 @@ void CBankInstanceConstructor::randomizeObject(CBank * bank, CRandomGenerator &
 	bank->resetDuration = bankResetDuration;
 	bank->blockVisit = blockVisit;
 	bank->coastVisitable = coastVisitable;
+	bank->regularUnitPlacement = regularUnitPlacement;
 
 	si32 totalChance = 0;
 	for(const auto & node : levels)

+ 2 - 0
lib/mapObjectConstructors/CBankInstanceConstructor.h

@@ -79,6 +79,8 @@ class CBankInstanceConstructor : public CDefaultObjectTypeHandler<CBank>
 	bool blockVisit;
 	// bank is visitable from land even when bank is on water tile
 	bool coastVisitable;
+	//If true, player units will be placed on the left and enemy on the right
+	bool regularUnitPlacement;
 protected:
 	void initTypeData(const JsonNode & input) override;
 

+ 1 - 1
lib/mapObjects/CBank.cpp

@@ -398,7 +398,7 @@ void CBank::blockingDialogAnswered(const CGHeroInstance *hero, ui32 answer) cons
 	if (answer)
 	{
 		if (bankConfig) // not looted bank
-			cb->startBattleI(hero, this, true);
+			cb->startBattleI(hero, this, !regularUnitPlacement);
 		else
 			doVisit(hero);
 	}

+ 1 - 0
lib/mapObjects/CBank.h

@@ -22,6 +22,7 @@ class DLL_LINKAGE CBank : public CArmedInstance
 	ui32 daycounter;
 	ui32 resetDuration;
 	bool coastVisitable;
+	bool regularUnitPlacement;
 
 	void setPropertyDer(ObjProperty what, ObjPropertyID identifier) override;
 	void doVisit(const CGHeroInstance * hero) const;