Пример #1
0
        public static void OnClanJoin(TSPlayer ts, Clan clan)
        {
            if (ClanJoin == null)
                return;

            ClanJoin(new ClanJoinEventArgs() { TSplayer = ts, Clan = clan });
        }
Пример #2
0
        public void ReloadConfig(bool console = false, TSPlayer receiver = null)
        {
            var configPath = Path.Combine(TShock.SavePath, "BossConfig.json");
            (AutoBoss.config = Config.Read(configPath)).Write(configPath);

            var invalidRegions = new List<string>();

            foreach (var arena in AutoBoss.config.BossArenas.Where(a => a.Value))
            {
                var region = TShock.Regions.GetRegionByName(arena.Key);
                if (region == null)
                {
                    invalidRegions.Add(arena.Key);
                    continue;
                }
                if (!AutoBoss.ActiveArenas.Contains(region)) AutoBoss.ActiveArenas.Add(region);
            }

            arenaCount = AutoBoss.ActiveArenas.Count;

            if (invalidRegions.Count == 0)
            {
                AutoBoss.Timers = new BossTimer();
                return;
            }
            TShock.Log.ConsoleError("Invalid regions encountered: " + string.Join(", ", invalidRegions));

            if (!console && receiver != null)
                receiver.SendErrorMessage("Invalid regions encountered: " + string.Join(", ", invalidRegions));
        }
Пример #3
0
        /// <summary>Sends tile updates for a region border to a client.</summary>
        /// <param name="player">The player to send to.</param>
        public void refresh(TShockAPI.TSPlayer player)
        {
            // Due to the way the Rectangle class works, the Width and Height values are one tile less than the actual dimensions of the region.
            if (this.showArea.Width <= 3 || this.showArea.Height <= 3)
            {
                player.SendData(PacketTypes.TileSendSection, "", this.showArea.Left - 1, this.showArea.Top - 1, this.showArea.Width + 3, this.showArea.Height + 3, 0);
            }
            else
            {
                if (this.showArea.Top == this.area.Top)
                {
                    player.SendData(PacketTypes.TileSendSection, "", this.showArea.Left - 1, this.showArea.Top - 1, this.showArea.Width + 3, 3, 0);
                }
                if (this.showArea.Left == this.area.Left)
                {
                    player.SendData(PacketTypes.TileSendSection, "", this.showArea.Left - 1, this.showArea.Top + 2, 3, this.showArea.Height, 0);
                }
                if (this.showArea.Right == this.area.Right)
                {
                    player.SendData(PacketTypes.TileSendSection, "", this.showArea.Right - 1, this.showArea.Top + 2, 3, this.showArea.Height, 0);
                }
                if (this.showArea.Bottom == this.area.Bottom)
                {
                    player.SendData(PacketTypes.TileSendSection, "", this.showArea.Left + 2, this.showArea.Bottom - 1, this.showArea.Width - 3, 3, 0);
                }
            }

            player.SendData(PacketTypes.TileFrameSection, "", (int)(this.showArea.Left / 200), (int)(this.showArea.Top / 150), (int)(this.showArea.Right / 200), (int)(this.showArea.Bottom / 150), 0);
        }
Пример #4
0
        public static void SendChestItem(TSPlayer player, int chestIndex, IList<ItemData> items)
        {
            const int TerrariaPacketHeaderSize = 3;
              const int ChestItemPacketSizeNoHeader = 8;
              const short PacketSize = TerrariaPacketHeaderSize + ChestItemPacketSizeNoHeader;

              using (MemoryStream packetData = new MemoryStream(new byte[PacketSize])) {
            BinaryWriter writer = new BinaryWriter(packetData);

            // Header
            writer.Write(PacketSize); // Packet size
            writer.Write((byte)PacketTypes.ChestItem);

            writer.Write((short)chestIndex);

            // Re-write item data for each item and send the packet
            for (int i = 0; i < items.Count; i++) {
              ItemData item = items[i];

              writer.Write((byte)i);
              writer.Write((short)item.StackSize);
              writer.Write((byte)item.Prefix);
              writer.Write((short)item.Type);

              player.SendRawData(packetData.ToArray());

              // Rewind to write the item data of another item
              packetData.Position -= ChestItemPacketSizeNoHeader;
            }
              }
        }
Пример #5
0
 public IceWandEventArgs(int x, int y, TSPlayer player, int data = 0)
 {
     Data = data;
     Player = player;
     X = x;
     Y = y;
 }
    private CircuitProcessingResult ProcessCircuit(TSPlayer triggerer, DPoint tileLocation, SignalType? overrideSignal = null, bool switchSender = true) {
      CircuitProcessor processor = new CircuitProcessor(this.PluginTrace, this, tileLocation);
      CircuitProcessingResult result = processor.ProcessCircuit(triggerer, overrideSignal, switchSender);

      this.NotifyPlayer(result);
      return result;
    }
Пример #7
0
 public RegionPlayer( TSPlayer ply, FlaggedRegionManager regionManager )
 {
     player = ply;
     positions = new PositionQueue();
     this.regionManager = regionManager;
     OriginalGroup = ply.Group;
 }
Пример #8
0
        public bool ChangeGroup(object Player, object Group)
        {
            TShockAPI.TSPlayer p = null;
            TShockAPI.DB.User  u = new TShockAPI.DB.User();
            string             g = "";

            if ((p = GetPlayer(Player)) == null)
            {
                return(false);
            }

            if (Group is string)
            {
                g = Group as string;
            }
            else if (Group is TShockAPI.Group)
            {
                g = (Group as TShockAPI.Group).Name;
            }

            if (string.IsNullOrEmpty(g) == true)
            {
                return(false);
            }

            try {
                u.Name = p.User.Name;
                TShockAPI.TShock.Users.SetUserGroup(u, g);
            } catch (Exception ex) {
                ScriptLog.ErrorFormat("tshock_change_group", "Group change failed: {0}", ex.Message);
                return(false);
            }

            return(true);
        }
        public override bool HandleTileEdit(TSPlayer player, TileEditType editType, BlockType blockType, DPoint location, int objectStyle)
        {
            if (this.IsDisposed)
            return false;
              if (base.HandleTileEdit(player, editType, blockType, location, objectStyle))
            return true;

              if (editType == TileEditType.PlaceTile)
            return this.HandleTilePlace(player, blockType, location, objectStyle);
              if (editType == TileEditType.TileKill || editType == TileEditType.TileKillNoItem)
            return this.HandleTileDestruction(player, location);
              if (editType == TileEditType.PlaceWire || editType == TileEditType.PlaceWireBlue || editType == TileEditType.PlaceWireGreen)
            return this.HandleWirePlace(player, location);

              #if DEBUG || Testrun
              if (editType == TileEditType.DestroyWire) {
            player.SendMessage(location.ToString(), Color.Aqua);

            if (!TerrariaUtils.Tiles[location].active())
              return false;

            ObjectMeasureData measureData = TerrariaUtils.Tiles.MeasureObject(location);
            player.SendInfoMessage(string.Format(
              "X: {0}, Y: {1}, FrameX: {2}, FrameY: {3}, Origin X: {4}, Origin Y: {5}, Active State: {6}",
              location.X, location.Y, TerrariaUtils.Tiles[location].frameX, TerrariaUtils.Tiles[location].frameY,
              measureData.OriginTileLocation.X, measureData.OriginTileLocation.Y,
              TerrariaUtils.Tiles.ObjectHasActiveState(measureData)
            ));
              }
              #endif

              return false;
        }
Пример #10
0
		public async Task<bool> AddAsync(TSPlayer player, DateTime expiration)
		{
			return await Task.Run(() =>
			{
				syncLock.EnterWriteLock();

				try
				{
					return db.Query("INSERT INTO Mutes VALUES (@0, @1, @2, @3, @4, @5)",
						null,
						player.Name,
						player.UUID,
						player.IP,
						DateTime.UtcNow.ToString("s"),
						expiration.ToString("s")) > 0;
				}
				catch (Exception ex)
				{
					TShock.Log.Error(ex.ToString());
					return false;
				}
				finally
				{
					syncLock.ExitWriteLock();
				}
			});
		}
Пример #11
0
 public static void DisplaySearchResults(TSPlayer Player, List<object> Results, int Page)
 {
     if (Results[0] is Item)
         Send.Info(Player, "Item Search:");
     else if (Results[0] is NPC)
         Send.Info(Player, "NPC Search:");
     var sb = new StringBuilder();
     if (Results.Count > (8 * (Page - 1)))
     {
         for (int j = (8 * (Page - 1)); j < (8 * Page); j++)
         {
             if (sb.Length != 0)
                 sb.Append(" | ");
             if (Results[j] is Item)
                 sb.Append(((Item)Results[j]).netID).Append(": ").Append(((Item)Results[j]).name);
             else if (Results[j] is NPC)
                 sb.Append(((NPC)Results[j]).netID).Append(": ").Append(((NPC)Results[j]).name);
             if (j == Results.Count - 1)
             {
                 Send.Success(Player, sb.ToString());
                 break;
             }
             if ((j + 1) % 2 == 0)
             {
                 Send.Success(Player, sb.ToString());
                 sb.Clear();
             }
         }
     }
     if (Results.Count > (8 * Page))
     {
         Send.Info(Player, "Type /spage {0} for more Results.", Page + 1);
     }
 }
Пример #12
0
        public bool CheckPermissions(TSPlayer player)
        {
            if (player == null) return false;

              var sPly = SignCommands.ScPlayers[player.Index];
              if (sPly == null) {
            TShock.Log.ConsoleError("An error occured while executing a sign command."
                         + "TSPlayer {0} at index {1} does not exist as an ScPlayer",
            player.Name, player.Index);
            player.SendErrorMessage("An error occured. Please try again");
            return false;
              }

              if (freeAccess) return true;

              if (!string.IsNullOrEmpty(requiredPermission))
            if (player.Group.HasPermission(requiredPermission))
              return true;
            else {
              if (sPly.AlertPermissionCooldown == 0) {
            player.SendErrorMessage("You do not have the required permission to use this sign.");
            sPly.AlertPermissionCooldown = 3;
              }
              return false;
            }

              if (commands.Values.All(command => command.CanRun(player)))
            return true;

              if (sPly.AlertPermissionCooldown == 0) {
            player.SendErrorMessage("You do not have access to the commands on this sign.");
            sPly.AlertPermissionCooldown = 3;
              }
              return false;
        }
Пример #13
0
 public ScSign(string text, TSPlayer registrar, Point point)
 {
     _point = point;
     cooldown = 0;
     _cooldownGroup = string.Empty;
     RegisterCommands(text, registrar);
 }
Пример #14
0
 public InfoCommand(string account, int time, int radius, TSPlayer sender)
     : base(sender)
 {
     this.account = account;
     this.time = time;
     this.radius = radius;
 }
 public static void DisplaySearchResults(TSPlayer Player, List<object> Results, int Page)
 {
     if (Results[0] is Item)
         Player.SendInfoMessage("Item Search:");
     else if (Results[0] is NPC)
         Player.SendInfoMessage("NPC Search:");
     var sb = new StringBuilder();
     if (Results.Count > (8 * (Page - 1)))
     {
         for (int j = (8 * (Page - 1)); j < (8 * Page); j++)
         {
             if (sb.Length != 0)
                 sb.Append(" | ");
             if (Results[j] is Item)
                 sb.Append(((Item)Results[j]).netID).Append(": ").Append(((Item)Results[j]).name);
             else if (Results[j] is NPC)
                 sb.Append(((NPC)Results[j]).netID).Append(": ").Append(((NPC)Results[j]).name);
             if (j == Results.Count - 1)
             {
                 Player.SendMessage(sb.ToString(), Color.MediumSeaGreen);
                 break;
             }
             if ((j + 1) % 2 == 0)
             {
                 Player.SendMessage(sb.ToString(), Color.MediumSeaGreen);
                 sb.Clear();
             }
         }
     }
     if (Results.Count > (8 * Page))
     {
         Player.SendMessage(string.Format("Type /spage {0} for more Results.", (Page + 1)), Color.Yellow);
     }
 }
Пример #16
0
        public static void InvokeChannelCreated(TSPlayer ts, Channel channel)
        {
            if (OnChannelCreate == null)
                return;

            OnChannelCreate(new ChannelEventArgs() { TSPlayer = ts, Channel = channel });
        }
Пример #17
0
        public static void OnClanLeave(TSPlayer ts, Clan clan)
        {
            if (ClanLeave == null)
                return;

            ClanLeave(new ClanLeaveEventArgs() { TSplayer = ts, Clan = clan });
        }
Пример #18
0
		public SetWire(int x, int y, int x2, int y2, TSPlayer plr, int wire, bool state, Expression expression)
			: base(x, y, x2, y2, plr)
		{
			this.expression = expression ?? new TestExpression(new Test(t => true));
			this.state = state;
			this.wire = wire;
		}
Пример #19
0
 public DataStorage(int _ID, int _style, TSPlayer _tsplayer, bool _isAuto)
 {
     ID = _ID;
     style = _style;
     tsplayer = _tsplayer;
     isAuto = _isAuto;
 }
