private void UpdatePlayerModel(String name, int team, int squad, String eaGUID, int score, int kills, int deaths, int rank, int role)
{
bool known = false;
if (!IsKnownPlayer(name)) {
switch (fPluginState) {
case PluginState.JustEnabled:
case PluginState.Reconnected:
String state = (fPluginState == PluginState.JustEnabled) ? "JustEnabled" : "Reconnected";
if (team != 0) {
known = AddNewPlayer(name, team);
String verb = (known) ? "^6renewing^0" : "^4adding^0";
DebugWrite(state + " state, " + verb + " new player: ^b" + name, 4);
} else {
DebugWrite(state + " state, unassigned player: ^b" + name, 4);
if (!fUnassigned.Contains(name)) fUnassigned.Add(name);
return;
}
break;
case PluginState.Active:
if (role == ROLE_PLAYER) {
DebugWrite("Update waiting for ^b" + name + "^n to be assigned a team", 4);
if (!fUnassigned.Contains(name)) fUnassigned.Add(name);
return;
} else {
String sRole = (role == ROLE_SPECTATOR) ? "spectator" : "commander";
DebugWrite("Update adding " + sRole + " ^b" + name, 4);
AddNewPlayer(name, team); // add commanders and spectators
}
break;
case PluginState.Error:
DebugWrite("Error state, adding new player: ^b" + name, 4);
AddNewPlayer(name, team);
break;
default:
return;
}
}
int unTeam = -2;
PlayerModel m = null;
lock (fKnownPlayers) {
if (!fKnownPlayers.ContainsKey(name)) {
ConsoleDebug("UpdatePlayerModel: player ^b" + name + "^n not in master table!");
return;
}
m = fKnownPlayers[name];
}
if (m.Team != team) {
unTeam = m.Team;
m.Team = team;
}
m.Squad = squad;
m.EAGUID = eaGUID;
m.ScoreRound = score;
m.KillsRound = kills;
m.DeathsRound = deaths;
m.Rank = rank;
m.Role = role;
if (m.Role != ROLE_PLAYER)
DebugWrite("UpdatePlayerModel: " + name + " has role = " + m.Role, 8);
m.LastSeenTimestamp = DateTime.Now;
// Computed
m.KDRRound = m.KillsRound / Math.Max(1, m.DeathsRound);
double mins = (m.FirstSpawnTimestamp == DateTime.MinValue) ? 1 : Math.Max(1, DateTime.Now.Subtract(m.FirstSpawnTimestamp).TotalMinutes);
m.SPMRound = m.ScoreRound / mins;
m.KPMRound = m.KillsRound / mins;
// Accumulated
// TBD
// Friends
UpdatePlayerFriends(m); // Overkill, but insures that Friendex is always updated
if (!EnableLoggingOnlyMode && unTeam != -2 && !fPendingTeamChange.ContainsKey(name)) {
ConsoleDebug("UpdatePlayerModel:^b" + name + "^n has team " + unTeam + " but update says " + team + "!");
}
}