mirror of
https://github.com/vcmi/vcmi.git
synced 2025-11-29 23:07:48 +02:00
invite hero backend
This commit is contained in:
@@ -282,7 +282,7 @@ void ApplyGhNetPackVisitor::visitHireHero(HireHero & pack)
|
||||
{
|
||||
gh.throwIfWrongPlayer(&pack);
|
||||
|
||||
result = gh.heroPool->hireHero(pack.tid, pack.hid, pack.player);
|
||||
result = gh.heroPool->hireHero(pack.tid, pack.hid, pack.player, pack.nhid);
|
||||
}
|
||||
|
||||
void ApplyGhNetPackVisitor::visitBuildBoat(BuildBoat & pack)
|
||||
|
||||
@@ -104,7 +104,7 @@ void HeroPoolProcessor::clearHeroFromSlot(const PlayerColor & color, TavernHeroS
|
||||
gameHandler->sendAndApply(&sah);
|
||||
}
|
||||
|
||||
void HeroPoolProcessor::selectNewHeroForSlot(const PlayerColor & color, TavernHeroSlot slot, bool needNativeHero, bool giveArmy)
|
||||
void HeroPoolProcessor::selectNewHeroForSlot(const PlayerColor & color, TavernHeroSlot slot, bool needNativeHero, bool giveArmy, const HeroTypeID & nextHero)
|
||||
{
|
||||
SetAvailableHero sah;
|
||||
sah.player = color;
|
||||
@@ -113,6 +113,10 @@ void HeroPoolProcessor::selectNewHeroForSlot(const PlayerColor & color, TavernHe
|
||||
|
||||
CGHeroInstance *newHero = pickHeroFor(needNativeHero, color);
|
||||
|
||||
const auto & heroesPool = gameHandler->gameState()->heroesPool;
|
||||
if(gameHandler->getStartInfo()->extraOptionsInfo.unlimitedReplay && heroesPool->unusedHeroesFromPool().count(nextHero) && heroesPool->isHeroAvailableFor(nextHero, color))
|
||||
newHero = heroesPool->unusedHeroesFromPool()[nextHero];
|
||||
|
||||
if (newHero)
|
||||
{
|
||||
sah.hid = newHero->getHeroType();
|
||||
@@ -145,7 +149,7 @@ void HeroPoolProcessor::onNewWeek(const PlayerColor & color)
|
||||
selectNewHeroForSlot(color, TavernHeroSlot::RANDOM, false, true);
|
||||
}
|
||||
|
||||
bool HeroPoolProcessor::hireHero(const ObjectInstanceID & objectID, const HeroTypeID & heroToRecruit, const PlayerColor & player)
|
||||
bool HeroPoolProcessor::hireHero(const ObjectInstanceID & objectID, const HeroTypeID & heroToRecruit, const PlayerColor & player, const HeroTypeID & nextHero)
|
||||
{
|
||||
const PlayerState * playerState = gameHandler->getPlayerState(player);
|
||||
const CGObjectInstance * mapObject = gameHandler->getObj(objectID);
|
||||
@@ -226,9 +230,9 @@ bool HeroPoolProcessor::hireHero(const ObjectInstanceID & objectID, const HeroTy
|
||||
gameHandler->sendAndApply(&hr);
|
||||
|
||||
if(recruitableHeroes[0] == recruitedHero)
|
||||
selectNewHeroForSlot(player, TavernHeroSlot::NATIVE, false, false);
|
||||
selectNewHeroForSlot(player, TavernHeroSlot::NATIVE, false, false, nextHero);
|
||||
else
|
||||
selectNewHeroForSlot(player, TavernHeroSlot::RANDOM, false, false);
|
||||
selectNewHeroForSlot(player, TavernHeroSlot::RANDOM, false, false, nextHero);
|
||||
|
||||
gameHandler->giveResource(player, EGameResID::GOLD, -GameConstants::HERO_GOLD_COST);
|
||||
|
||||
|
||||
@@ -9,6 +9,8 @@
|
||||
*/
|
||||
#pragma once
|
||||
|
||||
#include "../../lib/constants/EntityIdentifiers.h"
|
||||
|
||||
VCMI_LIB_NAMESPACE_BEGIN
|
||||
|
||||
enum class TavernHeroSlot : int8_t;
|
||||
@@ -33,7 +35,7 @@ class HeroPoolProcessor : boost::noncopyable
|
||||
std::map<HeroTypeID, std::unique_ptr<CRandomGenerator>> heroSeed;
|
||||
|
||||
void clearHeroFromSlot(const PlayerColor & color, TavernHeroSlot slot);
|
||||
void selectNewHeroForSlot(const PlayerColor & color, TavernHeroSlot slot, bool needNativeHero, bool giveStartingArmy);
|
||||
void selectNewHeroForSlot(const PlayerColor & color, TavernHeroSlot slot, bool needNativeHero, bool giveStartingArmy, const HeroTypeID & nextHero = HeroTypeID::NONE);
|
||||
|
||||
std::vector<const CHeroClass *> findAvailableClassesFor(const PlayerColor & player) const;
|
||||
std::vector<CGHeroInstance *> findAvailableHeroesFor(const PlayerColor & player, const CHeroClass * heroClass) const;
|
||||
@@ -60,7 +62,7 @@ public:
|
||||
CRandomGenerator & getHeroSkillsRandomGenerator(const HeroTypeID & hero);
|
||||
|
||||
/// Incoming net pack handling
|
||||
bool hireHero(const ObjectInstanceID & objectID, const HeroTypeID & hid, const PlayerColor & player);
|
||||
bool hireHero(const ObjectInstanceID & objectID, const HeroTypeID & hid, const PlayerColor & player, const HeroTypeID & nextHero);
|
||||
|
||||
template <typename Handler> void serialize(Handler &h, const int version)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user