Пример #20
0
        public static void OnClanLogout(TSPlayer ts, Clan clan)
        {
            if (ClanLogout == null)
                return;

            ClanLogout(new ClanLogoutEventArgs() { TSplayer = ts, Clan = clan });
        }
Пример #21
0
 public PlayerData(Vault instance, TSPlayer player)
 {
     main = instance;
     TSPlayer = player;
     UpdatePlayerData();
     StartUpdating();
 }
Пример #22
0
        public static void SendEmail(TSPlayer player, string email, User user)
        {
            MailMessage mail = new MailMessage(AccountRecovery.Config.EmailFrom, email);
            SmtpClient client = new SmtpClient();
            client.Timeout = 15000;
            client.Host = AccountRecovery.Config.HostSMTPServer;
            client.Port = AccountRecovery.Config.HostPort;
            client.DeliveryMethod = SmtpDeliveryMethod.Network;
            client.UseDefaultCredentials = false;
            client.Credentials = new System.Net.NetworkCredential(AccountRecovery.Config.ServerEmailAddress, AccountRecovery.Config.ServerEmailPassword);
            client.EnableSsl = true;
            //client.ServicePoint.MaxIdleTime = 1;
            mail.Subject = AccountRecovery.Config.EmailSubjectLine;
            mail.Body = AccountRecovery.Config.EmailBodyLine;
            mail.IsBodyHtml = AccountRecovery.Config.UseHTML;

            string passwordGenerated = GeneratePassword(AccountRecovery.Config.GeneratedPasswordLength);
            TShock.Users.SetUserPassword(user, passwordGenerated);
            TShock.Log.ConsoleInfo("{0} has requested a new password succesfully.", user.Name);

            mail.Body = string.Format(mail.Body.Replace("$NEW_PASSWORD", passwordGenerated));
            mail.Body = string.Format(mail.Body.Replace("$USERNAME", user.Name));

            client.Send(mail);
            client.Dispose();
            player.SendSuccessMessage("A new password has been generated and sent to {0} for {1}.", email, user.Name);
            TShock.Log.ConsoleInfo("A new password has been generated and sent to {0} for {1}.", email, user.Name);
        }
Пример #23
0
        public static void OnClanCreated(TSPlayer ts, string clanname)
        {
            if (ClanCreated == null)
                return;

            ClanCreated(new ClanCreatedEventArgs() { TSplayer = ts, ClanName = clanname });
        }
Пример #24
0
		public CommandArgs(string message, bool silent, TSPlayer ply, List<string> args)
		{
			Message = message;
			Player = ply;
			Parameters = args;
			Silent = silent;
		}
Пример #25
0
        /// <summary>Calculates what part of the region border to show for a large region.</summary>
        public void calculateArea(TSPlayer tPlayer)
        {
            this.showArea = this.area;

            // If the region is large, only part of its border will be shown.
            if (this.showArea.Width >= MaximumSize) {
                this.showArea.X = (int) (tPlayer.X / 16) - MaximumSize / 2;
                this.showArea.Width = MaximumSize - 1;
                if (this.showArea.Left < this.area.Left) this.showArea.X = this.area.Left;
                else if (this.showArea.Right > this.area.Right) this.showArea.X = this.area.Right - (MaximumSize - 1);
            }
            if (this.showArea.Height >= MaximumSize) {
                this.showArea.Y = (int) (tPlayer.Y / 16) - MaximumSize / 2;
                this.showArea.Height = MaximumSize - 1;
                if (this.showArea.Top < this.area.Top) this.showArea.Y = this.area.Top;
                else if (this.showArea.Bottom > this.area.Bottom) this.showArea.Y = this.area.Bottom - (MaximumSize - 1);
            }

            // Ensure the region boundary is within the world.
            if (this.showArea.Left < 1) this.showArea.X = 1;
            else if (this.showArea.Left >= Main.maxTilesX - 1) this.showArea.X = Main.maxTilesX - 1;

            if (this.showArea.Top < 1) this.showArea.Y = 1;
            else if (this.showArea.Top >= Main.maxTilesY - 1) this.showArea.Y = Main.maxTilesY - 1;

            if (this.showArea.Right >= Main.maxTilesX - 1) this.showArea.Width = Main.maxTilesX - this.showArea.X - 2;
            if (this.showArea.Bottom >= Main.maxTilesY - 1) this.showArea.Height = Main.maxTilesY - this.showArea.Y - 2;
        }
 public ChestModifySlotEventArgs(TSPlayer player, int chestIndex, int slotIndex, ItemData newItem)
     : base(player)
 {
     this.ChestIndex = chestIndex;
       this.SlotIndex = slotIndex;
       this.NewItem = newItem;
 }
Пример #27
0
        public static void SpeedSpree(CommandArgs args)
        {
            config = Statistics.config;
            player = args.Player;

            switch (args.Parameters[0].ToLowerInvariant())
            {
            case "-l":
                SpeedKills.listTimers();
                break;

            case "-start":
                SpeedKills.StartSpeedKill();
                break;

            case "-stop":
                SpeedKills.StopSpeedKill();
                break;

            case "-i":
            case "-interval":
                config.SpeedSpreeTimeout = Int32.Parse(args.Parameters[1]);
                break;

            case "-p":
                SpeedKills.NewPlayer(Int32.Parse(args.Parameters[1]));
                break;
            }
        }
 public bool Protector_CheckProtected(TSPlayer player, DPoint tileLocation, bool fullAccessRequired) {
   try {
     return !ProtectorPlugin.LatestInstance.ProtectionManager.CheckBlockAccess(player, tileLocation, fullAccessRequired);
   } catch (Exception ex) {
     throw new CooperatingPluginException(null, ex);
   }
 }
Пример #29
0
        public static void InvokeChannelLogout(TSPlayer ts, Channel channel)
        {
            if (OnChannelLogout == null)
                return;

            OnChannelLogout(new ChannelEventArgs() { TSPlayer = ts, Channel = channel });
        }
Пример #30
0
 public static bool CanCreate(TSPlayer player, scSign sign)
 {
     foreach (scCommand cmd in sign.Commands)
         if (!player.Group.HasPermission(string.Concat("essentials.signs.create.", cmd.command)))
             return false;
     return true;
 }
Пример #31
0
 public static void InvalidNewBountyUsage(TSPlayer player)
 {
     player.SendErrorMessage("Invalid usage! Proper usages:");
     player.SendErrorMessage("/nbty <bounty name> <target>");
     player.SendErrorMessage("/nbty <-setrewards> [SEconomy currency amount]");
     player.SendErrorMessage("/nbty <-confirm/-cancel>");
 }
Пример #32
0
 private static void NotifyAdministrator(TSPlayer player, string[] changes)
 {
     player.SendMessage("The server is out of date.", Color.Red);
     for (int j = 0; j < changes.Length; j++)
     {
         player.SendMessage(changes[j], Color.Red);
     }
 }
Пример #33
0
 public bool CanRun(TSPlayer ply)
 {
     if (!ply.Group.HasPermission(permission))
     {
         return false;
     }
     return true;
 }
Пример #34
0
        /// <summary>Checks whether a given player is near a given region.</summary>
        /// <param name="tPlayer">The player to check</param>
        /// <param name="area">The region to check</param>
        /// <returns>true if the player is within 100 tiles of the region; false otherwise</returns>
        public static bool isPlayerNearby(TShockAPI.TSPlayer tPlayer, Rectangle area)
        {
            int playerX = (int)(tPlayer.X / 16);
            int playerY = (int)(tPlayer.Y / 16);

            return(playerX >= area.Left - NearRange &&
                   playerX <= area.Right + NearRange &&
                   playerY >= area.Top - NearRange &&
                   playerY <= area.Bottom + NearRange);
        }
Пример #35
0
        /// <summary>
        /// This is a copy of TShocks handlecommand method, sans the permission checks
        /// </summary>
        public static bool PermissionlessInvoke(this TShockAPI.TSPlayer player, string text, bool silent = false)
        {
            IEnumerable <TShockAPI.Command> cmds;
            List <string> args;
            string        cmdName;
            string        cmdText;

            if (string.IsNullOrEmpty(text))
            {
                return(false);
            }

            cmdText = text.Remove(0, 1);
            args    = typeof(TShockAPI.Commands).CallPrivateMethod <List <string> >(true, "ParseParameters", cmdText);

            if (args.Count < 1)
            {
                return(false);
            }

            cmdName = args[0].ToLower();
            args.RemoveAt(0);
            cmds = TShockAPI.Commands.ChatCommands.Where(c => c.HasAlias(cmdName));

            if (Enumerable.Count(cmds) == 0)
            {
                if (player.AwaitingResponse.ContainsKey(cmdName))
                {
                    Action <TShockAPI.CommandArgs> call = player.AwaitingResponse[cmdName];
                    player.AwaitingResponse.Remove(cmdName);
                    call(new TShockAPI.CommandArgs(cmdText, player, args));
                    return(true);
                }
                player.SendErrorMessage("Invalid command entered. Type /help for a list of valid commands.");
                return(true);
            }

            foreach (TShockAPI.Command cmd in cmds)
            {
                if (!cmd.AllowServer && !player.RealPlayer)
                {
                    player.SendErrorMessage("You must use this command in-game.");
                }
                else
                {
                    if (cmd.DoLog && silent == false)
                    {
                        TShockAPI.TShock.Utils.SendLogs(string.Format("{0} executed: /{1}.", player.Name, cmdText), Color.Red);
                    }
                    cmd.RunWithoutPermissions(cmdText, player, args);
                }
            }

            return(true);
        }
Пример #36
0
        //Buffs
        #region Permabuff
        public static void Permabuff(CommandArgs args)
        {
            if (args.Parameters.Count == 0)
            {
                var player = Utils.GetPlayers(args.Player.Index);
                player.isPermabuff = !player.isPermabuff;

                args.Player.SendSuccessMessage("Permabuffs are now " + (player.isPermabuff ? "on" : "off"));
            }
            else
            {
                string str = args.Parameters[0];

                var findPlayers = TShockAPI.TShock.Utils.FindPlayer(str);

                if (findPlayers.Count > 1)
                {
                    List <string> foundPlayers = new List <string>();
                    foreach (TSPlayer player in findPlayers)
                    {
                        foundPlayers.Add(player.Name);
                    }

                    TShock.Utils.SendMultipleMatchError(args.Player, foundPlayers);
                }

                else if (findPlayers.Count < 1)
                {
                    args.Player.SendErrorMessage(findPlayers.Count + " players matched.");
                }

                else
                {
                    var player             = Utils.GetPlayers(args.Parameters[0]);
                    TShockAPI.TSPlayer ply = findPlayers[0];

                    player.isPermabuff = !player.isPermabuff;

                    args.Player.SendSuccessMessage(string.Format("You have {0}tivated permabuffs on {1}.",
                                                                 (player.isPermabuff ? "ac" : "deac"), ply.Name));

                    ply.SendInfoMessage(string.Format("{0} has {1}tivated permabuffs on you",
                                                      args.Player.Name, (player.isPermabuff ? "ac" : "deac")));

                    if (player.isPermabuff)
                    {
                        if (!updateTimers.permaBuffTimer.Enabled)
                        {
                            updateTimers.permaBuffTimer.Enabled = true;
                        }
                    }
                }
            }
        }
Пример #37
0
        public bool PlayerHasPermission(object PlayerRef, object GroupName)
        {
            TShockAPI.TSPlayer returnPlayer = null;

            if ((returnPlayer = GetPlayer(PlayerRef)) == null || GroupName == null)
            {
                return(false);
            }

            return(returnPlayer.Group.HasPermission(GroupName.ToString()));
        }
Пример #38
0
 public static bool CheckPermissions(this TShockAPI.TSPlayer player, List <string> perms)
 {
     foreach (var perm in perms)
     {
         if (player.HasPermission(perm))
         {
             return(true);
         }
     }
     return(false);
 }
Пример #39
0
        public static void AutoHeal(CommandArgs args)
        {
            if (args.Parameters.Count == 0)
            {
                var player = Utils.GetPlayers(args.Player.Index);
                player.isHeal = !player.isHeal;

                args.Player.SendSuccessMessage("Autoheal is now " + (player.isHeal ? "on" : "off"));
            }
            else
            {
                string str = args.Parameters[0];

                var findPlayers = TShockAPI.TShock.Utils.FindPlayer(str);

                if (findPlayers.Count > 1)
                {
                    List <string> foundPlayers = new List <string>();
                    foreach (TSPlayer player in findPlayers)
                    {
                        foundPlayers.Add(player.Name);
                    }

                    TShock.Utils.SendMultipleMatchError(args.Player, foundPlayers);
                }

                else if (findPlayers.Count < 1)
                {
                    args.Player.SendMessage(findPlayers.Count + " players matched.", Color.Red);
                }

                else
                {
                    var player             = Utils.GetPlayers(args.Parameters[0]);
                    TShockAPI.TSPlayer ply = findPlayers[0];

                    player.isHeal = !player.isHeal;

                    if (player.isHeal)
                    {
                        args.Player.SendInfoMessage("You have activated auto-heal for " + ply.Name + ".");
                        ply.SendInfoMessage(args.Player.Name + " has activated auto-heal on you");
                    }

                    else
                    {
                        args.Player.SendInfoMessage("You have deactivated auto-heal for " + ply.Name + ".");
                        ply.SendInfoMessage(args.Player.Name + " has deactivated auto-heal on you");
                    }
                }
            }
        }
