mirror of https://github.com/OpenTTD/OpenTTD
(svn r23826) -Fix [FS#4972]: the detailed performance rating window showed the cargo count of the current quarter instead of the last quarter like the tooltip says
parent
15331fa03c
commit
70c7fbd90e
|
@ -105,6 +105,33 @@ public:
|
||||||
{
|
{
|
||||||
return this->amount[cargo];
|
return this->amount[cargo];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the sum of all cargo amounts.
|
||||||
|
* @return The sum.
|
||||||
|
*/
|
||||||
|
template <typename T>
|
||||||
|
inline const T GetSum() const
|
||||||
|
{
|
||||||
|
T ret = 0;
|
||||||
|
for (size_t i = 0; i < lengthof(this->amount); i++) {
|
||||||
|
ret += this->amount[i];
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the amount of cargos that have an amount.
|
||||||
|
* @return The amount.
|
||||||
|
*/
|
||||||
|
inline byte GetCount() const
|
||||||
|
{
|
||||||
|
byte count = 0;
|
||||||
|
for (size_t i = 0; i < lengthof(this->amount); i++) {
|
||||||
|
if (this->amount[i] != 0) count++;
|
||||||
|
}
|
||||||
|
return count;
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -19,12 +19,13 @@
|
||||||
#include "settings_type.h"
|
#include "settings_type.h"
|
||||||
#include "group.h"
|
#include "group.h"
|
||||||
|
|
||||||
|
/** Statistics about the economy. */
|
||||||
struct CompanyEconomyEntry {
|
struct CompanyEconomyEntry {
|
||||||
Money income;
|
Money income; ///< The amount of income.
|
||||||
Money expenses;
|
Money expenses; ///< The amount of expenses.
|
||||||
int32 delivered_cargo;
|
CargoArray delivered_cargo; ///< The amount of delivered cargo.
|
||||||
int32 performance_history; ///< company score (scale 0-1000)
|
int32 performance_history; ///< Company score (scale 0-1000)
|
||||||
Money company_value;
|
Money company_value; ///< The value of the company.
|
||||||
};
|
};
|
||||||
|
|
||||||
struct CompanyInfrastructure {
|
struct CompanyInfrastructure {
|
||||||
|
@ -62,8 +63,6 @@ struct CompanyProperties {
|
||||||
|
|
||||||
byte block_preview; ///< Number of quarters that the company is not allowed to get new exclusive engine previews (see CompaniesGenStatistics).
|
byte block_preview; ///< Number of quarters that the company is not allowed to get new exclusive engine previews (see CompaniesGenStatistics).
|
||||||
|
|
||||||
uint32 cargo_types; ///< Which cargo types were transported the last year.
|
|
||||||
|
|
||||||
TileIndex location_of_HQ; ///< Northern tile of HQ; #INVALID_TILE when there is none.
|
TileIndex location_of_HQ; ///< Northern tile of HQ; #INVALID_TILE when there is none.
|
||||||
TileIndex last_build_coordinate; ///< Coordinate of the last build thing by this company.
|
TileIndex last_build_coordinate; ///< Coordinate of the last build thing by this company.
|
||||||
|
|
||||||
|
|
|
@ -214,27 +214,21 @@ int UpdateCompanyRatingAndValue(Company *c, bool update)
|
||||||
|
|
||||||
/* Generate score depending on amount of transported cargo */
|
/* Generate score depending on amount of transported cargo */
|
||||||
{
|
{
|
||||||
const CompanyEconomyEntry *cee;
|
int numec = min(c->num_valid_stat_ent, 4);
|
||||||
int numec;
|
|
||||||
uint32 total_delivered;
|
|
||||||
|
|
||||||
numec = min(c->num_valid_stat_ent, 4);
|
|
||||||
if (numec != 0) {
|
if (numec != 0) {
|
||||||
cee = c->old_economy;
|
const CompanyEconomyEntry *cee = c->old_economy;
|
||||||
total_delivered = 0;
|
OverflowSafeInt64 total_delivered = 0;
|
||||||
do {
|
do {
|
||||||
total_delivered += cee->delivered_cargo;
|
total_delivered += cee->delivered_cargo.GetSum<OverflowSafeInt64>();
|
||||||
} while (++cee, --numec);
|
} while (++cee, --numec);
|
||||||
|
|
||||||
_score_part[owner][SCORE_DELIVERED] = total_delivered;
|
_score_part[owner][SCORE_DELIVERED] = ClampToI32(total_delivered);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Generate score for variety of cargo */
|
/* Generate score for variety of cargo */
|
||||||
{
|
{
|
||||||
uint num = CountBits(c->cargo_types);
|
_score_part[owner][SCORE_CARGO] = c->old_economy->delivered_cargo.GetCount();
|
||||||
_score_part[owner][SCORE_CARGO] = num;
|
|
||||||
if (update) c->cargo_types = 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Generate score for company's money */
|
/* Generate score for company's money */
|
||||||
|
@ -1007,8 +1001,7 @@ static Money DeliverGoods(int num_pieces, CargoID cargo_type, StationID dest, Ti
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Update company statistics */
|
/* Update company statistics */
|
||||||
company->cur_economy.delivered_cargo += accepted;
|
company->cur_economy.delivered_cargo[cargo_type] += accepted;
|
||||||
if (accepted > 0) SetBit(company->cargo_types, cargo_type);
|
|
||||||
|
|
||||||
/* Increase town's counter for town effects */
|
/* Increase town's counter for town effects */
|
||||||
const CargoSpec *cs = CargoSpec::Get(cargo_type);
|
const CargoSpec *cs = CargoSpec::Get(cargo_type);
|
||||||
|
|
|
@ -717,7 +717,7 @@ struct DeliveredCargoGraphWindow : BaseGraphWindow {
|
||||||
|
|
||||||
virtual OverflowSafeInt64 GetGraphData(const Company *c, int j)
|
virtual OverflowSafeInt64 GetGraphData(const Company *c, int j)
|
||||||
{
|
{
|
||||||
return c->old_economy[j].delivered_cargo;
|
return c->old_economy[j].delivered_cargo.GetSum<OverflowSafeInt64>();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -412,13 +412,13 @@ NetworkRecvStatus ServerNetworkAdminSocketHandler::SendCompanyEconomy()
|
||||||
p->Send_uint64(company->money);
|
p->Send_uint64(company->money);
|
||||||
p->Send_uint64(company->current_loan);
|
p->Send_uint64(company->current_loan);
|
||||||
p->Send_uint64(income);
|
p->Send_uint64(income);
|
||||||
p->Send_uint16(company->cur_economy.delivered_cargo);
|
p->Send_uint16(min(UINT16_MAX, company->cur_economy.delivered_cargo.GetSum<OverflowSafeInt64>()));
|
||||||
|
|
||||||
/* Send stats for the last 2 quarters. */
|
/* Send stats for the last 2 quarters. */
|
||||||
for (uint i = 0; i < 2; i++) {
|
for (uint i = 0; i < 2; i++) {
|
||||||
p->Send_uint64(company->old_economy[i].company_value);
|
p->Send_uint64(company->old_economy[i].company_value);
|
||||||
p->Send_uint16(company->old_economy[i].performance_history);
|
p->Send_uint16(company->old_economy[i].performance_history);
|
||||||
p->Send_uint16(company->old_economy[i].delivered_cargo);
|
p->Send_uint16(min(UINT16_MAX, company->old_economy[i].delivered_cargo.GetSum<OverflowSafeInt64>()));
|
||||||
}
|
}
|
||||||
|
|
||||||
this->SendPacket(p);
|
this->SendPacket(p);
|
||||||
|
|
|
@ -252,8 +252,8 @@ static const SaveLoad _company_desc[] = {
|
||||||
SLE_CONDVAR(CompanyProperties, avail_railtypes, SLE_UINT8, 0, 57),
|
SLE_CONDVAR(CompanyProperties, avail_railtypes, SLE_UINT8, 0, 57),
|
||||||
SLE_VAR(CompanyProperties, block_preview, SLE_UINT8),
|
SLE_VAR(CompanyProperties, block_preview, SLE_UINT8),
|
||||||
|
|
||||||
SLE_CONDVAR(CompanyProperties, cargo_types, SLE_FILE_U16 | SLE_VAR_U32, 0, 93),
|
SLE_CONDNULL(2, 0, 93), ///< cargo_types
|
||||||
SLE_CONDVAR(CompanyProperties, cargo_types, SLE_UINT32, 94, SL_MAX_VERSION),
|
SLE_CONDNULL(4, 94, 169), ///< cargo_types
|
||||||
SLE_CONDVAR(CompanyProperties, location_of_HQ, SLE_FILE_U16 | SLE_VAR_U32, 0, 5),
|
SLE_CONDVAR(CompanyProperties, location_of_HQ, SLE_FILE_U16 | SLE_VAR_U32, 0, 5),
|
||||||
SLE_CONDVAR(CompanyProperties, location_of_HQ, SLE_UINT32, 6, SL_MAX_VERSION),
|
SLE_CONDVAR(CompanyProperties, location_of_HQ, SLE_UINT32, 6, SL_MAX_VERSION),
|
||||||
SLE_CONDVAR(CompanyProperties, last_build_coordinate, SLE_FILE_U16 | SLE_VAR_U32, 0, 5),
|
SLE_CONDVAR(CompanyProperties, last_build_coordinate, SLE_FILE_U16 | SLE_VAR_U32, 0, 5),
|
||||||
|
@ -338,7 +338,8 @@ static const SaveLoad _company_economy_desc[] = {
|
||||||
SLE_CONDVAR(CompanyEconomyEntry, company_value, SLE_FILE_I32 | SLE_VAR_I64, 0, 1),
|
SLE_CONDVAR(CompanyEconomyEntry, company_value, SLE_FILE_I32 | SLE_VAR_I64, 0, 1),
|
||||||
SLE_CONDVAR(CompanyEconomyEntry, company_value, SLE_INT64, 2, SL_MAX_VERSION),
|
SLE_CONDVAR(CompanyEconomyEntry, company_value, SLE_INT64, 2, SL_MAX_VERSION),
|
||||||
|
|
||||||
SLE_VAR(CompanyEconomyEntry, delivered_cargo, SLE_INT32),
|
SLE_CONDVAR(CompanyEconomyEntry, delivered_cargo[NUM_CARGO - 1], SLE_INT32, 0, 169),
|
||||||
|
SLE_CONDARR(CompanyEconomyEntry, delivered_cargo, SLE_UINT32, NUM_CARGO, 170, SL_MAX_VERSION),
|
||||||
SLE_VAR(CompanyEconomyEntry, performance_history, SLE_INT32),
|
SLE_VAR(CompanyEconomyEntry, performance_history, SLE_INT32),
|
||||||
|
|
||||||
SLE_END()
|
SLE_END()
|
||||||
|
|
|
@ -887,7 +887,7 @@ static bool LoadOldCompanyYearly(LoadgameState *ls, int num)
|
||||||
static const OldChunks _company_economy_chunk[] = {
|
static const OldChunks _company_economy_chunk[] = {
|
||||||
OCL_SVAR( OC_FILE_I32 | OC_VAR_I64, CompanyEconomyEntry, income ),
|
OCL_SVAR( OC_FILE_I32 | OC_VAR_I64, CompanyEconomyEntry, income ),
|
||||||
OCL_SVAR( OC_FILE_I32 | OC_VAR_I64, CompanyEconomyEntry, expenses ),
|
OCL_SVAR( OC_FILE_I32 | OC_VAR_I64, CompanyEconomyEntry, expenses ),
|
||||||
OCL_SVAR( OC_INT32, CompanyEconomyEntry, delivered_cargo ),
|
OCL_SVAR( OC_INT32, CompanyEconomyEntry, delivered_cargo[NUM_CARGO - 1] ),
|
||||||
OCL_SVAR( OC_INT32, CompanyEconomyEntry, performance_history ),
|
OCL_SVAR( OC_INT32, CompanyEconomyEntry, performance_history ),
|
||||||
OCL_SVAR( OC_TTD | OC_FILE_I32 | OC_VAR_I64, CompanyEconomyEntry, company_value ),
|
OCL_SVAR( OC_TTD | OC_FILE_I32 | OC_VAR_I64, CompanyEconomyEntry, company_value ),
|
||||||
|
|
||||||
|
@ -931,8 +931,8 @@ static const OldChunks _company_chunk[] = {
|
||||||
OCL_SVAR( OC_FILE_U32 | OC_VAR_I64, Company, bankrupt_value ),
|
OCL_SVAR( OC_FILE_U32 | OC_VAR_I64, Company, bankrupt_value ),
|
||||||
OCL_SVAR( OC_UINT16, Company, bankrupt_timeout ),
|
OCL_SVAR( OC_UINT16, Company, bankrupt_timeout ),
|
||||||
|
|
||||||
OCL_SVAR( OC_TTD | OC_UINT32, Company, cargo_types ),
|
OCL_CNULL( OC_TTD, 4 ), // cargo_types
|
||||||
OCL_SVAR( OC_TTO | OC_FILE_U16 | OC_VAR_U32, Company, cargo_types ),
|
OCL_CNULL( OC_TTO, 2 ), // cargo_types
|
||||||
|
|
||||||
OCL_CHUNK( 3, LoadOldCompanyYearly ),
|
OCL_CHUNK( 3, LoadOldCompanyYearly ),
|
||||||
OCL_CHUNK( 1, LoadOldCompanyEconomy ),
|
OCL_CHUNK( 1, LoadOldCompanyEconomy ),
|
||||||
|
|
|
@ -233,8 +233,9 @@
|
||||||
* 167 23504
|
* 167 23504
|
||||||
* 168 23637
|
* 168 23637
|
||||||
* 169 23816
|
* 169 23816
|
||||||
|
* 170 23826
|
||||||
*/
|
*/
|
||||||
extern const uint16 SAVEGAME_VERSION = 169; ///< Current savegame version of OpenTTD.
|
extern const uint16 SAVEGAME_VERSION = 170; ///< Current savegame version of OpenTTD.
|
||||||
|
|
||||||
SavegameType _savegame_type; ///< type of savegame we are loading
|
SavegameType _savegame_type; ///< type of savegame we are loading
|
||||||
|
|
||||||
|
|
|
@ -138,9 +138,9 @@
|
||||||
if (quarter > EARLIEST_QUARTER) return -1;
|
if (quarter > EARLIEST_QUARTER) return -1;
|
||||||
|
|
||||||
if (quarter == CURRENT_QUARTER) {
|
if (quarter == CURRENT_QUARTER) {
|
||||||
return ::Company::Get((::CompanyID)company)->cur_economy.delivered_cargo;
|
return ::Company::Get((::CompanyID)company)->cur_economy.delivered_cargo.GetSum<OverflowSafeInt<int32, INT32_MAX, INT32_MIN> >();
|
||||||
}
|
}
|
||||||
return ::Company::Get((::CompanyID)company)->old_economy[quarter - 1].delivered_cargo;
|
return ::Company::Get((::CompanyID)company)->old_economy[quarter - 1].delivered_cargo.GetSum<OverflowSafeInt<int32, INT32_MAX, INT32_MIN> >();
|
||||||
}
|
}
|
||||||
|
|
||||||
/* static */ int32 ScriptCompany::GetQuarterlyPerformanceRating(ScriptCompany::CompanyID company, uint32 quarter)
|
/* static */ int32 ScriptCompany::GetQuarterlyPerformanceRating(ScriptCompany::CompanyID company, uint32 quarter)
|
||||||
|
|
Loading…
Reference in New Issue