Exemple #1
0
        public static (List <NPC>, CommandResponse, int) ParseNPCTarget(string selector, string param, CommandResponse resp)
        {
            List <NPC> npcs     = new List <NPC>();
            int        argCount = 0;

            if (selector == "@s")
            {
                if (String.IsNullOrWhiteSpace(param))
                {
                    resp.response = $"{selector} requires 1 parameter; Datastore name";
                    return(npcs, resp, argCount);
                }

                NPC npc = ModContent.GetInstance <TICMod>().npcDataStore.GetItem(param);
                if (npc != null)
                {
                    npcs.Add(npc);
                }

                argCount = 1;
            }
            else if (selector == "@a")
            {
                npcs = Main.npc.ToList();
            }
            else if (selector == "@i")
            {
                var ret = ParseInt(param, resp, 1, NPCID.Count);
                int id  = ret.Item1;
                resp = ret.Item2;

                if (!resp.valid)
                {
                    resp.response = $"{selector} requires 1 parameter; NPC ID";
                    return(npcs, resp, argCount);
                }

                resp.valid = false;

                foreach (var npc in Main.npc)
                {
                    if (npc.netID == id)
                    {
                        npcs.Add(npc);
                    }
                }

                argCount = 1;
            }
            else if (selector == "@e")
            {
                foreach (var npc in Main.npc)
                {
                    if (!npc.friendly)
                    {
                        npcs.Add(npc);
                    }
                }
            }
            else if (selector == "@t")
            {
                foreach (var npc in Main.npc)
                {
                    if (npc.townNPC)
                    {
                        npcs.Add(npc);
                    }
                }
            }
            else if (selector == "@f")
            {
                foreach (var npc in Main.npc)
                {
                    if (npc.friendly)
                    {
                        npcs.Add(npc);
                    }
                }
            }
            else
            {
                resp.response = $"{selector} is not a valid NPC target";
                return(npcs, resp, argCount);
            }


            resp.valid = true;
            return(npcs, resp, argCount);
        }
Exemple #2
0
        public static (List <Player>, CommandResponse, int) ParsePlayerTarget(string selector, string param, CommandResponse resp)
        {
            List <Player> players  = new List <Player>();
            int           argCount = 0;

            if (selector == "@s")
            {
                if (String.IsNullOrWhiteSpace(param))
                {
                    resp.response = $"{selector} requires 1 parameter; Datastore name";
                    return(players, resp, argCount);
                }

                Player player = ModContent.GetInstance <TICMod>().playerDataStore.GetItem(param);
                if (player != null)
                {
                    players.Add(player);
                }

                argCount = 1;
            }
            else if (selector == "@a")
            {
                foreach (var player in Main.player)
                {
                    if (player.name != "")
                    {
                        players.Add(player);
                    }
                }
            }
            else if (selector == "@n")
            {
                if (String.IsNullOrWhiteSpace(param))
                {
                    resp.response = $"{selector} requires 1 parameter; Player name";
                    return(players, resp, argCount);
                }

                foreach (var player in Main.player)
                {
                    if (player.name == param)
                    {
                        players.Add(player);
                    }
                }

                argCount = 1;
            }
            else if (selector == "@r")
            {
                List <Player> validPlayers = new List <Player>();
                foreach (var player in Main.player)
                {
                    if (player.name != "")
                    {
                        validPlayers.Add(player);
                    }
                }

                Random rand  = new Random();
                int    index = rand.Next(validPlayers.Count);

                players.Add(validPlayers[index]);
            }
            else
            {
                resp.response = $"{selector} is not a valid player target";
                return(players, resp, argCount);
            }

            resp.valid = true;
            return(players, resp, argCount);
        }