Пример #40
0
        public void MessageWithColour(object Colour, object Player, object Message)
        {
            TShockAPI.TSPlayer ply = null;
            string             msg = Message.ToString();
            Color c = ParseColour(Colour);

            if ((ply = GetPlayer(Player)) == null ||
                string.IsNullOrEmpty(msg) == true)
            {
                return;
            }

            ply.SendMessageFormat(c, "{0}", Message);
        }
Пример #41
0
        public IBankAccount GetBankAccount(TShockAPI.TSPlayer tsPlayer)
        {
            if (tsPlayer == null || RunningJournal == null)
            {
                return(null);
            }

            if (tsPlayer == TSPlayer.Server)
            {
                return(WorldAccount);
            }

            try {
                return(RunningJournal.GetBankAccountByName(tsPlayer.UserAccountName));
            } catch (Exception ex) {
                TShock.Log.ConsoleError("seconomy error: Error getting bank account for {0}: {1}",
                                        tsPlayer.Name, ex.Message);
                return(null);
            }
        }
Пример #42
0
        public bool ExecuteCommandSilent(object Player, object Command)
        {
            TShockAPI.TSPlayer p = null;
            string             commandToExecute = "";

            if ((p = GetPlayer(Player)) == null)
            {
                return(false);
            }

            try
            {
                if (Command is List <string> )
                {
                    List <string> cmdList = Command as List <string>;
                    foreach (var param in cmdList.Skip(1))
                    {
                        commandToExecute += " " + param;
                    }
                }
                else if (Command is string)
                {
                    commandToExecute = Command.ToString();
                }

                if (string.IsNullOrEmpty((commandToExecute = commandToExecute.Trim())) == true)
                {
                    return(false);
                }

                p.PermissionlessInvoke(commandToExecute, true);

                return(true);
            }
            catch (Exception)
            {
                ScriptLog.ErrorFormat("tshock_exec_silent", "The command \"{0}\" failed.", commandToExecute.Trim());
                return(false);
            }
        }
Пример #43
0
        /// <summary>
        /// Restores a player's character to the state stored in the database
        /// </summary>
        /// <param name="player"></param>
        public void RestoreCharacter(TSPlayer player)
        {
            // Start ignoring SSC-related packets! This is critical so that we don't send or receive dirty data!
            player.IgnoreSSCPackets = true;

            player.TPlayer.statLife    = this.health;
            player.TPlayer.statLifeMax = this.maxHealth;
            player.TPlayer.statMana    = this.maxMana;
            player.TPlayer.statManaMax = this.maxMana;
            player.TPlayer.SpawnX      = this.spawnX;
            player.TPlayer.SpawnY      = this.spawnY;
            player.sX = this.spawnX;
            player.sY = this.spawnY;
            player.TPlayer.hairDye = this.hairDye;
            player.TPlayer.anglerQuestsFinished = this.questsCompleted;

            if (extraSlot != null)
            {
                player.TPlayer.extraAccessory = extraSlot.Value == 1 ? true : false;
            }
            if (this.skinVariant != null)
            {
                player.TPlayer.skinVariant = this.skinVariant.Value;
            }
            if (this.hair != null)
            {
                player.TPlayer.hair = this.hair.Value;
            }
            if (this.hairColor != null)
            {
                player.TPlayer.hairColor = this.hairColor.Value;
            }
            if (this.pantsColor != null)
            {
                player.TPlayer.pantsColor = this.pantsColor.Value;
            }
            if (this.shirtColor != null)
            {
                player.TPlayer.shirtColor = this.shirtColor.Value;
            }
            if (this.underShirtColor != null)
            {
                player.TPlayer.underShirtColor = this.underShirtColor.Value;
            }
            if (this.shoeColor != null)
            {
                player.TPlayer.shoeColor = this.shoeColor.Value;
            }
            if (this.skinColor != null)
            {
                player.TPlayer.skinColor = this.skinColor.Value;
            }
            if (this.eyeColor != null)
            {
                player.TPlayer.eyeColor = this.eyeColor.Value;
            }

            if (this.hideVisuals != null)
            {
                player.TPlayer.hideVisual = this.hideVisuals;
            }
            else
            {
                player.TPlayer.hideVisual = new bool[player.TPlayer.hideVisual.Length];
            }

            for (int i = 0; i < NetItem.MaxInventory; i++)
            {
                if (i < NetItem.InventoryIndex.Item2)
                {
                    //0-58
                    player.TPlayer.inventory[i].netDefaults(this.inventory[i].NetId);

                    if (player.TPlayer.inventory[i].netID != 0)
                    {
                        player.TPlayer.inventory[i].stack  = this.inventory[i].Stack;
                        player.TPlayer.inventory[i].prefix = this.inventory[i].PrefixId;
                    }
                }
                else if (i < NetItem.ArmorIndex.Item2)
                {
                    //59-78
                    var index = i - NetItem.ArmorIndex.Item1;
                    player.TPlayer.armor[index].netDefaults(this.inventory[i].NetId);

                    if (player.TPlayer.armor[index].netID != 0)
                    {
                        player.TPlayer.armor[index].stack  = this.inventory[i].Stack;
                        player.TPlayer.armor[index].prefix = (byte)this.inventory[i].PrefixId;
                    }
                }
                else if (i < NetItem.DyeIndex.Item2)
                {
                    //79-88
                    var index = i - NetItem.DyeIndex.Item1;
                    player.TPlayer.dye[index].netDefaults(this.inventory[i].NetId);

                    if (player.TPlayer.dye[index].netID != 0)
                    {
                        player.TPlayer.dye[index].stack  = this.inventory[i].Stack;
                        player.TPlayer.dye[index].prefix = (byte)this.inventory[i].PrefixId;
                    }
                }
                else if (i < NetItem.MiscEquipIndex.Item2)
                {
                    //89-93
                    var index = i - NetItem.MiscEquipIndex.Item1;
                    player.TPlayer.miscEquips[index].netDefaults(this.inventory[i].NetId);

                    if (player.TPlayer.miscEquips[index].netID != 0)
                    {
                        player.TPlayer.miscEquips[index].stack  = this.inventory[i].Stack;
                        player.TPlayer.miscEquips[index].prefix = (byte)this.inventory[i].PrefixId;
                    }
                }
                else if (i < NetItem.MiscDyeIndex.Item2)
                {
                    //93-98
                    var index = i - NetItem.MiscDyeIndex.Item1;
                    player.TPlayer.miscDyes[index].netDefaults(this.inventory[i].NetId);

                    if (player.TPlayer.miscDyes[index].netID != 0)
                    {
                        player.TPlayer.miscDyes[index].stack  = this.inventory[i].Stack;
                        player.TPlayer.miscDyes[index].prefix = (byte)this.inventory[i].PrefixId;
                    }
                }
                else if (i < NetItem.PiggyIndex.Item2)
                {
                    //98-138
                    var index = i - NetItem.PiggyIndex.Item1;
                    player.TPlayer.bank.item[index].netDefaults(this.inventory[i].NetId);

                    if (player.TPlayer.bank.item[index].netID != 0)
                    {
                        player.TPlayer.bank.item[index].stack  = this.inventory[i].Stack;
                        player.TPlayer.bank.item[index].prefix = (byte)this.inventory[i].PrefixId;
                    }
                }
                else if (i < NetItem.SafeIndex.Item2)
                {
                    //138-178
                    var index = i - NetItem.SafeIndex.Item1;
                    player.TPlayer.bank2.item[index].netDefaults(this.inventory[i].NetId);

                    if (player.TPlayer.bank2.item[index].netID != 0)
                    {
                        player.TPlayer.bank2.item[index].stack  = this.inventory[i].Stack;
                        player.TPlayer.bank2.item[index].prefix = (byte)this.inventory[i].PrefixId;
                    }
                }
                else if (i < NetItem.TrashIndex.Item2)
                {
                    //179-219
                    var index = i - NetItem.TrashIndex.Item1;
                    player.TPlayer.trashItem.netDefaults(this.inventory[i].NetId);

                    if (player.TPlayer.trashItem.netID != 0)
                    {
                        player.TPlayer.trashItem.stack  = this.inventory[i].Stack;
                        player.TPlayer.trashItem.prefix = (byte)this.inventory[i].PrefixId;
                    }
                }
                else
                {
                    //220
                    var index = i - NetItem.ForgeIndex.Item1;
                    player.TPlayer.bank3.item[index].netDefaults(this.inventory[i].NetId);

                    if (player.TPlayer.bank3.item[index].netID != 0)
                    {
                        player.TPlayer.bank3.item[index].stack = this.inventory[i].Stack;
                        player.TPlayer.bank3.item[index].Prefix((byte)this.inventory[i].PrefixId);
                    }
                }
            }

            float slot = 0f;

            for (int k = 0; k < NetItem.InventorySlots; k++)
            {
                NetMessage.SendData(5, -1, -1, Main.player[player.Index].inventory[k].name, player.Index, slot, (float)Main.player[player.Index].inventory[k].prefix);
                slot++;
            }
            for (int k = 0; k < NetItem.ArmorSlots; k++)
            {
                NetMessage.SendData(5, -1, -1, Main.player[player.Index].armor[k].name, player.Index, slot, (float)Main.player[player.Index].armor[k].prefix);
                slot++;
            }
            for (int k = 0; k < NetItem.DyeSlots; k++)
            {
                NetMessage.SendData(5, -1, -1, Main.player[player.Index].dye[k].name, player.Index, slot, (float)Main.player[player.Index].dye[k].prefix);
                slot++;
            }
            for (int k = 0; k < NetItem.MiscEquipSlots; k++)
            {
                NetMessage.SendData(5, -1, -1, Main.player[player.Index].miscEquips[k].name, player.Index, slot, (float)Main.player[player.Index].miscEquips[k].prefix);
                slot++;
            }
            for (int k = 0; k < NetItem.MiscDyeSlots; k++)
            {
                NetMessage.SendData(5, -1, -1, Main.player[player.Index].miscDyes[k].name, player.Index, slot, (float)Main.player[player.Index].miscDyes[k].prefix);
                slot++;
            }
            for (int k = 0; k < NetItem.PiggySlots; k++)
            {
                NetMessage.SendData(5, -1, -1, Main.player[player.Index].bank.item[k].name, player.Index, slot, (float)Main.player[player.Index].bank.item[k].prefix);
                slot++;
            }
            for (int k = 0; k < NetItem.SafeSlots; k++)
            {
                NetMessage.SendData(5, -1, -1, Main.player[player.Index].bank2.item[k].name, player.Index, slot, (float)Main.player[player.Index].bank2.item[k].prefix);
                slot++;
            }
            NetMessage.SendData(5, -1, -1, Main.player[player.Index].trashItem.name, player.Index, slot++, (float)Main.player[player.Index].trashItem.prefix);
            for (int k = 0; k < NetItem.ForgeSlots; k++)
            {
                NetMessage.SendData(5, -1, -1, Main.player[player.Index].bank3.item[k].name, player.Index, slot, (float)Main.player[player.Index].bank3.item[k].prefix);
                slot++;
            }


            NetMessage.SendData(4, -1, -1, player.Name, player.Index, 0f, 0f, 0f, 0);
            NetMessage.SendData(42, -1, -1, "", player.Index, 0f, 0f, 0f, 0);
            NetMessage.SendData(16, -1, -1, "", player.Index, 0f, 0f, 0f, 0);

            slot = 0f;
            for (int k = 0; k < NetItem.InventorySlots; k++)
            {
                NetMessage.SendData(5, player.Index, -1, Main.player[player.Index].inventory[k].name, player.Index, slot, (float)Main.player[player.Index].inventory[k].prefix);
                slot++;
            }
            for (int k = 0; k < NetItem.ArmorSlots; k++)
            {
                NetMessage.SendData(5, player.Index, -1, Main.player[player.Index].armor[k].name, player.Index, slot, (float)Main.player[player.Index].armor[k].prefix);
                slot++;
            }
            for (int k = 0; k < NetItem.DyeSlots; k++)
            {
                NetMessage.SendData(5, player.Index, -1, Main.player[player.Index].dye[k].name, player.Index, slot, (float)Main.player[player.Index].dye[k].prefix);
                slot++;
            }
            for (int k = 0; k < NetItem.MiscEquipSlots; k++)
            {
                NetMessage.SendData(5, player.Index, -1, Main.player[player.Index].miscEquips[k].name, player.Index, slot, (float)Main.player[player.Index].miscEquips[k].prefix);
                slot++;
            }
            for (int k = 0; k < NetItem.MiscDyeSlots; k++)
            {
                NetMessage.SendData(5, player.Index, -1, Main.player[player.Index].miscDyes[k].name, player.Index, slot, (float)Main.player[player.Index].miscDyes[k].prefix);
                slot++;
            }
            for (int k = 0; k < NetItem.PiggySlots; k++)
            {
                NetMessage.SendData(5, player.Index, -1, Main.player[player.Index].bank.item[k].name, player.Index, slot, (float)Main.player[player.Index].bank.item[k].prefix);
                slot++;
            }
            for (int k = 0; k < NetItem.SafeSlots; k++)
            {
                NetMessage.SendData(5, player.Index, -1, Main.player[player.Index].bank2.item[k].name, player.Index, slot, (float)Main.player[player.Index].bank2.item[k].prefix);
                slot++;
            }
            NetMessage.SendData(5, player.Index, -1, Main.player[player.Index].trashItem.name, player.Index, slot++, (float)Main.player[player.Index].trashItem.prefix);
            for (int k = 0; k < NetItem.ForgeSlots; k++)
            {
                NetMessage.SendData(5, player.Index, -1, Main.player[player.Index].bank3.item[k].name, player.Index, slot, (float)Main.player[player.Index].bank3.item[k].prefix);
                slot++;
            }



            NetMessage.SendData(4, player.Index, -1, player.Name, player.Index, 0f, 0f, 0f, 0);
            NetMessage.SendData(42, player.Index, -1, "", player.Index, 0f, 0f, 0f, 0);
            NetMessage.SendData(16, player.Index, -1, "", player.Index, 0f, 0f, 0f, 0);

            for (int k = 0; k < 22; k++)
            {
                player.TPlayer.buffType[k] = 0;
            }

            /*
             * The following packets are sent twice because the server will not send a packet to a client
             * if they have not spawned yet if the remoteclient is -1
             * This is for when players login via uuid or serverpassword instead of via
             * the login command.
             */
            NetMessage.SendData(50, -1, -1, "", player.Index, 0f, 0f, 0f, 0);
            NetMessage.SendData(50, player.Index, -1, "", player.Index, 0f, 0f, 0f, 0);

            NetMessage.SendData(76, player.Index, -1, "", player.Index);
            NetMessage.SendData(76, -1, -1, "", player.Index);

            NetMessage.SendData(39, player.Index, -1, "", 400);
        }
