mirror of
https://github.com/vcmi/vcmi.git
synced 2025-11-06 09:09:40 +02:00
Removed hardcoded checks for Summon Boat spell
This commit is contained in:
@@ -23,7 +23,7 @@ namespace AIPathfinding
|
||||
|
||||
Goals::TSubgoal SummonBoatAction::whatToDo(const HeroPtr & hero) const
|
||||
{
|
||||
return Goals::sptr(Goals::AdventureSpellCast(hero, SpellID::SUMMON_BOAT));
|
||||
return Goals::sptr(Goals::AdventureSpellCast(hero, usedSpell));
|
||||
}
|
||||
|
||||
void SummonBoatAction::applyOnDestination(
|
||||
@@ -53,8 +53,6 @@ namespace AIPathfinding
|
||||
|
||||
uint32_t SummonBoatAction::getManaCost(const CGHeroInstance * hero) const
|
||||
{
|
||||
SpellID summonBoat = SpellID::SUMMON_BOAT;
|
||||
|
||||
return hero->getSpellCost(summonBoat.toSpell());
|
||||
return hero->getSpellCost(usedSpell.toSpell());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -34,9 +34,11 @@ namespace AIPathfinding
|
||||
|
||||
class SummonBoatAction : public VirtualBoatAction
|
||||
{
|
||||
SpellID usedSpell;
|
||||
public:
|
||||
SummonBoatAction()
|
||||
SummonBoatAction(SpellID usedSpell)
|
||||
:VirtualBoatAction(AINodeStorage::CAST_CHAIN)
|
||||
,usedSpell(usedSpell)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
@@ -10,6 +10,9 @@
|
||||
#include "StdInc.h"
|
||||
#include "AILayerTransitionRule.h"
|
||||
|
||||
#include "../../../../lib/spells/ISpellMechanics.h"
|
||||
#include "../../../../lib/spells/adventure/SummonBoatEffect.h"
|
||||
|
||||
namespace AIPathfinding
|
||||
{
|
||||
AILayerTransitionRule::AILayerTransitionRule(CPlayerSpecificInfoCallback * cb, VCAI * ai, std::shared_ptr<AINodeStorage> nodeStorage)
|
||||
@@ -74,13 +77,22 @@ namespace AIPathfinding
|
||||
}
|
||||
|
||||
auto hero = nodeStorage->getHero();
|
||||
auto summonBoatSpell = SpellID(SpellID::SUMMON_BOAT).toSpell();
|
||||
|
||||
if(hero->canCastThisSpell(summonBoatSpell)
|
||||
&& hero->getSpellSchoolLevel(summonBoatSpell) >= MasteryLevel::ADVANCED)
|
||||
for (const auto & spell : LIBRARY->spellh->objects)
|
||||
{
|
||||
// TODO: For lower school level we might need to check the existence of some boat
|
||||
summonableVirtualBoat.reset(new SummonBoatAction());
|
||||
if (!spell || !spell->isAdventure())
|
||||
continue;
|
||||
|
||||
auto effect = spell->getAdventureMechanics().getEffectAs<SummonBoatEffect>(hero);
|
||||
|
||||
if (!effect || !hero->canCastThisSpell(spell.get()))
|
||||
continue;
|
||||
|
||||
if (effect->canCreateNewBoat() && effect->getSuccessChance(hero) == 100)
|
||||
{
|
||||
// TODO: For lower school level we might need to check the existence of some boat
|
||||
summonableVirtualBoat.reset(new SummonBoatAction(spell->id));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user