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

Rumors: client-side proof of concept implementation

Actually information about this week rumor should be stored in gamestate and updated weekly
This commit is contained in:
ArseniyShestakov 2015-11-30 20:52:15 +03:00
parent 6704ea0cff
commit 879eaa47f8
3 changed files with 67 additions and 1 deletions

View File

@ -12,6 +12,7 @@
#include "CGameInfoCallback.h"
#include "CGameState.h" // PlayerState
#include "CGeneralTextHandler.h"
#include "mapObjects/CObjectHandler.h" // for CGObjectInstance
#include "StartInfo.h" // for StartInfo
#include "BattleState.h" // for BattleInfo
@ -566,7 +567,70 @@ EPlayerStatus::EStatus CGameInfoCallback::getPlayerStatus(PlayerColor player, bo
std::string CGameInfoCallback::getTavernRumor(const CGObjectInstance * townOrTavern) const
{
return "GOSSIP TEST";
std::string text = "";
auto & rand = gs->getRandomGenerator();
static std::vector<int> rumorTypes = {0, 1, 2, 2};
auto & rumorType = *RandomGeneratorUtil::nextItem(rumorTypes, rand);
switch(rumorType)
{
case 0:
{
SThievesGuildInfo tgi;
gs->obtainPlayersStats(tgi, 20);
static std::vector<int> statRumorTypes = {208, 209, 210};// 211, 212};
std::vector<PlayerColor> players = {};
auto statRumorType = *RandomGeneratorUtil::nextItem(statRumorTypes, rand);
switch(statRumorType)
{
case 208:
players = tgi.obelisks[0];
break;
case 209:
players = tgi.artifacts[0];
break;
case 210:
players = tgi.army[0];
break;
case 211:
/// TODO: not implemented in obtainPlayersStats
players = tgi.income[0];
break;
case 212:
/// TODO: Check that ultimate artifact (grail) found
break;
}
auto & playerId = *RandomGeneratorUtil::nextItem(players, rand);
std::string playerName = VLC->generaltexth->colors[playerId.getNum()];
text = boost::str(boost::format(VLC->generaltexth->allTexts[statRumorType]) % playerName);
break;
}
case 1:
if(gs->map->rumors.size())
{
auto & mapRumor = *RandomGeneratorUtil::nextItem(gs->map->rumors, rand);
text = mapRumor.text;
break;
}
/// don't break - if map don't have rumors we show predefined instead
case 2:
do
{
text = *RandomGeneratorUtil::nextItem(VLC->generaltexth->tavernRumors, rand);
}
while(!text.length());
break;
}
return text;
}
PlayerRelations::PlayerRelations CGameInfoCallback::getPlayerRelations( PlayerColor color1, PlayerColor color2 ) const

View File

@ -327,6 +327,7 @@ CGeneralTextHandler::CGeneralTextHandler()
readToVector("DATA/PRISKILL.TXT", primarySkillNames);
readToVector("DATA/JKTEXT.TXT", jktexts);
readToVector("DATA/TVRNINFO.TXT", tavernInfo);
readToVector("DATA/RANDTVRN.TXT", tavernRumors);
readToVector("DATA/TURNDUR.TXT", turnDurations);
readToVector("DATA/HEROSCRN.TXT", heroscrn);
readToVector("DATA/TENTCOLR.TXT", tentColors);

View File

@ -109,6 +109,7 @@ public:
//towns
std::vector<std::string> tcommands, hcommands, fcommands; //texts for town screen, town hall screen and fort screen
std::vector<std::string> tavernInfo;
std::vector<std::string> tavernRumors;
std::vector<std::pair<std::string,std::string> > zelp;
std::vector<std::string> lossCondtions;