Пример #44
0
        public static void SendPage(
            TSPlayer player, int pageNumber, IEnumerable dataToPaginate, int dataToPaginateCount, Settings settings = null)
        {
            if (settings == null)
            {
                settings = new Settings();
            }

            if (dataToPaginateCount == 0)
            {
                if (settings.NothingToDisplayString != null)
                {
                    if (!player.RealPlayer)
                    {
                        player.SendSuccessMessage(settings.NothingToDisplayString);
                    }
                    else
                    {
                        player.SendMessage(settings.NothingToDisplayString, settings.HeaderTextColor);
                    }
                }
                return;
            }

            int pageCount = ((dataToPaginateCount - 1) / settings.MaxLinesPerPage) + 1;

            if (settings.PageLimit > 0 && pageCount > settings.PageLimit)
            {
                pageCount = settings.PageLimit;
            }
            if (pageNumber > pageCount)
            {
                pageNumber = pageCount;
            }

            if (settings.IncludeHeader)
            {
                if (!player.RealPlayer)
                {
                    player.SendSuccessMessage(string.Format(settings.HeaderFormat, pageNumber, pageCount));
                }
                else
                {
                    player.SendMessage(string.Format(settings.HeaderFormat, pageNumber, pageCount), settings.HeaderTextColor);
                }
            }

            int listOffset    = (pageNumber - 1) * settings.MaxLinesPerPage;
            int offsetCounter = 0;
            int lineCounter   = 0;

            foreach (object lineData in dataToPaginate)
            {
                if (lineData == null)
                {
                    continue;
                }
                if (offsetCounter++ < listOffset)
                {
                    continue;
                }
                if (lineCounter++ == settings.MaxLinesPerPage)
                {
                    break;
                }

                string lineMessage;
                Color  lineColor = settings.LineTextColor;
                if (lineData is Tuple <string, Color> )
                {
                    var lineFormat = (Tuple <string, Color>)lineData;
                    lineMessage = lineFormat.Item1;
                    lineColor   = lineFormat.Item2;
                }
                else if (settings.LineFormatter != null)
                {
                    try
                    {
                        Tuple <string, Color> lineFormat = settings.LineFormatter(lineData, offsetCounter, pageNumber);
                        if (lineFormat == null)
                        {
                            continue;
                        }

                        lineMessage = lineFormat.Item1;
                        lineColor   = lineFormat.Item2;
                    }
                    catch (Exception ex)
                    {
                        throw new InvalidOperationException(
                                  "The method referenced by LineFormatter has thrown an exception. See inner exception for details.", ex);
                    }
                }
                else
                {
                    lineMessage = lineData.ToString();
                }

                if (lineMessage != null)
                {
                    if (!player.RealPlayer)
                    {
                        player.SendInfoMessage(lineMessage);
                    }
                    else
                    {
                        player.SendMessage(lineMessage, lineColor);
                    }
                }
            }

            if (lineCounter == 0)
            {
                if (settings.NothingToDisplayString != null)
                {
                    if (!player.RealPlayer)
                    {
                        player.SendSuccessMessage(settings.NothingToDisplayString);
                    }
                    else
                    {
                        player.SendMessage(settings.NothingToDisplayString, settings.HeaderTextColor);
                    }
                }
            }
            else if (settings.IncludeFooter && pageNumber + 1 <= pageCount)
            {
                if (!player.RealPlayer)
                {
                    player.SendInfoMessage(string.Format(settings.FooterFormat, pageNumber + 1, pageNumber, pageCount));
                }
                else
                {
                    player.SendMessage(string.Format(settings.FooterFormat, pageNumber + 1, pageNumber, pageCount), settings.FooterTextColor);
                }
            }
        }
Пример #45
0
        public static void BlitzMatch(CommandArgs args)
        {
            config = Statistics.config;
            player = args.Player;

            if (args.Parameters.Count < 1)
            {
                if (DateTime.Now >= config.BlitzEventStart)
                {
                    config.BlitzEventStart = DateTime.Now.AddSeconds(30);
                }

                KillingSpree.StartSpree();
                return;
            }

            switch (args.Parameters[0].ToLowerInvariant())
            {
            case "-bt":
            case "-blitztype":
                if (args.Parameters.Count >= 2)
                {
                    config.BlitzEventType = args.Parameters[1];
                }
                break;

            case "-t":
            case "-target":
                config.BlitzEventGoal = Int32.Parse(args.Parameters[1]);
                break;

            case "-i":
            case "-interval":
                config.BlitzEventLength = Int32.Parse(args.Parameters[1]);
                break;

            case "-s":
            case "-start":
                startSpree = new TimeSpan(0, 0, 0, 30);
                if (args.Parameters.Count >= 2)
                {
                    try
                    {
                        if (args.Parameters[1].Contains("h"))
                        {
                            startSpree = DateTime.ParseExact(args.Parameters[1], "H'h'm'm'", CultureInfo.InvariantCulture).TimeOfDay;
                        }
                        else
                        {
                            startSpree = DateTime.ParseExact(args.Parameters[1], "m'm'", CultureInfo.InvariantCulture).TimeOfDay;
                        }
                    }
                    catch
                    {
                        args.Player.SendErrorMessage("Start is not a valid date/time.");
                        return;
                    }
                }
                break;

            case "-go":
                config.BlitzEventStart = DateTime.Now.Add(startSpree);
                KillingSpree.StartSpree();
                break;
            }
        }
Пример #46
0
 public static void SendPage(TSPlayer player, int pageNumber, IList dataToPaginate, Settings settings = null)
 {
     PaginationTools.SendPage(player, pageNumber, dataToPaginate, dataToPaginate.Count, settings);
 }
