-webfront now displays player info and link to repz account
-fixed time span issue in webfront -fixed crash when RCON stops responding and removing a player -version on footer
This commit is contained in:
parent
8e31cbe138
commit
65b65716d2
@ -361,7 +361,7 @@ namespace IW4MAdmin
|
|||||||
{
|
{
|
||||||
foreach (Player P in E.Owner.getPlayers())
|
foreach (Player P in E.Owner.getPlayers())
|
||||||
{
|
{
|
||||||
if (P != null && P.getLevel() > Player.Permission.User && !P.Masked)
|
if (P != null && P.getLevel() > Player.Permission.Flagged && !P.Masked)
|
||||||
{
|
{
|
||||||
E.Origin.Tell(String.Format("[^3{0}^7] {1}", Utilities.levelToColor(P.getLevel()), P.getName()));
|
E.Origin.Tell(String.Format("[^3{0}^7] {1}", Utilities.levelToColor(P.getLevel()), P.getName()));
|
||||||
}
|
}
|
||||||
@ -430,6 +430,53 @@ namespace IW4MAdmin
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class FindAll : Command
|
||||||
|
{
|
||||||
|
public FindAll(String N, String D, String U, Player.Permission P, int args, bool nT) : base(N, D, U, P, args, nT) { }
|
||||||
|
|
||||||
|
public override void Execute(Event E)
|
||||||
|
{
|
||||||
|
E.Data = E.Data.Trim();
|
||||||
|
|
||||||
|
if (E.Data.Length < 4)
|
||||||
|
{
|
||||||
|
E.Origin.Tell("You must enter at least 4 letters");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
//var db_players = E.Owner.clientDB.findPlayers(E.Data.Trim());
|
||||||
|
var db_aliases = E.Owner.aliasDB.findPlayers(E.Data);
|
||||||
|
|
||||||
|
if (db_aliases == null)
|
||||||
|
{
|
||||||
|
E.Origin.Tell("No players found");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach (Aliases P in db_aliases)
|
||||||
|
{
|
||||||
|
if (P == null)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
String lookingFor = String.Empty;
|
||||||
|
|
||||||
|
foreach(String S in P.getNames())
|
||||||
|
{
|
||||||
|
if (S.Contains(E.Data))
|
||||||
|
lookingFor = S;
|
||||||
|
}
|
||||||
|
|
||||||
|
Player Current = E.Owner.clientDB.getPlayer(P.getNumber());
|
||||||
|
|
||||||
|
if (Current != null)
|
||||||
|
{
|
||||||
|
String mesg = String.Format("^1{0} ^7now goes by ^5{1}^7 [^3{2}^7]", lookingFor, Current.getName(), Current.getDBID());
|
||||||
|
E.Origin.Tell(mesg);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
class Rules : Command
|
class Rules : Command
|
||||||
{
|
{
|
||||||
public Rules(String N, String D, String U, Player.Permission P, int args, bool nT) : base(N, D, U, P, args, nT) { }
|
public Rules(String N, String D, String U, Player.Permission P, int args, bool nT) : base(N, D, U, P, args, nT) { }
|
||||||
|
@ -335,6 +335,12 @@ namespace IW4MAdmin
|
|||||||
ExecuteNonQuery(Query);
|
ExecuteNonQuery(Query);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void removeBan(String GUID, String IP)
|
||||||
|
{
|
||||||
|
String Query = String.Format("DELETE FROM BANS WHERE npID = '{0}' or IP= '%{1}%'", GUID, IP);
|
||||||
|
ExecuteNonQuery(Query);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -522,6 +528,22 @@ namespace IW4MAdmin
|
|||||||
return players;
|
return players;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public List<Aliases> findPlayers(String name)
|
||||||
|
{
|
||||||
|
String Query = String.Format("SELECT * FROM ALIASES WHERE NAMES LIKE '%{0}%' LIMIT 8", name);
|
||||||
|
DataTable Result = GetDataTable(Query);
|
||||||
|
|
||||||
|
List<Aliases> players = new List<Aliases>();
|
||||||
|
|
||||||
|
if (Result != null && Result.Rows.Count > 0)
|
||||||
|
{
|
||||||
|
foreach (DataRow p in Result.Rows)
|
||||||
|
players.Add(new Aliases(Convert.ToInt32(p["Number"]), p["NAMES"].ToString(), p["IPS"].ToString()));
|
||||||
|
}
|
||||||
|
|
||||||
|
return players;
|
||||||
|
}
|
||||||
|
|
||||||
public void addPlayer(Aliases Alias)
|
public void addPlayer(Aliases Alias)
|
||||||
{
|
{
|
||||||
Dictionary<String, object> newPlayer = new Dictionary<String, object>();
|
Dictionary<String, object> newPlayer = new Dictionary<String, object>();
|
||||||
|
@ -127,12 +127,18 @@
|
|||||||
<Content Include="webfront\bans.html">
|
<Content Include="webfront\bans.html">
|
||||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||||
</Content>
|
</Content>
|
||||||
|
<Content Include="webfront\footer.html">
|
||||||
|
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||||
|
</Content>
|
||||||
<Content Include="webfront\header.html">
|
<Content Include="webfront\header.html">
|
||||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||||
</Content>
|
</Content>
|
||||||
<Content Include="webfront\main.html">
|
<Content Include="webfront\main.html">
|
||||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||||
</Content>
|
</Content>
|
||||||
|
<Content Include="webfront\player.html">
|
||||||
|
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||||
|
</Content>
|
||||||
<Content Include="webfront\stats.html">
|
<Content Include="webfront\stats.html">
|
||||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||||
</Content>
|
</Content>
|
||||||
@ -185,8 +191,8 @@
|
|||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<PostBuildEvent>copy $(TargetDir)$(TargetFileName) $(SolutionDir)OFFICIAL\Release\$(TargetFileName)
|
<PostBuildEvent>
|
||||||
copy $(SolutionDir)Admin\version.txt $(SolutionDir)OFFICIAL\Release\version.txt</PostBuildEvent>
|
</PostBuildEvent>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
|
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
|
||||||
Other similar extension points exist, see Microsoft.Common.targets.
|
Other similar extension points exist, see Microsoft.Common.targets.
|
||||||
|
@ -203,16 +203,7 @@ namespace IW4MAdmin
|
|||||||
|
|
||||||
public String getLastConnection()
|
public String getLastConnection()
|
||||||
{
|
{
|
||||||
TimeSpan Elapsed = DateTime.Now - LastConnection;
|
return Utilities.timePassed(LastConnection);
|
||||||
|
|
||||||
if (Elapsed.Minutes < 60)
|
|
||||||
return Elapsed.Minutes + " minutes";
|
|
||||||
if (Elapsed.Hours <= 24)
|
|
||||||
return Elapsed.Hours + " hours";
|
|
||||||
if (Elapsed.Days <= 365)
|
|
||||||
return Elapsed.Days + " days";
|
|
||||||
else
|
|
||||||
return "a very long time";
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void updateName(String n)
|
public void updateName(String n)
|
||||||
|
@ -117,7 +117,10 @@ namespace IW4MAdmin
|
|||||||
Aliases currentAliases = aliasDB.getPlayer(Origin.getDBID());
|
Aliases currentAliases = aliasDB.getPlayer(Origin.getDBID());
|
||||||
|
|
||||||
if (currentAliases == null)
|
if (currentAliases == null)
|
||||||
|
{
|
||||||
Log.Write("No aliases found for " + Origin.getName(), Log.Level.Debug);
|
Log.Write("No aliases found for " + Origin.getName(), Log.Level.Debug);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
foreach (String IP in currentAliases.getIPS())
|
foreach (String IP in currentAliases.getIPS())
|
||||||
{
|
{
|
||||||
@ -303,6 +306,12 @@ namespace IW4MAdmin
|
|||||||
{
|
{
|
||||||
if (cNum >= 0 && cNum < players.Count)
|
if (cNum >= 0 && cNum < players.Count)
|
||||||
{
|
{
|
||||||
|
if (players[cNum] == null)
|
||||||
|
{
|
||||||
|
Log.Write("Error - Disconnecting client slot is already empty!", Log.Level.Debug);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
Player Leaving = players[cNum];
|
Player Leaving = players[cNum];
|
||||||
Leaving.Connections++;
|
Leaving.Connections++;
|
||||||
clientDB.updatePlayer(Leaving);
|
clientDB.updatePlayer(Leaving);
|
||||||
@ -319,7 +328,7 @@ namespace IW4MAdmin
|
|||||||
|
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
Log.Write("Client disconnecting has an invalid client index!", Log.Level.Debug);
|
Log.Write("Error - Client disconnecting has an invalid client index!", Log.Level.Debug);
|
||||||
clientnum = statusPlayers.Count;
|
clientnum = statusPlayers.Count;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -824,7 +833,9 @@ namespace IW4MAdmin
|
|||||||
logPath = Basepath + '\\' + "m2demo" + '\\' + log;
|
logPath = Basepath + '\\' + "m2demo" + '\\' + log;
|
||||||
else
|
else
|
||||||
logPath = Basepath + '\\' + Mod + '\\' + log;
|
logPath = Basepath + '\\' + Mod + '\\' + log;
|
||||||
|
#if DEBUG
|
||||||
|
// logPath = "C:\\Users\\Michael\\Desktop\\test.txt";
|
||||||
|
#endif
|
||||||
if (!File.Exists(logPath))
|
if (!File.Exists(logPath))
|
||||||
{
|
{
|
||||||
Log.Write("Gamelog does not exist!", Log.Level.All);
|
Log.Write("Gamelog does not exist!", Log.Level.All);
|
||||||
@ -851,7 +862,7 @@ namespace IW4MAdmin
|
|||||||
String ftpLog = new StreamReader(ftpStream).ReadToEnd();*/
|
String ftpLog = new StreamReader(ftpStream).ReadToEnd();*/
|
||||||
//logPath = "games_old.log";
|
//logPath = "games_old.log";
|
||||||
#endif
|
#endif
|
||||||
Log.Write("Now monitoring " + this.getName(), Log.Level.Debug);
|
Log.Write("Now monitoring " + this.getName(), Log.Level.All);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
catch (Exception E)
|
catch (Exception E)
|
||||||
@ -1093,9 +1104,9 @@ namespace IW4MAdmin
|
|||||||
{
|
{
|
||||||
if (B.getID() == Target.getID())
|
if (B.getID() == Target.getID())
|
||||||
{
|
{
|
||||||
clientDB.removeBan(Target.getID());
|
clientDB.removeBan(Target.getID(), Target.getIP());
|
||||||
Bans.Remove(B);
|
Bans.Remove(B);
|
||||||
Player P = clientDB.getPlayer(Target.getID(), 0);
|
Player P = clientDB.getPlayer(Target.getID(), -1);
|
||||||
P.setLevel(Player.Permission.User);
|
P.setLevel(Player.Permission.User);
|
||||||
clientDB.updatePlayer(P);
|
clientDB.updatePlayer(P);
|
||||||
return true;
|
return true;
|
||||||
@ -1147,7 +1158,7 @@ namespace IW4MAdmin
|
|||||||
if (P == null)
|
if (P == null)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (P.getLevel() > Player.Permission.User)
|
if (P.getLevel() > Player.Permission.Flagged)
|
||||||
{
|
{
|
||||||
P.Alert();
|
P.Alert();
|
||||||
P.Tell(message);
|
P.Tell(message);
|
||||||
@ -1274,7 +1285,7 @@ namespace IW4MAdmin
|
|||||||
commands.Add(new Uptime("uptime", "get current application running time. syntax: !uptime.", "up", Player.Permission.Moderator, 0, false));
|
commands.Add(new Uptime("uptime", "get current application running time. syntax: !uptime.", "up", Player.Permission.Moderator, 0, false));
|
||||||
commands.Add(new Warn("warn", "warn player for infringing rules syntax: !warn <player> <reason>.", "w", Player.Permission.Moderator, 2, true));
|
commands.Add(new Warn("warn", "warn player for infringing rules syntax: !warn <player> <reason>.", "w", Player.Permission.Moderator, 2, true));
|
||||||
commands.Add(new WarnClear("warnclear", "remove all warning for a player syntax: !warnclear <player>.", "wc", Player.Permission.Administrator, 1, true));
|
commands.Add(new WarnClear("warnclear", "remove all warning for a player syntax: !warnclear <player>.", "wc", Player.Permission.Administrator, 1, true));
|
||||||
commands.Add(new Unban("unban", "unban player by guid. syntax: !unban <guid>.", "ub", Player.Permission.SeniorAdmin, 1, true));
|
commands.Add(new Unban("unban", "unban player by database id. syntax: !unban @<id>.", "ub", Player.Permission.SeniorAdmin, 1, true));
|
||||||
commands.Add(new Admins("admins", "list currently connected admins. syntax: !admins.", "a", Player.Permission.User, 0, false));
|
commands.Add(new Admins("admins", "list currently connected admins. syntax: !admins.", "a", Player.Permission.User, 0, false));
|
||||||
commands.Add(new Wisdom("wisdom", "get a random wisdom quote. syntax: !wisdom", "w", Player.Permission.Administrator, 0, false));
|
commands.Add(new Wisdom("wisdom", "get a random wisdom quote. syntax: !wisdom", "w", Player.Permission.Administrator, 0, false));
|
||||||
commands.Add(new MapCMD("map", "change to specified map. syntax: !map", "m", Player.Permission.Administrator, 1, false));
|
commands.Add(new MapCMD("map", "change to specified map. syntax: !map", "m", Player.Permission.Administrator, 1, false));
|
||||||
@ -1294,6 +1305,7 @@ namespace IW4MAdmin
|
|||||||
commands.Add(new BanInfo("baninfo", "get information about a ban for a player. syntax: !baninfo <player>", "bi", Player.Permission.Moderator, 1, true));
|
commands.Add(new BanInfo("baninfo", "get information about a ban for a player. syntax: !baninfo <player>", "bi", Player.Permission.Moderator, 1, true));
|
||||||
commands.Add(new Alias("alias", "get past aliases and ips of a player. syntax: !alias <player>", "known", Player.Permission.Moderator, 1, true));
|
commands.Add(new Alias("alias", "get past aliases and ips of a player. syntax: !alias <player>", "known", Player.Permission.Moderator, 1, true));
|
||||||
commands.Add(new _RCON("rcon", "send rcon command to server. syntax: !rcon <command>", "rcon", Player.Permission.Owner, 1, false));
|
commands.Add(new _RCON("rcon", "send rcon command to server. syntax: !rcon <command>", "rcon", Player.Permission.Owner, 1, false));
|
||||||
|
commands.Add(new FindAll("findall", "find a player by their aliase(s). syntax: !findall <player>", "fa", Player.Permission.Moderator, 1, false));
|
||||||
}
|
}
|
||||||
|
|
||||||
//Objects
|
//Objects
|
||||||
|
@ -149,20 +149,51 @@ namespace IW4MAdmin
|
|||||||
switch (P.getLevel())
|
switch (P.getLevel())
|
||||||
{
|
{
|
||||||
case Player.Permission.User:
|
case Player.Permission.User:
|
||||||
return "<span style='color:rgb(121, 194, 97)'>" + P.getName() + "</span>";
|
return "<span style='color:rgb(87, 150, 66)'>" + P.getName() + "</span>";
|
||||||
case Player.Permission.Moderator:
|
case Player.Permission.Moderator:
|
||||||
return "<span style='color:#e7b402'>" + P.getName() + "</span>";
|
return "<span style='color:#e7b402'>" + P.getName() + "</span>";
|
||||||
case Player.Permission.Administrator:
|
case Player.Permission.Administrator:
|
||||||
return "<span style='color:#ec82de'>" + P.getName() + "</span>";
|
return "<span style='color:#ec82de'>" + P.getName() + "</span>";
|
||||||
case Player.Permission.SeniorAdmin:
|
case Player.Permission.SeniorAdmin:
|
||||||
return "<span style='color:#2eb6bf'>" + P.getName() + "</span>";
|
return "<span style='color:#2eb6bf'>" + P.getName() + "</span>";
|
||||||
case Player.Permission.Owner | Player.Permission.Creator:
|
case Player.Permission.Owner:
|
||||||
return "<span style='color:rgb(38,120,230)'>" + P.getName() + "</span>";
|
return "<span style='color:rgb(38,120,230)'>" + P.getName() + "</span>";
|
||||||
|
case Player.Permission.Creator:
|
||||||
|
return "<span style='color:rgb(38,120,230)'>" + P.getName() + "</span>";
|
||||||
|
case Player.Permission.Banned:
|
||||||
|
return "<span style='color:rgb(196, 22, 28)'>" + P.getName() + "</span>";
|
||||||
|
case Player.Permission.Flagged:
|
||||||
|
return "<span style='color:rgb(251, 124, 98)'>" + P.getName() + "</span>";
|
||||||
default:
|
default:
|
||||||
return "<i>" + P.getName() + "</i>";
|
return "<i>" + P.getName() + "</i>";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static String nameHTMLFormatted(Player.Permission Level)
|
||||||
|
{
|
||||||
|
switch (Level)
|
||||||
|
{
|
||||||
|
case Player.Permission.User:
|
||||||
|
return "<span style='color:rgb(87, 150, 66)'>" + Level + "</span>";
|
||||||
|
case Player.Permission.Moderator:
|
||||||
|
return "<span style='color:#e7b402'>" + Level + "</span>";
|
||||||
|
case Player.Permission.Administrator:
|
||||||
|
return "<span style='color:#ec82de'>" + Level + "</span>";
|
||||||
|
case Player.Permission.SeniorAdmin:
|
||||||
|
return "<span style='color:#2eb6bf'>" + Level + "</span>";
|
||||||
|
case Player.Permission.Owner:
|
||||||
|
return "<span style='color:rgb(38,120,230)'>" + Level + "</span>";
|
||||||
|
case Player.Permission.Creator:
|
||||||
|
return "<span style='color:rgb(38,120,230)'>" + Level + "</span>";
|
||||||
|
case Player.Permission.Banned:
|
||||||
|
return "<span style='color:rgb(196, 22, 28)'>" + Level + "</span>";
|
||||||
|
case Player.Permission.Flagged:
|
||||||
|
return "<span style='color:rgb(251, 124, 98)'>" + Level + "</span>";
|
||||||
|
default:
|
||||||
|
return "<i>" + Level + "</i>";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public static String gametypeLocalized(String input)
|
public static String gametypeLocalized(String input)
|
||||||
{
|
{
|
||||||
switch (input)
|
switch (input)
|
||||||
@ -264,12 +295,12 @@ namespace IW4MAdmin
|
|||||||
{
|
{
|
||||||
TimeSpan Elapsed = DateTime.Now - start;
|
TimeSpan Elapsed = DateTime.Now - start;
|
||||||
|
|
||||||
if (Elapsed.Hours < 1 && Elapsed.Minutes < 60)
|
if (Elapsed.TotalMinutes < 120)
|
||||||
return Elapsed.Minutes + " minutes";
|
return Math.Round(Elapsed.TotalMinutes, 0) + " minutes";
|
||||||
if (Elapsed.Days < 1 && Elapsed.Hours <= 24)
|
if (Elapsed.TotalHours <= 24)
|
||||||
return Elapsed.Hours + " hours";
|
return Math.Round(Elapsed.TotalHours, 0) + " hours";
|
||||||
if (Elapsed.Days <= 365)
|
if (Elapsed.TotalDays <= 365)
|
||||||
return Elapsed.Days + " days";
|
return Math.Round(Elapsed.TotalDays, 0) + " days";
|
||||||
else
|
else
|
||||||
return "a very long time";
|
return "a very long time";
|
||||||
}
|
}
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
using System;
|
using System;
|
||||||
|
using System.Globalization;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
@ -15,7 +16,8 @@ namespace IW4MAdmin_Web
|
|||||||
{
|
{
|
||||||
main,
|
main,
|
||||||
stats,
|
stats,
|
||||||
bans
|
bans,
|
||||||
|
player
|
||||||
}
|
}
|
||||||
|
|
||||||
public WebFront()
|
public WebFront()
|
||||||
@ -66,20 +68,46 @@ namespace IW4MAdmin_Web
|
|||||||
{
|
{
|
||||||
case "SERVERS":
|
case "SERVERS":
|
||||||
var Servers = IW4MAdmin.Program.Servers;
|
var Servers = IW4MAdmin.Program.Servers;
|
||||||
|
int cycleFix = 0;
|
||||||
for (int i = 0; i < Servers.Count; i++)
|
for (int i = 0; i < Servers.Count; i++)
|
||||||
{
|
{
|
||||||
StringBuilder players = new StringBuilder();
|
StringBuilder players = new StringBuilder();
|
||||||
if (Servers[i].getClientNum() < 1)
|
if (Servers[i].getClientNum() < 1)
|
||||||
players.Append("<th>No Players</th>");
|
players.Append("<h2>No Players</h2>");
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
int count = 0;
|
int count = 0;
|
||||||
foreach (IW4MAdmin.Player P in Servers[i].statusPlayers.Values)
|
double currentPlayers = Servers[i].statusPlayers.Count;
|
||||||
|
|
||||||
|
foreach (IW4MAdmin.Player P in Servers[i].getPlayers())
|
||||||
{
|
{
|
||||||
if (count > 0 && count % 6 == 0)
|
if (P == null)
|
||||||
players.Append("</tr><tr>");
|
continue;
|
||||||
players.AppendFormat("<td>{0}</td>", P.getName());
|
|
||||||
|
if (count % 2 == 0)
|
||||||
|
{
|
||||||
|
switch (cycleFix)
|
||||||
|
{
|
||||||
|
case 0:
|
||||||
|
players.Append("<tr class='row-grey'>");
|
||||||
|
cycleFix = 1;
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
players.Append("<tr class='row-white'>");
|
||||||
|
cycleFix = 0;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
players.AppendFormat("<td><a href='/{0}/{1}/?player'>{2}</a></td>", i, P.getDBID(), IW4MAdmin.Utilities.nameHTMLFormatted(P));
|
||||||
|
|
||||||
|
if (count % 2 != 0)
|
||||||
|
{
|
||||||
|
players.Append("</tr>");
|
||||||
|
}
|
||||||
|
|
||||||
count++;
|
count++;
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
buffer.AppendFormat(@"<table cellpadding=0 cellspacing=0 class=server>
|
buffer.AppendFormat(@"<table cellpadding=0 cellspacing=0 class=server>
|
||||||
@ -92,10 +120,8 @@ namespace IW4MAdmin_Web
|
|||||||
<th><a href=/{4}/0/?bans>Bans</a></th>
|
<th><a href=/{4}/0/?bans>Bans</a></th>
|
||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
<table class=players>
|
<table cellpadding='0' cellspacing='0' class='players'>
|
||||||
<tr>
|
|
||||||
{5}
|
{5}
|
||||||
</tr>
|
|
||||||
</table>
|
</table>
|
||||||
<hr/>",
|
<hr/>",
|
||||||
Servers[i].getName(), Servers[i].getMap(), Servers[i].getClientNum() + "/" + Servers[i].getMaxClients(), IW4MAdmin.Utilities.gametypeLocalized(Servers[i].getGametype()), i, players.ToString());
|
Servers[i].getName(), Servers[i].getMap(), Servers[i].getClientNum() + "/" + Servers[i].getMaxClients(), IW4MAdmin.Utilities.gametypeLocalized(Servers[i].getGametype()), i, players.ToString());
|
||||||
@ -108,7 +134,7 @@ namespace IW4MAdmin_Web
|
|||||||
int totalBans = IW4MAdmin.Program.Servers[0].Bans.Count;
|
int totalBans = IW4MAdmin.Program.Servers[0].Bans.Count;
|
||||||
int range;
|
int range;
|
||||||
int start = Pagination*30 + 1;
|
int start = Pagination*30 + 1;
|
||||||
int cycleFix = 0;
|
cycleFix = 0;
|
||||||
|
|
||||||
if (totalBans <= 30)
|
if (totalBans <= 30)
|
||||||
range = totalBans - 1;
|
range = totalBans - 1;
|
||||||
@ -156,7 +182,8 @@ namespace IW4MAdmin_Web
|
|||||||
Prefix = "class=row-grey";
|
Prefix = "class=row-grey";
|
||||||
else
|
else
|
||||||
Prefix = "class=row-white";
|
Prefix = "class=row-white";
|
||||||
buffer.AppendFormat("<tr {4}><td>{0}</th><td style='border-left: 3px solid #bbb; text-align:left;'>{1}</td><td style='border-left: 3px solid #bbb;text-align:left;'>{2}</td><td style='width: 175px; text-align:right;'>{3}</td></tr></div>", P.getName(), P.getLastO(), IW4MAdmin.Utilities.nameHTMLFormatted(B), Bans[i].getWhen(), Prefix);
|
String Link = "/" + server + "/" + P.getDBID() + "/?player";
|
||||||
|
buffer.AppendFormat("<tr {4}><td><a href='{5}'>{0}</a></th><td style='border-left: 3px solid #bbb; text-align:left;'>{1}</td><td style='border-left: 3px solid #bbb;text-align:left;'>{2}</td><td style='width: 175px; text-align:right;'>{3}</td></tr></div>", P.getName(), P.getLastO(), IW4MAdmin.Utilities.nameHTMLFormatted(B), Bans[i].getWhen(), Prefix, Link);
|
||||||
cycleFix++;
|
cycleFix++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -203,13 +230,56 @@ namespace IW4MAdmin_Web
|
|||||||
Prefix = "class=row-grey";
|
Prefix = "class=row-grey";
|
||||||
else
|
else
|
||||||
Prefix = "class=row-white";
|
Prefix = "class=row-white";
|
||||||
buffer.AppendFormat("<tr {5}><td>{0}</th><td style='border-left: 3px solid #bbb; text-align:left;'>{1}</td><td style='border-left: 3px solid #bbb;text-align:left;'>{2}</td><td style='border-left: 3px solid #bbb;text-align:left;'>{3}</td><td style='width: 175px; text-align:right;'>{4}</td></tr></div>", P.getName(), P.stats.Kills, P.stats.Deaths, P.stats.KDR, P.stats.Skill, Prefix);
|
|
||||||
|
String Link = "/" + server + "/" + P.getDBID() + "/?player";
|
||||||
|
buffer.AppendFormat("<tr {5}><td><a href='{6}'>{0}</a></td><td style='border-left: 3px solid #bbb; text-align:left;'>{1}</td><td style='border-left: 3px solid #bbb;text-align:left;'>{2}</td><td style='border-left: 3px solid #bbb;text-align:left;'>{3}</td><td style='width: 175px; text-align:right;'>{4}</td></tr></div>", P.getName(), P.stats.Kills, P.stats.Deaths, P.stats.KDR, P.stats.Skill, Prefix, Link);
|
||||||
cycleFix++;
|
cycleFix++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
buffer.Append("</table><hr/>");
|
buffer.Append("</table><hr/>");
|
||||||
buffer.Append(parsePagination(server, totalStats, 30, Pagination, "stats"));
|
buffer.Append(parsePagination(server, totalStats, 30, Pagination, "stats"));
|
||||||
return buffer.ToString().Replace("{{TOP}}", (start + 1).ToString());
|
return buffer.ToString().Replace("{{TOP}}", (start + 1).ToString());
|
||||||
|
case "PLAYER":
|
||||||
|
buffer.Append("<table class='player_info'><tr><th>Name</th><th>Aliases</th><th>IP</th><th>Rating</th><th>Level</th><th>Connections</th><th>Last Seen</th><th>Profile</th>");
|
||||||
|
IW4MAdmin.Player Player = IW4MAdmin.Program.Servers[server].clientDB.getPlayer(Pagination);
|
||||||
|
|
||||||
|
if (Player == null)
|
||||||
|
buffer.Append("</table>");
|
||||||
|
|
||||||
|
else
|
||||||
|
{
|
||||||
|
buffer.Append("<tr>");
|
||||||
|
StringBuilder str = new StringBuilder();
|
||||||
|
List<IW4MAdmin.Player> aliases = new List<IW4MAdmin.Player>();
|
||||||
|
IW4MAdmin.Program.Servers[server].getAliases(aliases, Player);
|
||||||
|
|
||||||
|
foreach (IW4MAdmin.Player a in aliases)
|
||||||
|
str.AppendFormat("<span>{0}</span><br/>", a.getName());
|
||||||
|
|
||||||
|
Player.stats = IW4MAdmin.Program.Servers[server].statDB.getStats(Player.getDBID());
|
||||||
|
String Rating = String.Empty;
|
||||||
|
|
||||||
|
if (Player.stats == null)
|
||||||
|
Rating = "Not Available";
|
||||||
|
else
|
||||||
|
Rating = Player.stats.Skill.ToString();
|
||||||
|
|
||||||
|
bool logged = false;
|
||||||
|
String IP;
|
||||||
|
if (logged)
|
||||||
|
IP = Player.getIP();
|
||||||
|
else
|
||||||
|
IP = "XXX.XXX.XXX.XXX";
|
||||||
|
|
||||||
|
Int64 forumID = Int64.Parse(Player.getID(), NumberStyles.AllowHexSpecifier);
|
||||||
|
forumID = forumID - 76561197960265728;
|
||||||
|
|
||||||
|
buffer.AppendFormat("<td>{0}</td><td>{1}</td><td>{2}</td><td>{3}</td><td>{4}</td><td>{5}</td><td>{6} ago</td><td><a href='https://repziw4.de/memberlist.php?mode=viewprofile&u={7}'>{8}</a></td>", Player.getName(), str, IP, Rating, IW4MAdmin.Utilities.nameHTMLFormatted(Player.getLevel()), Player.getConnections(), Player.getLastConnection(), forumID, Player.getName());
|
||||||
|
buffer.Append("</tr></table>");
|
||||||
|
}
|
||||||
|
|
||||||
|
return buffer.ToString();
|
||||||
|
|
||||||
default:
|
default:
|
||||||
return input;
|
return input;
|
||||||
}
|
}
|
||||||
@ -230,6 +300,9 @@ namespace IW4MAdmin_Web
|
|||||||
case WebFront.Page.stats:
|
case WebFront.Page.stats:
|
||||||
output = output.Replace("{{STATS}}", parseMacros("STATS", page, pageNumber, server));
|
output = output.Replace("{{STATS}}", parseMacros("STATS", page, pageNumber, server));
|
||||||
break;
|
break;
|
||||||
|
case WebFront.Page.player:
|
||||||
|
output = output.Replace("{{PLAYER}}", parseMacros("PLAYER", page, pageNumber, server));
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
//output = output.Replace("{{PAGE}}", parseMacros("PAGE", page, pageNumber, server));
|
//output = output.Replace("{{PAGE}}", parseMacros("PAGE", page, pageNumber, server));
|
||||||
@ -237,6 +310,7 @@ namespace IW4MAdmin_Web
|
|||||||
//output = output.Replace("{{SERVERS}}", parseMacros("SERVERS", 0));
|
//output = output.Replace("{{SERVERS}}", parseMacros("SERVERS", 0));
|
||||||
//output = output.Replace("{{BANS}}", parseMacros("BANS", page));
|
//output = output.Replace("{{BANS}}", parseMacros("BANS", page));
|
||||||
output = output.Replace("{{TITLE}}", "IW4M Administration");
|
output = output.Replace("{{TITLE}}", "IW4M Administration");
|
||||||
|
output = output.Replace("{{VERSION}}", IW4MAdmin.Program.Version.ToString());
|
||||||
//output = output.Replace("{{PAGE}}", parseMacros("PAGE", page));
|
//output = output.Replace("{{PAGE}}", parseMacros("PAGE", page));
|
||||||
//output = output.Replace("{{STATS}}", parseMacros("STATS", page));
|
//output = output.Replace("{{STATS}}", parseMacros("STATS", page));
|
||||||
|
|
||||||
@ -265,7 +339,7 @@ namespace IW4MAdmin_Web
|
|||||||
{
|
{
|
||||||
if (request.Uri.StartsWith("/"))
|
if (request.Uri.StartsWith("/"))
|
||||||
{
|
{
|
||||||
Console.WriteLine("[WEBFRONT] Processing Request for " + request.Uri);
|
//Console.WriteLine("[WEBFRONT] Processing Request for " + request.Uri);
|
||||||
var body = String.Empty;
|
var body = String.Empty;
|
||||||
|
|
||||||
if (request.Uri.StartsWith("/"))
|
if (request.Uri.StartsWith("/"))
|
||||||
@ -274,6 +348,10 @@ namespace IW4MAdmin_Web
|
|||||||
var header = Header.getLines();
|
var header = Header.getLines();
|
||||||
Header.Close();
|
Header.Close();
|
||||||
|
|
||||||
|
IW4MAdmin.file Footer = new IW4MAdmin.file("webfront\\footer.html");
|
||||||
|
var footer = Footer.getLines();
|
||||||
|
Footer.Close();
|
||||||
|
|
||||||
String[] req = request.Path.Split(new char[] {'/'}, StringSplitOptions.RemoveEmptyEntries);
|
String[] req = request.Path.Split(new char[] {'/'}, StringSplitOptions.RemoveEmptyEntries);
|
||||||
|
|
||||||
|
|
||||||
@ -291,7 +369,7 @@ namespace IW4MAdmin_Web
|
|||||||
IW4MAdmin.file Bans = new IW4MAdmin.file("webfront\\bans.html");
|
IW4MAdmin.file Bans = new IW4MAdmin.file("webfront\\bans.html");
|
||||||
var bans = Bans.getLines();
|
var bans = Bans.getLines();
|
||||||
Bans.Close();
|
Bans.Close();
|
||||||
body = Macro.findMacros((header + bans), page, server, WebFront.Page.bans);
|
body = Macro.findMacros((header + bans + footer), page, server, WebFront.Page.bans);
|
||||||
}
|
}
|
||||||
|
|
||||||
else if (request.QueryString == "stats")
|
else if (request.QueryString == "stats")
|
||||||
@ -299,7 +377,15 @@ namespace IW4MAdmin_Web
|
|||||||
IW4MAdmin.file Stats = new IW4MAdmin.file("webfront\\stats.html");
|
IW4MAdmin.file Stats = new IW4MAdmin.file("webfront\\stats.html");
|
||||||
var stats = Stats.getLines();
|
var stats = Stats.getLines();
|
||||||
Stats.Close();
|
Stats.Close();
|
||||||
body = Macro.findMacros(header + stats, page, server, WebFront.Page.stats);
|
body = Macro.findMacros(header + stats + footer, page, server, WebFront.Page.stats);
|
||||||
|
}
|
||||||
|
|
||||||
|
else if (request.QueryString == "player")
|
||||||
|
{
|
||||||
|
IW4MAdmin.file Player = new IW4MAdmin.file("webfront\\player.html");
|
||||||
|
var player = Player.getLines();
|
||||||
|
Player.Close();
|
||||||
|
body = Macro.findMacros(header + player + footer, page, server, WebFront.Page.player);
|
||||||
}
|
}
|
||||||
|
|
||||||
else
|
else
|
||||||
@ -307,16 +393,11 @@ namespace IW4MAdmin_Web
|
|||||||
IW4MAdmin.file Main = new IW4MAdmin.file("webfront\\main.html");
|
IW4MAdmin.file Main = new IW4MAdmin.file("webfront\\main.html");
|
||||||
var main = Main.getLines();
|
var main = Main.getLines();
|
||||||
Main.Close();
|
Main.Close();
|
||||||
body = Macro.findMacros(header + main, 0, server, WebFront.Page.main);
|
body = Macro.findMacros(header + main + footer, 0, server, WebFront.Page.main);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*var body = string.Format(
|
IW4MAdmin.Program.Servers[server].Log.Write("Webfront processed request for " + request.Uri, IW4MAdmin.Log.Level.Debug);
|
||||||
"Uri: {0}\r\nPath: {1}\r\nQuery:{2}\r\nFragment: {3}\r\n",
|
}
|
||||||
request.Uri,
|
|
||||||
request.Path,
|
|
||||||
request.QueryString,
|
|
||||||
request.Fragment);*/
|
|
||||||
|
|
||||||
var headers = new HttpResponseHead()
|
var headers = new HttpResponseHead()
|
||||||
{
|
{
|
||||||
|
@ -1,5 +1,7 @@
|
|||||||
60
|
60
|
||||||
This server uses ^5IW4M Admin v0.8 ^7get it at ^5raidmax.org
|
This server uses ^5IW4M Admin v0.8 ^7get it at ^5raidmax.org
|
||||||
^5IW4M Admin ^7sees ^5YOU!
|
^5IW4M Admin ^7sees ^5YOU!
|
||||||
|
This server has harvested the information of ^5{{TOTALPLAYERS}} ^7players!
|
||||||
Cheaters are ^1unwelcome ^7 on this server
|
Cheaters are ^1unwelcome ^7 on this server
|
||||||
Did you know 8/10 people agree with unverified statistics?
|
Did you know 8/10 people agree with unverified statistics?
|
||||||
|
^5{{TOTALKILLS}} ^7innocent people having been murdered in this server!
|
@ -26,10 +26,10 @@ GoTo(target)
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Alert(sound)
|
Alert(sound, message)
|
||||||
{
|
{
|
||||||
self playLocalSound(sound);
|
self playLocalSound(sound);
|
||||||
self iPrintLnBold("New Report!");
|
self iPrintLnBold(message);
|
||||||
}
|
}
|
||||||
|
|
||||||
Tell(message, source)
|
Tell(message, source)
|
||||||
|
@ -66,7 +66,7 @@ processEvent(event)
|
|||||||
Player GoTo(Target);
|
Player GoTo(Target);
|
||||||
break;
|
break;
|
||||||
case "alert":
|
case "alert":
|
||||||
Player Alert(Data);
|
Player Alert(Data, "New Notification!");
|
||||||
break;
|
break;
|
||||||
case "tell":
|
case "tell":
|
||||||
Target Tell(Data, Player);
|
Target Tell(Data, Player);
|
||||||
|
@ -1,3 +1,10 @@
|
|||||||
|
VERSION: 0.9
|
||||||
|
CHANGELOG:
|
||||||
|
-webfront now displays player info and link to repz account
|
||||||
|
-fixed time span issue in webfront
|
||||||
|
-fixed crash when RCON stops responding and removing a player
|
||||||
|
-version on footer
|
||||||
|
|
||||||
VERSION: 0.8.1
|
VERSION: 0.8.1
|
||||||
CHANGELOG:
|
CHANGELOG:
|
||||||
-no longer have `world` client handle broken events
|
-no longer have `world` client handle broken events
|
||||||
@ -6,3 +13,48 @@ CHANGELOG:
|
|||||||
-fixed alias output duplicating
|
-fixed alias output duplicating
|
||||||
-fixed missing evade reason
|
-fixed missing evade reason
|
||||||
-cleaned up project files
|
-cleaned up project files
|
||||||
|
|
||||||
|
VERSION: 0.8
|
||||||
|
CHANGELOG:
|
||||||
|
-added mask command
|
||||||
|
-added baninfo command
|
||||||
|
-added alias command and removed redundant output from `find`
|
||||||
|
-added rcon command
|
||||||
|
-added webfront (http://127.0.0.1:1624)
|
||||||
|
-true skill is officially implemented
|
||||||
|
-find now shows last connect time
|
||||||
|
-noise on pm (if gsc_enabled)
|
||||||
|
-force 8 line chat height (if gsc_enabled)
|
||||||
|
-tell admins the number of reports on join
|
||||||
|
-enhanced ban tracking
|
||||||
|
-ip wait timeout added
|
||||||
|
-remove report on ban
|
||||||
|
-can't report yourself
|
||||||
|
-remove reported players when banned
|
||||||
|
-fixed rare crash with toadmins backend
|
||||||
|
-fixed crash when finding player stats that don't exist
|
||||||
|
-fixed a bug that caused owner command to reactivate only `creator` rank player existed
|
||||||
|
-fixed a bug that caused certain notifications to be sent to all players
|
||||||
|
-various small fixes
|
||||||
|
|
||||||
|
VERSION: 0.7
|
||||||
|
CHANGELOG:
|
||||||
|
-rcon tweaks
|
||||||
|
-so much stuff cant remember
|
||||||
|
|
||||||
|
VERSION: 0.6
|
||||||
|
CHANGELOG:
|
||||||
|
-stability fixes
|
||||||
|
-welcome has post-fixed connection indicator
|
||||||
|
|
||||||
|
VERSION: 0.5
|
||||||
|
CHANGELOG:
|
||||||
|
-close config files after reading oops
|
||||||
|
-added reload command
|
||||||
|
-added macros! (Denoted by {{MACRO}} in server config right now only {{WISDOM}} and {{TOTALPLAYERS}})
|
||||||
|
-added IP's (tracks and rebans new accounts on same banned ip)!
|
||||||
|
-aliases
|
||||||
|
-reworked database classes
|
||||||
|
-heartbeat gives running version
|
||||||
|
-player banned in find gives last ban reason
|
||||||
|
-reworked rcon yet again
|
@ -1,11 +1,6 @@
|
|||||||
<body>
|
<body>
|
||||||
|
|
||||||
<div id="container">
|
<div id="container">
|
||||||
<div class="h0" style="margin-top: 0; line-height:normal;">BANS<br/><a style="padding: 0; margin: 0; font-size: 24px; float: right;" href="/">Back</a></div>
|
<div class="h0" style="margin-top: 0; line-height:normal;">BANS<br/><a style="padding: 0; margin: 0; font-size: 24px; float: right;" href="/">Back</a></div>
|
||||||
<div id="logo_shit"></div>
|
<div id="logo_shit"></div>
|
||||||
{{BANS}}
|
{{BANS}}
|
||||||
</div>
|
</div>
|
||||||
<div id="footer">IW4M Admin — <a href="http://raidmax.org/IW4MAdmin">RaidMax.org</a></div>
|
|
||||||
|
|
||||||
</body>
|
|
||||||
</html>
|
|
3
Admin/webfront/footer.html
Normal file
3
Admin/webfront/footer.html
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
<div id="footer">IW4M Admin v{{VERSION}} — <a href="http://raidmax.org/IW4MAdmin">RaidMax.org</a></div>
|
||||||
|
</body>
|
||||||
|
</html>
|
@ -97,7 +97,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
tr.row-grey {
|
tr.row-grey {
|
||||||
background-color: #eee;
|
background-color: #ddd;
|
||||||
}
|
}
|
||||||
|
|
||||||
th
|
th
|
||||||
@ -211,9 +211,9 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
.server_title {
|
.server_title {
|
||||||
font-size: 24pt;
|
font-size: 20pt;
|
||||||
margin-bottom: 20px;
|
margin-bottom: 20px;
|
||||||
min-width: 550px;
|
min-width: 530px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.server_info {
|
.server_info {
|
||||||
@ -233,8 +233,10 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
.players {
|
.players {
|
||||||
width: 60%;
|
width: 40%;
|
||||||
text-align: left;
|
text-align: left;
|
||||||
|
padding-top: 10px;
|
||||||
|
padding-bottom 10p;x
|
||||||
}
|
}
|
||||||
|
|
||||||
.bans {
|
.bans {
|
||||||
@ -271,7 +273,20 @@
|
|||||||
|
|
||||||
.players tbody tr td
|
.players tbody tr td
|
||||||
{
|
{
|
||||||
padding: 1px;
|
padding: 3px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.player_info{
|
||||||
|
width: 100%;
|
||||||
|
vertical-align: top;
|
||||||
|
text-align: left;
|
||||||
|
}
|
||||||
|
|
||||||
|
.player_info td
|
||||||
|
{
|
||||||
|
text-align: left;
|
||||||
|
vertical-align: top;
|
||||||
|
padding: 0;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
</head>
|
</head>
|
||||||
|
@ -7,6 +7,3 @@
|
|||||||
<hr />
|
<hr />
|
||||||
{{SERVERS}}
|
{{SERVERS}}
|
||||||
</div>
|
</div>
|
||||||
<div id="footer">IW4M Admin — <a href="http://raidmax.org/IW4MAdmin">RaidMax.org</a></div>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
8
Admin/webfront/player.html
Normal file
8
Admin/webfront/player.html
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
<body>
|
||||||
|
<div id="container">
|
||||||
|
<div class="h0" style="margin-top: 0; line-height:normal;">PLAYER<br /><a style="padding: 0; margin: 0; font-size: 24px; float: right;" href="/">Back</a></div>
|
||||||
|
<div id="logo_shit"></div>
|
||||||
|
<div style="clear:both"></div>
|
||||||
|
<hr/>
|
||||||
|
{{PLAYER}}
|
||||||
|
</div>
|
@ -4,7 +4,3 @@
|
|||||||
<div id="logo_shit"></div>
|
<div id="logo_shit"></div>
|
||||||
{{STATS}}
|
{{STATS}}
|
||||||
</div>
|
</div>
|
||||||
<div id="footer">IW4M Admin — <a href="http://raidmax.org/IW4MAdmin">RaidMax.org</a></div>
|
|
||||||
|
|
||||||
</body>
|
|
||||||
</html>
|
|
@ -13,8 +13,8 @@ Global
|
|||||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||||
{DD5DCDA2-51DB-4B1A-922F-5705546E6115}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
{DD5DCDA2-51DB-4B1A-922F-5705546E6115}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
{DD5DCDA2-51DB-4B1A-922F-5705546E6115}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
{DD5DCDA2-51DB-4B1A-922F-5705546E6115}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
{DD5DCDA2-51DB-4B1A-922F-5705546E6115}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
{DD5DCDA2-51DB-4B1A-922F-5705546E6115}.Release|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
{DD5DCDA2-51DB-4B1A-922F-5705546E6115}.Release|Any CPU.Build.0 = Release|Any CPU
|
{DD5DCDA2-51DB-4B1A-922F-5705546E6115}.Release|Any CPU.Build.0 = Debug|Any CPU
|
||||||
EndGlobalSection
|
EndGlobalSection
|
||||||
GlobalSection(SolutionProperties) = preSolution
|
GlobalSection(SolutionProperties) = preSolution
|
||||||
HideSolutionNode = FALSE
|
HideSolutionNode = FALSE
|
||||||
|
Loading…
x
Reference in New Issue
Block a user