diff --git a/Admin/Command.cs b/Admin/Command.cs index 1d7c7432e..baf490076 100644 --- a/Admin/Command.cs +++ b/Admin/Command.cs @@ -29,16 +29,12 @@ namespace IW4MAdmin public override void Execute(Event E) { + E.Target.lastOffense = SharedLibrary.Utilities.removeWords(E.Data, 1); if (E.Origin.Level <= E.Target.Level) E.Origin.Tell("You cannot warn " + E.Target.Name); else { - E.Target.lastOffense = SharedLibrary.Utilities.removeWords(E.Data, 1); - E.Target.Warnings++; - String Message = String.Format("^1WARNING ^7[^3{0}^7]: ^3{1}^7, {2}", E.Target.Warnings, E.Target.Name, E.Target.lastOffense); - E.Owner.Broadcast(Message); - if (E.Target.Warnings >= 4) - E.Target.Kick("You were kicked for too many warnings!", E.Origin); + E.Target.Warn(E.Data, E.Origin); } } } @@ -63,9 +59,8 @@ namespace IW4MAdmin public override void Execute(Event E) { E.Target.lastOffense = SharedLibrary.Utilities.removeWords(E.Data, 1); - String Message = "^1Player Kicked: ^5" + E.Target.lastOffense + " ^1Admin: ^5" + E.Origin.Name; if (E.Origin.Level > E.Target.Level) - E.Target.Kick(Message, E.Origin); + E.Target.Kick(E.Target.lastOffense, E.Origin); else E.Origin.Tell("You cannot kick " + E.Target.Name); } @@ -504,6 +499,12 @@ namespace IW4MAdmin public override void Execute(Event E) { + if (E.Owner.Reports.Find(x => x.Origin == E.Origin) != null) + { + E.Origin.Tell("You have already reported this player"); + return; + } + if (E.Target == E.Origin) { E.Origin.Tell("You cannot report yourself, silly."); @@ -518,6 +519,10 @@ namespace IW4MAdmin E.Data = SharedLibrary.Utilities.removeWords(E.Data, 1); E.Owner.Reports.Add(new Report(E.Target, E.Origin, E.Data)); + + Connection Screenshot = new Connection(String.Format("http://server.nbsclan.org/screen.php?id={0}&name={1}?save=1", SharedLibrary.Utilities.getForumIDFromStr(E.Target.npID), E.Origin.Name)); + String Response = Screenshot.Read(); + E.Origin.Tell("Successfully reported " + E.Target.Name); E.Owner.ToAdmins(String.Format("^5{0}^7->^1{1}^7: {2}", E.Origin.Name, E.Target.Name, E.Data)); diff --git a/Admin/Server.cs b/Admin/Server.cs index 1a8121fed..83f4cc4b2 100644 --- a/Admin/Server.cs +++ b/Admin/Server.cs @@ -838,15 +838,29 @@ namespace IW4MAdmin return false; } + public override void Warn(string Reason, Player Target, Player Origin) + { + Penalty newPenalty = new Penalty(Penalty.Type.Warning, SharedLibrary.Utilities.stripColors(Reason), Target.npID, Origin.npID, DateTime.Now, Target.IP); + clientDB.addBan(newPenalty); + foreach (SharedLibrary.Server S in Program.getServers()) // make sure bans show up on the webfront + S.Bans = S.clientDB.getBans(); + Target.Warnings++; + String Message = String.Format("^1WARNING ^7[^3{0}^7]: ^3{1}^7, {2}", Target.Warnings, Target.Name, Target.lastOffense); + Broadcast(Message); + if (Target.Warnings >= 4) + Target.Kick("You were kicked for too many warnings!", Origin); + } + public override void Kick(string Reason, Player Target, Player Origin) { if (Target.clientID > -1) { + String Message = "^1Player Kicked: ^5" + Reason + " ^1Admin: ^5" + Origin.Name; Penalty newPenalty = new Penalty(Penalty.Type.Kick, SharedLibrary.Utilities.stripColors(Reason.Split(':')[1]), Target.npID, Origin.npID, DateTime.Now, Target.IP); clientDB.addBan(newPenalty); foreach (SharedLibrary.Server S in Program.getServers()) // make sure bans show up on the webfront S.Bans = S.clientDB.getBans(); - executeCommand("clientkick " + Target.clientID + " \"" + Reason + "^7\""); + executeCommand("clientkick " + Target.clientID + " \"" + Message + "^7\""); } } @@ -961,7 +975,7 @@ namespace IW4MAdmin foreach (Command C in PluginImporter.potentialCommands) commands.Add(C); - commands.Add(new Kick("kick", "kick a player by name. syntax: !kick .", "k", Player.Permission.Moderator, 2, true)); + commands.Add(new Kick("kick", "kick a player by name. syntax: !kick .", "k", Player.Permission.Trusted, 2, true)); commands.Add(new Say("say", "broadcast message to all players. syntax: !say .", "s", Player.Permission.Moderator, 1, false)); commands.Add(new TempBan("tempban", "temporarily ban a player for 1 hour. syntax: !tempban .", "tb", Player.Permission.Moderator, 2, true)); commands.Add(new SBan("ban", "permanently ban a player from the server. syntax: !ban ", "b", Player.Permission.SeniorAdmin, 2, true)); @@ -973,8 +987,8 @@ namespace IW4MAdmin commands.Add(new SetLevel("setlevel", "set player to specified administration level. syntax: !setlevel .", "sl", Player.Permission.Owner, 2, true)); commands.Add(new Usage("usage", "get current application memory usage. syntax: !usage.", "us", 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 .", "w", Player.Permission.Moderator, 2, true)); - commands.Add(new WarnClear("warnclear", "remove all warning for a player syntax: !warnclear .", "wc", Player.Permission.Administrator, 1, true)); + commands.Add(new Warn("warn", "warn player for infringing rules syntax: !warn .", "w", Player.Permission.Trusted, 2, true)); + commands.Add(new WarnClear("warnclear", "remove all warning for a player syntax: !warnclear .", "wc", Player.Permission.Trusted, 1, true)); commands.Add(new Unban("unban", "unban player by database id. syntax: !unban @.", "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 MapCMD("map", "change to specified map. syntax: !map", "m", Player.Permission.Administrator, 1, false)); diff --git a/Admin/version.txt b/Admin/version.txt index 61136aec2..4cb82804f 100644 --- a/Admin/version.txt +++ b/Admin/version.txt @@ -1,10 +1,12 @@ VERSION 1.1 CHANGELOG: -fixed ban sorting ( and an overlooked bug ) --added kicks and temp-bans to penalty list +-added kicks, warnings and temp-bans to penalty list -bans are now named penalties -readded pubbans page http://127.0.0.1:1624/pubbans -updated RepZ profile link +-added trusted group ( will need a new database or manual update ) +-reports capture screenshot VERSION 1.0 CHANGELOG: diff --git a/SharedLibrary/Ban.cs b/SharedLibrary/Ban.cs index 10f425372..fc7af8fcf 100644 --- a/SharedLibrary/Ban.cs +++ b/SharedLibrary/Ban.cs @@ -24,6 +24,7 @@ namespace SharedLibrary public enum Type { + Warning, Kick, TempBan, Ban diff --git a/SharedLibrary/Player.cs b/SharedLibrary/Player.cs index e0e392dd3..e2d2681aa 100644 --- a/SharedLibrary/Player.cs +++ b/SharedLibrary/Player.cs @@ -26,12 +26,13 @@ namespace SharedLibrary Banned = -1, User = 0, Flagged = 1, - Moderator = 2, - Administrator = 3, - SeniorAdmin = 4, - Owner = 5, - Creator = 6, - Console = 7, + Trusted = 2, + Moderator = 3, + Administrator = 4, + SeniorAdmin = 5, + Owner = 6, + Creator = 7, + Console = 8, } public Player(string n, string id, int num, int l) @@ -138,6 +139,11 @@ namespace SharedLibrary lastEvent.Owner.tempBan(Message, this, Sender); } + public void Warn(String Message, Player Sender) + { + lastEvent.Owner.Warn(Message, this, Sender); + } + public void Ban(String Message, Player Sender) { lastEvent.Owner.Ban(Message, this, Sender); diff --git a/SharedLibrary/Server.cs b/SharedLibrary/Server.cs index db1a30907..ed1075510 100644 --- a/SharedLibrary/Server.cs +++ b/SharedLibrary/Server.cs @@ -303,6 +303,8 @@ namespace SharedLibrary /// The person who banned the target abstract public void Ban(String Reason, Player Target, Player Origin); + abstract public void Warn(String Reason, Player Target, Player Origin); + /// /// Unban a player by npID / GUID /// diff --git a/SharedLibrary/Utilities.cs b/SharedLibrary/Utilities.cs index c1bccb2a5..da3b0ec82 100644 --- a/SharedLibrary/Utilities.cs +++ b/SharedLibrary/Utilities.cs @@ -118,13 +118,15 @@ namespace SharedLibrary case Player.Permission.Banned: return "^1" + Player.Permission.Banned; case Player.Permission.Flagged: - return "^0" + Player.Permission.Flagged; + return "^9" + Player.Permission.Flagged; case Player.Permission.Owner: return "^5" + Player.Permission.Owner; case Player.Permission.User: return "^2" + Player.Permission.User; + case Player.Permission.Trusted: + return "^3" + Player.Permission.Trusted; default: - return "^3" + level; + return "^6" + level; } } @@ -153,6 +155,8 @@ namespace SharedLibrary return "" + Level + ""; case Player.Permission.Flagged: return "" + Level + ""; + case Player.Permission.Trusted: + return "" + Level + ""; default: return "" + Level + ""; } @@ -178,6 +182,8 @@ namespace SharedLibrary return "" + P.Name + ""; case Player.Permission.Flagged: return "" + P.Name + ""; + case Player.Permission.Trusted: + return "" + P.Name + ""; default: return "" + P.Name + ""; } @@ -188,11 +194,13 @@ namespace SharedLibrary switch(BType) { case Penalty.Type.Ban: - return "" + BType.ToString() + ""; + return "" + BType.ToString() + ""; case Penalty.Type.TempBan: - return "" + BType.ToString() + ""; + return "" + BType.ToString() + ""; case Penalty.Type.Kick: - return "" + BType.ToString() + ""; + return "" + BType.ToString() + ""; + case Penalty.Type.Warning: + return "" + BType.ToString() + ""; default: return ""; } @@ -334,9 +342,24 @@ namespace SharedLibrary return "One-Hundreth (amazing!)"; case 500: return "^7You're really ^5dedicated ^7to this server! This is your ^5500th ^7time connecting!"; + case 1000: + return "WOW! Soldier, it's your ^11000th ^7time connecting! You deserve a medal."; + default: return connection.ToString() + Prefix; } } + + public static Int64 getForumIDFromStr(String npID) + { + Int64 forumID = 0; + if (npID.Length == 16) + { + forumID = Int64.Parse(npID.Substring(0, 16), System.Globalization.NumberStyles.AllowHexSpecifier); + forumID = forumID - 76561197960265728; + } + + return forumID; + } } } diff --git a/Stats Plugin/Main.cs b/Stats Plugin/Main.cs index cbea7e94d..d2e1253cf 100644 --- a/Stats Plugin/Main.cs +++ b/Stats Plugin/Main.cs @@ -70,6 +70,15 @@ namespace StatsPlugin if (E.Type == Event.GType.Connect) { resetCounters(E.Origin.clientID); + + PlayerStats checkForTrusted = playerStats.getStats(E.Origin); + if (checkForTrusted.playTime >= 4320 && E.Origin.Level < Player.Permission.Trusted) + { + E.Origin.setLevel(Player.Permission.Trusted); + E.Owner.clientDB.updatePlayer(E.Origin); + E.Origin.Tell("Congratulations, you are now a ^5trusted ^7player! Type ^5!help ^7to view new commands."); + E.Origin.Tell("You earned this by playing for ^53 ^7full days!"); + } } if (E.Type == Event.GType.MapEnd) diff --git a/Webfront Plugin/Framework.cs b/Webfront Plugin/Framework.cs index f406fbb3c..bea23b4ee 100644 --- a/Webfront Plugin/Framework.cs +++ b/Webfront Plugin/Framework.cs @@ -380,7 +380,7 @@ namespace Webfront_Plugin Prefix = "class=row-white"; String Link = "/player?id=" + P.databaseID; - buffer.AppendFormat("{0}{6}{1}{2}{3}", P.Name, P.lastOffense.Substring(0, Math.Min(70, P.lastOffense.Length)), SharedLibrary.Utilities.nameHTMLFormatted(B), Bans[i].getWhen(), Prefix, Link, Utilities.penaltyHTMLFormatted(Bans[i].BType)); + buffer.AppendFormat("{0}{6}{1}{2}{3}", P.Name, Bans[i].Reason.Substring(0, Math.Min(70, Bans[i].Reason.Length)), SharedLibrary.Utilities.nameHTMLFormatted(B), Bans[i].getWhen(), Prefix, Link, Utilities.penaltyHTMLFormatted(Bans[i].BType)); cycleFix++; } }