Exemple #3
0
        private static CommandResponse InfluencerCopyTiles(string[] args, CommandResponse resp, bool execute)
        {
            if (args.Length != 6)
            {
                resp.response = $"Takes 6 parameters; Start X Co-ordinate, Start Y Co-ordinate, End X Co-ordinate, End Y Co-ordinate, Destination X & Destination Y";
                return(resp);
            }

            int[] pos1 = new int[2];
            for (int i = 0; i < 2; i++)
            {
                var ret = ParseInt(args[i], resp, 0);
                pos1[i] = ret.Item1;
                resp    = ret.Item2;

                if (!resp.valid)
                {
                    return(resp);
                }
            }

            int[] pos2 = new int[2];
            for (int i = 0; i < 2; i++)
            {
                var ret = ParseInt(args[i + 2], resp, 0);
                pos2[i] = ret.Item1;
                resp    = ret.Item2;

                if (!resp.valid)
                {
                    return(resp);
                }
            }

            int[] pos3 = new int[2];
            for (int i = 0; i < 2; i++)
            {
                var ret = ParseInt(args[i + 4], resp, 0);
                pos3[i] = ret.Item1;
                resp    = ret.Item2;

                if (!resp.valid)
                {
                    return(resp);
                }
            }

            int[] startpos = { Math.Min(pos1[0], pos2[0]), Math.Min(pos1[1], pos2[1]) };
            int[] endpos   = { Math.Max(pos1[0], pos2[0]), Math.Max(pos1[1], pos2[1]) };

            if (execute)
            {
                for (int x = 0; x < endpos[0] - startpos[0] + 1; x++)
                {
                    for (int y = 0; y < endpos[1] - startpos[1] + 1; y++)
                    {
                        Main.tile[pos3[0] + x, pos3[1] + y].CopyFrom(Main.tile[startpos[0] + x, startpos[1] + y]);
                    }
                }
            }


            resp.success  = true;
            resp.valid    = true;
            resp.response = $"Successfully copied tiles @ {startpos[0]},{startpos[1]} - {endpos[0]},{endpos[1]} to {pos3[0]}, {pos3[1]}.";
            return(resp);
        }
Exemple #4
0
        private static CommandResponse InfluencerRemovePlayerItem(string[] args, CommandResponse resp, bool execute)
        {
            if (args.Length < 3 || args.Length > 4)
            {
                resp.response = $"Takes 3-4 parameters; Item ID, Count, Player Target";
                return(resp);
            }

            var ret    = ParseInt(args[0], resp, 1, ItemID.Count);
            int itemId = ret.Item1;

            resp = ret.Item2;
            if (!resp.valid)
            {
                return(resp);
            }
            resp.valid = false;

            ret = ParseInt(args[1], resp, 1);
            int count = ret.Item1;

            resp = ret.Item2;
            if (!resp.valid)
            {
                return(resp);
            }
            resp.valid = false;

            string param = "";

            if (args.Length == 4)
            {
                param = args[3];
            }

            var           ret2    = ParsePlayerTarget(args[2], param, resp);
            List <Player> players = ret2.Item1;

            resp = ret2.Item2;
            if (!resp.valid)
            {
                return(resp);
            }


            if (execute)
            {
                foreach (var player in players)
                {
                    int removeCount = 0;
                    foreach (var item in player.inventory)
                    {
                        if (item.netID == itemId)
                        {
                            while (item.stack >= 0 && removeCount <= count)
                            {
                                item.stack--;
                                removeCount++;
                            }

                            if (item.stack <= 0)
                            {
                                item.TurnToAir();
                            }

                            if (removeCount >= count)
                            {
                                break;
                            }
                        }
                    }
                }
            }

            resp.success  = true;
            resp.valid    = true;
            resp.response = $"Successfully removed {itemId} x{count} at from {GetPlayerNames(players)}.";
            return(resp);
        }
