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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }