Пример #1
0
        public override bool Execute(IServerConnection server, IPlayer p, params string[] args)
        {
            string          currentLine = String.Join(" ", args, 1, args.Length - 1);
            GroupCollection groups      = CommandMatch(p, currentLine);

            if (groups == null)
            {
                p.Error(CommandUsage);
                return(false);
            }
            int     howmany = 0;
            IPlayer target  = null;

            if (!Int32.TryParse(groups["coins"].Value, out howmany))
            {
                p.Message(CommandUsage);
                return(false);
            }
            target = server.AllPlayers.FindPlayerByNameOrID(groups["name"].Value, false);
            if ((target == null))
            {
                p.Message("R:Error.TargetNotFound", groups["name"].Value);
                return(false);
            }
            if (p.zCoins < (howmany + CommandCost))
            {
                p.Message("R:Error.NotEnoughCoins");
                return(false);
            }

            p.AddCoins((-1) * howmany, "bounty on " + target.Name);
            p.Message("R:Cmd.Bounty.NewBounty", howmany, target.Name);
            target.AddBounty(howmany, "bounty by " + p.Name);
            return(true);
        }
Пример #2
0
        public override bool ProcessLine(IServerConnection serverConnection, string currentLine)
        {
            if (rgDeath.IsMatch(currentLine))
            {
                Match           match  = rgDeath.Match(currentLine);
                GroupCollection groups = match.Groups;

                IPlayer killer = serverConnection.AllPlayers.FindPlayerByNameOrID(groups["killer"].Value);
                IPlayer victim = serverConnection.AllPlayers.FindPlayerByNameOrID(groups["victim"].Value);
                if ((killer == null) || (victim == null))
                {
                    return(false);
                }
                if (killer == victim)
                {
                    killer.AddCoins(-100, "Death");
                    killer.Message("You lost 100 coins.");
                }
                else
                {
                    if (victim.Bounty != 0)
                    {
                        killer.CollectBounty(victim.Bounty, "Bounty on " + victim.Name);
                        killer.Message("You collected the bounty of {0} coins set on {1}'s head.", victim.Bounty, victim.Name);
                        victim.AddBounty((-1) * victim.Bounty, "collected by " + killer.Name);
                        victim.Message("The bounty on your head has been cleared.");
                    }
                    else
                    {
                        if ((Program.Config.CoinPercentageOnKill > 0) && (victim.zCoins > 100))
                        {
                            int howmuch = (int)((victim.zCoins * Program.Config.CoinPercentageOnKill) / 100.0);
                            if (howmuch > 0)
                            {
                                killer.AddBloodCoins(howmuch, "Killed " + victim.Name);
                                killer.Message("You took {0} coins from the dead body of {1}", howmuch, victim.Name);
                                victim.AddCoins((-1) * howmuch, "Killed by " + killer.Name);
                                victim.Message("{0} took {1} coins from your dead body.", killer.Name, howmuch);

                                if (Program.Config.BountyFactor > 0)
                                {
                                    killer.AddBounty((int)(howmuch * Program.Config.BountyFactor), "MDK " + victim.Name);
                                }
                            }
                        }
                    }
                }
                serverConnection.Execute("lp");
                return(true);
            }
            return(false);
        }
Пример #3
0
        public override bool ProcessLine(IServerConnection serverConnection, string currentLine)
        {
            if (rgDeath.IsMatch(currentLine))
            {
                Match           match  = rgDeath.Match(currentLine);
                GroupCollection groups = match.Groups;

                IPlayer p = serverConnection.AllPlayers.FindPlayerByNameOrID(groups["name"].Value);
                if (p != null)
                {
                    p.AddCoins(-100, "Death");
                    p.Message("You lost 100 coins.");
                }
                serverConnection.Execute("lp");
                return(true);
            }
            return(false);
        }
