public ServerView(Server server)
{
this.Paint += new PaintEventHandler(ServerView_Paint);
Dictionary<uint, Log> serverEnforcementLogs = new Dictionary<uint, Log>();
Dictionary<uint, Log> serverAdvancementLogs = new Dictionary<uint, Log>();
Dictionary<uint, Log> serverDeathLogs = new Dictionary<uint, Log>();
if (server == null)
{
server = MakeMegaServer();
serverEnforcementLogs = Logs.EnforcementAlerts;
serverAdvancementLogs = Logs.AdvancementAlerts;
serverDeathLogs = Logs.DeathAlerts;
this.Name = String.Format("All ALFA ({0} Characters, {1} DMs, {2} Alerts)", server.RecentCharacters.Count, server.RecentDMs.Count, serverEnforcementLogs.Count + serverAdvancementLogs.Count + serverDeathLogs.Count);
this.Text = this.Name;
}
else
{
foreach (Log log in Logs.EnforcementAlerts.Values)
{
if (log.ServerId == server.ServerId)
{
serverEnforcementLogs.Add(log.Id, log);
}
}
foreach (Log log in Logs.AdvancementAlerts.Values)
{
if (log.ServerId == server.ServerId)
{
serverAdvancementLogs.Add(log.Id, log);
}
}
foreach (Log log in Logs.DeathAlerts.Values)
{
if (log.ServerId == server.ServerId)
{
serverDeathLogs.Add(log.Id, log);
}
}
this.Name = String.Format("ALFA{0:000} ({1} Characters, {2} DMs, {3} Alerts)", server.ServerId, server.RecentCharacters.Count, server.RecentDMs.Count, serverEnforcementLogs.Count + serverAdvancementLogs.Count + serverDeathLogs.Count);
this.Text = this.Name;
}
savedServer = server;
characterListLabel.Text = "Characters Played in the Last 30 Days";
characterListLabel.Size = characterListLabel.PreferredSize;
characterListLabel.Location = new Point(0, 0);
characterList.View = View.Details;
dmList.View = View.Details;
enforcementList.View = View.Details;
advancementList.View = View.Details;
deathList.View = View.Details;
characterList.FullRowSelect = true;
dmList.FullRowSelect = true;
enforcementList.FullRowSelect = true;
advancementList.FullRowSelect = true;
deathList.FullRowSelect = true;
characterList.DoubleClick += DoubleClickCharacterList;
dmList.DoubleClick += DoubleClickDMList;
enforcementList.DoubleClick += DoubleClickEnforcementList;
advancementList.DoubleClick += DoubleClickAdvancementList;
deathList.DoubleClick += DoubleClickDeathList;
characterList.ColumnClick += ColumnSort;
dmList.ColumnClick += ColumnSort;
enforcementList.ColumnClick += ColumnSort;
advancementList.ColumnClick += ColumnSort;
deathList.ColumnClick += ColumnSort;
characterList.Width = 550;
characterList.Height = 440;
characterList.Columns.Add("Character");
characterList.Columns.Add("Player");
characterList.Columns.Add("Class");
characterList.Columns.Add("DMtime");
characterList.Columns.Add("Alerts");
characterList.Location = new Point(0, characterListLabel.Location.Y + characterListLabel.Height);
foreach (Character currentChar in server.RecentCharacters)
{
if (currentChar.IsPlayable == false)
{
continue;
}
if ((currentChar.Status & 0x001) == 0x001) // dead
{
continue;
}
string charClass = PlayerDetails.ClassToAbbreviation(currentChar.Class1) + currentChar.Level1;
if (currentChar.Class2 < 255)
{
charClass += "/" + PlayerDetails.ClassToAbbreviation(currentChar.Class2) + currentChar.Level2;
}
if (currentChar.Class3 < 255)
{
charClass += "/" + PlayerDetails.ClassToAbbreviation(currentChar.Class3) + currentChar.Level3;
}
string alerts = "";
WealthLevel currentWeath = InfoGather.GetWealthLevel(currentChar);
if (currentWeath == WealthLevel.VeryPoor)
{
alerts += "Poor!";
}
else if (currentWeath == WealthLevel.VeryRich)
{
alerts += "Rich!";
}
else if (currentWeath == WealthLevel.Cutoff)
{
alerts += "CUTOFF WEALTH!";
}
string aliases = "";
try
{
foreach (string alias in Players.ListByPlayerId[currentChar.PlayerId].CommunityIds)
{
if (aliases == "")
{
aliases = alias;
}
else
{
aliases += "/ " + alias;
}
}
}
catch
{
aliases = "Unknown player";
}
characterList.Items.Add(new ListViewItem(new string[] { currentChar.Name, aliases, charClass, String.Format("{0:N1}", currentChar.DMTime), alerts, currentChar.Id.ToString() }));
}
characterList.Columns[0].AutoResize(ColumnHeaderAutoResizeStyle.ColumnContent);
characterList.Columns[1].Width = 150;
characterList.Columns[2].AutoResize(ColumnHeaderAutoResizeStyle.ColumnContent);
characterList.Columns[3].AutoResize(ColumnHeaderAutoResizeStyle.ColumnContent);
characterList.Columns[4].AutoResize(ColumnHeaderAutoResizeStyle.ColumnContent);
dmListLabel.Text = "DMs Logging in During the Last 30 Days";
dmListLabel.Size = dmListLabel.PreferredSize;
dmListLabel.Location = new Point(0, characterList.Location.Y + characterList.Height + 10);
dmList.Width = characterList.Width;
dmList.Height = 250;
dmList.Location = new Point(0, dmListLabel.Location.Y + dmListLabel.Height);
dmList.Columns.Add("DM Community Ids");
dmList.Columns[0].Width = 400;
foreach (Player dm in server.RecentDMs)
{
string name = "";
foreach (string gsid in dm.CommunityIds)
{
if (name == "")
{
name = gsid;
}
else
{
name += "/ " + gsid;
}
}
dmList.Items.Add(new ListViewItem(new string[] { name, dm.playerIds[0].ToString() }));
}
dmList.Columns[0].AutoResize(ColumnHeaderAutoResizeStyle.ColumnContent);
enforcementListLabel.Text = "Enforcement Alerts";
enforcementListLabel.Size = enforcementListLabel.PreferredSize;
enforcementListLabel.Location = new Point(characterList.Width + 10, 0);
enforcementList.Width = 340;
enforcementList.Height = 200;
enforcementList.Location = new Point(characterList.Width + 10, enforcementListLabel.Location.Y + enforcementListLabel.Height);
enforcementList.Columns.Add("Character");
enforcementList.Columns.Add("Time");
enforcementList.Columns.Add("Event");
foreach (Log log in serverEnforcementLogs.Values)
{
string character = "Unknown Character";
if (log.CharacterId > 0 && Characters.List.Keys.Contains(log.CharacterId)) character = Characters.List[log.CharacterId].Name;
enforcementList.Items.Add(new ListViewItem(new string[] { character, String.Format("{0}/{1}/{2}", log.Time.Year, log.Time.Month, log.Time.Day), log.Event, log.Id.ToString() }));
}
enforcementList.Columns[0].AutoResize(ColumnHeaderAutoResizeStyle.ColumnContent);
enforcementList.Columns[1].AutoResize(ColumnHeaderAutoResizeStyle.ColumnContent);
enforcementList.Columns[2].AutoResize(ColumnHeaderAutoResizeStyle.ColumnContent);
advancementListLabel.Text = "Advancement Alerts";
advancementListLabel.Size = advancementListLabel.PreferredSize;
advancementListLabel.Location = new Point(characterList.Width + 10, enforcementList.Location.Y + enforcementList.Height + 10);
advancementList.Width = 340;
advancementList.Height = 230;
advancementList.Location = new Point(characterList.Width + 10, advancementListLabel.Location.Y + advancementListLabel.Height);
advancementList.Columns.Add("Character");
advancementList.Columns.Add("Time");
advancementList.Columns.Add("Event");
foreach (Log log in serverAdvancementLogs.Values)
{
string character = "Unknown Character";
if(log.CharacterId > 0 && Characters.List.Keys.Contains(log.CharacterId)) character = Characters.List[log.CharacterId].Name;
advancementList.Items.Add(new ListViewItem(new string[] { character, String.Format("{0}/{1}/{2}", log.Time.Year, log.Time.Month, log.Time.Day), log.Event, log.Id.ToString() }));
}
advancementList.Columns[0].AutoResize(ColumnHeaderAutoResizeStyle.ColumnContent);
advancementList.Columns[1].AutoResize(ColumnHeaderAutoResizeStyle.ColumnContent);
advancementList.Columns[2].AutoResize(ColumnHeaderAutoResizeStyle.ColumnContent);
deathListLabel.Text = "Death Alerts";
deathListLabel.Size = deathListLabel.PreferredSize;
deathListLabel.Location = new Point(characterList.Width + 10, advancementList.Location.Y + advancementList.Height + 10);
deathList.Width = 340;
deathList.Height = 230;
deathList.Location = new Point(characterList.Width + 10, deathListLabel.Location.Y + deathListLabel.Height);
deathList.Columns.Add("Character");
deathList.Columns.Add("Time");
deathList.Columns.Add("Event");
foreach (Log log in serverDeathLogs.Values)
{
string character = "Unknown Character";
try { if (log.CharacterId > 0) character = Characters.List[log.CharacterId].Name; }
catch { }
deathList.Items.Add(new ListViewItem(new string[] { character, String.Format("{0}/{1}/{2}", log.Time.Year, log.Time.Month, log.Time.Day), log.Event, log.Id.ToString() }));
}
deathList.Columns[0].AutoResize(ColumnHeaderAutoResizeStyle.ColumnContent);
deathList.Columns[1].AutoResize(ColumnHeaderAutoResizeStyle.ColumnContent);
deathList.Columns[2].AutoResize(ColumnHeaderAutoResizeStyle.ColumnContent);
alignmentPieLabel.Text = "Wealth Distribution";
alignmentPieLabel.Size = alignmentPieLabel.PreferredSize;
alignmentPieLabel.Location = new Point(enforcementList.Location.X + enforcementList.Width + 10, 0);
alignmentPieLabel.Click += PieLabel_Click;
alignmentPie.Size = new Size(350, 350);
alignmentPie.Location = new Point(alignmentPieLabel.Location.X, alignmentPieLabel.Location.Y + alignmentPieLabel.Height);
dmTimePieLabel.Text = "DM Coverage";
dmTimePieLabel.Size = dmTimePieLabel.PreferredSize;
dmTimePieLabel.Location = new Point(alignmentPie.Location.X, alignmentPie.Location.Y + alignmentPie.Height + 10);
dmTimePieLabel.Click += PieLabel_Click;
dmTimePie.Size = new Size(350, 350);
dmTimePie.Location = new Point(alignmentPieLabel.Location.X, dmTimePieLabel.Location.Y + dmTimePieLabel.Height);
legendLabel.Text = "Very Poor\n\nPoor\n\nTarget\n\nRich\n\nVery Rich\n\nCutoff Wealth";
legendLabel.Size = legendLabel.PreferredSize;
legendLabel.Location = new Point(alignmentPie.Location.X + alignmentPie.Width + 50, alignmentPieLabel.Location.Y + alignmentPieLabel.Height);
legendLabelTwo.Text = "DMed\n\nUn-DMed";
legendLabelTwo.Size = legendLabelTwo.PreferredSize;
legendLabelTwo.Location = new Point(dmTimePie.Location.X + dmTimePie.Width + 50, dmTimePieLabel.Location.Y + dmTimePieLabel.Height);
this.Width = dmTimePie.Width + dmTimePie.Location.X + 210;
this.Height = dmTimePie.Height + dmTimePie.Location.Y + 30;
this.Controls.Add(characterListLabel);
this.Controls.Add(characterList);
this.Controls.Add(dmListLabel);
this.Controls.Add(dmList);
this.Controls.Add(enforcementListLabel);
this.Controls.Add(enforcementList);
this.Controls.Add(advancementListLabel);
this.Controls.Add(advancementList);
this.Controls.Add(deathListLabel);
this.Controls.Add(deathList);
this.Controls.Add(alignmentPieLabel);
this.Controls.Add(dmTimePieLabel);
this.Controls.Add(legendLabel);
this.Controls.Add(legendLabelTwo);
}