1
0
mirror of https://github.com/vcmi/vcmi.git synced 2024-12-24 22:14:36 +02:00

Minor fixes

This commit is contained in:
Ivan Savenko 2023-11-02 17:48:48 +02:00
parent 3634fb2158
commit 8d5fa41a19
20 changed files with 51 additions and 55 deletions

View File

@ -161,7 +161,7 @@ void CBonusSelection::createBonusesIcons()
break; break;
case CampaignBonusType::BUILDING: case CampaignBonusType::BUILDING:
{ {
int faction = -1; FactionID faction;
for(auto & elem : CSH->si->playerInfos) for(auto & elem : CSH->si->playerInfos)
{ {
if(elem.second.isControlledByHuman()) if(elem.second.isControlledByHuman())

View File

@ -12,7 +12,7 @@
VCMI_LIB_NAMESPACE_BEGIN VCMI_LIB_NAMESPACE_BEGIN
BuildingID CBuildingHandler::campToERMU(int camp, int townType, const std::set<BuildingID> & builtBuildings) BuildingID CBuildingHandler::campToERMU(int camp, FactionID townType, const std::set<BuildingID> & builtBuildings)
{ {
static const std::vector<BuildingID> campToERMU = static const std::vector<BuildingID> campToERMU =
{ {
@ -47,13 +47,13 @@ BuildingID CBuildingHandler::campToERMU(int camp, int townType, const std::set<B
if (i < 5) // last two levels don't have reserved horde ID. Yet another H3C weirdeness if (i < 5) // last two levels don't have reserved horde ID. Yet another H3C weirdeness
{ {
if (vstd::contains(hordeLvlsPerTType[townType], i)) if (vstd::contains(hordeLvlsPerTType[townType.getNum()], i))
{ {
if (camp == curPos) if (camp == curPos)
{ {
if (hordeLvlsPerTType[townType][0] == i) if (hordeLvlsPerTType[townType.getNum()][0] == i)
{ {
BuildingID dwellingID(BuildingID::DWELL_UP_FIRST + hordeLvlsPerTType[townType][0]); BuildingID dwellingID(BuildingID::DWELL_UP_FIRST + hordeLvlsPerTType[townType.getNum()][0]);
if(vstd::contains(builtBuildings, dwellingID)) //if upgraded dwelling is built if(vstd::contains(builtBuildings, dwellingID)) //if upgraded dwelling is built
return BuildingID::HORDE_1_UPGR; return BuildingID::HORDE_1_UPGR;
@ -62,9 +62,9 @@ BuildingID CBuildingHandler::campToERMU(int camp, int townType, const std::set<B
} }
else else
{ {
if(hordeLvlsPerTType[townType].size() > 1) if(hordeLvlsPerTType[townType.getNum()].size() > 1)
{ {
BuildingID dwellingID(BuildingID::DWELL_UP_FIRST + hordeLvlsPerTType[townType][1]); BuildingID dwellingID(BuildingID::DWELL_UP_FIRST + hordeLvlsPerTType[townType.getNum()][1]);
if(vstd::contains(builtBuildings, dwellingID)) //if upgraded dwelling is built if(vstd::contains(builtBuildings, dwellingID)) //if upgraded dwelling is built
return BuildingID::HORDE_2_UPGR; return BuildingID::HORDE_2_UPGR;

View File

@ -16,7 +16,7 @@ VCMI_LIB_NAMESPACE_BEGIN
class DLL_LINKAGE CBuildingHandler class DLL_LINKAGE CBuildingHandler
{ {
public: public:
static BuildingID campToERMU(int camp, int townType, const std::set<BuildingID> & builtBuildings); static BuildingID campToERMU(int camp, FactionID townType, const std::set<BuildingID> & builtBuildings);
}; };
VCMI_LIB_NAMESPACE_END VCMI_LIB_NAMESPACE_END

View File

@ -263,7 +263,7 @@ bool CCreature::isDoubleWide() const
*/ */
bool CCreature::isGood () const bool CCreature::isGood () const
{ {
return VLC->factions()->getByIndex(faction)->getAlignment() == EAlignment::GOOD; return VLC->factions()->getById(faction)->getAlignment() == EAlignment::GOOD;
} }
/** /**
@ -272,7 +272,7 @@ bool CCreature::isGood () const
*/ */
bool CCreature::isEvil () const bool CCreature::isEvil () const
{ {
return VLC->factions()->getByIndex(faction)->getAlignment() == EAlignment::EVIL; return VLC->factions()->getById(faction)->getAlignment() == EAlignment::EVIL;
} }
si32 CCreature::maxAmount(const TResources &res) const //how many creatures can be bought si32 CCreature::maxAmount(const TResources &res) const //how many creatures can be bought
@ -1350,21 +1350,13 @@ CCreatureHandler::~CCreatureHandler()
CreatureID CCreatureHandler::pickRandomMonster(CRandomGenerator & rand, int tier) const CreatureID CCreatureHandler::pickRandomMonster(CRandomGenerator & rand, int tier) const
{ {
int r = 0;
if(tier == -1) //pick any allowed creature
{
do
{
r = (*RandomGeneratorUtil::nextItem(objects, rand))->getId();
} while (objects[r] && objects[r]->special); // find first "not special" creature
}
else
{
assert(vstd::iswithin(tier, 1, 7));
std::vector<CreatureID> allowed; std::vector<CreatureID> allowed;
for(const auto & creature : objects) for(const auto & creature : objects)
{ {
if(!creature->special && creature->level == tier) if(creature->special)
continue;
if (creature->level == tier || tier == -1)
allowed.push_back(creature->getId()); allowed.push_back(creature->getId());
} }
@ -1375,9 +1367,6 @@ CreatureID CCreatureHandler::pickRandomMonster(CRandomGenerator & rand, int tier
} }
return *RandomGeneratorUtil::nextItem(allowed, rand); return *RandomGeneratorUtil::nextItem(allowed, rand);
}
assert (r >= 0); //should always be, but it crashed
return CreatureID(r);
} }

View File

@ -151,7 +151,7 @@ bool CHeroClass::isMagicHero() const
EAlignment CHeroClass::getAlignment() const EAlignment CHeroClass::getAlignment() const
{ {
return VLC->factions()->getByIndex(faction)->getAlignment(); return VLC->factions()->getById(faction)->getAlignment();
} }
int32_t CHeroClass::getIndex() const int32_t CHeroClass::getIndex() const

View File

@ -120,7 +120,7 @@ DLL_LINKAGE std::ostream & operator<<(std::ostream & out, const CSkill::LevelInf
DLL_LINKAGE std::ostream & operator<<(std::ostream & out, const CSkill & skill) DLL_LINKAGE std::ostream & operator<<(std::ostream & out, const CSkill & skill)
{ {
out << "Skill(" << (int)skill.id << "," << skill.identifier << "): ["; out << "Skill(" << skill.id.getNum() << "," << skill.identifier << "): [";
for(int i=0; i < skill.levels.size(); i++) for(int i=0; i < skill.levels.size(); i++)
out << (i ? "," : "") << skill.levels[i]; out << (i ? "," : "") << skill.levels[i];
return out << "]"; return out << "]";
@ -233,7 +233,7 @@ CSkill * CSkillHandler::loadFromJson(const std::string & scope, const JsonNode &
skillAtLevel.iconMedium = levelNode["images"]["medium"].String(); skillAtLevel.iconMedium = levelNode["images"]["medium"].String();
skillAtLevel.iconLarge = levelNode["images"]["large"].String(); skillAtLevel.iconLarge = levelNode["images"]["large"].String();
} }
logMod->debug("loaded secondary skill %s(%d)", identifier, (int)skill->id); logMod->debug("loaded secondary skill %s(%d)", identifier, skill->id.getNum());
return skill; return skill;
} }

View File

@ -401,10 +401,6 @@ class BuildingID : public IdentifierWithEnum<BuildingID, BuildingIDBase>
{ {
public: public:
using IdentifierWithEnum<BuildingID, BuildingIDBase>::IdentifierWithEnum; using IdentifierWithEnum<BuildingID, BuildingIDBase>::IdentifierWithEnum;
DLL_LINKAGE static si32 decode(const std::string & identifier);
DLL_LINKAGE static std::string encode(const si32 index);
static std::string entityType();
}; };
class MapObjectBaseID : public IdentifierBase class MapObjectBaseID : public IdentifierBase

View File

@ -226,7 +226,7 @@ void CGameState::init(const IMapService * mapService, StartInfo * si, Load::Prog
// Explicitly initialize static variables // Explicitly initialize static variables
for(auto & elem : players) for(auto & elem : players)
{ {
CGKeys::playerKeyMap[elem.first] = std::set<ui8>(); CGKeys::playerKeyMap[elem.first] = std::set<MapObjectSubID>();
} }
for(auto & elem : teams) for(auto & elem : teams)
{ {

View File

@ -271,7 +271,7 @@ void CBank::doVisit(const CGHeroInstance * hero) const
loot.appendRawString("%d %s"); loot.appendRawString("%d %s");
loot.replaceNumber(bc->resources[it]); loot.replaceNumber(bc->resources[it]);
loot.replaceLocalString(EMetaText::RES_NAMES, it); loot.replaceLocalString(EMetaText::RES_NAMES, it);
cb->giveResource(hero->getOwner(), static_cast<EGameResID>(it), bc->resources[it]); cb->giveResource(hero->getOwner(), it, bc->resources[it]);
} }
} }
//grant artifacts //grant artifacts

View File

@ -344,7 +344,7 @@ void CGDwelling::updateGuards() const
//default condition - creatures are of level 5 or higher //default condition - creatures are of level 5 or higher
for (auto creatureEntry : creatures) for (auto creatureEntry : creatures)
{ {
if (VLC->creatures()->getByIndex(creatureEntry.second.at(0))->getLevel() >= 5 && ID != Obj::REFUGEE_CAMP) if (VLC->creatures()->getById(creatureEntry.second.at(0))->getLevel() >= 5 && ID != Obj::REFUGEE_CAMP)
{ {
guarded = true; guarded = true;
break; break;

View File

@ -1679,7 +1679,7 @@ void CGHeroInstance::serializeCommonOptions(JsonSerializeFormat & handler)
{ {
auto addSkill = [this](const std::string & skillId, const std::string & levelId) auto addSkill = [this](const std::string & skillId, const std::string & levelId)
{ {
const int rawId = CSkillHandler::decodeSkill(skillId); const int rawId = SecondarySkill::decode(skillId);
if(rawId < 0) if(rawId < 0)
{ {
logGlobal->error("Invalid secondary skill %s", skillId); logGlobal->error("Invalid secondary skill %s", skillId);

View File

@ -257,7 +257,7 @@ void CGPandoraBox::serializeJsonOptions(JsonSerializeFormat & handler)
const std::string skillName = p.first; const std::string skillName = p.first;
const std::string levelId = p.second.String(); const std::string levelId = p.second.String();
const int rawId = CSkillHandler::decodeSkill(skillName); const int rawId = SecondarySkill::decode(skillName);
if(rawId < 0) if(rawId < 0)
{ {
logGlobal->error("Invalid secondary skill %s", skillName); logGlobal->error("Invalid secondary skill %s", skillName);

View File

@ -584,7 +584,7 @@ void CGTownInstance::newTurn(CRandomGenerator & rand) const
TQuantity count = creatureGrowth(i); TQuantity count = creatureGrowth(i);
if (!count) // no dwelling if (!count) // no dwelling
count = VLC->creatures()->getByIndex(c)->getGrowth(); count = VLC->creatures()->getById(c)->getGrowth();
{//no lower tiers or above current month {//no lower tiers or above current month

View File

@ -119,7 +119,7 @@ void CGMine::initObj(CRandomGenerator & rand)
} }
else else
{ {
producedResource = GameResID(getObjTypeIndex()); producedResource = GameResID(getObjTypeIndex().getNum());
} }
producedQuantity = defaultResProduction(); producedQuantity = defaultResProduction();
} }
@ -773,7 +773,7 @@ void CGArtifact::initObj(CRandomGenerator & rand)
std::string CGArtifact::getObjectName() const std::string CGArtifact::getObjectName() const
{ {
return VLC->artifacts()->getByIndex(getArtifact())->getNameTranslated(); return VLC->artifacts()->getById(getArtifact())->getNameTranslated();
} }
void CGArtifact::onHeroVisit(const CGHeroInstance * h) const void CGArtifact::onHeroVisit(const CGHeroInstance * h) const

View File

@ -72,7 +72,18 @@ void CCastleEvent::serializeJson(JsonSerializeFormat & handler)
{ {
CMapEvent::serializeJson(handler); CMapEvent::serializeJson(handler);
handler.serializeIdArray("buildings", buildings); // TODO: handler.serializeIdArray("buildings", buildings);
{
std::vector<BuildingID> temp(buildings.begin(), buildings.end());
auto a = handler.enterArray("buildings");
a.syncSize(temp);
for(int i = 0; i < temp.size(); ++i)
{
a.serializeInt(i, temp[i]);
buildings.insert(temp[i]);
}
}
{ {
auto a = handler.enterArray("creatures"); auto a = handler.enterArray("creatures");
a.syncSize(creatures); a.syncSize(creatures);

View File

@ -883,7 +883,7 @@ void CMapLoaderH3M::readPredefinedHeroes()
} }
map->predefinedHeroes.emplace_back(hero); map->predefinedHeroes.emplace_back(hero);
logGlobal->debug("Map '%s': Hero predefined in map: %s", mapName, VLC->heroh->getByIndex(hero->subID)->getJsonKey()); logGlobal->debug("Map '%s': Hero predefined in map: %s", mapName, VLC->heroh->getById(hero->getHeroType())->getJsonKey());
} }
} }

View File

@ -831,7 +831,7 @@ void CMapFormatJson::serializeOptions(JsonSerializeFormat & handler)
serializePredefinedHeroes(handler); serializePredefinedHeroes(handler);
handler.serializeLIC("allowedAbilities", &CSkillHandler::decodeSkill, &CSkillHandler::encodeSkill, VLC->skillh->getDefaultAllowed(), map->allowedAbilities); handler.serializeLIC("allowedAbilities", &SecondarySkill::decode, &SecondarySkill::encode, VLC->skillh->getDefaultAllowed(), map->allowedAbilities);
handler.serializeLIC("allowedArtifacts", &ArtifactID::decode, &ArtifactID::encode, VLC->arth->getDefaultAllowed(), map->allowedArtifact); handler.serializeLIC("allowedArtifacts", &ArtifactID::decode, &ArtifactID::encode, VLC->arth->getDefaultAllowed(), map->allowedArtifact);

View File

@ -133,7 +133,7 @@ void Rewardable::Reward::serializeJson(JsonSerializeFormat & handler)
std::vector<std::pair<SecondarySkill, si32>> fieldValue(secondary.begin(), secondary.end()); std::vector<std::pair<SecondarySkill, si32>> fieldValue(secondary.begin(), secondary.end());
a.serializeStruct<std::pair<SecondarySkill, si32>>(fieldValue, [](JsonSerializeFormat & h, std::pair<SecondarySkill, si32> & e) a.serializeStruct<std::pair<SecondarySkill, si32>>(fieldValue, [](JsonSerializeFormat & h, std::pair<SecondarySkill, si32> & e)
{ {
h.serializeId("skill", e.first, SecondarySkill{}, VLC->skillh->decodeSkill, VLC->skillh->encodeSkill); h.serializeId("skill", e.first);
h.serializeId("level", e.second, 0, [](const std::string & i){return vstd::find_pos(NSecondarySkill::levels, i);}, [](si32 i){return NSecondarySkill::levels.at(i);}); h.serializeId("level", e.second, 0, [](const std::string & i){return vstd::find_pos(NSecondarySkill::levels, i);}, [](si32 i){return NSecondarySkill::levels.at(i);});
}); });
a.syncSize(fieldValue); a.syncSize(fieldValue);

View File

@ -187,7 +187,7 @@ const std::map<PlayerColor, CMapGenOptions::CPlayerSettings> & CMapGenOptions::g
return players; return players;
} }
void CMapGenOptions::setStartingTownForPlayer(const PlayerColor & color, si32 town) void CMapGenOptions::setStartingTownForPlayer(const PlayerColor & color, FactionID town)
{ {
auto it = players.find(color); auto it = players.find(color);
if(it == players.end()) assert(0); if(it == players.end()) assert(0);

View File

@ -114,7 +114,7 @@ public:
/// The first player colors belong to standard players and the last player colors belong to comp only players. /// The first player colors belong to standard players and the last player colors belong to comp only players.
/// All standard players are by default of type EPlayerType::AI. /// All standard players are by default of type EPlayerType::AI.
const std::map<PlayerColor, CPlayerSettings> & getPlayersSettings() const; const std::map<PlayerColor, CPlayerSettings> & getPlayersSettings() const;
void setStartingTownForPlayer(const PlayerColor & color, si32 town); void setStartingTownForPlayer(const PlayerColor & color, FactionID town);
/// Sets a player type for a standard player. A standard player is the opposite of a computer only player. The /// Sets a player type for a standard player. A standard player is the opposite of a computer only player. The
/// values which can be chosen for the player type are EPlayerType::AI or EPlayerType::HUMAN. /// values which can be chosen for the player type are EPlayerType::AI or EPlayerType::HUMAN.
void setPlayerTypeForStandardPlayer(const PlayerColor & color, EPlayerType playerType); void setPlayerTypeForStandardPlayer(const PlayerColor & color, EPlayerType playerType);