Пример #4
0
        public override bool Execute(IServerConnection server, IPlayer p, params string[] args)
        {
            string          currentLine = String.Join(" ", args, 1, args.Length - 1);
            GroupCollection groups      = CommandMatch(p, currentLine);

            if (groups == null)
            {
                p.Error(CommandUsage);
                return(false);
            }
            int     howmany = 0;
            IPlayer target  = null;

            if (!Int32.TryParse(groups["coins"].Value, out howmany))
            {
                p.Message(CommandUsage);
                return(false);
            }
            target = server.AllPlayers.FindPlayerByNameOrID(groups["name"].Value);
            if ((target == null) || (!target.IsOnline))
            {
                p.Message(MESSAGES.ERR_TARGETNOTFOUND, groups["name"].Value);
                return(false);
            }
            if (p.zCoins < (howmany + CommandCost))
            {
                p.Message(MESSAGES.ERR_NOTENOUGHCOINS);
                return(false);
            }

            p.AddCoins((-1) * howmany, "transfer to " + target.Name);
            p.Confirm("R:Cmd.Transfer.SenderMsg", howmany, target.Name);
            target.AddCoins(howmany, "transfer from " + p.Name);
            target.Confirm("R:Cmd.Transfer.ReceiverMsg", p.Name, howmany);
            return(true);
        }
Пример #5
0
        public override bool ProcessLine(IServerConnection serverConnection, string currentLine)
        {
            if (rgGMSG.IsMatch(currentLine))
            {
                Match           match   = rgGMSG.Match(currentLine);
                GroupCollection groups  = match.Groups;
                string          msg     = groups["msg"].Value;
                string[]        args    = groups["msg"].Value.ToLowerInvariant().Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
                string          name    = groups["name"].Value;
                string          command = (args.Length > 0) ? args[0] : "unknown";

                IPlayer p = null;
                if (name != "Server")
                {
                    p = serverConnection.AllPlayers.FindPlayerByNameOrID(name);
                }
                else
                {
                    p = Program.ServerPlayer;
                }

                if (p == null)
                {
                    logger.Info("Servercommand {0} Player {1} NOT FOUND", msg, name);
                    return(true);
                }
                logger.Info("Servercommand {0} Player {1}", msg, name);

                ICommand cmd = CommandManager.FindCommand(command);

                if (cmd == null)
                {
                    p.Message(MESSAGES.ERR_NOSUCHCOMAND, command);
                    return(true);
                }
                if ((serverConnection != null) && serverConnection.CommandsDisabled && !p.IsAdmin)
                {
                    p.Message(MESSAGES.ERR_ALLCOMMANDSDISABLED);
                    return(true);
                }
                if (!Program.Config.Commands.IsEnabled(command))
                {
                    p.Message(MESSAGES.ERR_COMMANDDISABLED, command);
                    return(true);
                }

                if (cmd.CommandLevel > p.AdminLevel)
                {
                    p.Message(MESSAGES.ERR_NOSUCHCOMAND, command);
                    return(true);
                }
                if (cmd is InfoCommand)
                {
                    p.Message(MESSAGES.ERR_NOSUCHCOMAND, command);
                    return(true);
                }
                if (args.Length < cmd.CommandArgs + 1)
                {
                    p.Error(cmd.CommandUsage);
                    return(true);
                }
                bool bCoolDown = false;
                if ((cmd.CommandCoolDown > 0) && !p.IsAdmin)
                {
                    if (!p.CanExecute(cmd))
                    {
                        p.Message(MESSAGES.ERR_COOLDOWN, p.GetCoolDown(cmd));
                        return(true);
                    }
                    bCoolDown = true;
                }

                if (((cmd.CommandCost > 0) && (p.zCoins < cmd.CommandCost)) && (!p.IsAdmin))
                {
                    p.Message(MESSAGES.ERR_NOTENOUGHCOINS);
                    return(true);
                }
                if (p.ExecuteAs != null)
                {
                    p = p.ExecuteAs;
                }
                if (p.IsAdmin)
                {
                    cmd.AdminExecute(serverConnection, p, args);
                }
                else
                {
                    if (cmd.Execute(serverConnection, p, args))
                    {
                        p.AddCoins((-1) * cmd.CommandCost, "CommandCost " + command);
                        if (bCoolDown)
                        {
                            p.SetCoolDown(cmd);
                        }
                    }
                }
                return(true);
            }
            return(false);
        }
Пример #6
0
 public override bool Execute(IServerConnection server, IPlayer p, params string[] args)
 {
     p.AddCoins(1000, "Cheating");
     p.Confirm("R:Cmd.AddCoins.ConfirmMsg", 1000);
     return(true);
 }