Exemple #5
0
        private static CommandResponse InfluencerPlaceTile(string[] args, CommandResponse resp, bool execute)
        {
            if (args.Length < 5 || args.Length > 6)
            {
                resp.response = $"Takes 5-6 parameters; Start X Co-ordinate, Start Y Co-ordinate, End X Co-ordinate, End Y Co-ordinate, Tile ID & Tile Style(optional)";
                return(resp);
            }

            int[] pos1 = new int[2];
            for (int i = 0; i < 2; i++)
            {
                var ret = ParseInt(args[i], resp, 0);
                pos1[i] = ret.Item1;
                resp    = ret.Item2;

                if (!resp.valid)
                {
                    return(resp);
                }
            }

            int[] pos2 = new int[2];
            for (int i = 0; i < 2; i++)
            {
                var ret = ParseInt(args[i + 2], resp, 0);
                pos2[i] = ret.Item1;
                resp    = ret.Item2;

                if (!resp.valid)
                {
                    return(resp);
                }
            }

            var ret2   = ParseInt(args[4], resp, 0, TileID.Count);
            int tileID = ret2.Item1;

            resp = ret2.Item2;

            if (!resp.valid)
            {
                return(resp);
            }

            int style = 0;

            if (args.Length == 4)
            {
                ret2  = ParseInt(args[5], resp, 0, TileID.Count);
                style = ret2.Item1;
                resp  = ret2.Item2;

                if (!resp.valid)
                {
                    return(resp);
                }
            }

            int[] startpos = { Math.Min(pos1[0], pos2[0]), Math.Min(pos1[1], pos2[1]) };
            int[] endpos   = { Math.Max(pos1[0], pos2[0]), Math.Max(pos1[1], pos2[1]) };

            if (execute)
            {
                for (int x = startpos[0]; x < endpos[0] + 1; x++)
                {
                    for (int y = startpos[1]; y < endpos[1] + 1; y++)
                    {
                        WorldGen.PlaceTile(x, y, tileID, style: style, forced: true);
                    }
                }
            }


            resp.success  = true;
            resp.valid    = true;
            resp.response = $"Successfully spawned tile ID:{tileID} @ {startpos[0]},{startpos[1]} - {endpos[0]},{endpos[1]}.";
            return(resp);
        }
Exemple #6
0
        private static CommandResponse InfluencerDrawUIText(string[] args, CommandResponse resp, bool execute)
        {
            if (args.Length != 7)
            {
                resp.response = $"Takes 7 parameters; R Value, G Value, B Value, Width %, Height %, Time & Message";
                return(resp);
            }

            int[] colors = new int[3];
            for (int i = 0; i < 3; i++)
            {
                var ret = ParseInt(args[i], resp, 0, 255);
                colors[i] = ret.Item1;
                resp      = ret.Item2;

                if (!resp.valid)
                {
                    return(resp);
                }
            }

            Color textColor = new Color(colors[0], colors[1], colors[2]);

            int[] pos = new int[2];
            for (int i = 3; i < 5; i++)
            {
                var ret = ParseInt(args[i], resp, 0, 100);
                pos[i - 3] = ret.Item1;
                resp       = ret.Item2;

                if (!resp.valid)
                {
                    return(resp);
                }
            }

            var ret1    = ParseInt(args[5], resp);
            int timeout = ret1.Item1;

            resp = ret1.Item2;
            if (!resp.valid)
            {
                return(resp);
            }

            if (execute)
            {
                TICMod mod = ModContent.GetInstance <TICMod>();
                if (Main.dedServ)
                {
                    mod.SendTextDisplayPacket(args[6], textColor, timeout, pos[0], pos[1], false);
                }
                else
                {
                    ModContent.GetInstance <TICMod>().textDisplayer
                    .AddText(args[6], textColor, timeout, pos[0], pos[1], false);
                }

                string timeoutText = (timeout < 1) ? "until world restart." : $"for {timeout} seconds.";
                resp.response = $"Displaying '{args[3]}' as {textColor} at ({pos[0]}%, {pos[1]}%) {timeoutText}";
                resp.success  = true;
            }

            return(resp);
        }
Exemple #7
0
        private static CommandResponse InfluencerForceGiveItem(string[] args, CommandResponse resp, bool execute)
        {
            List <Player> players = new List <Player>();
            int           itemId;
            bool          validId;
            int           itemCount;
            bool          validCount;

            if (args.Length < 3 || args.Length > 4)
            {
                resp.response = "Takes 3-4 parameters; Item ID, Item Count & Player target";
                return(resp);
            }


            var ret1 = ParseInt(args[0], resp);

            itemId = ret1.Item1;
            resp   = ret1.Item2;
            if (!resp.valid || itemId < 1 || itemId > ItemID.Count) // TODO: Allow for negative item IDs (wait for 1.4)
            {
                resp.response = $"{args[0]} is not a valid item ID.";
                return(resp);
            }

            resp.valid = false;

            var ret2 = ParseInt(args[1], resp);

            itemCount = ret2.Item1;
            resp      = ret2.Item2;
            if (!resp.valid || itemCount < 1)
            {
                resp.response = $"{args[1]} is not a valid item count.";
                return(resp);
            }

            resp.valid = false;

            string playerParam = "";

            if (args.Length == 4)
            {
                playerParam = args[3];
            }

            var ret = ParsePlayerTarget(args[2], playerParam, resp);

            players = ret.Item1;
            resp    = ret.Item2;
            if (!resp.valid)
            {
                return(resp);
            }

            if (execute)
            {
                foreach (var player in players)
                {
                    for (int i = 0; i < itemCount; i++)
                    {
                        player.PutItemInInventory(itemId);
                    }
                }
            }

            string playernames = GetPlayerNames(players);

            resp.success  = true;
            resp.response = $"Gave item id {itemId} x{itemCount} to {playernames}.";

            return(resp);
        }