Пример #47
0
        public static void Core(CommandArgs args)
        {
            config = Statistics.config;
            player = args.Player;
            string[] statList = { "MobKills", "BossKills", "PlayerKills" };

            if (args.Parameters.Count < 1)
            {
                string options = "";
                options += "-k(ills) - list the number of kills for the player";
                options += "-t(ime) - show time on for player";
                options += "-hs/highscores - list the top 5 players";
                options += "-d(amage) - show the amount of damage";
                options += "-s(een) - when the player was last seen";
                options += "-l(ist) - show all the data for the player(s)";
                options += "-stop - stops the Announcement feature";
                options += "-prune <days> - will prune KillingSpree table of data before <days> ago";
                options += "-o(ptions) will list all the values of the config file";
                options += "-r(eload) will reload the current config file and set all the values and time intervals as specified";
                options += "-n(otify) will send out all the announcements now. This will not impact the timing";

                args.Player.SendErrorMessage("Invalid syntax. /stats [flag] <player name>");
                args.Player.SendErrorMessage(options);

                return;
            }

            switch (args.Parameters[0].ToLowerInvariant())
            {
            case "-debug":
                if (args.Player.RealPlayer)
                {
                    args.Player.SendErrorMessage("Invalid stats option");
                    return;
                }
                Statistics.statsDebug = true;
                Console.WriteLine("Debug mode set");
                break;

            case "-kl":
                if (args.Player.RealPlayer)
                {
                    args.Player.SendErrorMessage("Invalid stats option");
                    return;
                }
                var playerData = TShock.Users.GetUserByID(Int32.Parse(args.Parameters[1]));
                var userName   = TShock.Users.GetUserByID(Int32.Parse(args.Parameters[1]));
                KillingSpree.SendKillingNotice(playerData.Name, Int32.Parse(args.Parameters[1]), 1, 0, 0);
                break;

            case "-km":
                if (args.Player.RealPlayer)
                {
                    args.Player.SendErrorMessage("Invalid stats option");
                    return;
                }
                playerData = TShock.Users.GetUserByID(Int32.Parse(args.Parameters[1]));
                if (args.Player.RealPlayer)
                {
                    args.Player.SendErrorMessage("Invalid stats option");
                    return;
                }
                Statistics.database.UpdateKillingSpree(Int32.Parse(args.Parameters[1]), 1, 0, 0);
                KillingSpree.SendKillingNotice(playerData.Name, Int32.Parse(args.Parameters[1]), 1, 0, 0);
                break;

            case "-kb":
                if (args.Player.RealPlayer)
                {
                    args.Player.SendErrorMessage("Invalid stats option");
                    return;
                }
                playerData = TShock.Users.GetUserByID(Int32.Parse(args.Parameters[1]));
                Statistics.database.UpdateKillingSpree(Int32.Parse(args.Parameters[1]), 0, 1, 0);
                KillingSpree.SendKillingNotice(playerData.Name, Int32.Parse(args.Parameters[1]), 0, 1, 0);
                break;

            case "-kk":
                SpeedKills.PlayerKill(Int32.Parse(args.Parameters[1]));
                break;

            case "-kp":
                if (args.Player.RealPlayer)
                {
                    args.Player.SendErrorMessage("Invalid stats option");
                    return;
                }
                playerData = TShock.Users.GetUserByID(Int32.Parse(args.Parameters[1]));
                Statistics.database.UpdateKillingSpree(Int32.Parse(args.Parameters[1]), 0, 0, 1);
                KillingSpree.SendKillingNotice(playerData.Name, Int32.Parse(args.Parameters[1]), 0, 0, 1);
                break;

            case "-kd":
                if (args.Player.RealPlayer)
                {
                    args.Player.SendErrorMessage("Invalid stats option");
                    return;
                }
                Statistics.database.CloseKillingSpree(Int32.Parse(args.Parameters[1]));
                KillingSpree.ClearBlitzEvent(Int32.Parse(args.Parameters[1]));
                break;

            case "-o":
            case "-options":

                if (args.Player.RealPlayer)
                {
                    args.Player.SendErrorMessage("Invalid stats option");
                    return;
                }
                Announcements.ConsoleSendMessage(string.Format(" isActive {0}", config.isActive));
                Announcements.ConsoleSendMessage(string.Format(" byTime {0}", config.byTime));
                Announcements.ConsoleSendMessage(string.Format(" showTimeStamp {0}", config.showTimeStamp));
                Announcements.ConsoleSendMessage(string.Format(" tellConsole {0}", config.tellConsole));
                Announcements.ConsoleSendMessage(string.Format(" consoleColor {0}", config.consoleColor));

                Announcements.ConsoleSendMessage(string.Format(" showKills {0}", config.showKills));
                Announcements.ConsoleSendMessage(string.Format(" KillstimeInterval {0}", config.KillstimeInterval));
                Announcements.ConsoleSendMessage(string.Format(" KillstimeOffset {0}", config.KillstimeOffset));
                Announcements.ConsoleSendMessage(string.Format(" KillsColor {0}", string.Join(",", config.KillsColor)));

                Announcements.ConsoleSendMessage(string.Format(" DamagetimeInterval {0}", config.DamagetimeInterval));
                Announcements.ConsoleSendMessage(string.Format(" showDamageKills {0}", config.showDamage));
                Announcements.ConsoleSendMessage(string.Format(" DamagetimeOffset {0}", config.DamagetimeOffset));
                Announcements.ConsoleSendMessage(string.Format(" DamageColor {0}", string.Join(",", config.DamageColor)));

                Announcements.ConsoleSendMessage(string.Format(" DeathstimeInterval {0}", config.DeathstimeInterval));
                Announcements.ConsoleSendMessage(string.Format(" showDeathsKills {0}", config.showDeaths));
                Announcements.ConsoleSendMessage(string.Format(" DeathstimeOffset {0}", config.DeathstimeOffset));
                Announcements.ConsoleSendMessage(string.Format(" DeathsColor {0}", string.Join(",", config.DeathsColor)));

                Announcements.ConsoleSendMessage(string.Format(" KillingSpree {0}", config.KillingSpree));
                Announcements.ConsoleSendMessage(string.Format(" KillingSpreeThreshold {0}", string.Join(",", config.KillingSpreeThreshold)));
                Announcements.ConsoleSendMessage(string.Format(" KillingSpreeMessage {0}", string.Join(",", config.KillingSpreeMessage)));
                Announcements.ConsoleSendMessage(string.Format(" KillingSpreeType {0}", config.KillingSpreeType));
                Announcements.ConsoleSendMessage(string.Format(" KillingSpreeColor {0}", string.Join(",", config.KillingSpreeColor)));

                Announcements.ConsoleSendMessage(string.Format(" SpreeStart {0}", config.BlitzEventStart));
                Announcements.ConsoleSendMessage(string.Format(" SpreeLength {0}", config.BlitzEventLength));
                Announcements.ConsoleSendMessage(string.Format(" SpreeEndByTime {0}", config.BlitzEventEndByTime));
                Announcements.ConsoleSendMessage(string.Format(" SpreeGoal {0}", config.BlitzEventGoal));
                Announcements.ConsoleSendMessage(string.Format(" SpreeType {0}", config.BlitzEventType));

                break;

            case "-prune":
                if (args.Parameters.Count < 2)
                {
                    args.Player.SendErrorMessage("No days specified for pruning.");
                    return;
                }
                int days = 0;
                try
                {
                    days = Int32.Parse(args.Parameters[1]);
                }
                catch
                {
                    args.Player.SendErrorMessage("days specified is not numeric.");
                    return;
                }
                if (days <= 0 || days >= 1000)
                {
                    args.Player.SendErrorMessage("days must be > 0 and < 1000.");
                    return;
                }
                int[] counts = Statistics.database.PruneKillingSpree(days);
                Announcements.ConsoleSendMessage(string.Format(" KillingSpree pruned {0} days: before[{1}] after[{2}].", Int32.Parse(args.Parameters[1]), counts[0], counts[1]));

                break;

            case "-r":
            case "-reload":
                if (args.Player.RealPlayer)
                {
                    args.Player.SendErrorMessage("Invalid stats option");
                    return;
                }
                Statistics.config = Config.loadConfig(Statistics.configPath);
                Announcements.stopAnnouncements();
                Announcements.setupAnnouncements();
                Announcements.ConsoleSendMessage(string.Format(" Announcements config reloaded"));

                break;

            case "-stop":
                Statistics.config.isActive = false;
                Announcements.stopAnnouncements();
                Announcements.ConsoleSendMessage(string.Format(" Announcements stopped"));

                break;

//                case "-init":
//                    Statistics.database.dropTables();
//                    Statistics.OnInitialize(null);
//                    break;

            case "-n":
            case "-notify":
                if (args.Player.RealPlayer)
                {
                    args.Player.SendErrorMessage("Invalid stats option");
                    return;
                }
                if (args.Parameters.Count < 2)
                {
                    Announcements.SendNoticeAll("");
                }
                else
                {
                    if (statList.Contains(args.Parameters[1]))
                    {
                        Announcements.SendNoticeAll(args.Parameters[1]);
                    }
                    else
                    {
                        Announcements.ConsoleSendMessage(string.Format(" Invalid stats option"));
                    }
                }
                break;

            case "-l":
            case "-list":
            {
                Dictionary <string, int[]> statsList = new Dictionary <string, int[]>();
                int page = 0, totalPages = 0;

                totalPages = Statistics.database.CountAllPlayers();
                if (totalPages == 0)
                {
                    args.Player.SendErrorMessage("No statistical data available");
                    return;
                }

                var lineColor = Color.Yellow;
                totalPages = (totalPages / 5) + 1;
                statsList.Clear();
                if (args.Parameters.Count < 2)
                {
                    statsList = Statistics.database.GetAllPlayers(page, 0);
                    page      = 1;
                }
                else
                {
                    bool isNum = Int32.TryParse(args.Parameters[1], out page);
                    if (isNum)
                    {
                        statsList = Statistics.database.GetAllPlayers(page, 0);

                        if (!args.Player.RealPlayer)
                        {
                            args.Player.SendInfoMessage("Statistics List - Page {0} of {1}", page, totalPages);
                        }
                        else
                        {
                            args.Player.SendMessage(string.Format("Statistics List - Page {0} of {1}", page, totalPages), lineColor);
                        }
                    }
                    else
                    {
                        var user = TShock.Users.GetUsers().Find(u => u.Name.StartsWith(args.Parameters[1]));

                        if (user == null)
                        {
                            args.Player.SendErrorMessage("No users found matching the name '{0}'", args.Parameters[1]);
                        }
                        else
                        {
                            statsList = Statistics.database.GetAllPlayers(1, user.ID);
                        }
                    }
                }
                foreach (KeyValuePair <string, int[]> stat in statsList)
                {
                    string   statsName = stat.Key;
                    int[]    stats     = stat.Value;
                    TimeSpan ts        = new TimeSpan(0, 0, 0, stats[2]);
                    var      total     = ts.Add(new TimeSpan(0, 0, 0, Statistics.TimeCache[stats[0]]));
                    if (!args.Player.RealPlayer)
                    {
                        args.Player.SendInfoMessage(" {0}, died {1} kills: player {4} mob {5} boss {6} - damage: mob {7} boss {8} player {9} received {10} on for {2} logins {3}",
                                                    statsName, stats[1], total.SToString(), stats[3], stats[4], stats[5], stats[6], stats[7], stats[8], stats[9], stats[10]);
                    }
                    else
                    {
                        args.Player.SendMessage(string.Format(" {0}, died {1} kills: player {4} mob {5} boss {6} - damage: mob {7} boss {8} player {9} received {10} on for {2} logins {3}",
                                                              statsName, stats[1], total.SToString(), stats[3], stats[4], stats[5], stats[6], stats[7], stats[8], stats[9], stats[10]), lineColor);
                    }
                }
            }
            break;

            case "-k":
            case "-kills":
            {
                if (args.Parameters.Count < 2)
                {
                    var kills = Statistics.database.GetCurrentKills(args.Player.User.ID);
                    if (kills == null)
                    {
                        args.Player.SendErrorMessage("Unable to discover your killcount. Sorry.");
                    }
                    else
                    {
                        args.Player.SendSuccessMessage(
                            "You have killed {0} player{4}, {1} mob{5}, {2} boss{6} and died {3} time{7}",
                            kills[4], kills[5], kills[6], kills[3],
                            kills[4].Suffix(), kills[5].Suffix(), kills[6].Suffix(true), kills[3].Suffix());
                    }
                }
                else
                {
                    var name = args.Parameters[1];
                    var user = TShock.Users.GetUsers().Find(u => u.Name.StartsWith(name));
                    if (user == null)
                    {
                        args.Player.SendErrorMessage("No users found matching the name '{0}'", name);
                    }
                    else
                    {
                        var kills = Statistics.database.GetCurrentKills(user.ID);
                        if (kills == null)
                        {
                            args.Player.SendErrorMessage("Unable to discover the killcount of {0}. Sorry.",
                                                         user.Name);
                        }
                        else
                        {
                            args.Player.SendSuccessMessage(
                                "{0} has killed {1} player{5}, {2} mob{6}, {3} boss{7} and died {4} time{8}",
                                user.Name, kills[4], kills[5], kills[6], kills[3],
                                kills[4].Suffix(), kills[5].Suffix(), kills[6].Suffix(true), kills[3].Suffix());
                        }
                    }
                }
                break;
            }

            case "-t":
            case "-time":
            {
                var logins = 1;
                if (args.Parameters.Count < 2)
                {
                    var times = Statistics.database.GetTimes(args.Player.User.ID, ref logins);
                    if (times == null)
                    {
                        args.Player.SendErrorMessage("Unable to discover your times. Sorry.");
                    }
                    else
                    {
                        var total = times[1].Add(new TimeSpan(0, 0, 0, Statistics.TimeCache[args.Player.Index]));
                        args.Player.SendSuccessMessage("You have played for {0}.", total.SToString());
                        args.Player.SendSuccessMessage("You have been registered for {0}.", times[0].SToString());
                        args.Player.SendSuccessMessage("You have logged in {0} times.", logins);
                    }
                }
                else
                {
                    var name  = args.Parameters[1];
                    var users = GetUsers(name);
                    if (users.Count > 1)
                    {
                        args.Player.SendErrorMessage("More than one user matched your search '{0}': {1}",
                                                     name, string.Join(", ", users.Select(u => u.Name)));
                        break;
                    }
                    if (users.Count == 0)
                    {
                        args.Player.SendErrorMessage("No users matched your search '{0}'", name);
                        break;
                    }

                    var user = users[0];

                    var times = Statistics.database.GetTimes(user.ID, ref logins);
                    if (times == null)
                    {
                        args.Player.SendErrorMessage("Unable to discover the times of {0}. Sorry.",
                                                     user.Name);
                    }
                    else
                    {
                        args.Player.SendSuccessMessage("{0} has played for {1}.", user.Name,
                                                       times[1].SToString());
                        args.Player.SendSuccessMessage("{0} has been registered for {1}.", user.Name,
                                                       times[0].SToString());
                        args.Player.SendSuccessMessage("{0} has logged in {1} times.", user.Name, logins);
                    }
                }
                break;
            }

            case "-s":
            case "-seen":
            {
                if (args.Parameters.Count < 2)
                {
                    args.Player.SendErrorMessage("Invalid syntax. /stats -s [player name]");
                }
                else
                {
                    var name  = args.Parameters[1];
                    var users = GetUsers(name);
                    if (users.Count > 1)
                    {
                        args.Player.SendErrorMessage("More than one user matched your search '{0}': {1}",
                                                     name, string.Join(", ", users.Select(u => u.Name)));
                        break;
                    }
                    if (users.Count == 0)
                    {
                        args.Player.SendErrorMessage("No users matched your search '{0}'", name);
                        break;
                    }

                    var user = users[0];
                    var seen = Statistics.database.GetLastSeen(user.ID);
                    if (seen == TimeSpan.MaxValue)
                    {
                        args.Player.SendErrorMessage("Unable to find {0}'s last login time.",
                                                     user.Name);
                    }
                    else
                    {
                        args.Player.SendSuccessMessage("{0} last logged in {1} ago.", user.Name, seen.SToString());
                    }
                }

                break;
            }

            case "-hs":
            case "-highscores":
            {
                var highscores = new Dictionary <string, int>();
                var page       = 1;
                if (args.Parameters.Count < 2)
                {
                    highscores = Statistics.database.GetHighScores(1);
                }
                else if (HsPagination.TryParsePageNumber(args.Parameters, 1, args.Player, out page))
                {
                    highscores = Statistics.database.GetHighScores(page);
                }

                HsPagination.SendPage(args.Player, page, highscores, new HsPagination.FormatSettings
                    {
                        FooterFormat           = "use /stats -hs {0} for more high scores",
                        FooterTextColor        = Color.Lime,
                        HeaderFormat           = "High Scores- Page {0} of {1}",
                        HeaderTextColor        = Color.Lime,
                        IncludeFooter          = true,
                        IncludeHeader          = true,
                        MaxLinesPerPage        = 5,
                        NothingToDisplayString = "No highscores available"
                    });

                break;
            }

            case "-d":
            case "-damage":
            {
                if (args.Parameters.Count < 2)
                {
                    var damages = Statistics.database.GetDamage(args.Player.User.ID);
                    if (damages == null)
                    {
                        args.Player.SendErrorMessage("Unable to discover your damage statistics. Sorry.");
                        return;
                    }
                    args.Player.SendSuccessMessage("You have dealt {0} damage to mobs, {1} damage to bosses "
                                                   + "and {2} damage to players.", damages[0], damages[1], damages[2]);
                    args.Player.SendSuccessMessage("You have been dealt {0} damage.", damages[3]);
                }
                else
                {
                    var name  = args.Parameters[1];
                    var users = GetUsers(name);
                    if (users.Count > 1)
                    {
                        args.Player.SendErrorMessage("More than one user matched your search '{0}': {1}",
                                                     name, string.Join(", ", users.Select(u => u.Name)));
                        break;
                    }
                    if (users.Count == 0)
                    {
                        args.Player.SendErrorMessage("No users matched your search '{0}'", name);
                        break;
                    }

                    var user    = users[0];
                    var damages = Statistics.database.GetDamage(user.ID);
                    if (damages == null)
                    {
                        args.Player.SendErrorMessage("Unable to discover your damage statistics. Sorry.");
                        return;
                    }
                    args.Player.SendSuccessMessage("{0} has dealt {1} damage to mobs, {2} damage to bosses "
                                                   + "and {3} damage to players.", user.Name, damages[0], damages[1], damages[2]);
                    args.Player.SendSuccessMessage("{0} has been dealt {1} damage.", user.Name, damages[3]);
                }
                break;
            }

            case "-ix":
            case "-infox":
            {
                break;
            }
            }
        }
