MCPcopy Create free account
hub / github.com/OpenRCT2/OpenRCT2 / AddPlayer

Method AddPlayer

src/openrct2/network/NetworkBase.cpp:2174–2240  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

2172 }
2173
2174 Player* NetworkBase::AddPlayer(const std::string& name, const std::string& keyhash)
2175 {
2176 Player* addedplayer = nullptr;
2177 int32_t newid = -1;
2178 if (GetMode() == Mode::server)
2179 {
2180 // Find first unused player id
2181 for (int32_t id = 0; id < 255; id++)
2182 {
2183 if (std::find_if(
2184 player_list.begin(), player_list.end(),
2185 [&id](std::unique_ptr<Player> const& player) { return player->id == id; })
2186 == player_list.end())
2187 {
2188 newid = id;
2189 break;
2190 }
2191 }
2192 }
2193 else
2194 {
2195 newid = 0;
2196 }
2197 if (newid != -1)
2198 {
2199 std::unique_ptr<Player> player;
2200 if (GetMode() == Mode::server)
2201 {
2202 // Load keys host may have added manually
2203 _userManager.load();
2204
2205 // Check if the key is registered
2206 const User* networkUser = _userManager.getUserByHash(keyhash);
2207
2208 player = std::make_unique<Player>();
2209 player->id = newid;
2210 player->keyHash = keyhash;
2211 if (networkUser == nullptr)
2212 {
2213 player->group = GetDefaultGroup();
2214 if (!name.empty())
2215 {
2216 player->setName(MakePlayerNameUnique(String::trim(name)));
2217 }
2218 }
2219 else
2220 {
2221 player->group = networkUser->groupId.has_value() ? *networkUser->groupId : GetDefaultGroup();
2222 player->setName(networkUser->name);
2223 }
2224
2225 // Send new player list.
2226 _playerListInvalidated = true;
2227 }
2228 else
2229 {
2230 player = std::make_unique<Player>();
2231 player->id = newid;

Callers

nothing calls this directly

Calls 11

GetModeFunction · 0.85
GetDefaultGroupFunction · 0.85
trimFunction · 0.85
getUserByHashMethod · 0.80
endMethod · 0.65
loadMethod · 0.65
getMethod · 0.65
beginMethod · 0.45
emptyMethod · 0.45
setNameMethod · 0.45
push_backMethod · 0.45

Tested by

no test coverage detected