@@ -955,7 +955,7 @@ void CSquadMgr::GetKPData(PlayerInfo_t& aPlayer)
955955
956956 {
957957 const std::lock_guard<std::mutex> lock (this ->KPMutex );
958- this ->KPData [ aAccountName] = kpmeInfo;
958+ this ->KPData . emplace ( aAccountName, kpmeInfo) ;
959959 }
960960 }
961961 catch (json::parse_error& exc)
@@ -970,11 +970,22 @@ void CSquadMgr::OnGroupMemberJoin(RTAPI::GroupMember* aGroupMember)
970970{
971971 const std::lock_guard<std::mutex> lock (this ->Mutex );
972972
973- auto & player = this ->Players [aGroupMember->AccountName ];
974- player.Member = *aGroupMember;
975- player.HasLeft = 0 ; /* Reset in case the player rejoined without removal. */
973+ auto plIt = this ->Players .find (aGroupMember->AccountName );
976974
977- GetKPData (player);
975+ if (plIt != this ->Players .end ())
976+ {
977+ plIt->second .Member = *aGroupMember;
978+ plIt->second .HasLeft = 0 ;
979+
980+ GetKPData (plIt->second );
981+ }
982+ else
983+ {
984+ auto [newIt, inserted] = this ->Players .emplace (aGroupMember->AccountName , PlayerInfo_t{ *aGroupMember });
985+ // HasLeft is null initialized.
986+
987+ GetKPData (newIt->second );
988+ }
978989}
979990void CSquadMgr::OnGroupMemberLeave (RTAPI ::GroupMember* aGroupMember)
980991{
@@ -994,20 +1005,31 @@ void CSquadMgr::OnGroupMemberLeave(RTAPI::GroupMember* aGroupMember)
9941005 auto it = this ->Players .find (aGroupMember->AccountName );
9951006 if (it != this ->Players .end ())
9961007 {
997- this -> Players [aGroupMember-> AccountName ] .HasLeft = Time::GetTimestamp ();
1008+ it-> second .HasLeft = Time::GetTimestamp ();
9981009 }
9991010 }
10001011}
10011012void CSquadMgr::OnGroupMemberUpdate (RTAPI ::GroupMember* aGroupMember)
10021013{
1014+ /* Code is identical to Join. */
10031015 const std::lock_guard<std::mutex> lock (this ->Mutex );
10041016
1005- auto & player = this ->Players [ aGroupMember->AccountName ] ;
1017+ auto plIt = this ->Players . find ( aGroupMember->AccountName ) ;
10061018
1007- player.Member = *aGroupMember;
1008- player.HasLeft = 0 ; /* Reset in case the player rejoined without removal. */
1019+ if (plIt != this ->Players .end ())
1020+ {
1021+ plIt->second .Member = *aGroupMember;
1022+ plIt->second .HasLeft = 0 ;
1023+
1024+ GetKPData (plIt->second );
1025+ }
1026+ else
1027+ {
1028+ auto [newIt, inserted] = this ->Players .emplace (aGroupMember->AccountName , PlayerInfo_t{*aGroupMember});
1029+ // HasLeft is null initialized.
10091030
1010- GetKPData (player);
1031+ GetKPData (newIt->second );
1032+ }
10111033}
10121034
10131035void CSquadMgr::OnAgentJoin (AgentUpdate* aAgentUpdate)
0 commit comments