| 307 | } |
| 308 | |
| 309 | void CScore::SaveTeam(int ClientId, const char *pCode, const char *pServer) |
| 310 | { |
| 311 | if(RateLimitPlayer(ClientId)) |
| 312 | return; |
| 313 | auto *pController = GameServer()->m_pController; |
| 314 | int Team = pController->Teams().m_Core.Team(ClientId); |
| 315 | if(pController->Teams().GetSaving(Team)) |
| 316 | { |
| 317 | GameServer()->SendChatTarget(ClientId, "Team save already in progress"); |
| 318 | return; |
| 319 | } |
| 320 | if(pController->Teams().IsPractice(Team)) |
| 321 | { |
| 322 | GameServer()->SendChatTarget(ClientId, "Team save disabled for teams in practice mode"); |
| 323 | return; |
| 324 | } |
| 325 | |
| 326 | auto SaveResult = std::make_shared<CScoreSaveResult>(ClientId, Server()->ClientName(ClientId), pServer); |
| 327 | SaveResult->m_SaveId = RandomUuid(); |
| 328 | ESaveResult Result = SaveResult->m_SavedTeam.Save(GameServer(), Team); |
| 329 | if(CSaveTeam::HandleSaveError(Result, ClientId, GameServer())) |
| 330 | return; |
| 331 | pController->Teams().SetSaving(Team, SaveResult); |
| 332 | |
| 333 | auto Tmp = std::make_unique<CSqlTeamSaveData>(SaveResult); |
| 334 | str_copy(Tmp->m_aCode, pCode, sizeof(Tmp->m_aCode)); |
| 335 | str_copy(Tmp->m_aMap, GameServer()->Map()->BaseName(), sizeof(Tmp->m_aMap)); |
| 336 | str_copy(Tmp->m_aServer, pServer, sizeof(Tmp->m_aServer)); |
| 337 | str_copy(Tmp->m_aClientName, this->Server()->ClientName(ClientId), sizeof(Tmp->m_aClientName)); |
| 338 | Tmp->m_aGeneratedCode[0] = '\0'; |
| 339 | GeneratePassphrase(Tmp->m_aGeneratedCode, sizeof(Tmp->m_aGeneratedCode)); |
| 340 | |
| 341 | pController->Teams().KillCharacterOrTeam(ClientId, Team); |
| 342 | |
| 343 | GameServer()->SendSaveCode( |
| 344 | Team, |
| 345 | SaveResult->m_SavedTeam.GetMembersCount(), |
| 346 | SAVESTATE_PENDING, |
| 347 | "", |
| 348 | SaveResult->m_aRequestingPlayer, |
| 349 | Tmp->m_aServer, |
| 350 | Tmp->m_aGeneratedCode, |
| 351 | Tmp->m_aCode); |
| 352 | |
| 353 | m_pPool->ExecuteWrite(CScoreWorker::SaveTeam, std::move(Tmp), "save team"); |
| 354 | } |
| 355 | |
| 356 | void CScore::LoadTeam(const char *pCode, int ClientId) |
| 357 | { |
no test coverage detected