예제 #1
0
        private void PBGive(CommandArgs args)
        {
            if (config.buffgroups.Length == 0)
            {
                args.Player.SendErrorMessage("Your server administrator has not defined any buff groups. Please contact an admin to fix this issue.");
                return;
            }

            List <BuffGroup> availableBuffGroups = config.buffgroups.Where(e => args.Player.HasPermission($"pb.{e.groupPerm}") || args.Player.HasPermission("pb.useall")).ToList();

            if (args.Parameters.Count == 2)
            {
                // /gpermabuffs -g list
                if (args.Parameters[0].Equals("-g", StringComparison.CurrentCultureIgnoreCase) && args.Parameters[1].Equals("list", StringComparison.CurrentCultureIgnoreCase))
                {
                    args.Player.SendInfoMessage($"Available buff groups: {string.Join(", ", availableBuffGroups.Select(e => e.groupName))}");
                    return;
                }

                // Get player id from args.Parameters[1]
                string          playername = args.Parameters[1];
                List <TSPlayer> players    = TShockAPI.TSPlayer.FindByNameOrID(playername);
                if (players.Count < 1)
                {
                    args.Player.SendErrorMessage("No players found.");
                    return;
                }
                else if (players.Count > 1)
                {
                    args.Player.SendMultipleMatchError(players.Select(p => p.Name));
                    return;
                }
                else if (!players[0].IsLoggedIn)
                {
                    args.Player.SendErrorMessage("This player cannot receive permabuffs!");
                    return;
                }
                int playerid = players[0].Account.ID;

                //Get buff name/id from args.Parameters[0]
                string buff = args.Parameters[0];
                if (!int.TryParse(args.Parameters[0], out int bufftype))
                {
                    List <int> bufftypelist = new List <int>();
                    bufftypelist = TShock.Utils.GetBuffByName(buff);

                    if (bufftypelist.Count < 1)
                    {
                        args.Player.SendErrorMessage("No buffs by that name were found.");
                        return;
                    }
                    else if (bufftypelist.Count > 1)
                    {
                        args.Player.SendMultipleMatchError(bufftypelist.Select(p => TShock.Utils.GetBuffName(p)));
                        return;
                    }
                    else
                    {
                        bufftype = bufftypelist[0];
                    }
                }
                else if (bufftype > Main.maxBuffTypes || bufftype < 1)                 // Buff ID is not valid (less than 1 or higher than 192 (1.3.1)).
                {
                    args.Player.SendErrorMessage("Invalid buff ID!");
                }

                //Removes all groups where the buff isn't included, leaving only a list of groups where player has access AND contains the buff
                availableBuffGroups.RemoveAll(e => !e.buffIDs.Contains(bufftype));

                if (availableBuffGroups.Count == 0)
                {
                    args.Player.SendErrorMessage("You do not have access to this permabuff!");
                    return;
                }

                if (DB.PlayerBuffs[playerid].bufflist.Contains(bufftype))
                {
                    DB.PlayerBuffs[playerid].bufflist.Remove(bufftype);
                    DB.UpdatePlayerBuffs(playerid, DB.PlayerBuffs[playerid].bufflist);
                    args.Player.SendInfoMessage($"You have removed the {TShock.Utils.GetBuffName(bufftype)} permabuff for {players[0].Name}.");
                    if (!args.Silent)
                    {
                        players[0].SendInfoMessage($"{args.Player.Name} has removed your {TShock.Utils.GetBuffName(bufftype)} permabuff.");
                    }
                }
                else if (bufftype.IsPermanent())
                {
                    DB.PlayerBuffs[playerid].bufflist.Add(bufftype);
                    DB.UpdatePlayerBuffs(playerid, DB.PlayerBuffs[playerid].bufflist);
                    args.Player.SendSuccessMessage($"You have permabuffed {players[0].Name} with the {TShock.Utils.GetBuffName(bufftype)} buff!");
                    if (!args.Silent)
                    {
                        players[0].SendInfoMessage($"{args.Player.Name} has permabuffed you with the {TShock.Utils.GetBuffName(bufftype)} buff!");
                    }
                }
                else
                {
                    args.Player.SetBuff(bufftype);
                    args.Player.SendSuccessMessage($"You have given {players[0].Name} the {TShock.Utils.GetBuffName(bufftype)} buff!");
                    if (!args.Silent)
                    {
                        players[0].SendInfoMessage($"{args.Player.Name} has given you the {TShock.Utils.GetBuffName(bufftype)} buff!");
                    }
                }
            }
            //gpermabuff -g <group> <player>
            else if (args.Parameters.Count == 3)
            {
                if (args.Parameters[0] != "-g")
                {
                    args.Player.SendErrorMessage("Invalid syntax:");
                    args.Player.SendErrorMessage("{0}gpermabuff <buff name or ID> <player>", TShock.Config.Settings.CommandSpecifier);
                    args.Player.SendErrorMessage("{0}gpermabuff -g <buff group> <player>", TShock.Config.Settings.CommandSpecifier);
                }

                var matchedPlayers = TShockAPI.TSPlayer.FindByNameOrID(args.Parameters[2]);

                if (matchedPlayers.Count == 0)
                {
                    args.Player.SendErrorMessage($"No players found by the name: {args.Parameters[2]}");
                    return;
                }
                else if (matchedPlayers.Count > 1)
                {
                    args.Player.SendMultipleMatchError(matchedPlayers.Select(p => p.Name));
                    return;
                }
                else if (!matchedPlayers[0].IsLoggedIn)
                {
                    args.Player.SendErrorMessage("This player cannot receive permabuffs!");
                    return;
                }
                else if (!availableBuffGroups.Any(e => e.groupName.Equals(args.Parameters[1], StringComparison.CurrentCultureIgnoreCase)))
                {
                    args.Player.SendErrorMessage("No buffgroups matched your query!");
                }

                TSPlayer player = matchedPlayers[0];
                int      id     = matchedPlayers[0].Account.ID;

                foreach (var buff in availableBuffGroups.First(e => e.groupName.Equals(args.Parameters[1], StringComparison.CurrentCultureIgnoreCase)).buffIDs)
                {
                    if (!DB.PlayerBuffs[id].bufflist.Contains(buff) && buff.IsPermanent())
                    {
                        DB.PlayerBuffs[id].bufflist.Add(buff);
                    }
                }
                DB.UpdatePlayerBuffs(id, DB.PlayerBuffs[id].bufflist);

                args.Player.SendSuccessMessage($"Successfully permabuffed {player.Name} with all of the buffs in the group {args.Parameters[1]}!");

                if (!args.Silent)
                {
                    args.Player.SendInfoMessage($"{args.Player.Name} has permabuffed you with all of the buffs in the group {args.Parameters[1]}!");
                }
            }
            else
            {
                args.Player.SendErrorMessage("Invalid syntax:");
                args.Player.SendErrorMessage("{0}gpermabuff <buff name or ID> <player>", TShock.Config.Settings.CommandSpecifier);
                args.Player.SendErrorMessage("{0}gpermabuff -g <buff group> <player>", TShock.Config.Settings.CommandSpecifier);
                return;
            }
        }