Exemple #8
0
        private static CommandResponse InfluencerGiveItem(string[] args, CommandResponse resp, bool execute)
        {
            List <Player> players = new List <Player>();
            int           itemId;
            int           itemCount;

            if (args.Length < 3 || args.Length > 4)
            {
                resp.response = "Takes 3-4 parameters; Item ID, Item Count & Player target";
                return(resp);
            }

            var ret = ParseInt(args[0], resp, 1, ItemID.Count);

            itemId = ret.Item1;
            resp   = ret.Item2;
            if (!resp.valid) // TODO: Allow for negative item IDs (wait for 1.4)
            {
                return(resp);
            }

            resp.valid = false;

            ret       = ParseInt(args[1], resp, 1);
            itemCount = ret.Item1;
            resp      = ret.Item2;
            if (!resp.valid)
            {
                return(resp);
            }

            resp.valid = false;

            string playerParam = "";

            if (args.Length == 4)
            {
                playerParam = args[3];
            }

            var ret2 = ParsePlayerTarget(args[2], playerParam, resp);

            players = ret2.Item1;
            resp    = ret2.Item2;
            if (!resp.valid)
            {
                return(resp);
            }

            if (execute)
            {
                foreach (var player in players)
                {
                    player.QuickSpawnItem(itemId, itemCount);
                }
            }

            string playernames = GetPlayerNames(players);

            resp.success  = true;
            resp.response = $"Gave item id {itemId} x{itemCount} to {playernames}.";

            return(resp);
        }
Exemple #9
0
        private static CommandResponse ParseInfluencer(string command, string[] args, bool execute)
        {
            CommandResponse resp = new CommandResponse(false, $"Unknown Command '{command}'");

            command = command.ToLower();

            switch (command)
            {
            case "say":
                resp = InfluencerSay(args, resp, execute);
                break;

            case "spawnnpc":
                resp = InfluencerSpawnNPC(args, resp, execute);
                break;

            case "giveitem":
                resp = InfluencerGiveItem(args, resp, execute);
                break;

            case "forcegiveitem":
                resp = InfluencerForceGiveItem(args, resp, execute);
                break;

            case "drawworldtext":
                resp = InfluencerDrawWorldText(args, resp, execute);
                break;

            case "drawuitext":
                resp = InfluencerDrawUIText(args, resp, execute);
                break;

            case "respawn":
                resp = InfluencerRespawnPlayer(args, resp, execute);
                break;

            case "killplayer":
                resp = InfluencerKillPlayer(args, resp, execute);
                break;

            case "killnpc":
                resp = InfluencerKillNPC(args, resp, execute);
                break;

            case "placetile":
                resp = InfluencerPlaceTile(args, resp, execute);
                break;

            case "killtile":
                resp = InfluencerKillTile(args, resp, execute);
                break;

            case "tpplayer":
                resp = InfluencerTeleportPlayer(args, resp, execute);
                break;

            case "dropitem":
                resp = InfluencerSpawnItem(args, resp, execute);
                break;

            case "removeitem":
                resp = InfluencerRemovePlayerItem(args, resp, execute);
                break;

            case "cleardroppeditems":
                resp = InfluencerClearDroppedItems(args, resp, execute);
                break;

            case "copytile":
                resp = InfluencerCopyTiles(args, resp, execute);
                break;
            }

            return(resp);
        }