Пример #48
0
        public static bool TryParsePageNumber(List <string> commandParameters, int expectedParameterIndex, TSPlayer errorMessageReceiver, out int pageNumber)
        {
            pageNumber = 1;
            if (commandParameters.Count <= expectedParameterIndex)
            {
                return(true);
            }

            string pageNumberRaw = commandParameters[expectedParameterIndex];

            if (!int.TryParse(pageNumberRaw, out pageNumber) || pageNumber < 1)
            {
                if (errorMessageReceiver != null)
                {
                    errorMessageReceiver.SendErrorMessage("\"{0}\" is not a valid page number.", pageNumberRaw);
                }

                pageNumber = 1;
                return(false);
            }

            return(true);
        }
Пример #49
0
        /// <summary>
        /// Copies a characters data to this object
        /// </summary>
        /// <param name="player"></param>
        public void CopyCharacter(TSPlayer player)
        {
            this.health    = player.TPlayer.statLife > 0 ? player.TPlayer.statLife : 1;
            this.maxHealth = player.TPlayer.statLifeMax;
            this.mana      = player.TPlayer.statMana;
            this.maxMana   = player.TPlayer.statManaMax;
            if (player.sX > 0 && player.sY > 0)
            {
                this.spawnX = player.sX;
                this.spawnY = player.sY;
            }
            else
            {
                this.spawnX = player.TPlayer.SpawnX;
                this.spawnY = player.TPlayer.SpawnY;
            }
            extraSlot            = player.TPlayer.extraAccessory ? 1 : 0;
            this.skinVariant     = player.TPlayer.skinVariant;
            this.hair            = player.TPlayer.hair;
            this.hairDye         = player.TPlayer.hairDye;
            this.hairColor       = player.TPlayer.hairColor;
            this.pantsColor      = player.TPlayer.pantsColor;
            this.shirtColor      = player.TPlayer.shirtColor;
            this.underShirtColor = player.TPlayer.underShirtColor;
            this.shoeColor       = player.TPlayer.shoeColor;
            this.hideVisuals     = player.TPlayer.hideVisual;
            this.skinColor       = player.TPlayer.skinColor;
            this.eyeColor        = player.TPlayer.eyeColor;
            this.questsCompleted = player.TPlayer.anglerQuestsFinished;

            Item[] inventory = player.TPlayer.inventory;
            Item[] armor     = player.TPlayer.armor;
            Item[] dye       = player.TPlayer.dye;
            Item[] miscEqups = player.TPlayer.miscEquips;
            Item[] miscDyes  = player.TPlayer.miscDyes;
            Item[] piggy     = player.TPlayer.bank.item;
            Item[] safe      = player.TPlayer.bank2.item;
            Item   trash     = player.TPlayer.trashItem;

            for (int i = 0; i < NetItem.MaxInventory; i++)
            {
                if (i < NetItem.InventorySlots)
                {
                    //0-58
                    this.inventory[i] = (NetItem)inventory[i];
                }
                else if (i < NetItem.InventorySlots + NetItem.ArmorSlots)
                {
                    //59-78
                    var index = i - NetItem.InventorySlots;
                    this.inventory[i] = (NetItem)armor[index];
                }
                else if (i < NetItem.InventorySlots + NetItem.ArmorSlots + NetItem.DyeSlots)
                {
                    //79-88
                    var index = i - (NetItem.InventorySlots + NetItem.ArmorSlots);
                    this.inventory[i] = (NetItem)dye[index];
                }
                else if (i <
                         NetItem.InventorySlots + NetItem.ArmorSlots + NetItem.DyeSlots + NetItem.MiscEquipSlots)
                {
                    //89-93
                    var index = i - (NetItem.InventorySlots + NetItem.ArmorSlots + NetItem.DyeSlots);
                    this.inventory[i] = (NetItem)miscEqups[index];
                }
                else if (i <
                         NetItem.InventorySlots + NetItem.ArmorSlots + NetItem.DyeSlots + NetItem.MiscEquipSlots
                         + NetItem.MiscDyeSlots)
                {
                    //93-98
                    var index = i - (NetItem.InventorySlots + NetItem.ArmorSlots + NetItem.DyeSlots
                                     + NetItem.MiscEquipSlots);
                    this.inventory[i] = (NetItem)miscDyes[index];
                }
                else if (i <
                         NetItem.InventorySlots + NetItem.ArmorSlots + NetItem.DyeSlots + NetItem.MiscEquipSlots +
                         NetItem.MiscDyeSlots + NetItem.PiggySlots)
                {
                    //98-138
                    var index = i - (NetItem.InventorySlots + NetItem.ArmorSlots + NetItem.DyeSlots
                                     + NetItem.MiscEquipSlots + NetItem.MiscDyeSlots);
                    this.inventory[i] = (NetItem)piggy[index];
                }
                else if (i <
                         NetItem.InventorySlots + NetItem.ArmorSlots + NetItem.DyeSlots + NetItem.MiscEquipSlots +
                         NetItem.MiscDyeSlots + NetItem.PiggySlots + NetItem.SafeSlots)
                {
                    //138-178
                    var index = i - (NetItem.InventorySlots + NetItem.ArmorSlots + NetItem.DyeSlots
                                     + NetItem.MiscEquipSlots + NetItem.MiscDyeSlots + NetItem.PiggySlots);
                    this.inventory[i] = (NetItem)safe[index];
                }
                else
                {
                    //179
                    this.inventory[i] = (NetItem)trash;
                }
            }
        }
Пример #50
0
        public static bool CheckInventory(TSPlayer 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;
            }

            if (player.TPlayer.statManaMax > playerData.maxMana)
            {
                player.SendMessage("Error: Your max mana exceeded (" + playerData.maxMana + ") 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("Error: 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("Error: 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("Error: Your item (" + item.name + ") (" + inventory[i].stack + ") needs to have it's stack 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("Error: 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("Error: 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("Error: Your armor (" + item.name + ") (" + inventory[i].stack + ") needs to have it's stack decreased to (" + playerData.inventory[i].stack + ").", Color.Cyan);
                            check = false;
                        }
                    }
                }
            }

            return(check);
        }
Пример #51
0
        /// <summary>
        /// Executes the AliasCommand.  Will either forward the command to the tshock handler or do something else
        /// </summary>
        protected void DoCommands(AliasCommand alias, TShockAPI.TSPlayer player, List <string> parameters)
        {
            //loop through each alias and do the commands.
            foreach (string commandToExecute in alias.CommandsToExecute)
            {
                //todo: parse paramaters and dynamics
                string mangledString = commandToExecute;

                //specifies whether the command to run should be executed as a command, or ignored.
                //useful for functions like $msg that does other shit
                bool executeCommand = true;

                //replace parameter markers with actual parameter values
                ReplaceParameterMarkers(parameters, ref mangledString);

                mangledString = mangledString.Replace("$calleraccount", player.User.Name);
                mangledString = mangledString.Replace("$callername", player.Name);

                //$random(x,y) support.  Returns a random number between x and y
                if (randomRegex.IsMatch(mangledString))
                {
                    foreach (Match match in randomRegex.Matches(mangledString))
                    {
                        int randomFrom = 0;
                        int randomTo   = 0;

                        if (!string.IsNullOrEmpty(match.Groups[2].Value) && int.TryParse(match.Groups[2].Value, out randomTo) &&
                            !string.IsNullOrEmpty(match.Groups[1].Value) && int.TryParse(match.Groups[1].Value, out randomFrom))
                        {
                            // this is a critical section
                            // Random class is seeded from the system clock if you construct one without a seed.
                            // therefore, calls to Next() at exactly the same point in time is likely to produce the same number.
                            lock (__rndLock) {
                                mangledString = mangledString.Replace(match.ToString(), randomGenerator.Next(randomFrom, randomTo).ToString());
                            }
                        }
                        else
                        {
                            TShock.Log.ConsoleError(match.ToString() + " has some stupid shit in it, have a look at your AliasCmd config file.");
                            mangledString = mangledString.Replace(match.ToString(), "");
                        }
                    }
                }

                // $runas(u,cmd) support.  Run command as user
                if (runasFunctionRegex.IsMatch(mangledString))
                {
                    foreach (Match match in runasFunctionRegex.Matches(mangledString))
                    {
                        string   impersonatedName   = match.Groups[2].Value;
                        TSPlayer impersonatedPlayer = TShockAPI.TShock.Players.FirstOrDefault(i => i != null && i.Name == impersonatedName);

                        if (impersonatedPlayer != null)
                        {
                            string commandToRun = match.Groups[3].Value;
                            player = impersonatedPlayer;

                            mangledString = commandToRun.Trim();
                        }
                    }
                }

                // $msg(u,msg) support.  Sends the user a non-chat informational message
                if (msgRegex.IsMatch(mangledString))
                {
                    foreach (Match match in msgRegex.Matches(mangledString))
                    {
                        string   msgTarget         = match.Groups[2].Value.Trim();
                        string   message           = match.Groups[3].Value.Trim();
                        TSPlayer destinationPlayer = TShockAPI.TShock.Players.FirstOrDefault(i => i != null && i.Name == msgTarget);

                        if (destinationPlayer != null)
                        {
                            //custom command, skip forwarding of the command to the tshock executer
                            executeCommand = false;

                            destinationPlayer.SendInfoMessage(message);
                        }
                    }
                }

                //and send the command to tshock to do.
                try {
                    //prevent an infinite loop for a subcommand calling the alias again causing a commandloop
                    string command = mangledString.Split(' ')[0].Substring(1);
                    if (!command.Equals(alias.CommandAlias, StringComparison.CurrentCultureIgnoreCase))
                    {
                        if (executeCommand)
                        {
                            player.PermissionlessInvoke(mangledString);
                        }
                    }
                    else
                    {
                        TShock.Log.ConsoleError(string.Format("cmdalias {0}: calling yourself in an alias will cause an infinite loop. Ignoring.", alias.CommandAlias));
                    }
                } catch {
                    //execute the command disregarding permissions
                    player.SendErrorMessage(alias.UsageHelpText);
                }
            }
        }
Пример #52
0
 /// <summary>
 /// Sends the player an error message stating that more than one match was found
 /// appending a csv list of the matches.
 /// </summary>
 /// <param name="ply">Player to send the message to</param>
 /// <param name="matches">An enumerable list with the matches</param>
 public void SendMultipleMatchError(TSPlayer ply, IEnumerable <object> matches)
 {
     ply.SendErrorMessage("More than one match found: {0}", string.Join(",", matches));
     ply.SendErrorMessage("Use \"my query\" for items with spaces");
 }
