public PlayerData(TPPlayer player) { for (int i = 0; i < NetItem.maxNetInventory; i++) { this.inventory[i] = new NetItem(); } this.inventory[0].netID = -15; this.inventory[0].stack = 1; if (player.TPlayer.inventory[0] != null && player.TPlayer.inventory[0].netID == -15) { this.inventory[0].prefix = player.TPlayer.inventory[0].prefix; } this.inventory[1].netID = -13; this.inventory[1].stack = 1; if (player.TPlayer.inventory[1] != null && player.TPlayer.inventory[1].netID == -13) { this.inventory[1].prefix = player.TPlayer.inventory[1].prefix; } this.inventory[2].netID = -16; this.inventory[2].stack = 1; if (player.TPlayer.inventory[2] != null && player.TPlayer.inventory[2].netID == -16) { this.inventory[2].prefix = player.TPlayer.inventory[2].prefix; } }
public void Leave(TPPlayer player) { if(Players.Contains(player)) { Players.Remove(player); BroadcastMessage(String.Format("{0} has left", player.Name)); } }
public void Join(TPPlayer player) { if (!Players.Contains(player)) { BroadcastMessage(String.Format("{0} has join", player.Name)); Players.Add(player); } }
public void CopyInventory(TPPlayer player) { this.maxHealth = player.TPlayer.statLifeMax; Item[] inventory = player.TPlayer.inventory; Item[] armor = player.TPlayer.armor; for (int i = 0; i < NetItem.maxNetInventory; i++) { if (i < 49) { if (player.TPlayer.inventory[i] != null) { this.inventory[i].netID = inventory[i].netID; } else { this.inventory[i].netID = 0; } if (this.inventory[i].netID != 0) { this.inventory[i].stack = inventory[i].stack; this.inventory[i].prefix = inventory[i].prefix; } else { this.inventory[i].stack = 0; this.inventory[i].prefix = 0; } } else { if (player.TPlayer.armor[i - 48] != null) { this.inventory[i].netID = armor[i - 48].netID; } else { this.inventory[i].netID = 0; } if (this.inventory[i].netID != 0) { this.inventory[i].stack = armor[i - 48].stack; this.inventory[i].prefix = armor[i - 48].prefix; } else { this.inventory[i].stack = 0; this.inventory[i].prefix = 0; } } } }
private object PlayerKickV2(RestVerbs verbs, IParameterCollection parameters) { var ret = PlayerFind(parameters); if (ret is RestObject) { return(ret); } TPPlayer player = (TPPlayer)ret; TPulse.PlayerHandle.ForceKick(player, null == parameters["reason"] ? "Kicked via web" : parameters["reason"], false, true); return(RestResponse("Player " + player.Name + " was kicked")); }
private object PlayerBanV2(RestVerbs verbs, IParameterCollection parameters) { var ret = PlayerFind(parameters); if (ret is RestObject) { return(ret); } TPPlayer player = (TPPlayer)ret; var reason = null == parameters["reason"] ? "Banned via web" : parameters["reason"]; TPulse.Bans.AddBan(player.IP, player.Name, reason); TPulse.PlayerHandle.ForceKick(player, reason, false, true); return(RestResponse("Player " + player.Name + " was banned")); }
private object PlayerKill(RestVerbs verbs, IParameterCollection parameters) { var ret = PlayerFind(parameters); if (ret is RestObject) { return(ret); } TPPlayer player = (TPPlayer)ret; player.DamagePlayer(999999); var from = string.IsNullOrWhiteSpace(parameters["from"]) ? "Server Admin" : parameters["from"]; player.SendMessage(string.Format("{0} just killed you!", from)); return(RestResponse("Player " + player.Name + " was killed")); }
private object PlayerSetMute(IParameterCollection parameters, bool mute) { var ret = PlayerFind(parameters); if (ret is RestObject) { return(ret); } TPPlayer player = (TPPlayer)ret; player.mute = mute; var verb = mute ? "muted" : "unmuted"; player.SendMessage("You have been remotely " + verb); return(RestResponse("Player " + player.Name + " was " + verb)); }
public bool Run(string msg, TPPlayer ply, List <string> parms) { if (!ply.Group.HasPermission(Permission)) { return(false); } try { command(new CommandArgs(msg, ply, parms)); } catch (Exception e) { ply.SendErrorMessage("Command failed, check logs for more details."); Log.Error(e.ToString()); } return(true); }
private Dictionary <string, object> PlayerFilter(TPPlayer tsPlayer, IParameterCollection parameters) { var player = new Dictionary <string, object> { { "nickname", tsPlayer.Name }, { "username", null == tsPlayer.UserAccountName ? "" : tsPlayer.UserAccountName }, { "ip", tsPlayer.IP }, { "group", tsPlayer.Group.Name }, { "active", tsPlayer.Active }, { "state", tsPlayer.State }, { "team", tsPlayer.Team }, }; foreach (IParameter filter in parameters) { if (player.ContainsKey(filter.Name) && !player[filter.Name].Equals(filter.Value)) { return(null); } } return(player); }
private object PlayerReadV2(RestVerbs verbs, IParameterCollection parameters) { var ret = PlayerFind(parameters); if (ret is RestObject) { return(ret); } TPPlayer player = (TPPlayer)ret; var activeItems = player.TPlayer.inventory.Where(p => p.active).ToList(); return(new RestObject() { { "nickname", player.Name }, { "username", null == player.UserAccountName ? "" : player.UserAccountName }, { "ip", player.IP }, { "group", player.Group.Name }, { "position", player.TileX + "," + player.TileY }, { "inventory", string.Join(", ", activeItems.Select(p => (p.name + ":" + p.stack))) }, { "buffs", string.Join(", ", player.TPlayer.buffType) } }); }
public static void ShowFileToUser(TPPlayer player, string file, string players) { string foo = ""; using (var tr = new StreamReader(Path.Combine(TPulse.SavePath, file))) { while ((foo = tr.ReadLine()) != null) { foo = foo.Replace("%map%", Main.worldName); foo = foo.Replace("%players%", players); //foo = SanitizeString(foo); if (foo.Substring(0, 1) == "%" && foo.Substring(12, 1) == "%") //Look for a beginning color code. { string possibleColor = foo.Substring(0, 13); foo = foo.Remove(0, 13); float[] pC = { 0, 0, 0 }; possibleColor = possibleColor.Replace("%", ""); string[] pCc = possibleColor.Split(','); if (pCc.Length == 3) { try { player.SendMessage(foo, (byte)Convert.ToInt32(pCc[0]), (byte)Convert.ToInt32(pCc[1]), (byte)Convert.ToInt32(pCc[2])); continue; } catch (Exception e) { Log.Error(e.ToString()); } } } player.SendMessage(foo); } } }
public bool CheckTilePermission( TPPlayer player, int tileX, int tileY, byte tileType, byte actionType ) { if (!player.Group.HasPermission(Permissions.canbuild)) { if (Config.AllowIce && actionType != 1) { foreach (Point p in player.IceTiles) { if (p.X == tileX && p.Y == tileY && (Main.tile[p.X, p.Y].type == 0 || Main.tile[p.X, p.Y].type == 127)) { player.IceTiles.Remove(p); return false; } } if (((DateTime.Now.Ticks / TimeSpan.TicksPerMillisecond) - player.BPm) > 2000){ player.SendMessage("You do not have permission to build!", Color.Red); player.BPm=DateTime.Now.Ticks / TimeSpan.TicksPerMillisecond; } return true; } if (Config.AllowIce && actionType == 1 && tileType == 127) { player.IceTiles.Add(new Point(tileX, tileY)); return false; } if (((DateTime.Now.Ticks / TimeSpan.TicksPerMillisecond) - player.BPm) > 2000){ player.SendMessage("You do not have permission to build!", Color.Red); player.BPm=DateTime.Now.Ticks / TimeSpan.TicksPerMillisecond; } return true; } if (!player.Group.HasPermission(Permissions.editspawn) && !Regions.CanBuild(tileX, tileY, player) && Regions.InArea(tileX, tileY)) { if (((DateTime.Now.Ticks / TimeSpan.TicksPerMillisecond) - player.RPm) > 2000) { player.SendMessage("This region is protected from changes.", Color.Red); player.RPm = DateTime.Now.Ticks / TimeSpan.TicksPerMillisecond; } return true; } if (Config.DisableBuild) { if (!player.Group.HasPermission(Permissions.editspawn)) { if (((DateTime.Now.Ticks / TimeSpan.TicksPerMillisecond) - player.WPm) > 2000){ player.SendMessage("The world is protected from changes.", Color.Red); player.WPm=DateTime.Now.Ticks / TimeSpan.TicksPerMillisecond; } return true; } } if (Config.SpawnProtection) { if (!player.Group.HasPermission(Permissions.editspawn)) { var flag = CheckSpawn(tileX, tileY); if (flag) { if (((DateTime.Now.Ticks / TimeSpan.TicksPerMillisecond) - player.SPm) > 2000){ player.SendMessage("Spawn is protected from changes.", Color.Red); player.SPm=DateTime.Now.Ticks / TimeSpan.TicksPerMillisecond; } return true; } } } return false; }
public bool CheckRangePermission(TPPlayer player, int x, int y, int range = 32) { if (Config.RangeChecks && ((Math.Abs(player.TileX - x) > range) || (Math.Abs(player.TileY - y) > range))) { return true; } return false; }
public bool HandleCommand(TPPlayer player, string text) { string cmdText = text.Remove(0, 1); var args = ParseParameters(cmdText); if (args.Count < 1) return false; string cmdName = args[0].ToLower(); args.RemoveAt(0); IEnumerable<Command> cmds = ChatCommands.Where(c => c.HasAlias(cmdName)); if (cmds.Count() == 0) { if (player.AwaitingResponse.ContainsKey(cmdName)) { Action<CommandArgs> call = player.AwaitingResponse[cmdName]; player.AwaitingResponse.Remove(cmdName); call(new CommandArgs(cmdText, player, args)); return true; } player.SendErrorMessage("Invalid command entered. Type /help for a list of valid commands."); return true; } foreach (Command cmd in cmds) { if (!cmd.CanRun(player)) { tPulse.SendLogs(string.Format("{0} tried to execute /{1}.", player.Name, cmdText), Color.Red, tPulse); player.SendErrorMessage("You do not have access to that command."); } else if (!cmd.AllowServer && !player.RealPlayer) { player.SendErrorMessage("You must use this command in-game."); } else { if (cmd.DoLog) tPulse.SendLogs(string.Format("{0} executed: /{1}.", player.Name, cmdText), Color.Red, tPulse); cmd.Run(cmdText, player, args); } } return true; }
public GetDataHandlerArgs(TPPlayer player, MemoryStream data) { Player = player; Data = data; }
public bool ContainsPlayer(TPPlayer player) { return Players.Contains(player); }
public bool CanRun(TPPlayer ply) { return(ply.Group.HasPermission(Permission)); }
public bool IsInTeam(TPPlayer player) { return (Team1.Contains(player) || Team2.Contains(player)); }
private void onPlayerJoin(TPPlayer player) { if (_onPlayerJoin != null) _onPlayerJoin.Invoke(new PlayerConnectionEventArgs(player, PlayerConnectionAction.Join)); }
private void OnConnect(int ply, HandledEventArgs handler) { var player = new TPPlayer(ply); if (Config.EnableDNSHostResolution) { player.Group = Users.GetGroupForIPExpensive(player.IP); } else { player.Group = Users.GetGroupForIP(player.IP); } if (ActivePlayers() + 1 > Config.MaxSlots + 20) { PlayerHandle.ForceKick(player, Config.ServerFullNoReservedReason, true, false); handler.Handled = true; return; } var ipban = Bans.GetBanByIp(player.IP); Ban ban = null; if (ipban != null && Config.EnableIPBans) ban = ipban; if (ban != null) { PlayerHandle.ForceKick(player, string.Format("You are banned: {0}", ban.Reason), true, false); handler.Handled = true; return; } if (!FileTools.OnWhitelist(player.IP, this)) { PlayerHandle.ForceKick(player, Config.WhitelistKickReason, true, false); handler.Handled = true; return; } if (Geo != null) { var code = Geo.TryGetCountryCode(IPAddress.Parse(player.IP)); player.Country = code == null ? "N/A" : GeoIPCountry.GetCountryNameByCode(code); if (code == "A1") { if (Config.KickProxyUsers) { PlayerHandle.ForceKick(player, "Proxies are not allowed.", true, false); handler.Handled = true; return; } } } Players[ply] = player; }
public void Send(TPPlayer from, string message) { if (Players.Contains(from)) { String fmessage = String.Format("{0}: {1}", from.Name, message); foreach (TPPlayer player in Players) { player.SendMessage(fmessage, TextColor); } ChannelLog.Write(fmessage); } }
public bool CheckTilePermission(TPPlayer player, int tileX, int tileY) { if (!player.Group.HasPermission(Permissions.canbuild)) { if (((DateTime.Now.Ticks / TimeSpan.TicksPerMillisecond) - player.BPm) > 2000){ player.SendMessage("You do not have permission to build!", Color.Red); player.BPm=DateTime.Now.Ticks / TimeSpan.TicksPerMillisecond; } return true; } if (!player.Group.HasPermission(Permissions.editspawn) && !Regions.CanBuild(tileX, tileY, player) && Regions.InArea(tileX, tileY)) { if (((DateTime.Now.Ticks / TimeSpan.TicksPerMillisecond) - player.RPm) > 2000) { player.SendMessage("This region is protected from changes.", Color.Red); player.RPm = DateTime.Now.Ticks / TimeSpan.TicksPerMillisecond; } return true; } if (Config.DisableBuild) { if (!player.Group.HasPermission(Permissions.editspawn)) { if (((DateTime.Now.Ticks / TimeSpan.TicksPerMillisecond) - player.WPm) > 2000){ player.SendMessage("The world is protected from changes.", Color.Red); player.WPm=DateTime.Now.Ticks / TimeSpan.TicksPerMillisecond; } return true; } } if (Config.SpawnProtection) { if (!player.Group.HasPermission(Permissions.editspawn)) { var flag = CheckSpawn(tileX, tileY); if (flag) { if (((DateTime.Now.Ticks / TimeSpan.TicksPerMillisecond) - player.SPm) > 1000){ player.SendMessage("Spawn is protected from changes.", Color.Red); player.SPm=DateTime.Now.Ticks / TimeSpan.TicksPerMillisecond; } return true; } } } return false; }
public TPulse(Main game) : base(game) { Config = new ConfigFile(); Order = 0; Players = new TPPlayer[Main.maxPlayers]; PlugInHandler.AddPlugIn(this); Commands = new Commands(this); ServerHandle = new ServerHandler(this); PlayerHandle = new PlayerHandler(this); }
private Dictionary<string, object> PlayerFilter(TPPlayer tsPlayer, IParameterCollection parameters) { var player = new Dictionary<string, object> { {"nickname", tsPlayer.Name}, {"username", null == tsPlayer.UserAccountName ? "" : tsPlayer.UserAccountName}, {"ip", tsPlayer.IP}, {"group", tsPlayer.Group.Name}, {"active", tsPlayer.Active}, {"state", tsPlayer.State}, {"team", tsPlayer.Team}, }; foreach (IParameter filter in parameters) { if (player.ContainsKey(filter.Name) && !player[filter.Name].Equals(filter.Value)) return null; } return player; }
private void onPlayerLeave(TPPlayer player) { if (_onPlayerLeave != null) _onPlayerLeave.Invoke(new PlayerConnectionEventArgs(player, PlayerConnectionAction.Leave)); }
private static bool OnTileEdit(TPPlayer ply, int x, int y, byte type, byte editType, bool fail) { if (TileEdit == null) return false; var args = new TileEditEventArgs { Player = ply, X = x, Y = y, Type = type, EditType = editType, Fail = fail }; TileEdit.Invoke(null, args); return args.Handled; }
public PlayerLoginEventArgs(TPPlayer player) { Player = player; }
public static bool CheckInventory(TPPlayer player) { PlayerData playerData = player.PlayerData; bool check = true; if (player.TPlayer.statLifeMax > playerData.maxHealth) { player.SendMessage("Error: Your max health exceeded (" + playerData.maxHealth + ") which is stored on server.", Color.Cyan); check = false; } Item[] inventory = player.TPlayer.inventory; Item[] armor = player.TPlayer.armor; for (int i = 0; i < NetItem.maxNetInventory; i++) { if (i < 49) { Item item = new Item(); Item serverItem = new Item(); if (inventory[i] != null && inventory[i].netID != 0) { if (playerData.inventory[i].netID != inventory[i].netID) { item.netDefaults(inventory[i].netID); item.Prefix(inventory[i].prefix); item.AffixName(); player.SendMessage(player.IgnoreActionsForInventory = "Your item (" + item.name + ") needs to be deleted.", Color.Cyan); check = false; } else if (playerData.inventory[i].prefix != inventory[i].prefix) { item.netDefaults(inventory[i].netID); item.Prefix(inventory[i].prefix); item.AffixName(); player.SendMessage(player.IgnoreActionsForInventory = "Your item (" + item.name + ") needs to be deleted.", Color.Cyan); check = false; } else if (inventory[i].stack > playerData.inventory[i].stack) { item.netDefaults(inventory[i].netID); item.Prefix(inventory[i].prefix); item.AffixName(); player.SendMessage( player.IgnoreActionsForInventory = "Your item (" + item.name + ") (" + inventory[i].stack + ") needs to have its stack size decreased to (" + playerData.inventory[i].stack + ").", Color.Cyan); check = false; } } } else { Item item = new Item(); Item serverItem = new Item(); if (armor[i - 48] != null && armor[i - 48].netID != 0) { if (playerData.inventory[i].netID != armor[i - 48].netID) { item.netDefaults(armor[i - 48].netID); item.Prefix(armor[i - 48].prefix); item.AffixName(); player.SendMessage(player.IgnoreActionsForInventory = "Your armor (" + item.name + ") needs to be deleted.", Color.Cyan); check = false; } else if (playerData.inventory[i].prefix != armor[i - 48].prefix) { item.netDefaults(armor[i - 48].netID); item.Prefix(armor[i - 48].prefix); item.AffixName(); player.SendMessage(player.IgnoreActionsForInventory = "Your armor (" + item.name + ") needs to be deleted.", Color.Cyan); check = false; } else if (armor[i - 48].stack > playerData.inventory[i].stack) { item.netDefaults(armor[i - 48].netID); item.Prefix(armor[i - 48].prefix); item.AffixName(); player.SendMessage( player.IgnoreActionsForInventory = "Your armor (" + item.name + ") (" + inventory[i].stack + ") needs to have its stack size decreased to (" + playerData.inventory[i].stack + ").", Color.Cyan); check = false; } } } } return check; }
public static bool HackedHealth(TPPlayer player) { return (player.TPlayer.statManaMax > 400) || (player.TPlayer.statMana > 400) || (player.TPlayer.statLifeMax > 400) || (player.TPlayer.statLife > 400); }
public static bool HackedInventory(TPPlayer player) { bool check = false; Item[] inventory = player.TPlayer.inventory; Item[] armor = player.TPlayer.armor; for (int i = 0; i < NetItem.maxNetInventory; i++) { if (i < 49) { Item item = new Item(); if (inventory[i] != null && inventory[i].netID != 0) { item.netDefaults(inventory[i].netID); item.Prefix(inventory[i].prefix); item.AffixName(); if (inventory[i].stack > item.maxStack) { check = true; player.SendMessage( String.Format("Stack cheat detected. Remove item {0} ({1}) and then rejoin", item.name, inventory[i].stack), Color.Cyan); } } } else { Item item = new Item(); if (armor[i - 48] != null && armor[i - 48].netID != 0) { item.netDefaults(armor[i - 48].netID); item.Prefix(armor[i - 48].prefix); item.AffixName(); if (armor[i - 48].stack > item.maxStack) { check = true; player.SendMessage( String.Format("Stack cheat detected. Remove armor {0} ({1}) and then rejoin", item.name, armor[i - 48].stack), Color.Cyan); } } } } return check; }
public CommandArgs(string message, TPPlayer ply, List <string> args) { Message = message; Player = ply; Parameters = args; }
public bool Ban(TPPlayer player, string reason, string adminUserName) { return Ban(player, reason, false, adminUserName); }
public CommandArgs(string message, TPPlayer ply, List<string> args) { Message = message; Player = ply; Parameters = args; }
public bool Ban(TPPlayer player, string reason, bool force = false, string adminUserName = null) { if (!player.ConnectionAlive) return true; if (force || !player.Group.HasPermission(Permissions.immunetoban)) { string ip = player.IP; string playerName = player.Name; Bans.AddBan(ip, playerName, reason); player.Disconnect(string.Format("Banned: {0}", reason)); Log.ConsoleInfo(string.Format("Banned {0} for : {1}", playerName, reason)); string verb = force ? "force " : ""; if (string.IsNullOrWhiteSpace(adminUserName)) Utils.Broadcast(string.Format("{0} was {1}banned for {2}", playerName, verb, reason.ToLower())); else Utils.Broadcast(string.Format("{0} {1}banned {2} for {3}", adminUserName, verb, playerName, reason.ToLower())); return true; } return false; }
public static bool HandlerGetData(PacketTypes type, TPPlayer player, MemoryStream data) { GetDataHandlerDelegate handler; if (GetDataHandlerDelegates.TryGetValue(type, out handler)) { try { return handler(new GetDataHandlerArgs(player, data)); } catch (Exception ex) { Log.Error(ex.ToString()); } } return false; }
public bool CheckIgnores(TPPlayer player) { bool check = false; if (Config.PvPMode == "always" && !player.TPlayer.hostile) check = true; if (player.IgnoreActionsForInventory != "none") check = true; if (player.IgnoreActionsForCheating != "none") check = true; if (player.IgnoreActionsForDisabledArmor != "none") check = true; if (player.IgnoreActionsForClearingTrashCan) check = true; if (!player.IsLoggedIn && Config.RequireLogin) check = true; return check; }
public PlayerData(TPPlayer player) { for (int i = 0; i < NetItem.maxNetInventory; i++) { this.inventory[i] = new NetItem(); } this.inventory[0].netID = -15; this.inventory[0].stack = 1; if (player.TPlayer.inventory[0] != null && player.TPlayer.inventory[0].netID == -15) this.inventory[0].prefix = player.TPlayer.inventory[0].prefix; this.inventory[1].netID = -13; this.inventory[1].stack = 1; if (player.TPlayer.inventory[1] != null && player.TPlayer.inventory[1].netID == -13) this.inventory[1].prefix = player.TPlayer.inventory[1].prefix; this.inventory[2].netID = -16; this.inventory[2].stack = 1; if (player.TPlayer.inventory[2] != null && player.TPlayer.inventory[2].netID == -16) this.inventory[2].prefix = player.TPlayer.inventory[2].prefix; }
public bool CheckProjectilePermission(TPPlayer player, int index, int type) { if (type == 43) { return true; } if (type == 17 && !player.Group.HasPermission(Permissions.usebanneditem) && Itembans.ItemIsBanned("Dirt Rod", player)) //Dirt Rod Projectile { return true; } if ((type == 42 || type == 65 || type == 68) && !player.Group.HasPermission(Permissions.usebanneditem) && Itembans.ItemIsBanned("Sandgun", player)) //Sandgun Projectiles { return true; } Projectile proj = new Projectile(); proj.SetDefaults(type); if (!player.Group.HasPermission(Permissions.usebanneditem) && Itembans.ItemIsBanned(proj.name, player)) { return true; } if (Main.projHostile[type]) { //player.SendMessage( proj.name, Color.Yellow); return true; } return false; }
private void SendHelp(TPPlayer player) { player.SendMessage("Friends: /friend cmd [args]", TextColor); player.SendMessage("Friends: Available commands", TextColor); player.SendMessage("Friends: add, del, list, help", TextColor); }