MCPcopy Create free account
hub / github.com/ddnet/ddnet / LoadPlayerData

Method LoadPlayerData

src/game/server/scoreworker.cpp:175–254  ·  view source on GitHub ↗

update stuff

Source from the content-addressed store, hash-verified

173
174// update stuff
175bool CScoreWorker::LoadPlayerData(IDbConnection *pSqlServer, const ISqlData *pGameData, char *pError, int ErrorSize)
176{
177 const auto *pData = dynamic_cast<const CSqlPlayerRequest *>(pGameData);
178 auto *pResult = dynamic_cast<CScorePlayerResult *>(pGameData->m_pResult.get());
179 pResult->SetVariant(CScorePlayerResult::PLAYER_INFO);
180
181 char aBuf[1024];
182 // get best race time
183 str_format(aBuf, sizeof(aBuf),
184 "SELECT"
185 " (SELECT Time FROM %s_race WHERE Map = ? AND Name = ? ORDER BY Time ASC LIMIT 1) AS minTime, "
186 " cp1, cp2, cp3, cp4, cp5, cp6, cp7, cp8, cp9, cp10, cp11, cp12, cp13, cp14, "
187 " cp15, cp16, cp17, cp18, cp19, cp20, cp21, cp22, cp23, cp24, cp25, "
188 " (cp1 + cp2 + cp3 + cp4 + cp5 + cp6 + cp7 + cp8 + cp9 + cp10 + cp11 + cp12 + cp13 + cp14 + "
189 " cp15 + cp16 + cp17 + cp18 + cp19 + cp20 + cp21 + cp22 + cp23 + cp24 + cp25 > 0) AS hasCP, Time "
190 "FROM %s_race "
191 "WHERE Map = ? AND Name = ? "
192 "ORDER BY hasCP DESC, Time ASC "
193 "LIMIT 1",
194 pSqlServer->GetPrefix(), pSqlServer->GetPrefix());
195 if(!pSqlServer->PrepareStatement(aBuf, pError, ErrorSize))
196 {
197 return false;
198 }
199
200 const char *pPlayer = pData->m_aName[0] != '\0' ? pData->m_aName : pData->m_aRequestingPlayer;
201 pSqlServer->BindString(1, pData->m_aMap);
202 pSqlServer->BindString(2, pData->m_aRequestingPlayer);
203 pSqlServer->BindString(3, pData->m_aMap);
204 pSqlServer->BindString(4, pPlayer);
205
206 bool End;
207 if(!pSqlServer->Step(&End, pError, ErrorSize))
208 {
209 return false;
210 }
211 if(!End)
212 {
213 if(!pSqlServer->IsNull(1))
214 {
215 // get the best time
216 float Time = pSqlServer->GetFloat(1);
217 pResult->m_Data.m_Info.m_Time = Time;
218 }
219
220 for(int i = 0; i < NUM_CHECKPOINTS; i++)
221 {
222 pResult->m_Data.m_Info.m_aTimeCp[i] = pSqlServer->GetFloat(i + 2);
223 }
224 }
225
226 // birthday check
227 str_format(aBuf, sizeof(aBuf),
228 "SELECT CURRENT_TIMESTAMP AS Current, MIN(Timestamp) AS Stamp "
229 "FROM %s_race "
230 "WHERE Name = ?",
231 pSqlServer->GetPrefix());
232 if(!pSqlServer->PrepareStatement(aBuf, pError, ErrorSize))

Callers

nothing calls this directly

Calls 10

str_formatFunction · 0.85
getMethod · 0.80
SetVariantMethod · 0.80
GetPrefixMethod · 0.80
PrepareStatementMethod · 0.45
BindStringMethod · 0.45
StepMethod · 0.45
IsNullMethod · 0.45
GetFloatMethod · 0.45
GetStringMethod · 0.45

Tested by

no test coverage detected