1
0
mirror of https://github.com/vcmi/vcmi.git synced 2025-12-01 23:12:49 +02:00

More string ID's for buildings:

- town hall slots now use string ID's
- converted building requirements to new format
- "upgrades" property from buildings now uses string ID's
- several fixes for improved support of alternative creatures
- removed no longer needed "id" property from structures

Old mods should still work but will produce error messages during
validation
This commit is contained in:
Ivan Savenko
2013-12-04 10:36:39 +00:00
parent b1e638d1af
commit 122db9963b
17 changed files with 753 additions and 701 deletions

View File

@@ -302,7 +302,18 @@ void CTownHandler::loadBuilding(CTown &town, const std::string & stringID, const
loadBuildingRequirements(town, *ret, source["requires"]);
if (!source["upgrades"].isNull())
ret->upgrade = BuildingID(source["upgrades"].Float());
{
//MODS COMPATIBILITY
if (source["upgrades"].getType() == JsonNode::DATA_FLOAT)
ret->upgrade = BuildingID(source["upgrades"].Float());
else
{
VLC->modh->identifiers.requestIdentifier("building." + town.faction->identifier, source["upgrades"], [=](si32 identifier)
{
ret->upgrade = BuildingID(identifier);
});
}
}
else
ret->upgrade = BuildingID::NONE;
@@ -380,21 +391,39 @@ void CTownHandler::loadStructures(CTown &town, const JsonNode & source)
void CTownHandler::loadTownHall(CTown &town, const JsonNode & source)
{
for(const JsonNode &row : source.Vector())
auto & dstSlots = town.clientInfo.hallSlots;
auto & srcSlots = source.Vector();
dstSlots.resize(srcSlots.size());
for(size_t i=0; i<dstSlots.size(); i++)
{
std::vector< std::vector<BuildingID> > hallRow;
auto & dstRow = dstSlots[i];
auto & srcRow = srcSlots[i].Vector();
dstRow.resize(srcRow.size());
for(const JsonNode &box : row.Vector())
for(size_t j=0; j < dstRow.size(); j++)
{
std::vector<BuildingID> hallBox;
auto & dstBox = dstRow[j];
auto & srcBox = srcRow[j].Vector();
dstBox.resize(srcBox.size());
for(const JsonNode &value : box.Vector())
for(size_t k=0; k<dstBox.size(); k++)
{
hallBox.push_back(BuildingID(value.Float()));
auto & dst = dstBox[k];
auto & src = srcBox[k];
//MODS COMPATIBILITY
if (src.getType() == JsonNode::DATA_FLOAT)
dst = BuildingID(src.Float());
else
{
VLC->modh->identifiers.requestIdentifier("building." + town.faction->identifier, src, [&](si32 identifier)
{
dst = BuildingID(identifier);
});
}
}
hallRow.push_back(hallBox);
}
town.clientInfo.hallSlots.push_back(hallRow);
}
}