1
0
mirror of https://github.com/vcmi/vcmi.git synced 2025-08-13 19:54:17 +02:00

Nullkiller: improve artifact value evaluation

This commit is contained in:
Andrii Danylchenko
2021-05-16 13:52:34 +03:00
committed by Andrii Danylchenko
parent 642f3a3fa4
commit 6faac5aeca
2 changed files with 40 additions and 2 deletions

View File

@@ -119,6 +119,41 @@ uint64_t getDwellingScore(const CGObjectInstance * target, bool checkGold)
return score; return score;
} }
uint64_t evaluateArtifactArmyValue(CArtifactInstance * art)
{
if(art->artType->id == ArtifactID::SPELL_SCROLL)
return 1500;
auto statsValue =
4 * art->valOfBonuses(Bonus::LAND_MOVEMENT)
+ 700 * art->valOfBonuses(Bonus::MORALE)
+ 700 * art->getAttack(false)
+ 700 * art->getDefence(false)
+ 700 * art->valOfBonuses(Bonus::PRIMARY_SKILL, PrimarySkill::KNOWLEDGE)
+ 700 * art->valOfBonuses(Bonus::PRIMARY_SKILL, PrimarySkill::SPELL_POWER)
+ 700 * art->getDefence(false)
+ 500 * art->valOfBonuses(Bonus::LUCK);
auto classValue = 0;
switch(art->artType->aClass)
{
case CArtifact::EartClass::ART_MINOR:
classValue = 1000;
break;
case CArtifact::EartClass::ART_MAJOR:
classValue = 3000;
break;
case CArtifact::EartClass::ART_RELIC:
case CArtifact::EartClass::ART_SPECIAL:
classValue = 8000;
break;
}
return statsValue > classValue ? statsValue : classValue;
}
uint64_t getArmyReward(const CGObjectInstance * target, const CGHeroInstance * hero, bool checkGold) uint64_t getArmyReward(const CGObjectInstance * target, const CGHeroInstance * hero, bool checkGold)
{ {
if(!target) if(!target)
@@ -138,9 +173,10 @@ uint64_t getArmyReward(const CGObjectInstance * target, const CGHeroInstance * h
case Obj::CRYPT: case Obj::CRYPT:
case Obj::SHIPWRECK: case Obj::SHIPWRECK:
case Obj::SHIPWRECK_SURVIVOR: case Obj::SHIPWRECK_SURVIVOR:
case Obj::WARRIORS_TOMB:
return 1500; return 1500;
case Obj::ARTIFACT: case Obj::ARTIFACT:
return dynamic_cast<const CGArtifact *>(target)->storedArtifact-> artType->getArtClassSerial() * 300; return evaluateArtifactArmyValue(dynamic_cast<const CGArtifact *>(target)->storedArtifact);
case Obj::DRAGON_UTOPIA: case Obj::DRAGON_UTOPIA:
return 10000; return 10000;
default: default:
@@ -220,6 +256,8 @@ int32_t getGoldReward(const CGObjectInstance * target, const CGHeroInstance * he
return 100; return 100;
case Obj::CAMPFIRE: case Obj::CAMPFIRE:
return 800; return 800;
case Obj::WAGON:
return 100;
case Obj::CREATURE_BANK: case Obj::CREATURE_BANK:
return getCreatureBankResources(target, hero)[Res::GOLD]; return getCreatureBankResources(target, hero)[Res::GOLD];
case Obj::CRYPT: case Obj::CRYPT:

View File

@@ -603,7 +603,7 @@ void VCAI::init(std::shared_ptr<CCallback> CB)
if(!fh) if(!fh)
fh = new FuzzyHelper(); fh = new FuzzyHelper();
if(playerID.getStr(false) == "red") //if(playerID.getStr(false) == "blue")
{ {
nullkiller.reset(new Nullkiller()); nullkiller.reset(new Nullkiller());
} }