예제 #2
0
        private void PBuffs(CommandArgs args)
        {
            if (config.buffgroups.Length == 0)
            {
                args.Player.SendErrorMessage("Your server administrator has not defined any buff groups. Please contact an admin to fix this issue.");
                return;
            }

            List <BuffGroup> availableBuffGroups = config.buffgroups.Where(e => args.Player.HasPermission($"pb.{e.groupPerm}") || args.Player.HasPermission("pb.useall")).ToList();

            int bufftype = -1;

            if (args.Parameters.Count == 0)
            {
                args.Player.SendErrorMessage("Invalid syntax: {0}permabuff <buff name or ID>", (args.Silent ? TShock.Config.Settings.CommandSilentSpecifier : TShock.Config.Settings.CommandSpecifier));
                return;
            }

            string buff = string.Join(" ", args.Parameters);

            // Get buff type by name
            if (!int.TryParse(args.Parameters[0], out bufftype))
            {
                List <int> bufftypelist = TShock.Utils.GetBuffByName(buff);

                if (bufftypelist.Count < 1)
                {
                    args.Player.SendErrorMessage("No buffs by that name were found.");
                    return;
                }
                else if (bufftypelist.Count > 1)
                {
                    args.Player.SendMultipleMatchError(bufftypelist.Select(p => TShock.Utils.GetBuffName(p)));
                    return;
                }
                else
                {
                    bufftype = bufftypelist[0];
                }
            }
            else if (bufftype > Main.maxBuffTypes || bufftype < 1)             // Buff ID is not valid (less than 1 or higher than 206 (1.3.5.3)).
            {
                args.Player.SendErrorMessage("Invalid buff ID!");
            }


            int playerid = args.Player.Account.ID;

            availableBuffGroups.RemoveAll(e => !e.buffIDs.Contains(bufftype));

            if (availableBuffGroups.Count == 0)
            {
                args.Player.SendErrorMessage("You do not have access to this permabuff!");
                return;
            }

            if (DB.PlayerBuffs[playerid].bufflist.Contains(bufftype))
            {
                DB.PlayerBuffs[playerid].bufflist.Remove(bufftype);
                DB.UpdatePlayerBuffs(playerid, DB.PlayerBuffs[playerid].bufflist);
                args.Player.SendInfoMessage("You have removed the " + TShock.Utils.GetBuffName(bufftype) + " permabuff.");
                return;
            }

            if (bufftype.IsPermanent())
            {
                DB.PlayerBuffs[playerid].bufflist.Add(bufftype);
                DB.UpdatePlayerBuffs(playerid, DB.PlayerBuffs[playerid].bufflist);
                args.Player.SendSuccessMessage($"You have permabuffed yourself with the {TShock.Utils.GetBuffName(bufftype)} buff! Re-type this command to disable the buff.");
            }
            else
            {
                args.Player.SetBuff(bufftype);
                args.Player.SendSuccessMessage($"You have given yourself the {TShock.Utils.GetBuffName(bufftype)} buff.");
            }
        }