Пример #53
0
        /// <summary>
        /// Restores a player's character to the state stored in the database
        /// </summary>
        /// <param name="player"></param>
        public void RestoreCharacter(TSPlayer player)
        {
            // Start ignoring SSC-related packets! This is critical so that we don't send or receive dirty data!
            player.IgnoreSSCPackets = true;

            player.TPlayer.statLife    = this.health;
            player.TPlayer.statLifeMax = this.maxHealth;
            player.TPlayer.statMana    = this.maxMana;
            player.TPlayer.statManaMax = this.maxMana;
            player.TPlayer.SpawnX      = this.spawnX;
            player.TPlayer.SpawnY      = this.spawnY;
            player.sX = this.spawnX;
            player.sY = this.spawnY;
            player.TPlayer.hairDye = this.hairDye;
            player.TPlayer.anglerQuestsFinished = this.questsCompleted;

            if (extraSlot != null)
            {
                player.TPlayer.extraAccessory = extraSlot.Value == 1 ? true : false;
            }
            if (this.skinVariant != null)
            {
                player.TPlayer.skinVariant = this.skinVariant.Value;
            }
            if (this.hair != null)
            {
                player.TPlayer.hair = this.hair.Value;
            }
            if (this.hairColor != null)
            {
                player.TPlayer.hairColor = this.hairColor.Value;
            }
            if (this.pantsColor != null)
            {
                player.TPlayer.pantsColor = this.pantsColor.Value;
            }
            if (this.shirtColor != null)
            {
                player.TPlayer.shirtColor = this.shirtColor.Value;
            }
            if (this.underShirtColor != null)
            {
                player.TPlayer.underShirtColor = this.underShirtColor.Value;
            }
            if (this.shoeColor != null)
            {
                player.TPlayer.shoeColor = this.shoeColor.Value;
            }
            if (this.skinColor != null)
            {
                player.TPlayer.skinColor = this.skinColor.Value;
            }
            if (this.eyeColor != null)
            {
                player.TPlayer.eyeColor = this.eyeColor.Value;
            }

            if (this.hideVisuals != null)
            {
                player.TPlayer.hideVisibleAccessory = this.hideVisuals;
            }
            else
            {
                player.TPlayer.hideVisibleAccessory = new bool[player.TPlayer.hideVisibleAccessory.Length];
            }

            if (this.unlockedBiomeTorches != null)
            {
                player.TPlayer.unlockedBiomeTorches = this.unlockedBiomeTorches == 1 ? true : false;
                player.TPlayer.UsingBiomeTorches    = this.unlockedBiomeTorches == 1 ? true : false;
            }

            for (int i = 0; i < NetItem.MaxInventory; i++)
            {
                if (i < NetItem.InventoryIndex.Item2)
                {
                    //0-58
                    player.TPlayer.inventory[i].netDefaults(this.inventory[i].NetId);

                    if (player.TPlayer.inventory[i].netID != 0)
                    {
                        player.TPlayer.inventory[i].stack  = this.inventory[i].Stack;
                        player.TPlayer.inventory[i].prefix = this.inventory[i].PrefixId;
                    }
                }
                else if (i < NetItem.ArmorIndex.Item2)
                {
                    //59-78
                    var index = i - NetItem.ArmorIndex.Item1;
                    player.TPlayer.armor[index].netDefaults(this.inventory[i].NetId);

                    if (player.TPlayer.armor[index].netID != 0)
                    {
                        player.TPlayer.armor[index].stack  = this.inventory[i].Stack;
                        player.TPlayer.armor[index].prefix = (byte)this.inventory[i].PrefixId;
                    }
                }
                else if (i < NetItem.DyeIndex.Item2)
                {
                    //79-88
                    var index = i - NetItem.DyeIndex.Item1;
                    player.TPlayer.dye[index].netDefaults(this.inventory[i].NetId);

                    if (player.TPlayer.dye[index].netID != 0)
                    {
                        player.TPlayer.dye[index].stack  = this.inventory[i].Stack;
                        player.TPlayer.dye[index].prefix = (byte)this.inventory[i].PrefixId;
                    }
                }
                else if (i < NetItem.MiscEquipIndex.Item2)
                {
                    //89-93
                    var index = i - NetItem.MiscEquipIndex.Item1;
                    player.TPlayer.miscEquips[index].netDefaults(this.inventory[i].NetId);

                    if (player.TPlayer.miscEquips[index].netID != 0)
                    {
                        player.TPlayer.miscEquips[index].stack  = this.inventory[i].Stack;
                        player.TPlayer.miscEquips[index].prefix = (byte)this.inventory[i].PrefixId;
                    }
                }
                else if (i < NetItem.MiscDyeIndex.Item2)
                {
                    //93-98
                    var index = i - NetItem.MiscDyeIndex.Item1;
                    player.TPlayer.miscDyes[index].netDefaults(this.inventory[i].NetId);

                    if (player.TPlayer.miscDyes[index].netID != 0)
                    {
                        player.TPlayer.miscDyes[index].stack  = this.inventory[i].Stack;
                        player.TPlayer.miscDyes[index].prefix = (byte)this.inventory[i].PrefixId;
                    }
                }
                else if (i < NetItem.PiggyIndex.Item2)
                {
                    //98-138
                    var index = i - NetItem.PiggyIndex.Item1;
                    player.TPlayer.bank.item[index].netDefaults(this.inventory[i].NetId);

                    if (player.TPlayer.bank.item[index].netID != 0)
                    {
                        player.TPlayer.bank.item[index].stack  = this.inventory[i].Stack;
                        player.TPlayer.bank.item[index].prefix = (byte)this.inventory[i].PrefixId;
                    }
                }
                else if (i < NetItem.SafeIndex.Item2)
                {
                    //138-178
                    var index = i - NetItem.SafeIndex.Item1;
                    player.TPlayer.bank2.item[index].netDefaults(this.inventory[i].NetId);

                    if (player.TPlayer.bank2.item[index].netID != 0)
                    {
                        player.TPlayer.bank2.item[index].stack  = this.inventory[i].Stack;
                        player.TPlayer.bank2.item[index].prefix = (byte)this.inventory[i].PrefixId;
                    }
                }
                else if (i < NetItem.TrashIndex.Item2)
                {
                    //179-219
                    var index = i - NetItem.TrashIndex.Item1;
                    player.TPlayer.trashItem.netDefaults(this.inventory[i].NetId);

                    if (player.TPlayer.trashItem.netID != 0)
                    {
                        player.TPlayer.trashItem.stack  = this.inventory[i].Stack;
                        player.TPlayer.trashItem.prefix = (byte)this.inventory[i].PrefixId;
                    }
                }
                else if (i < NetItem.ForgeIndex.Item2)
                {
                    //220
                    var index = i - NetItem.ForgeIndex.Item1;
                    player.TPlayer.bank3.item[index].netDefaults(this.inventory[i].NetId);

                    if (player.TPlayer.bank3.item[index].netID != 0)
                    {
                        player.TPlayer.bank3.item[index].stack = this.inventory[i].Stack;
                        player.TPlayer.bank3.item[index].Prefix((byte)this.inventory[i].PrefixId);
                    }
                }
                else
                {
                    //260
                    var index = i - NetItem.VoidIndex.Item1;
                    player.TPlayer.bank4.item[index].netDefaults(this.inventory[i].NetId);

                    if (player.TPlayer.bank4.item[index].netID != 0)
                    {
                        player.TPlayer.bank4.item[index].stack = this.inventory[i].Stack;
                        player.TPlayer.bank4.item[index].Prefix((byte)this.inventory[i].PrefixId);
                    }
                }
            }

            float slot = 0f;

            for (int k = 0; k < NetItem.InventorySlots; k++)
            {
                NetMessage.SendData(5, -1, -1, NetworkText.FromLiteral(Main.player[player.Index].inventory[k].Name), player.Index, slot, (float)Main.player[player.Index].inventory[k].prefix);
                slot++;
            }
            for (int k = 0; k < NetItem.ArmorSlots; k++)
            {
                NetMessage.SendData(5, -1, -1, NetworkText.FromLiteral(Main.player[player.Index].armor[k].Name), player.Index, slot, (float)Main.player[player.Index].armor[k].prefix);
                slot++;
            }
            for (int k = 0; k < NetItem.DyeSlots; k++)
            {
                NetMessage.SendData(5, -1, -1, NetworkText.FromLiteral(Main.player[player.Index].dye[k].Name), player.Index, slot, (float)Main.player[player.Index].dye[k].prefix);
                slot++;
            }
            for (int k = 0; k < NetItem.MiscEquipSlots; k++)
            {
                NetMessage.SendData(5, -1, -1, NetworkText.FromLiteral(Main.player[player.Index].miscEquips[k].Name), player.Index, slot, (float)Main.player[player.Index].miscEquips[k].prefix);
                slot++;
            }
            for (int k = 0; k < NetItem.MiscDyeSlots; k++)
            {
                NetMessage.SendData(5, -1, -1, NetworkText.FromLiteral(Main.player[player.Index].miscDyes[k].Name), player.Index, slot, (float)Main.player[player.Index].miscDyes[k].prefix);
                slot++;
            }
            for (int k = 0; k < NetItem.PiggySlots; k++)
            {
                NetMessage.SendData(5, -1, -1, NetworkText.FromLiteral(Main.player[player.Index].bank.item[k].Name), player.Index, slot, (float)Main.player[player.Index].bank.item[k].prefix);
                slot++;
            }
            for (int k = 0; k < NetItem.SafeSlots; k++)
            {
                NetMessage.SendData(5, -1, -1, NetworkText.FromLiteral(Main.player[player.Index].bank2.item[k].Name), player.Index, slot, (float)Main.player[player.Index].bank2.item[k].prefix);
                slot++;
            }
            NetMessage.SendData(5, -1, -1, NetworkText.FromLiteral(Main.player[player.Index].trashItem.Name), player.Index, slot++, (float)Main.player[player.Index].trashItem.prefix);
            for (int k = 0; k < NetItem.ForgeSlots; k++)
            {
                NetMessage.SendData(5, -1, -1, NetworkText.FromLiteral(Main.player[player.Index].bank3.item[k].Name), player.Index, slot, (float)Main.player[player.Index].bank3.item[k].prefix);
                slot++;
            }
            for (int k = 0; k < NetItem.VoidSlots; k++)
            {
                NetMessage.SendData(5, -1, -1, NetworkText.FromLiteral(Main.player[player.Index].bank4.item[k].Name), player.Index, slot, (float)Main.player[player.Index].bank4.item[k].prefix);
                slot++;
            }


            NetMessage.SendData(4, -1, -1, NetworkText.FromLiteral(player.Name), player.Index, 0f, 0f, 0f, 0);
            NetMessage.SendData(42, -1, -1, NetworkText.Empty, player.Index, 0f, 0f, 0f, 0);
            NetMessage.SendData(16, -1, -1, NetworkText.Empty, player.Index, 0f, 0f, 0f, 0);

            slot = 0f;
            for (int k = 0; k < NetItem.InventorySlots; k++)
            {
                NetMessage.SendData(5, player.Index, -1, NetworkText.FromLiteral(Main.player[player.Index].inventory[k].Name), player.Index, slot, (float)Main.player[player.Index].inventory[k].prefix);
                slot++;
            }
            for (int k = 0; k < NetItem.ArmorSlots; k++)
            {
                NetMessage.SendData(5, player.Index, -1, NetworkText.FromLiteral(Main.player[player.Index].armor[k].Name), player.Index, slot, (float)Main.player[player.Index].armor[k].prefix);
                slot++;
            }
            for (int k = 0; k < NetItem.DyeSlots; k++)
            {
                NetMessage.SendData(5, player.Index, -1, NetworkText.FromLiteral(Main.player[player.Index].dye[k].Name), player.Index, slot, (float)Main.player[player.Index].dye[k].prefix);
                slot++;
            }
            for (int k = 0; k < NetItem.MiscEquipSlots; k++)
            {
                NetMessage.SendData(5, player.Index, -1, NetworkText.FromLiteral(Main.player[player.Index].miscEquips[k].Name), player.Index, slot, (float)Main.player[player.Index].miscEquips[k].prefix);
                slot++;
            }
            for (int k = 0; k < NetItem.MiscDyeSlots; k++)
            {
                NetMessage.SendData(5, player.Index, -1, NetworkText.FromLiteral(Main.player[player.Index].miscDyes[k].Name), player.Index, slot, (float)Main.player[player.Index].miscDyes[k].prefix);
                slot++;
            }
            for (int k = 0; k < NetItem.PiggySlots; k++)
            {
                NetMessage.SendData(5, player.Index, -1, NetworkText.FromLiteral(Main.player[player.Index].bank.item[k].Name), player.Index, slot, (float)Main.player[player.Index].bank.item[k].prefix);
                slot++;
            }
            for (int k = 0; k < NetItem.SafeSlots; k++)
            {
                NetMessage.SendData(5, player.Index, -1, NetworkText.FromLiteral(Main.player[player.Index].bank2.item[k].Name), player.Index, slot, (float)Main.player[player.Index].bank2.item[k].prefix);
                slot++;
            }
            NetMessage.SendData(5, player.Index, -1, NetworkText.FromLiteral(Main.player[player.Index].trashItem.Name), player.Index, slot++, (float)Main.player[player.Index].trashItem.prefix);
            for (int k = 0; k < NetItem.ForgeSlots; k++)
            {
                NetMessage.SendData(5, player.Index, -1, NetworkText.FromLiteral(Main.player[player.Index].bank3.item[k].Name), player.Index, slot, (float)Main.player[player.Index].bank3.item[k].prefix);
                slot++;
            }
            for (int k = 0; k < NetItem.VoidSlots; k++)
            {
                NetMessage.SendData(5, player.Index, -1, NetworkText.FromLiteral(Main.player[player.Index].bank4.item[k].Name), player.Index, slot, (float)Main.player[player.Index].bank4.item[k].prefix);
                slot++;
            }



            NetMessage.SendData(4, player.Index, -1, NetworkText.FromLiteral(player.Name), player.Index, 0f, 0f, 0f, 0);
            NetMessage.SendData(42, player.Index, -1, NetworkText.Empty, player.Index, 0f, 0f, 0f, 0);
            NetMessage.SendData(16, player.Index, -1, NetworkText.Empty, player.Index, 0f, 0f, 0f, 0);

            for (int k = 0; k < 22; k++)
            {
                player.TPlayer.buffType[k] = 0;
            }

            /*
             * The following packets are sent twice because the server will not send a packet to a client
             * if they have not spawned yet if the remoteclient is -1
             * This is for when players login via uuid or serverpassword instead of via
             * the login command.
             */
            NetMessage.SendData(50, -1, -1, NetworkText.Empty, player.Index, 0f, 0f, 0f, 0);
            NetMessage.SendData(50, player.Index, -1, NetworkText.Empty, player.Index, 0f, 0f, 0f, 0);

            NetMessage.SendData(76, player.Index, -1, NetworkText.Empty, player.Index);
            NetMessage.SendData(76, -1, -1, NetworkText.Empty, player.Index);

            NetMessage.SendData(39, player.Index, -1, NetworkText.Empty, 400);

            if (Main.GameModeInfo.IsJourneyMode)
            {
                var sacrificedItems = TShock.ResearchDatastore.GetSacrificedItems();
                for (int i = 0; i < ItemID.Count; i++)
                {
                    var amount = 0;
                    if (sacrificedItems.ContainsKey(i))
                    {
                        amount = sacrificedItems[i];
                    }

                    var response = NetCreativeUnlocksModule.SerializeItemSacrifice(i, amount);
                    NetManager.Instance.SendToClient(response, player.Index);
                }
            }
        }
