mirror of
https://github.com/vcmi/vcmi.git
synced 2024-11-24 08:32:34 +02:00
- merged basicCreatures and upgradedCreatures into single array
- missing fix for savegames
This commit is contained in:
parent
8040a81eec
commit
9cbc1f1058
@ -2975,7 +2975,10 @@ TSubgoal CGoal::whatToDoToAchieve()
|
|||||||
auto creature = VLC->creh->creatures[objid];
|
auto creature = VLC->creh->creatures[objid];
|
||||||
if (t->subID == creature->faction) //TODO: how to force AI to build unupgraded creatures? :O
|
if (t->subID == creature->faction) //TODO: how to force AI to build unupgraded creatures? :O
|
||||||
{
|
{
|
||||||
int bid = t->creatureDwelling(creature->level);
|
auto creatures = t->town->creatures[creature->level];
|
||||||
|
int upgradeNumber = std::find(creatures.begin(), creatures.end(), creature->idNumber) - creatures.begin();
|
||||||
|
|
||||||
|
int bid = EBuilding::DWELL_FIRST + creature->level + upgradeNumber * GameConstants::CREATURES_PER_TOWN;
|
||||||
if (t->hasBuilt(bid)) //this assumes only creatures with dwellings are assigned to faction
|
if (t->hasBuilt(bid)) //this assumes only creatures with dwellings are assigned to faction
|
||||||
{
|
{
|
||||||
dwellings.push_back(t);
|
dwellings.push_back(t);
|
||||||
|
@ -1591,7 +1591,7 @@ CFortScreen::RecruitArea::RecruitArea(int posX, int posY, const CGTownInstance *
|
|||||||
if (!town->creatures[level].second.empty())
|
if (!town->creatures[level].second.empty())
|
||||||
creature = CGI->creh->creatures[town->creatures[level].second.back()];
|
creature = CGI->creh->creatures[town->creatures[level].second.back()];
|
||||||
else
|
else
|
||||||
creature = CGI->creh->creatures[town->town->basicCreatures[level]];
|
creature = CGI->creh->creatures[town->town->creatures[level][0]];
|
||||||
|
|
||||||
hoverText = boost::str(boost::format(CGI->generaltexth->tcommands[21]) % creature->namePl);
|
hoverText = boost::str(boost::format(CGI->generaltexth->tcommands[21]) % creature->namePl);
|
||||||
creatureAnim = new CCreaturePic(159, 4, creature, false);
|
creatureAnim = new CCreaturePic(159, 4, creature, false);
|
||||||
|
@ -2521,7 +2521,7 @@ void OptionsTab::SelectedBox::clickRight( tribool down, bool previousState )
|
|||||||
int x = 60, y = 159;
|
int x = 60, y = 159;
|
||||||
for(int i = 0; i < 7; i++)
|
for(int i = 0; i < 7; i++)
|
||||||
{
|
{
|
||||||
int c = t.basicCreatures[i];
|
int c = t.creatures[i][0];
|
||||||
blitAt(graphics->smallImgs[c], x, y, bmp);
|
blitAt(graphics->smallImgs[c], x, y, bmp);
|
||||||
CSDL_Ext::printAtMiddleWB(CGI->creh->creatures[c]->nameSing, x + 16, y + 45, FONT_TINY, 10, Colors::Cornsilk, bmp);
|
CSDL_Ext::printAtMiddleWB(CGI->creh->creatures[c]->nameSing, x + 16, y + 45, FONT_TINY, 10, Colors::Cornsilk, bmp);
|
||||||
|
|
||||||
|
@ -761,10 +761,12 @@ void YourTurn::applyCl( CClient *cl )
|
|||||||
|
|
||||||
void SaveGame::applyCl(CClient *cl)
|
void SaveGame::applyCl(CClient *cl)
|
||||||
{
|
{
|
||||||
tlog1 << "Saving to " << fname << "\n";
|
|
||||||
CFileInfo info(fname);
|
CFileInfo info(fname);
|
||||||
CResourceHandler::get()->createResource(info.getStem() + ".vcgm1");
|
CResourceHandler::get()->createResource(info.getStem() + ".vcgm1");
|
||||||
|
|
||||||
|
//FIXME: Workaround for a file that was created by server and in future should be used only by server
|
||||||
|
CResourceHandler::get()->createResource(info.getStem() + ".vlgm1");
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
CSaveFile save(CResourceHandler::get()->getResourceName(ResourceID(info.getStem(), EResType::CLIENT_SAVEGAME)));
|
CSaveFile save(CResourceHandler::get()->getResourceName(ResourceID(info.getStem(), EResType::CLIENT_SAVEGAME)));
|
||||||
|
@ -22,8 +22,7 @@
|
|||||||
"properties" :
|
"properties" :
|
||||||
{
|
{
|
||||||
"blit_order" : { "type" : "array", "items" : {"type":"number"}, "default" :[] },
|
"blit_order" : { "type" : "array", "items" : {"type":"number"}, "default" :[] },
|
||||||
"creatures_basic" : { "type" : "array", "items" : {"type":"number"} },
|
"creatures" : { "type" : "array", "items" : { "type" : "array", "items" : {"type":"number"} } },
|
||||||
"creatures_upgraded" :{ "type" : "array", "items" : {"type":"number"} },
|
|
||||||
"horde" : { "type" : "array", "items" : {"type":"number", "default" : -1} },
|
"horde" : { "type" : "array", "items" : {"type":"number", "default" : -1} },
|
||||||
"primary_resource" : { "type" : "number", "default" : 127},
|
"primary_resource" : { "type" : "number", "default" : 127},
|
||||||
"mage_guild" : { "type" : "number", "default" : 5},
|
"mage_guild" : { "type" : "number", "default" : 5},
|
||||||
@ -132,8 +131,7 @@
|
|||||||
{ "id" : 20, "defname" : "TBCSBOAT.def", "x" : 478, "y" : 134, "border" : "TOCSDKMN.bmp", "area" : "TZCSDKMN.bmp" }
|
{ "id" : 20, "defname" : "TBCSBOAT.def", "x" : 478, "y" : 134, "border" : "TOCSDKMN.bmp", "area" : "TZCSDKMN.bmp" }
|
||||||
],
|
],
|
||||||
"blit_order" : [ 0, 1, 2, 3, 10, 11, 12, 13, 5, 22, 30, 37, 16, 6, 20, 18, 19, 34, 41 ],
|
"blit_order" : [ 0, 1, 2, 3, 10, 11, 12, 13, 5, 22, 30, 37, 16, 6, 20, 18, 19, 34, 41 ],
|
||||||
"creatures_basic" : [ 0, 2, 4, 6, 8, 10, 12, 150 ],
|
"creatures" : [ [0, 1], [2, 3], [4, 5], [6, 7], [8, 9], [10, 11], [12, 13] ],
|
||||||
"creatures_upgraded" : [ 1, 3, 5, 7, 9, 11, 13 ],
|
|
||||||
"horde" : [ 2, null ],
|
"horde" : [ 2, null ],
|
||||||
"mage_guild" : 4,
|
"mage_guild" : 4,
|
||||||
"war_machine" : 4,
|
"war_machine" : 4,
|
||||||
@ -221,8 +219,7 @@
|
|||||||
{ "id" : 11, "defname" : "TBRMHAL2.def", "x" : 538, "y" : 187, "border" : "TORHAL2.bmp", "area" : "TZRHAL2.bmp" }
|
{ "id" : 11, "defname" : "TBRMHAL2.def", "x" : 538, "y" : 187, "border" : "TORHAL2.bmp", "area" : "TZRHAL2.bmp" }
|
||||||
],
|
],
|
||||||
"blit_order" : [ 33, 40, 35, 42, 16, 32, 39, 0, 1, 2, 3, 4, 31, 18, 38, 19, 34, 24, 41, 25, 5, 30, 37, 14, 10, 11, 12, 13, 17, 21, 22, -1, 27, 28, 29, 15 ],
|
"blit_order" : [ 33, 40, 35, 42, 16, 32, 39, 0, 1, 2, 3, 4, 31, 18, 38, 19, 34, 24, 41, 25, 5, 30, 37, 14, 10, 11, 12, 13, 17, 21, 22, -1, 27, 28, 29, 15 ],
|
||||||
"creatures_basic" : [ 14, 16, 18, 20, 22, 24, 26, 151 ],
|
"creatures" : [ [14, 15], [16, 17], [18, 19], [20, 21], [22, 23], [24, 25], [26, 27] ],
|
||||||
"creatures_upgraded" : [ 15, 17, 19, 21, 23, 25, 27 ],
|
|
||||||
"horde" : [ 1, 4 ],
|
"horde" : [ 1, 4 ],
|
||||||
"mage_guild" : 5,
|
"mage_guild" : 5,
|
||||||
"primary_resource" : 4,
|
"primary_resource" : 4,
|
||||||
@ -306,8 +303,7 @@
|
|||||||
{ "id" : 8, "defname" : "TBTWCAS2.def", "x" : 301, "y" : 0, "border" : "TOTCAS2.bmp", "area" : "TZTCAS2.bmp" }
|
{ "id" : 8, "defname" : "TBTWCAS2.def", "x" : 301, "y" : 0, "border" : "TOTCAS2.bmp", "area" : "TZTCAS2.bmp" }
|
||||||
],
|
],
|
||||||
"blit_order" : [ 36, 43, 32, 39, 10, 11, 12, 13, 32, 35, 42, 15, 5, 18, 19 ],
|
"blit_order" : [ 36, 43, 32, 39, 10, 11, 12, 13, 32, 35, 42, 15, 5, 18, 19 ],
|
||||||
"creatures_basic" : [ 28, 30, 32, 34, 36, 38, 40, 152 ],
|
"creatures" : [ [28, 29], [30, 31], [32, 33], [34, 35], [36, 37], [38, 39], [40, 41] ],
|
||||||
"creatures_upgraded" : [ 29, 31, 33, 35, 37, 39, 41 ],
|
|
||||||
"horde" : [ 1, null ],
|
"horde" : [ 1, null ],
|
||||||
"primary_resource" : 5,
|
"primary_resource" : 5,
|
||||||
"war_machine" : 5,
|
"war_machine" : 5,
|
||||||
@ -391,8 +387,7 @@
|
|||||||
{ "id" : 8, "defname" : "TBINCAS2.def", "x" : 222, "y" : 44, "border" : "TOICAS1A.bmp", "area" : "TZICAS1A.bmp" }
|
{ "id" : 8, "defname" : "TBINCAS2.def", "x" : 222, "y" : 44, "border" : "TOICAS1A.bmp", "area" : "TZICAS1A.bmp" }
|
||||||
],
|
],
|
||||||
"blit_order" : [ 26, 21, 7, 8, 9, 22, 31, 38, 36, 43, 10, 11, 12, 13, 5, 32, 39, 24, 25, 33, 40, 34, 41, 30, 37, 18, 19, 14, 15, 16, 35, 42 ],
|
"blit_order" : [ 26, 21, 7, 8, 9, 22, 31, 38, 36, 43, 10, 11, 12, 13, 5, 32, 39, 24, 25, 33, 40, 34, 41, 30, 37, 18, 19, 14, 15, 16, 35, 42 ],
|
||||||
"creatures_basic" : [ 42, 44, 46, 48, 50, 52, 54, 153 ],
|
"creatures" : [ [42, 43], [44, 45], [46, 47], [48, 49], [50, 51], [52, 53], [54, 55] ],
|
||||||
"creatures_upgraded" : [ 43, 45, 47, 49, 51, 53, 55 ],
|
|
||||||
"horde" : [ 0, 2 ],
|
"horde" : [ 0, 2 ],
|
||||||
"primary_resource" : 1,
|
"primary_resource" : 1,
|
||||||
"war_machine" : 5,
|
"war_machine" : 5,
|
||||||
@ -481,8 +476,7 @@
|
|||||||
{ "id" : 20, "defname" : "TBNCBOAT.def", "x" : 617, "y" : 265, "border" : "TONSHPNA.bmp", "area" : "TZNSHPNA.bmp" }
|
{ "id" : 20, "defname" : "TBNCBOAT.def", "x" : 617, "y" : 265, "border" : "TONSHPNA.bmp", "area" : "TZNSHPNA.bmp" }
|
||||||
],
|
],
|
||||||
"blit_order" : [ 17, 0, 1, 2, 3, 4, 7, 8, 9, 32, 39, 26, 15, 14, 34, 41, 16, 5, 33, 40, 31, 38, 6, 30, 18, 37, 19, 22, 20 ],
|
"blit_order" : [ 17, 0, 1, 2, 3, 4, 7, 8, 9, 32, 39, 26, 15, 14, 34, 41, 16, 5, 33, 40, 31, 38, 6, 30, 18, 37, 19, 22, 20 ],
|
||||||
"creatures_basic" : [ 56, 58, 60, 62, 64, 66, 68, 154 ],
|
"creatures" : [ [56, 57], [58, 59], [60, 61], [62, 63], [64, 65], [66, 67], [68, 69] ],
|
||||||
"creatures_upgraded" : [ 57, 59, 61, 63, 65, 67, 69 ],
|
|
||||||
"horde" : [ 0, null ],
|
"horde" : [ 0, null ],
|
||||||
"war_machine" : 6,
|
"war_machine" : 6,
|
||||||
|
|
||||||
@ -564,8 +558,7 @@
|
|||||||
{ "id" : 8, "defname" : "TBDNCAS2.def", "x" : 363, "y" : 87, "border" : "TODCAS2.bmp", "area" : "TZDCAS2.bmp" }
|
{ "id" : 8, "defname" : "TBDNCAS2.def", "x" : 363, "y" : 87, "border" : "TODCAS2.bmp", "area" : "TZDCAS2.bmp" }
|
||||||
],
|
],
|
||||||
"blit_order" : [ 0, 1, 2, 3, 4, 21, 35, 42, 5, 30, 18, 37, 19, 32, 39, 26, 7, 8, 9, 23 ],
|
"blit_order" : [ 0, 1, 2, 3, 4, 21, 35, 42, 5, 30, 18, 37, 19, 32, 39, 26, 7, 8, 9, 23 ],
|
||||||
"creatures_basic" : [ 70, 72, 74, 76, 78, 80, 82, 155 ],
|
"creatures" : [ [70, 71], [72, 73], [74, 75], [76, 77], [78, 79], [80, 81], [82, 83] ],
|
||||||
"creatures_upgraded" : [ 71, 73, 75, 77, 79, 81, 83 ],
|
|
||||||
"horde" : [ 0, null ],
|
"horde" : [ 0, null ],
|
||||||
"primary_resource" : 3,
|
"primary_resource" : 3,
|
||||||
"war_machine" : 4,
|
"war_machine" : 4,
|
||||||
@ -645,8 +638,7 @@
|
|||||||
{ "id" : 16, "defname" : "TBSTBLAK.def", "x" : 660, "y" : 286, "border" : "TOSBLK1.bmp", "area" : "TZSBLK1.bmp" }
|
{ "id" : 16, "defname" : "TBSTBLAK.def", "x" : 660, "y" : 286, "border" : "TOSBLK1.bmp", "area" : "TZSBLK1.bmp" }
|
||||||
],
|
],
|
||||||
"blit_order" : [ 33, 40, 30, 18, 37, 19, 31, 38, 23, 26, 5, 32, 39, 15, 14, 21, 16, 22 ],
|
"blit_order" : [ 33, 40, 30, 18, 37, 19, 31, 38, 23, 26, 5, 32, 39, 15, 14, 21, 16, 22 ],
|
||||||
"creatures_basic" : [ 84, 86, 88, 90, 92, 94, 96, 156 ],
|
"creatures" : [ [84, 85], [86, 87], [88, 89], [90, 91], [92, 93], [94, 95], [96, 97] ],
|
||||||
"creatures_upgraded" : [ 85, 87, 89, 91, 93, 95, 97 ],
|
|
||||||
"horde" : [ 0, null ],
|
"horde" : [ 0, null ],
|
||||||
"mage_guild" : 3,
|
"mage_guild" : 3,
|
||||||
"war_machine" : 5,
|
"war_machine" : 5,
|
||||||
@ -730,8 +722,7 @@
|
|||||||
{ "id" : 20, "defname" : "TBFRBOAT.def", "x" : 197, "y" : 294, "border" : "TOFDCK1.bmp", "area" : "TZFDCK1.bmp" }
|
{ "id" : 20, "defname" : "TBFRBOAT.def", "x" : 197, "y" : 294, "border" : "TOFDCK1.bmp", "area" : "TZFDCK1.bmp" }
|
||||||
],
|
],
|
||||||
"blit_order" : [ 16, 15, 14, 34, 41, 31, 38, 10, 11, 12, 13, 29, 0, 1, 2, 33, 40, 30, 18, 37, 19, 5, 36, 43, 26 ],
|
"blit_order" : [ 16, 15, 14, 34, 41, 31, 38, 10, 11, 12, 13, 29, 0, 1, 2, 33, 40, 30, 18, 37, 19, 5, 36, 43, 26 ],
|
||||||
"creatures_basic" : [ 98, 100, 104, 106, 102, 108, 110, 157 ],
|
"creatures" : [ [98, 99], [100, 101], [102, 103], [104, 105], [106, 107], [108, 109], [110, 111] ],
|
||||||
"creatures_upgraded" : [ 99, 101, 105, 107, 103, 109, 111 ],
|
|
||||||
"horde" : [ 0, null ],
|
"horde" : [ 0, null ],
|
||||||
"mage_guild" : 3,
|
"mage_guild" : 3,
|
||||||
"war_machine" : 6,
|
"war_machine" : 6,
|
||||||
@ -818,8 +809,7 @@
|
|||||||
{ "id" : 20, "defname" : "TBELBOAT.def", "x" : 239, "y" : 215, "border" : "TOELBOAT.bmp", "area" : "TZELBOAT.bmp" }
|
{ "id" : 20, "defname" : "TBELBOAT.def", "x" : 239, "y" : 215, "border" : "TOELBOAT.bmp", "area" : "TZELBOAT.bmp" }
|
||||||
],
|
],
|
||||||
"blit_order" : [ -1, 27, 28, 16, 34, 41, 6, 20, 33, 40, 36, 43, 21, 0, 1, 2, 3, 4, 5, 15, 14, 17, 35, 42, 30, 18, 37, 19, 10, 11, 12, 13, 29 ],
|
"blit_order" : [ -1, 27, 28, 16, 34, 41, 6, 20, 33, 40, 36, 43, 21, 0, 1, 2, 3, 4, 5, 15, 14, 17, 35, 42, 30, 18, 37, 19, 10, 11, 12, 13, 29 ],
|
||||||
"creatures_basic" : [ 118, 112, 115, 114, 113, 120, 130, 158 ],
|
"creatures" : [ [118, 119], [112, 127], [115, 123], [114, 129], [113, 125], [120, 121], [130, 131] ],
|
||||||
"creatures_upgraded" : [ 119, 127, 123, 129, 125, 121, 131 ],
|
|
||||||
"horde" : [ 0, null ],
|
"horde" : [ 0, null ],
|
||||||
"primary_resource" : 1,
|
"primary_resource" : 1,
|
||||||
"war_machine" : 4,
|
"war_machine" : 4,
|
||||||
|
@ -89,12 +89,14 @@ void CBuildingHandler::loadBuildings()
|
|||||||
{
|
{
|
||||||
temp = readTo(buf,it,'\n');//read blank line
|
temp = readTo(buf,it,'\n');//read blank line
|
||||||
temp = readTo(buf,it,'\n');// and faction name
|
temp = readTo(buf,it,'\n');// and faction name
|
||||||
for(int bg = 0; bg<14; bg++)
|
for(int bg = 0; ; bg++)
|
||||||
{
|
{
|
||||||
CBuilding *nb = readBg(buf,it);
|
CBuilding *nb = readBg(buf,it);
|
||||||
nb->tid = i;
|
nb->tid = i;
|
||||||
nb->bid = bg+30;
|
nb->bid = bg+30;
|
||||||
buildings[i][bg+30] = nb;
|
buildings[i][bg+30] = nb;
|
||||||
|
if (it >= buf.size() || buf[it] == '\t') //read till empty line
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/////done reading BUILDING.TXT*****************************
|
/////done reading BUILDING.TXT*****************************
|
||||||
|
@ -589,7 +589,7 @@ std::pair<int,int> CGameState::pickObject (CGObjectInstance *obj)
|
|||||||
dwl->info = nullptr;
|
dwl->info = nullptr;
|
||||||
|
|
||||||
std::pair<int,int> result(-1, -1);
|
std::pair<int,int> result(-1, -1);
|
||||||
int cid = VLC->townh->towns[faction].basicCreatures[level];
|
int cid = VLC->townh->towns[faction].creatures[level][0];
|
||||||
|
|
||||||
//golem factory is not in list of cregens but can be placed as random object
|
//golem factory is not in list of cregens but can be placed as random object
|
||||||
static const int factoryCreatures[] = {32, 33, 116, 117};
|
static const int factoryCreatures[] = {32, 33, 116, 117};
|
||||||
|
@ -1889,11 +1889,16 @@ int CGTownInstance::mageGuildLevel() const
|
|||||||
return 1;
|
return 1;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
bool CGTownInstance::creatureDwelling(const int & level, bool upgraded) const
|
|
||||||
|
int CGTownInstance::creatureDwellingLevel(int dwelling) const
|
||||||
{
|
{
|
||||||
if ( level<0 || level >= GameConstants::CREATURES_PER_TOWN )
|
if ( dwelling<0 || dwelling >= GameConstants::CREATURES_PER_TOWN )
|
||||||
return false;
|
return -1;
|
||||||
return vstd::contains(builtBuildings, 30+level+upgraded*GameConstants::CREATURES_PER_TOWN);
|
for (int i=0; ; i++)
|
||||||
|
{
|
||||||
|
if (!vstd::contains(builtBuildings, 30+dwelling+i*GameConstants::CREATURES_PER_TOWN))
|
||||||
|
return i-1;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
int CGTownInstance::getHordeLevel(const int & HID) const//HID - 0 or 1; returns creature level or -1 if that horde structure is not present
|
int CGTownInstance::getHordeLevel(const int & HID) const//HID - 0 or 1; returns creature level or -1 if that horde structure is not present
|
||||||
{
|
{
|
||||||
@ -2075,10 +2080,10 @@ void CGTownInstance::initObj()
|
|||||||
creatures.resize(GameConstants::CREATURES_PER_TOWN);
|
creatures.resize(GameConstants::CREATURES_PER_TOWN);
|
||||||
for (int i = 0; i < GameConstants::CREATURES_PER_TOWN; i++)
|
for (int i = 0; i < GameConstants::CREATURES_PER_TOWN; i++)
|
||||||
{
|
{
|
||||||
if(creatureDwelling(i,false))
|
int dwellingLevel = creatureDwellingLevel(i);
|
||||||
creatures[i].second.push_back(town->basicCreatures[i]);
|
int creaturesTotal = town->creatures[i].size();
|
||||||
if(creatureDwelling(i,true))
|
for (int j=0; j< std::min(dwellingLevel + 1, creaturesTotal); j++)
|
||||||
creatures[i].second.push_back(town->upgradedCreatures[i]);
|
creatures[i].second.push_back(town->creatures[i][j]);
|
||||||
}
|
}
|
||||||
|
|
||||||
switch (subID)
|
switch (subID)
|
||||||
@ -2149,7 +2154,7 @@ void CGTownInstance::newTurn() const
|
|||||||
if ((stacksCount() < GameConstants::ARMY_SIZE && rand()%100 < 25) || Slots().empty()) //add new stack
|
if ((stacksCount() < GameConstants::ARMY_SIZE && rand()%100 < 25) || Slots().empty()) //add new stack
|
||||||
{
|
{
|
||||||
int i = rand() % std::min (GameConstants::ARMY_SIZE, cb->getDate(3)<<1);
|
int i = rand() % std::min (GameConstants::ARMY_SIZE, cb->getDate(3)<<1);
|
||||||
TCreature c = town->basicCreatures[i];
|
TCreature c = town->creatures[i][0];
|
||||||
TSlot n = -1;
|
TSlot n = -1;
|
||||||
|
|
||||||
TQuantity count = creatureGrowth(i);
|
TQuantity count = creatureGrowth(i);
|
||||||
@ -2233,7 +2238,7 @@ void CGTownInstance::removeCapitols (ui8 owner) const
|
|||||||
|
|
||||||
int CGTownInstance::getBoatType() const
|
int CGTownInstance::getBoatType() const
|
||||||
{
|
{
|
||||||
const CCreature *c = VLC->creh->creatures[town->basicCreatures.front()];
|
const CCreature *c = VLC->creh->creatures[town->creatures.front().front()];
|
||||||
if (c->isGood())
|
if (c->isGood())
|
||||||
return 1;
|
return 1;
|
||||||
else if (c->isEvil())
|
else if (c->isEvil())
|
||||||
@ -6844,9 +6849,9 @@ void CArmedInstance::randomizeArmy(int type)
|
|||||||
if(randID > max)
|
if(randID > max)
|
||||||
{
|
{
|
||||||
if(randID % 2)
|
if(randID % 2)
|
||||||
j->second->setType(VLC->townh->towns[type].basicCreatures[(randID-197) / 2 -1]);
|
j->second->setType(VLC->townh->towns[type].creatures[(randID-197) / 2 -1][0]);
|
||||||
else
|
else
|
||||||
j->second->setType(VLC->townh->towns[type].upgradedCreatures[(randID-197) / 2 -1]);
|
j->second->setType(VLC->townh->towns[type].creatures[(randID-197) / 2 -1][1]);
|
||||||
|
|
||||||
randID = -1;
|
randID = -1;
|
||||||
}
|
}
|
||||||
|
@ -630,7 +630,7 @@ public:
|
|||||||
CGTownInstance::EFortLevel fortLevel() const;
|
CGTownInstance::EFortLevel fortLevel() const;
|
||||||
int hallLevel() const; // -1 - none, 0 - village, 1 - town, 2 - city, 3 - capitol
|
int hallLevel() const; // -1 - none, 0 - village, 1 - town, 2 - city, 3 - capitol
|
||||||
int mageGuildLevel() const; // -1 - none, 0 - village, 1 - town, 2 - city, 3 - capitol
|
int mageGuildLevel() const; // -1 - none, 0 - village, 1 - town, 2 - city, 3 - capitol
|
||||||
bool creatureDwelling(const int & level, bool upgraded=false) const;
|
int creatureDwellingLevel(int dwelling) const;
|
||||||
int getHordeLevel(const int & HID) const; //HID - 0 or 1; returns creature level or -1 if that horde structure is not present
|
int getHordeLevel(const int & HID) const; //HID - 0 or 1; returns creature level or -1 if that horde structure is not present
|
||||||
int creatureGrowth(const int & level) const;
|
int creatureGrowth(const int & level) const;
|
||||||
GrowthInfo getGrowthInfo(int level) const;
|
GrowthInfo getGrowthInfo(int level) const;
|
||||||
|
@ -40,12 +40,8 @@ void CTownHandler::loadStructures()
|
|||||||
towns.push_back(town);
|
towns.push_back(town);
|
||||||
}
|
}
|
||||||
|
|
||||||
for(int x=0;x<towns.size();x++) {
|
for(int x=0;x<towns.size();x++)
|
||||||
/* There is actually 8 basic creatures, but we ignore the 8th
|
towns[x].creatures.resize(GameConstants::CREATURES_PER_TOWN);
|
||||||
* entry for now */
|
|
||||||
towns[x].basicCreatures.resize(7);
|
|
||||||
towns[x].upgradedCreatures.resize(7);
|
|
||||||
}
|
|
||||||
|
|
||||||
structures.resize(GameConstants::F_NUMBER);
|
structures.resize(GameConstants::F_NUMBER);
|
||||||
|
|
||||||
@ -96,19 +92,14 @@ void CTownHandler::loadStructures()
|
|||||||
tlog3 << "Warning1: No building " << buildingID << " in the castle " << townID << std::endl;
|
tlog3 << "Warning1: No building " << buildingID << " in the castle " << townID << std::endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Read basic creatures belonging to that city
|
// Read creatures belonging to that city
|
||||||
level = 0;
|
level = 0;
|
||||||
BOOST_FOREACH(const JsonNode &node, town_node["creatures_basic"].Vector()) {
|
BOOST_FOREACH(const JsonNode &list, town_node["creatures"].Vector())
|
||||||
// This if ignores the 8th field (WoG creature)
|
{
|
||||||
if (level < towns[townID].basicCreatures.size())
|
BOOST_FOREACH(const JsonNode &node, list.Vector())
|
||||||
towns[townID].basicCreatures[level] = node.Float();
|
{
|
||||||
level ++;
|
towns[townID].creatures[level].push_back(node.Float());
|
||||||
}
|
}
|
||||||
|
|
||||||
// Read upgraded creatures belonging to that city
|
|
||||||
level = 0;
|
|
||||||
BOOST_FOREACH(const JsonNode &node, town_node["creatures_upgraded"].Vector()) {
|
|
||||||
towns[townID].upgradedCreatures[level] = node.Float();
|
|
||||||
level ++;
|
level ++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -23,8 +23,7 @@ class DLL_LINKAGE CTown
|
|||||||
public:
|
public:
|
||||||
|
|
||||||
std::vector<std::string> names; //names of the town instances
|
std::vector<std::string> names; //names of the town instances
|
||||||
std::vector<int> basicCreatures; //level (from 0) -> ID
|
std::vector<std::vector<int> > creatures; //level (from 0) -> list of creatures on this tier
|
||||||
std::vector<int> upgradedCreatures; //level (from 0) -> ID
|
|
||||||
std::map<int,int> hordeLvl; //[0] - first horde building creature level; [1] - second horde building (-1 if not present)
|
std::map<int,int> hordeLvl; //[0] - first horde building creature level; [1] - second horde building (-1 if not present)
|
||||||
ui32 mageLevel; //max available mage guild level
|
ui32 mageLevel; //max available mage guild level
|
||||||
int bonus; //pic number
|
int bonus; //pic number
|
||||||
@ -39,7 +38,7 @@ public:
|
|||||||
|
|
||||||
template <typename Handler> void serialize(Handler &h, const int version)
|
template <typename Handler> void serialize(Handler &h, const int version)
|
||||||
{
|
{
|
||||||
h & names & basicCreatures & upgradedCreatures & hordeLvl & mageLevel & bonus
|
h & names & creatures & hordeLvl & mageLevel & bonus
|
||||||
& primaryRes & warMachine & typeID;
|
& primaryRes & warMachine & typeID;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
@ -84,7 +84,6 @@ std::string CFileInfo::getBaseName() const
|
|||||||
return name.substr(begin, end - begin);
|
return name.substr(begin, end - begin);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
EResType::Type CFileInfo::getType() const
|
EResType::Type CFileInfo::getType() const
|
||||||
{
|
{
|
||||||
return EResTypeHelper::getTypeFromExtension(getExtension());
|
return EResTypeHelper::getTypeFromExtension(getExtension());
|
||||||
|
@ -1286,7 +1286,7 @@ void CGameHandler::newTurn()
|
|||||||
sac.creatures = t->creatures;
|
sac.creatures = t->creatures;
|
||||||
for (int k=0; k < GameConstants::CREATURES_PER_TOWN; k++) //creature growths
|
for (int k=0; k < GameConstants::CREATURES_PER_TOWN; k++) //creature growths
|
||||||
{
|
{
|
||||||
if(t->creatureDwelling(k))//there is dwelling (k-level)
|
if(t->creatureDwellingLevel(k) >= 0)//there is dwelling (k-level)
|
||||||
{
|
{
|
||||||
ui32 &availableCount = sac.creatures[k].first;
|
ui32 &availableCount = sac.creatures[k].first;
|
||||||
const CCreature *cre = VLC->creh->creatures[t->creatures[k].second.back()];
|
const CCreature *cre = VLC->creh->creatures[t->creatures[k].second.back()];
|
||||||
@ -2420,54 +2420,52 @@ bool CGameHandler::buildStructure( si32 tid, si32 bid, bool force /*=false*/ )
|
|||||||
CGTownInstance * t = static_cast<CGTownInstance*>(gs->map->objects[tid].get());
|
CGTownInstance * t = static_cast<CGTownInstance*>(gs->map->objects[tid].get());
|
||||||
CBuilding * b = VLC->buildh->buildings[t->subID][bid];
|
CBuilding * b = VLC->buildh->buildings[t->subID][bid];
|
||||||
|
|
||||||
if( !force && gs->canBuildStructure(t,bid) != 7)
|
if(!force)
|
||||||
{
|
{
|
||||||
complain("Cannot build that building!");
|
if (gs->canBuildStructure(t,bid) != 7)
|
||||||
return false;
|
COMPLAIN_RET("Cannot build that building!");
|
||||||
}
|
|
||||||
|
|
||||||
if( !force && bid == 26) //grail
|
if(bid == 26) //grail
|
||||||
{
|
|
||||||
if(!t->visitingHero || !t->visitingHero->hasArt(2))
|
|
||||||
{
|
{
|
||||||
complain("Cannot build grail - hero doesn't have it");
|
if(!t->visitingHero || !t->visitingHero->hasArt(2))
|
||||||
return false;
|
COMPLAIN_RET("Cannot build grail - hero doesn't have it")
|
||||||
|
else
|
||||||
|
removeArtifact(ArtifactLocation(t->visitingHero, t->visitingHero->getArtPos(2, false)));
|
||||||
}
|
}
|
||||||
|
|
||||||
//remove grail
|
|
||||||
removeArtifact(ArtifactLocation(t->visitingHero, t->visitingHero->getArtPos(2, false)));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
NewStructures ns;
|
NewStructures ns;
|
||||||
ns.tid = tid;
|
ns.tid = tid;
|
||||||
|
//we have upgr. dwelling, upgr. horde will be builded as well
|
||||||
if ( (bid == 18) && (vstd::contains(t->builtBuildings,(t->town->hordeLvl[0]+37))) )
|
if ( (bid == 18) && (vstd::contains(t->builtBuildings,(t->town->hordeLvl[0]+37))) )
|
||||||
ns.bid.insert(19);//we have upgr. dwelling, upgr. horde will be builded as well
|
ns.bid.insert(19);
|
||||||
else if ( (bid == 24) && (vstd::contains(t->builtBuildings,(t->town->hordeLvl[1]+37))) )
|
else if ( (bid == 24) && (vstd::contains(t->builtBuildings,(t->town->hordeLvl[1]+37))) )
|
||||||
ns.bid.insert(25);
|
ns.bid.insert(25);
|
||||||
else if(bid>36) //upg dwelling
|
|
||||||
|
else if(bid >= EBuilding::DWELL_FIRST) //dwelling
|
||||||
{
|
{
|
||||||
if ( (bid-37 == t->town->hordeLvl[0]) && (vstd::contains(t->builtBuildings,18)) )
|
int level = (bid - EBuilding::DWELL_FIRST) % GameConstants::CREATURES_PER_TOWN;
|
||||||
ns.bid.insert(19);//we have horde, will be upgraded as well as dwelling
|
int upgradeNumber = (bid - EBuilding::DWELL_FIRST) / GameConstants::CREATURES_PER_TOWN;
|
||||||
if ( (bid-37 == t->town->hordeLvl[1]) && (vstd::contains(t->builtBuildings,24)) )
|
|
||||||
ns.bid.insert(25);
|
if (upgradeNumber >= t->town->creatures[level].size())
|
||||||
|
COMPLAIN_RET("Cannot build dwelling: no creature found!");
|
||||||
|
|
||||||
|
CCreature * crea = VLC->creh->creatures[t->town->creatures[level][upgradeNumber]];
|
||||||
|
|
||||||
|
if (vstd::iswithin(bid, EBuilding::DWELL_UP_FIRST, EBuilding::DWELL_UP_LAST))
|
||||||
|
{
|
||||||
|
if ( (bid-37 == t->town->hordeLvl[0]) && (vstd::contains(t->builtBuildings,18)) )
|
||||||
|
ns.bid.insert(19);//we have horde, will be upgraded as well as dwelling
|
||||||
|
if ( (bid-37 == t->town->hordeLvl[1]) && (vstd::contains(t->builtBuildings,24)) )
|
||||||
|
ns.bid.insert(25);
|
||||||
|
}
|
||||||
|
|
||||||
SetAvailableCreatures ssi;
|
SetAvailableCreatures ssi;
|
||||||
ssi.tid = tid;
|
ssi.tid = tid;
|
||||||
ssi.creatures = t->creatures;
|
ssi.creatures = t->creatures;
|
||||||
ssi.creatures[bid-37].second.push_back(t->town->upgradedCreatures[bid-37]);
|
if (bid <= EBuilding::DWELL_LAST)
|
||||||
//Test for 2nd upgrade - add sharpshooters if grand elves dwelling was constructed
|
ssi.creatures[level].first = crea->growth;
|
||||||
//if (t->subID == 1 && bid == 39)
|
ssi.creatures[level].second.push_back(crea->idNumber);
|
||||||
// ssi.creatures[bid-37].second.push_back(137);
|
|
||||||
sendAndApply(&ssi);
|
|
||||||
}
|
|
||||||
else if(bid >= 30) //bas. dwelling
|
|
||||||
{
|
|
||||||
int crid = t->town->basicCreatures[bid-30];
|
|
||||||
SetAvailableCreatures ssi;
|
|
||||||
ssi.tid = tid;
|
|
||||||
ssi.creatures = t->creatures;
|
|
||||||
ssi.creatures[bid-30].first = VLC->creh->creatures[crid]->growth;
|
|
||||||
ssi.creatures[bid-30].second.push_back(crid);
|
|
||||||
sendAndApply(&ssi);
|
sendAndApply(&ssi);
|
||||||
}
|
}
|
||||||
else if(bid == 11)
|
else if(bid == 11)
|
||||||
@ -2476,18 +2474,6 @@ bool CGameHandler::buildStructure( si32 tid, si32 bid, bool force /*=false*/ )
|
|||||||
ns.bid.insert(28);
|
ns.bid.insert(28);
|
||||||
else if(bid == 13)
|
else if(bid == 13)
|
||||||
ns.bid.insert(29);
|
ns.bid.insert(29);
|
||||||
else if (t->subID == 4 && bid == 17) //veil of darkness
|
|
||||||
{
|
|
||||||
//handled via town->reacreateBonuses in apply
|
|
||||||
// GiveBonus gb(GiveBonus::TOWN);
|
|
||||||
// gb.bonus.type = Bonus::DARKNESS;
|
|
||||||
// gb.bonus.val = 20;
|
|
||||||
// gb.id = t->id;
|
|
||||||
// gb.bonus.duration = Bonus::PERMANENT;
|
|
||||||
// gb.bonus.source = Bonus::TOWN_STRUCTURE;
|
|
||||||
// gb.bonus.id = 17;
|
|
||||||
// sendAndApply(&gb);
|
|
||||||
}
|
|
||||||
else if ( t->subID == 5 && bid == 22 )
|
else if ( t->subID == 5 && bid == 22 )
|
||||||
{
|
{
|
||||||
setPortalDwelling(t);
|
setPortalDwelling(t);
|
||||||
@ -4709,7 +4695,7 @@ void CGameHandler::handleTownEvents(CGTownInstance * town, NewTurn &n, std::map<
|
|||||||
|
|
||||||
for(si32 i=0;i<ev->creatures.size();i++) //creature growths
|
for(si32 i=0;i<ev->creatures.size();i++) //creature growths
|
||||||
{
|
{
|
||||||
if(town->creatureDwelling(i) && ev->creatures[i])//there is dwelling
|
if(town->creatureDwellingLevel(i) >= 0 && ev->creatures[i])//there is dwelling
|
||||||
{
|
{
|
||||||
newCreas[town->id][i] += ev->creatures[i];
|
newCreas[town->id][i] += ev->creatures[i];
|
||||||
iw.components.push_back(Component(Component::CREATURE,
|
iw.components.push_back(Component(Component::CREATURE,
|
||||||
|
Loading…
Reference in New Issue
Block a user