1
0
mirror of https://github.com/vcmi/vcmi.git synced 2025-11-27 22:49:25 +02:00
This commit is contained in:
Laserlicht
2024-08-01 23:56:06 +02:00
parent 06209d2556
commit f695f7038e
3 changed files with 12 additions and 10 deletions

View File

@@ -1676,7 +1676,7 @@ void CGameState::obtainPlayersStats(SThievesGuildInfo & tgi, int level)
} }
if(level >= 5) //income if(level >= 5) //income
{ {
FILL_FIELD(income, Statistic::getIncome(&g->second)) FILL_FIELD(income, Statistic::getIncome(gs, &g->second))
} }
if(level >= 2) //best hero's stats if(level >= 2) //best hero's stats
{ {

View File

@@ -13,6 +13,7 @@
#include "../constants/StringConstants.h" #include "../constants/StringConstants.h"
#include "CGameState.h" #include "CGameState.h"
#include "TerrainHandler.h" #include "TerrainHandler.h"
#include "StartInfo.h"
#include "../mapObjects/CGHeroInstance.h" #include "../mapObjects/CGHeroInstance.h"
#include "../mapObjects/CGTownInstance.h" #include "../mapObjects/CGTownInstance.h"
#include "../mapObjects/CGObjectInstance.h" #include "../mapObjects/CGObjectInstance.h"
@@ -40,7 +41,7 @@ StatisticDataSetEntry StatisticDataSet::createEntry(const PlayerState * ps, cons
data.numberTowns = ps->towns.size(); data.numberTowns = ps->towns.size();
data.numberArtifacts = Statistic::getNumberOfArts(ps); data.numberArtifacts = Statistic::getNumberOfArts(ps);
data.armyStrength = Statistic::getArmyStrength(ps); data.armyStrength = Statistic::getArmyStrength(ps);
data.income = Statistic::getIncome(ps); data.income = Statistic::getIncome(gs, ps);
data.mapVisitedRatio = Statistic::getMapVisitedRatio(gs, ps->color); data.mapVisitedRatio = Statistic::getMapVisitedRatio(gs, ps->color);
return data; return data;
@@ -113,15 +114,16 @@ si64 Statistic::getArmyStrength(const PlayerState * ps)
} }
// get total gold income // get total gold income
int Statistic::getIncome(const PlayerState * ps) int Statistic::getIncome(const CGameState * gs, const PlayerState * ps)
{ {
int percentIncome = gs->getStartInfo()->getIthPlayersSettings(ps->color).handicap.percentIncome;
int totalIncome = 0; int totalIncome = 0;
const CGObjectInstance * heroOrTown = nullptr; const CGObjectInstance * heroOrTown = nullptr;
//Heroes can produce gold as well - skill, specialty or arts //Heroes can produce gold as well - skill, specialty or arts
for(const auto & h : ps->heroes) for(const auto & h : ps->heroes)
{ {
totalIncome += h->valOfBonuses(Selector::typeSubtype(BonusType::GENERATE_RESOURCE, BonusSubtypeID(GameResID(GameResID::GOLD)))); totalIncome += h->valOfBonuses(Selector::typeSubtype(BonusType::GENERATE_RESOURCE, BonusSubtypeID(GameResID(GameResID::GOLD)))) * percentIncome / 100;
if(!heroOrTown) if(!heroOrTown)
heroOrTown = h; heroOrTown = h;
@@ -156,7 +158,7 @@ int Statistic::getIncome(const PlayerState * ps)
assert(mine); assert(mine);
if (mine->producedResource == EGameResID::GOLD) if (mine->producedResource == EGameResID::GOLD)
totalIncome += mine->producedQuantity; totalIncome += mine->getProducedQuantity();
} }
} }
@@ -169,12 +171,12 @@ double Statistic::getMapVisitedRatio(const CGameState * gs, PlayerColor player)
double numTiles = 0.0; double numTiles = 0.0;
for(int layer = 0; layer < (gs->map->twoLevel ? 2 : 1); layer++) for(int layer = 0; layer < (gs->map->twoLevel ? 2 : 1); layer++)
for (int y = 0; y < gs->map->height; ++y) for(int y = 0; y < gs->map->height; ++y)
for (int x = 0; x < gs->map->width; ++x) for(int x = 0; x < gs->map->width; ++x)
{ {
TerrainTile tile = gs->map->getTile(int3(x, y, layer)); TerrainTile tile = gs->map->getTile(int3(x, y, layer));
if (tile.blocked && (!tile.visitable)) if(tile.blocked && (!tile.visitable))
continue; continue;
if(gs->isVisible(int3(x, y, layer), player)) if(gs->isVisible(int3(x, y, layer), player))
@@ -182,7 +184,7 @@ double Statistic::getMapVisitedRatio(const CGameState * gs, PlayerColor player)
numTiles++; numTiles++;
} }
return visible / (numTiles); return visible / numTiles;
} }
VCMI_LIB_NAMESPACE_END VCMI_LIB_NAMESPACE_END

View File

@@ -69,7 +69,7 @@ class DLL_LINKAGE Statistic
public: public:
static int getNumberOfArts(const PlayerState * ps); static int getNumberOfArts(const PlayerState * ps);
static si64 getArmyStrength(const PlayerState * ps); static si64 getArmyStrength(const PlayerState * ps);
static int getIncome(const PlayerState * ps); static int getIncome(const CGameState * gs, const PlayerState * ps);
static double getMapVisitedRatio(const CGameState * gs, PlayerColor player); static double getMapVisitedRatio(const CGameState * gs, PlayerColor player);
}; };