Skip to content

Commit aa8af14

Browse files
committed
- Fixed a bug where stats could be interpreted correctly resulting in high ranks being granted early
1 parent c7c885d commit aa8af14

4 files changed

Lines changed: 36 additions & 18 deletions

File tree

GeneralsMD/Code/GameEngine/Include/GameNetwork/GeneralsOnline/OnlineServices_StatsInterface.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -438,6 +438,7 @@ class NGMP_OnlineServices_StatsInterface
438438
{
439439
public:
440440
NGMP_OnlineServices_StatsInterface();
441+
~NGMP_OnlineServices_StatsInterface();
441442

442443
void GetGlobalStats(std::function<void(GlobalStats)> cb);
443444

GeneralsMD/Code/GameEngine/Source/GameClient/GUI/GUICallbacks/Menus/PopupPlayerInfo.cpp

Lines changed: 0 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -246,22 +246,6 @@ void GetAdditionalDisconnectsFromUserFile(PSPlayerStats *stats)
246246
// default values
247247
RankPoints::RankPoints(void)
248248
{
249-
NGMP_OnlineServices_StatsInterface* statsInterface = NGMP_OnlineServicesManager::GetInterface<NGMP_OnlineServices_StatsInterface>();
250-
251-
if (statsInterface != nullptr)
252-
{
253-
m_ranks[RANK_PRIVATE] = 0;
254-
m_ranks[RANK_CORPORAL] = statsInterface->getPointsForRank(RANK_CORPORAL); // 5
255-
m_ranks[RANK_SERGEANT] = statsInterface->getPointsForRank(RANK_SERGEANT); // 10
256-
m_ranks[RANK_LIEUTENANT] = statsInterface->getPointsForRank(RANK_LIEUTENANT); // 20
257-
m_ranks[RANK_CAPTAIN] = statsInterface->getPointsForRank(RANK_CAPTAIN); // 50
258-
m_ranks[RANK_MAJOR] = statsInterface->getPointsForRank(RANK_MAJOR); // 100
259-
m_ranks[RANK_COLONEL] = statsInterface->getPointsForRank(RANK_COLONEL); // 200
260-
m_ranks[RANK_BRIGADIER_GENERAL] = statsInterface->getPointsForRank(RANK_BRIGADIER_GENERAL); // 500
261-
m_ranks[RANK_GENERAL] = statsInterface->getPointsForRank(RANK_GENERAL); // 1000
262-
m_ranks[RANK_COMMANDER_IN_CHIEF] = statsInterface->getPointsForRank(RANK_COMMANDER_IN_CHIEF); // 2000
263-
}
264-
265249
m_winMultiplier = 3.0f;
266250
m_lostMultiplier = 0.0f;
267251
m_hourSpentOnlineMultiplier = 1.0f;

GeneralsMD/Code/GameEngine/Source/GameNetwork/GeneralsOnline/OnlineServices_RoomsInterface.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -387,7 +387,7 @@ void WebSocket::Tick()
387387
try
388388
{
389389
// null terminate buffer
390-
m_vecWSPartialBuffer[m_vecWSPartialBuffer.size()] = '\0';
390+
m_vecWSPartialBuffer.push_back('\0');
391391

392392
// process it
393393
nlohmann::json jsonObject;

GeneralsMD/Code/GameEngine/Source/GameNetwork/GeneralsOnline/OnlineServices_StatsInterface.cpp

Lines changed: 34 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,38 @@ NGMP_OnlineServices_StatsInterface::NGMP_OnlineServices_StatsInterface()
1212
{
1313
TheRankPointValues = NEW RankPoints;
1414

15+
// populate ranks
16+
// TODO_NGMP: Perhaps get this from the service?
17+
TheRankPointValues->m_ranks[RANK_PRIVATE] = 0;
18+
TheRankPointValues->m_ranks[RANK_CORPORAL] = getPointsForRank(RANK_CORPORAL); // 5
19+
TheRankPointValues->m_ranks[RANK_SERGEANT] = getPointsForRank(RANK_SERGEANT); // 10
20+
TheRankPointValues->m_ranks[RANK_LIEUTENANT] = getPointsForRank(RANK_LIEUTENANT); // 20
21+
TheRankPointValues->m_ranks[RANK_CAPTAIN] = getPointsForRank(RANK_CAPTAIN); // 50
22+
TheRankPointValues->m_ranks[RANK_MAJOR] = getPointsForRank(RANK_MAJOR); // 100
23+
TheRankPointValues->m_ranks[RANK_COLONEL] = getPointsForRank(RANK_COLONEL); // 200
24+
TheRankPointValues->m_ranks[RANK_BRIGADIER_GENERAL] = getPointsForRank(RANK_BRIGADIER_GENERAL); // 500
25+
TheRankPointValues->m_ranks[RANK_GENERAL] = getPointsForRank(RANK_GENERAL); // 1000
26+
TheRankPointValues->m_ranks[RANK_COMMANDER_IN_CHIEF] = getPointsForRank(RANK_COMMANDER_IN_CHIEF); // 2000
27+
1528
// TODO_NGMP: Better location
1629
TheLadderList = NEW LadderList;
1730
}
1831

32+
NGMP_OnlineServices_StatsInterface::~NGMP_OnlineServices_StatsInterface()
33+
{
34+
if (TheRankPointValues != nullptr)
35+
{
36+
delete TheRankPointValues;
37+
TheRankPointValues = nullptr;
38+
}
39+
40+
if (TheLadderList != nullptr)
41+
{
42+
delete TheLadderList;
43+
TheLadderList = nullptr;
44+
}
45+
}
46+
1947
void NGMP_OnlineServices_StatsInterface::GetGlobalStats(std::function<void(GlobalStats)> cb)
2048
{
2149
std::string strURI = NGMP_OnlineServicesManager::GetAPIEndpoint("GlobalStats");
@@ -169,9 +197,14 @@ void NGMP_OnlineServices_StatsInterface::findPlayerStatsByID(int64_t userID, std
169197
// cb
170198
cb(true, stats);
171199
}
200+
catch (nlohmann::json::exception& jsonException)
201+
{
202+
NetworkLog(ELogVerbosity::LOG_RELEASE, "Stats: Unparsable JSON 1: %s (%s)", strBody.c_str(), jsonException.what());
203+
cb(false, stats);
204+
}
172205
catch (...)
173206
{
174-
// cb
207+
NetworkLog(ELogVerbosity::LOG_RELEASE, "Stats: Unparsable JSON 2: %s", strBody.c_str());
175208
cb(false, stats);
176209
}
177210
});

0 commit comments

Comments
 (0)