/*
* Moded by AlphaDragon
* To display Player Vendors and Items that they are selling.
* Date: 5/30/2012
* Time: 7:32 AM
* Aditional code pulled from http://www.runuo.com/community/threads/is-there-a-complete-playervendor-search-command-available.481292/#post-3782245
*/
using System;
using System.IO;
using System.Text;
using Server;
using Server.Network;
using Server.Guilds;
using Server.Items;
using Server.Mobiles;
using Server.Accounting;
namespace Server.Misc
{
public class StatusPage : Timer
{
public static bool Enabled = true;
public static void Initialize()
{
if (Enabled)
new StatusPage().Start();
}
public StatusPage()
: base(TimeSpan.FromSeconds(5.0), TimeSpan.FromSeconds(60.0))
{
Priority = TimerPriority.FiveSeconds;
}
private static string Encode(string input)
{
StringBuilder sb = new StringBuilder(input);
sb.Replace("&", "&");
sb.Replace("<", "<");
sb.Replace(">", ">");
sb.Replace("\"", """);
sb.Replace("'", "'");
return sb.ToString();
}
protected override void OnTick()
{
if (!Directory.Exists("web"))
Directory.CreateDirectory("web");
using (StreamWriter op = new StreamWriter("web/status.html"))
{
op.WriteLine("<html>");
op.WriteLine(" <head>");
op.WriteLine(" <title>DragonKnights UO Server Status</title>");
op.WriteLine(" </head>");
op.WriteLine(" <body bgcolor=\"black\">");
op.WriteLine("<img src= http://aaaservices.homeip.net/UO/DragonKnights%20-%20logo.jpg <br> ");
op.WriteLine(" <h3><font color =\"gold\">UltimaOnline Server Status</font></h3>");
op.WriteLine(getTextString("Current Server Version #: ", "gold", true) + getTextString("7.0.12.0", "green", true));
op.WriteLine(getTextString("Status Page Last Updated: ", "gold", true) + getTextString(DateTime.Now.ToString(), "green", true));
op.WriteLine(getTextString("Total World Items: ", "gold", true) + getTextString(World.Items.Count.ToString(), "green", true));
op.WriteLine(getTextString("Total World Mobiles: ", "gold", true) + getTextString(World.Mobiles.Count.ToString(), "green", true));
op.WriteLine(getTextString("Total Online: ", "gold", true) + getTextString(NetState.Instances.Count.ToString(), "green", true));
op.WriteLine("<br>");
#region online client table
op.WriteLine("<font color=\"green\"> <table width=\"100%\">");
op.WriteLine(" <tr></font>");
op.WriteLine(" <td bgcolor=\"white\"><font color =\"black\"><b><img src= http://aaaservices.homeip.net/UO/OLW.png align=\"absmiddle\"> ONLINE PLAYERS:</b></font></td>");
op.WriteLine(" </tr>");
op.WriteLine(" </table>");
op.WriteLine("<font color=\"green\"> <table width=\"100%\">");
op.WriteLine(" <tr></font>");
op.WriteLine(" <td bgcolor=\"white\"><font color=\"black\"><img src= http://aaaservices.homeip.net/UO/OLW.png align=\"absmiddle\"> Name</font></td><td bgcolor=\"white\"><font color=\"black\">Location</font></td><td bgcolor=\"white\"><font color=\"black\">Kills</font></td><td bgcolor=\"white\"><font color=\"black\">Karma / Fame</font></td>");
op.WriteLine(" </tr>");
if (NetState.Instances.Count > 0)
{
#region list online players
foreach (NetState state in NetState.Instances)
{
Mobile m = state.Mobile;
if (m != null)
{
op.Write(" <tr><td><img src= http://aaaservices.homeip.net/UO/OLB.png align=\"absmiddle\"> ");
switch (m.AccessLevel)
{
case AccessLevel.Player:
op.Write(getTextString("Player", "FFFFFF", true));
break;
case AccessLevel.Counselor:
op.Write(getTextString("Counselor", "008000", true));
break;
case AccessLevel.GameMaster:
op.Write(getTextString("GameMaster", "FF0000", true));
break;
case AccessLevel.Seer:
op.Write(getTextString("Seer", "FF0000", true));
break;
case AccessLevel.Administrator:
op.Write(getTextString("Administrator", "FF0000", true));
break;
case AccessLevel.Developer:
op.Write(getTextString("Developer", "FF0000", true));
break;
case AccessLevel.Owner:
op.Write(getTextString("Owner", "0000FF", true));
break;
}
Guild g = m.Guild as Guild;
if (g != null)
{
op.Write(Encode(m.Name));
op.Write(" [ ");
string title = m.GuildTitle;
if (title != null)
title = title.Trim();
else
title = "";
if (title.Length > 0)
{
op.Write(Encode(title));
op.Write(", ");
}
op.Write(Encode(g.Abbreviation));
op.Write(" ] ");
}
else
{
op.Write(Encode(m.Name));
}
op.Write("</td>");
op.Write(getTextString(string.Format("{0}, {1}, {2} ({3})", m.X, m.Y, m.Z, m.Map), "008000", false, true));
op.Write(getTextString(string.Format("{0}", m.Kills), "FF0000", false, true));
op.Write(getTextString(string.Format("{0}/{1}", m.Karma, m.Fame), "800080", false, true));
op.WriteLine("</tr>");
}
}
#endregion list online players
}
else
{
op.Write(getTextString("Nobody but us chickens! =P", "red", true, true));
op.WriteLine("</tr>");
}
op.WriteLine(" </table>");
#endregion online client table
#region player vendors table
op.WriteLine("<br><br>");
op.WriteLine("<font color=\"green\"> <table width=\"100%\">");
op.WriteLine(" <tr></font>");
op.WriteLine(" <td bgcolor=\"white\"><font color =\"black\"><b><img src= http://aaaservices.homeip.net/UO/COEW.png align=\"absmiddle\"> PLAYER VENDOR SHOPS:</b></font></td>");
op.WriteLine(" </tr>");
op.WriteLine(" </table>");
op.WriteLine("<font color=\"green\"> <table width=\"100%\">");
op.WriteLine(" <tr></font>");
op.WriteLine(" <td bgcolor=\"white\"><font color=\"black\"><img src= http://aaaservices.homeip.net/UO/COEW.png align=\"absmiddle\"> Owners Name</font></td><td bgcolor=\"white\"><font color=\"black\">Shops Name</font></td><td bgcolor=\"white\"><font color=\"black\">Vendors Name</font></td><td bgcolor=\"white\"><font color=\"black\">Location</font></td>");
op.WriteLine(" </tr>");
foreach (Mobile mob in World.Mobiles.Values)
{
if (mob is PlayerVendor)
{
PlayerVendor pv = mob as PlayerVendor;
op.Write(" <tr><td bgcolor=\"red\"><font color = \"black\"><img src= http://aaaservices.homeip.net/UO/COER.png align=\"absmiddle\"> ");
op.WriteLine(pv.Owner.Name);
op.Write("</td>");
op.WriteLine(getTextString("<td bgcolor=\"red\">" + pv.ShopName + "</td>", "black"));
op.WriteLine(getTextString("<td bgcolor=\"red\">" + pv.Name + "</td>", "black"));
op.WriteLine(getTextString(string.Format("<td bgcolor=\"red\">{0} - {1}</td>", pv.Map, pv.Location), "black"));
op.Write("</tr>");
op.WriteLine("<tr><td bgcolor=\"yellow\"><font color=\"black\"><img src= http://aaaservices.homeip.net/UO/COEY.png align=\"absmiddle\">Amount</td><td bgcolor=\"yellow\"><font color=\"black\">Item</td><td bgcolor=\"yellow\"><font color=\"black\">Price for the Amount<t/d><td bgcolor=\"yellow\"><font color=\"black\">Description</td></tr>");
foreach (Item item in pv.GetItems())
{
VendorItem vi = pv.GetVendorItem(item);
if (vi != null && vi.IsForSale)
{
if (pv.Owner == null || pv.Owner.Name == "1k5g6se84f895s854f884s6a") //If name same as this it will not show items in list.
continue;
string ownername = (pv.Name != pv.Owner.Name ? pv.Owner.Name : " ");
string name = item.Name;
string nam = words[words.Length - 1];
if (string.IsNullOrEmpty(name))
{
name = item.GetType().ToString();
if (name.LastIndexOf('.') >= 0)
name = temp.Substring(temp.LastIndexOf('.') + 1);
}
if (name.Length > 25)
name = name.Substring(0, 25);
des = (string.IsNullOrEmpty(vi.Description) ? " " : vi.Description);
op.WriteLine("<tr><td bgcolor=\"green\"><font color = \"black\"><img src= http://aaaservices.homeip.net/UO/COEG.png align=\"absmiddle\"> {0} </td> <td bgcolor=\"green\"><font color = \"black\"> {1,-25} </td> <td bgcolor=\"green\"><font color = \"black\"> {2,7} </td> <td bgcolor=\"green\"><font color = \"black\"> {3} </td></tr>", item.Amount, name, vi.Price.ToString(), des);//Added </tr
}
}
}
}
//I ADDED END
// op.WriteLine( " <tr></tr>" );
op.WriteLine(" </table>");
#endregion player vendors table
op.WriteLine(" </body>");
op.WriteLine("</html>");
}
}
private static string getTextString(string text)
{
getTextString(text, "", false);
}
private static string getTextString(string text, string color)
{
getTextString(text, color, false);
}
private static string getTextString(string text, string color, bool bold)
{
getTextString(text, color, bold, "");
}
private static string getTextString(string text, string color, bool bold, bool td)
{
StringBuilder sb = new StringBuilder();
sb.Append(text);
if (bold)
{
sb.Insert(0, "<b>");
sb.Append("</b>");
}
if (!string.IsNullOrEmpty(color))
{
sb.Insert(0, "<font color=\"" + color + "\">");
sb.Append("</font>");
}
if (!string.IsNullOrEmpty(td))
{
sb.Insert(0, "<td>");
sb.Append("</td>");
}
return sb.ToString();
}
}
}