Пример #54
0
        /// <summary>
        /// Restores a player's character to the state stored in the database
        /// </summary>
        /// <param name="player"></param>
        public void RestoreCharacter(TSPlayer player)
        {
            // Start ignoring SSC-related packets! This is critical so that we don't send or receive dirty data!
            player.IgnoreSSCPackets = true;

            player.TPlayer.statLife    = this.health;
            player.TPlayer.statLifeMax = this.maxHealth;
            player.TPlayer.statMana    = this.maxMana;
            player.TPlayer.statManaMax = this.maxMana;
            player.TPlayer.SpawnX      = this.spawnX;
            player.TPlayer.SpawnY      = this.spawnY;
            player.sX = this.spawnX;
            player.sY = this.spawnY;
            player.TPlayer.hairDye = this.hairDye;
            player.TPlayer.anglerQuestsFinished = this.questsCompleted;

            if (extraSlot != null)
            {
                player.TPlayer.extraAccessory = extraSlot.Value == 1 ? true : false;
            }
            if (this.skinVariant != null)
            {
                player.TPlayer.skinVariant = this.skinVariant.Value;
            }
            if (this.hair != null)
            {
                player.TPlayer.hair = this.hair.Value;
            }
            if (this.hairColor != null)
            {
                player.TPlayer.hairColor = this.hairColor.Value;
            }
            if (this.pantsColor != null)
            {
                player.TPlayer.pantsColor = this.pantsColor.Value;
            }
            if (this.shirtColor != null)
            {
                player.TPlayer.shirtColor = this.shirtColor.Value;
            }
            if (this.underShirtColor != null)
            {
                player.TPlayer.underShirtColor = this.underShirtColor.Value;
            }
            if (this.shoeColor != null)
            {
                player.TPlayer.shoeColor = this.shoeColor.Value;
            }
            if (this.skinColor != null)
            {
                player.TPlayer.skinColor = this.skinColor.Value;
            }
            if (this.eyeColor != null)
            {
                player.TPlayer.eyeColor = this.eyeColor.Value;
            }

            if (this.hideVisuals != null)
            {
                player.TPlayer.hideVisual = this.hideVisuals;
            }
            else
            {
                player.TPlayer.hideVisual = new bool[player.TPlayer.hideVisual.Length];
            }

            for (int i = 0; i < NetItem.MaxInventory; i++)
            {
                if (i < NetItem.InventorySlots)
                {
                    //0-58
                    player.TPlayer.inventory[i].netDefaults(this.inventory[i].NetId);

                    if (player.TPlayer.inventory[i].netID != 0)
                    {
                        player.TPlayer.inventory[i].stack  = this.inventory[i].Stack;
                        player.TPlayer.inventory[i].prefix = this.inventory[i].PrefixId;
                    }
                }
                else if (i < NetItem.InventorySlots + NetItem.ArmorSlots)
                {
                    //59-78
                    var index = i - NetItem.InventorySlots;
                    player.TPlayer.armor[index].netDefaults(this.inventory[i].NetId);

                    if (player.TPlayer.armor[index].netID != 0)
                    {
                        player.TPlayer.armor[index].stack  = this.inventory[i].Stack;
                        player.TPlayer.armor[index].prefix = (byte)this.inventory[i].PrefixId;
                    }
                }
                else if (i < NetItem.InventorySlots + NetItem.ArmorSlots + NetItem.DyeSlots)
                {
                    //79-88
                    var index = i - (NetItem.InventorySlots + NetItem.ArmorSlots);
                    player.TPlayer.dye[index].netDefaults(this.inventory[i].NetId);

                    if (player.TPlayer.dye[index].netID != 0)
                    {
                        player.TPlayer.dye[index].stack  = this.inventory[i].Stack;
                        player.TPlayer.dye[index].prefix = (byte)this.inventory[i].PrefixId;
                    }
                }
                else if (i <
                         NetItem.InventorySlots + NetItem.ArmorSlots + NetItem.DyeSlots + NetItem.MiscEquipSlots)
                {
                    //89-93
                    var index = i - (NetItem.InventorySlots + NetItem.ArmorSlots + NetItem.DyeSlots);
                    player.TPlayer.miscEquips[index].netDefaults(this.inventory[i].NetId);

                    if (player.TPlayer.miscEquips[index].netID != 0)
                    {
                        player.TPlayer.miscEquips[index].stack  = this.inventory[i].Stack;
                        player.TPlayer.miscEquips[index].prefix = (byte)this.inventory[i].PrefixId;
                    }
                }
                else if (i <
                         NetItem.InventorySlots + NetItem.ArmorSlots + NetItem.DyeSlots + NetItem.MiscEquipSlots
                         + NetItem.MiscDyeSlots)
                {
                    //93-98
                    var index = i - (NetItem.InventorySlots + NetItem.ArmorSlots + NetItem.DyeSlots
                                     + NetItem.MiscEquipSlots);
                    player.TPlayer.miscDyes[index].netDefaults(this.inventory[i].NetId);

                    if (player.TPlayer.miscDyes[index].netID != 0)
                    {
                        player.TPlayer.miscDyes[index].stack  = this.inventory[i].Stack;
                        player.TPlayer.miscDyes[index].prefix = (byte)this.inventory[i].PrefixId;
                    }
                }
                else if (i <
                         NetItem.InventorySlots + NetItem.ArmorSlots + NetItem.DyeSlots + NetItem.MiscEquipSlots +
                         NetItem.MiscDyeSlots + NetItem.PiggySlots)
                {
                    //98-138
                    var index = i - (NetItem.InventorySlots + NetItem.ArmorSlots + NetItem.DyeSlots
                                     + NetItem.MiscEquipSlots + NetItem.MiscDyeSlots);
                    player.TPlayer.bank.item[index].netDefaults(this.inventory[i].NetId);

                    if (player.TPlayer.bank.item[index].netID != 0)
                    {
                        player.TPlayer.bank.item[index].stack  = this.inventory[i].Stack;
                        player.TPlayer.bank.item[index].prefix = (byte)this.inventory[i].PrefixId;
                    }
                }
                else if (i <
                         NetItem.InventorySlots + NetItem.ArmorSlots + NetItem.DyeSlots + NetItem.MiscEquipSlots +
                         NetItem.MiscDyeSlots + NetItem.PiggySlots + NetItem.SafeSlots)
                {
                    var index = i - (NetItem.InventorySlots + NetItem.ArmorSlots + NetItem.DyeSlots
                                     + NetItem.MiscEquipSlots + NetItem.MiscDyeSlots + NetItem.PiggySlots);
                    player.TPlayer.bank2.item[index].netDefaults(this.inventory[i].NetId);

                    if (player.TPlayer.bank2.item[index].netID != 0)
                    {
                        player.TPlayer.bank2.item[index].stack  = this.inventory[i].Stack;
                        player.TPlayer.bank2.item[index].prefix = (byte)this.inventory[i].PrefixId;
                    }
                }
                else
                {
                    player.TPlayer.trashItem.netDefaults(this.inventory[i].NetId);

                    if (player.TPlayer.trashItem.netID != 0)
                    {
                        player.TPlayer.trashItem.stack  = this.inventory[i].Stack;
                        player.TPlayer.trashItem.prefix = (byte)this.inventory[i].PrefixId;
                    }
                }
            }

            float slot = 0f;

            for (int k = 0; k < NetItem.InventorySlots; k++)
            {
                NetMessage.SendData(5, -1, -1, Main.player[player.Index].inventory[k].name, player.Index, slot, (float)Main.player[player.Index].inventory[k].prefix);
                slot++;
            }
            for (int k = 0; k < NetItem.ArmorSlots; k++)
            {
                NetMessage.SendData(5, -1, -1, Main.player[player.Index].armor[k].name, player.Index, slot, (float)Main.player[player.Index].armor[k].prefix);
                slot++;
            }
            for (int k = 0; k < NetItem.DyeSlots; k++)
            {
                NetMessage.SendData(5, -1, -1, Main.player[player.Index].dye[k].name, player.Index, slot, (float)Main.player[player.Index].dye[k].prefix);
                slot++;
            }
            for (int k = 0; k < NetItem.MiscEquipSlots; k++)
            {
                NetMessage.SendData(5, -1, -1, Main.player[player.Index].miscEquips[k].name, player.Index, slot, (float)Main.player[player.Index].miscEquips[k].prefix);
                slot++;
            }
            for (int k = 0; k < NetItem.MiscDyeSlots; k++)
            {
                NetMessage.SendData(5, -1, -1, Main.player[player.Index].miscDyes[k].name, player.Index, slot, (float)Main.player[player.Index].miscDyes[k].prefix);
                slot++;
            }
            for (int k = 0; k < NetItem.PiggySlots; k++)
            {
                NetMessage.SendData(5, -1, -1, Main.player[player.Index].bank.item[k].name, player.Index, slot, (float)Main.player[player.Index].bank.item[k].prefix);
                slot++;
            }
            for (int k = 0; k < NetItem.SafeSlots; k++)
            {
                NetMessage.SendData(5, -1, -1, Main.player[player.Index].bank2.item[k].name, player.Index, slot, (float)Main.player[player.Index].bank2.item[k].prefix);
                slot++;
            }

            NetMessage.SendData(5, -1, -1, Main.player[player.Index].trashItem.name, player.Index, slot, (float)Main.player[player.Index].trashItem.prefix);

            NetMessage.SendData(4, -1, -1, player.Name, player.Index, 0f, 0f, 0f, 0);
            NetMessage.SendData(42, -1, -1, "", player.Index, 0f, 0f, 0f, 0);
            NetMessage.SendData(16, -1, -1, "", player.Index, 0f, 0f, 0f, 0);

            slot = 0f;
            for (int k = 0; k < NetItem.InventorySlots; k++)
            {
                NetMessage.SendData(5, player.Index, -1, Main.player[player.Index].inventory[k].name, player.Index, slot, (float)Main.player[player.Index].inventory[k].prefix);
                slot++;
            }
            for (int k = 0; k < NetItem.ArmorSlots; k++)
            {
                NetMessage.SendData(5, player.Index, -1, Main.player[player.Index].armor[k].name, player.Index, slot, (float)Main.player[player.Index].armor[k].prefix);
                slot++;
            }
            for (int k = 0; k < NetItem.DyeSlots; k++)
            {
                NetMessage.SendData(5, player.Index, -1, Main.player[player.Index].dye[k].name, player.Index, slot, (float)Main.player[player.Index].dye[k].prefix);
                slot++;
            }
            for (int k = 0; k < NetItem.MiscEquipSlots; k++)
            {
                NetMessage.SendData(5, player.Index, -1, Main.player[player.Index].miscEquips[k].name, player.Index, slot, (float)Main.player[player.Index].miscEquips[k].prefix);
                slot++;
            }
            for (int k = 0; k < NetItem.MiscDyeSlots; k++)
            {
                NetMessage.SendData(5, player.Index, -1, Main.player[player.Index].miscDyes[k].name, player.Index, slot, (float)Main.player[player.Index].miscDyes[k].prefix);
                slot++;
            }
            for (int k = 0; k < NetItem.PiggySlots; k++)
            {
                NetMessage.SendData(5, player.Index, -1, Main.player[player.Index].bank.item[k].name, player.Index, slot, (float)Main.player[player.Index].bank.item[k].prefix);
                slot++;
            }
            for (int k = 0; k < NetItem.SafeSlots; k++)
            {
                NetMessage.SendData(5, player.Index, -1, Main.player[player.Index].bank2.item[k].name, player.Index, slot, (float)Main.player[player.Index].bank2.item[k].prefix);
                slot++;
            }

            NetMessage.SendData(5, player.Index, -1, Main.player[player.Index].trashItem.name, player.Index, slot, (float)Main.player[player.Index].trashItem.prefix);

            NetMessage.SendData(4, player.Index, -1, player.Name, player.Index, 0f, 0f, 0f, 0);
            NetMessage.SendData(42, player.Index, -1, "", player.Index, 0f, 0f, 0f, 0);
            NetMessage.SendData(16, player.Index, -1, "", player.Index, 0f, 0f, 0f, 0);

            for (int k = 0; k < 22; k++)
            {
                player.TPlayer.buffType[k] = 0;
            }
            NetMessage.SendData(50, -1, -1, "", player.Index, 0f, 0f, 0f, 0);
            NetMessage.SendData(50, player.Index, -1, "", player.Index, 0f, 0f, 0f, 0);
            NetMessage.SendData(76, -1, -1, "", player.Index);

            NetMessage.SendData(39, player.Index, -1, "", 400);
        }
Пример #55
0
 /// <summary>
 /// Kicks a player from the server without checking for immunetokick permission.
 /// </summary>
 /// <param name="player">TSPlayer player</param>
 /// <param name="reason">string reason</param>
 /// <param name="silent">bool silent (default: false)</param>
 /// <param name="saveSSI">bool saveSSI (default: false)</param>
 public void ForceKick(TSPlayer player, string reason, bool silent = false, bool saveSSI = false)
 {
     Kick(player, reason, true, silent, null, saveSSI);
 }
        /// <summary>
        /// Invokes a command ignoring permissions
        /// </summary>
        public static bool RunWithoutPermissions(this TShockAPI.Command cmd, string msg, TShockAPI.TSPlayer ply, List <string> parms)
        {
            try {
                TShockAPI.CommandDelegate cmdDelegateRef = cmd.CommandDelegate;

                cmdDelegateRef(new TShockAPI.CommandArgs(msg, ply, parms));
            } catch (Exception e) {
                ply.SendErrorMessage("Command failed, check logs for more details.");
                TShock.Log.Error(e.ToString());
            }

            return(true);
        }