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

Create artifact AI value handling

This commit is contained in:
Dydzio 2018-08-23 19:39:42 +02:00
parent be45c8cb43
commit a1c0b9268e

View File

@ -4,7 +4,9 @@
#include "../../lib/VCMI_Lib.h"
#include "../../lib/CCreatureHandler.h"
#include "../../lib/mapObjects/CGTownInstance.h"
#include "../../lib/mapObjects/MiscObjects.h"
#include "../../lib/CRandomGenerator.h"
#include "../../lib/spells/CSpellHandler.h"
MapObjectsEvaluator & MapObjectsEvaluator::getInstance()
{
@ -32,7 +34,7 @@ MapObjectsEvaluator::MapObjectsEvaluator()
{
objectDatabase[CompoundMapObjectID(primaryID, secondaryID)] = VLC->objtypeh->getObjGroupAiValue(primaryID).get();
}
else //some default handling when aiValue not found
else //some default handling when aiValue not found, objects that require advanced properties (unavailable from handler) get their value calculated in getObjectValue
{
objectDatabase[CompoundMapObjectID(primaryID, secondaryID)] = 0;
}
@ -68,8 +70,47 @@ boost::optional<int> MapObjectsEvaluator::getObjectValue(const CGObjectInstance
}
return aiValue;
}
else
return getObjectValue(obj->ID, obj->subID);
else if(obj->ID == Obj::ARTIFACT)
{
auto artifactObject = dynamic_cast<const CGArtifact *>(obj);
switch(artifactObject->storedArtifact->artType->aClass)
{
case CArtifact::EartClass::ART_TREASURE:
return 2000;
case CArtifact::EartClass::ART_MINOR:
return 5000;
case CArtifact::EartClass::ART_MAJOR:
return 10000;
case CArtifact::EartClass::ART_RELIC:
return 20000;
case CArtifact::EartClass::ART_SPECIAL:
return 20000;
default:
return 0; //invalid artifact class
}
}
else if(obj->ID == Obj::SPELL_SCROLL)
{
auto scrollObject = dynamic_cast<const CGArtifact *>(obj);
auto spell = scrollObject->storedArtifact->getGivenSpellID().toSpell();
if(spell)
{
switch(spell->getLevel())
{
case 0: return 0; //scroll with creature ability? Let's assume it is useless
case 1: return 1000;
case 2: return 2000;
case 3: return 5000;
case 4: return 10000;
case 5: return 20000;
default: logAi->warn("AI detected spell scroll with spell level %s", spell->getLevel());
}
}
else
logAi->warn("AI found spell scroll with invalid spell ID: %s", scrollObject->storedArtifact->getGivenSpellID());
}
return getObjectValue(obj->ID, obj->subID);
}
void MapObjectsEvaluator::addObjectData(int primaryID, int secondaryID, int value) //by current design it updates value if already in AI database