예제 #1
0
        internal void OnPlayerCommand(PlayerCommandEvent eventdata)
        {
            Guard.Argument(eventdata, nameof(eventdata)).NotNull();

            eventdata.Cancelled = true;

            this.ExecuteCommand(eventdata);
        }
예제 #2
0
        public async Task OnCommand(PlayerCommandEvent e)
        {
            const string prefix = "set ";

            if (e.Raw.StartsWith(prefix))
            {
                await e.Player.CallBrowserAsync("setTitle", e.Raw.Substring(prefix.Length));
            }
        }
예제 #3
0
        private object IOnPlayerCommand(PlayerCommandEvent e)
        {
            if (e?.Player == null || e.Command == null)
            {
                return(null);
            }

            var str = e.Command;

            if (str.Length == 0)
            {
                return(null);
            }
            if (str[0] != '/')
            {
                return(null);
            }

            // Is this a covalence command?
            var livePlayer = covalence.PlayerManager.GetOnlinePlayer(e.PlayerId.ToString());

            if (covalence.CommandSystem.HandleChatMessage(livePlayer, str))
            {
                return(true);
            }

            // Get the command string
            var command = str.Substring(1);

            // Parse it
            string cmd;

            string[] args;
            ParseChatCommand(command, out cmd, out args);
            if (cmd == null)
            {
                return(null);
            }

            // Handle it
            if (!cmdlib.HandleChatCommand(e.Player, cmd, args))
            {
                return(null);
            }

            Interface.CallDeprecatedHook("OnPlayerCommand", "OnChatCommand", new DateTime(2016, 5, 19), e.Player, cmd, args);
            Interface.CallHook("OnChatCommand", e.Player, cmd, args);

            // Handled
            return(true);
        }
예제 #4
0
        private object IOnChatCommand(PlayerCommandEvent e)
        {
            if (e?.Player == null || e.Command == null)
            {
                return(null);
            }

            var str = e.Command;

            if (str.Length == 0)
            {
                return(null);
            }
            if (str[0] != '/')
            {
                return(null);
            }

            // Is this a covalence command?
            var iplayer = Covalence.PlayerManager.GetConnectedPlayer(e.PlayerId.ToString());

            if (Covalence.CommandSystem.HandleChatMessage(iplayer, str))
            {
                return(true);
            }

            // Get the command string
            var command = str.Substring(1);

            // Parse it
            string cmd;

            string[] args;
            ParseChatCommand(command, out cmd, out args);
            if (cmd == null)
            {
                return(null);
            }

            Interface.Call("OnChatCommand", e.Player, cmd, args);

            // Handle it
            if (!cmdlib.HandleChatCommand(e.Player, cmd, args))
            {
                return(null);
            }

            // Handled
            return(true);
        }
예제 #5
0
        public override void onPlayerCommand(PlayerCommandEvent Event)
        {
            int    player  = ((Player)Event.Sender).whoAmi;
            string command = Event.Message;

            string[] split = command.Split(' ');
            split[0] = split[0].ToLower();
            var sender = Event.Sender;

            if (split.Length > 1)
            {
                split[1] = split[1].ToLower();
            }
            if (split[0] == "/region")
            {
                if (split[1] == "define")
                {
                    Event.Cancelled = true;
                    if (!PermissionManager.HasPermission(player, "terraguard.region.define"))
                    {
                        sender.sendMessage("You don't have enough permissions!");
                        return;
                    }
                    if (split.Length < 4)
                    {
                        sender.sendMessage("USAGE: /region define [name] [members]");
                        return;
                    }
                    if (RegionExists(split[2]))
                    {
                        sender.sendMessage("A region with this name already exists!");
                        return;
                    }
                    if (!SelectionMade(player))
                    {
                        sender.sendMessage("You haven't made a selection!");
                        return;
                    }
                    var members = new string[split.Length - 3];
                    Array.Copy(split, 3, members, 0, split.Length - 3);
                    var memb = String.Join(" ", members);
                    Regions.Add(new Region(split[2], memb, GetPos1(player), GetPos2(player)));
                    sender.sendMessage("Created region " + split[2]);
                    sender.sendMessage("Members: " + memb);
                    SaveRegions();
                    return;
                }
            }
        }
예제 #6
0
        private object IOnChatCommand(PlayerCommandEvent evt)
        {
            if (evt?.Player == null || evt.Command == null)
            {
                return(null);
            }

            var message = evt.Command;

            if (message.Length == 0)
            {
                return(null);
            }
            if (message[0] != '/')
            {
                return(null);
            }

            // Is this a covalence command?
            var iplayer = Covalence.PlayerManager.FindPlayer(evt.PlayerId.ToString());

            if (Covalence.CommandSystem.HandleChatMessage(iplayer, message))
            {
                return(true);
            }

            // Get the command string
            var command = message.Substring(1);

            // Parse it
            string cmd;

            string[] args;
            ParseChatCommand(command, out cmd, out args);
            if (cmd == null)
            {
                return(null);
            }

            Interface.Call("OnChatCommand", evt.Player, cmd, args);

            // Handle it
            return(cmdlib.HandleChatCommand(evt.Player, cmd, args) ? true : (object)null);
        }
예제 #7
0
        private object IOnPlayerCommand(PlayerCommandEvent e)
        {
            if (e?.Player == null || e.Command == null)
            {
                return(null);
            }

            var str = e.Command;

            if (str.Length == 0)
            {
                return(null);
            }
            if (str[0] != '/')
            {
                return(null);
            }

            // Get the command string
            var command = str.Substring(1);

            // Parse it
            string cmd;

            string[] args;
            ParseChatCommand(command, out cmd, out args);
            if (cmd == null)
            {
                return(null);
            }

            Interface.CallHook("OnPlayerCommand", e.Player, cmd, args);

            // Handle it
            if (!cmdlib.HandleChatCommand(e.Player, cmd, args))
            {
                return(null);
            }

            // Handled
            return(true);
        }
예제 #8
0
        private object IOnPlayerCommand(PlayerCommandEvent evt)
        {
            // Ignore the server player
            if (evt.Sender.Equals(CodeHatch.Engine.Networking.Server.ServerPlayer))
            {
                return(null);
            }

            // Call game-specific and universal hooks
            object hookSpecific  = Interface.Call("OnPlayerCommand", evt);
            object hookUniversal = Interface.Call("OnPlayerCommand", evt.Sender.IPlayer, evt.Label, evt.CommandArgs);

            if (hookSpecific != null || hookUniversal != null)
            {
                // Cancel chat command event
                evt.SetCancelled();
                return(true);
            }

            return(null);
        }
 public virtual void onPlayerCommand(PlayerCommandEvent Event)
 {
 }
예제 #10
0
        private object IOnPlayerCommand(PlayerCommandEvent e)
        {
            if (e?.Player == null || e.Command == null) return null;

            var str = e.Command;
            if (str.Length == 0) return null;
            if (str[0] != '/') return null;

            // Get the message
            var message = str.Substring(1);

            // Parse it
            string cmd;
            string[] args;
            ParseChatCommand(message, out cmd, out args);
            if (cmd == null) return null;

            // handle it
            if (!cmdlib.HandleChatCommand(e.Player, cmd, args)) return null;

            // Handled
            return true;
        }
예제 #11
0
        private object IOnChatCommand(PlayerCommandEvent e)
        {
            if (e?.Player == null || e.Command == null) return null;

            var str = e.Command;
            if (str.Length == 0) return null;
            if (str[0] != '/') return null;

            // Is this a covalence command?
            var livePlayer = covalence.PlayerManager.GetOnlinePlayer(e.PlayerId.ToString());
            if (covalence.CommandSystem.HandleChatMessage(livePlayer, str)) return true;

            // Get the command string
            var command = str.Substring(1);

            // Parse it
            string cmd;
            string[] args;
            ParseChatCommand(command, out cmd, out args);
            if (cmd == null) return null;

            Interface.Call("OnChatCommand", e.Player, cmd, args);

            // Handle it
            if (!cmdlib.HandleChatCommand(e.Player, cmd, args)) return null;

            // Handled
            return true;
        }
예제 #12
0
        public override void onPlayerCommand(PlayerCommandEvent Event)
        {
            int    player  = ((Player)Event.Sender).whoAmi;
            string command = Event.Message;

            string[] split = command.Split(' ');
            split[0] = split[0].ToLower();
            var sender = Event.Sender;

            if (split[0] == "//pos1" || split[0] == "//p1")
            {
                Event.Cancelled = true;
                if (!PermissionManager.HasPermission(player, "terraedit.selection"))
                {
                    sender.sendMessage("You don't have enough permissions!");
                    return;
                }
                if (!Waiting1.ContainsKey(player))
                {
                    Waiting1.Add(player, true);
                }
                if (!Waiting2.ContainsKey(player))
                {
                    Waiting2.Add(player, false);
                }
                Waiting1[player] = true;
                Waiting2[player] = false;
                sender.sendMessage("Waiting for block place/destroy.");
                return;
            }
            if (split[0] == "//pos2" || split[0] == "//p2")
            {
                Event.Cancelled = true;
                if (!PermissionManager.HasPermission(player, "terraedit.selection"))
                {
                    sender.sendMessage("You don't have enough permissions!");
                    return;
                }
                if (!Waiting1.ContainsKey(player))
                {
                    Waiting1.Add(player, false);
                }
                if (!Waiting2.ContainsKey(player))
                {
                    Waiting2.Add(player, true);
                }
                Waiting2[player] = true;
                Waiting1[player] = false;
                sender.sendMessage("Waiting for block place/destroy.");
                return;
            }
            if (split[0] == "//set")
            {
                Event.Cancelled = true;
                if (!PermissionManager.HasPermission(player, "terraedit.set"))
                {
                    sender.sendMessage("You don't have enough permissions!");
                    return;
                }
                if (split.Length < 2)
                {
                    sender.sendMessage("USAGE: //set [block]");
                    return;
                }
                if (!SelectionMade(player))
                {
                    sender.sendMessage("You haven't made a selection!");
                    return;
                }
                int id;
                if (!Int32.TryParse(split[1], out id))
                {
                    id = TileNames.FindTileByName(split[1]);
                    if (id == -2)
                    {
                        sender.sendMessage("Invalid block name!");
                        return;
                    }
                }
                if (id < -1 || id > 79)
                {
                    sender.sendMessage("Invalid block ID!");
                    return;
                }
                //var tile = new Tile {type = Byte.Parse(split[1])};
                var action = new Action();
                int highX  = Pos1[player].X > Pos2[player].X ? (int)Pos1[player].X : (int)Pos2[player].X;
                int highY  = Pos1[player].Y > Pos2[player].Y ? (int)Pos1[player].Y : (int)Pos2[player].Y;
                int lowX   = Pos1[player].X < Pos2[player].X ? (int)Pos1[player].X : (int)Pos2[player].X;
                int lowY   = Pos1[player].Y < Pos2[player].Y ? (int)Pos1[player].Y : (int)Pos2[player].Y;
                for (int i = lowX; i <= highX; i++)
                {
                    for (int j = lowY; j <= highY; j++)
                    {
                        action.SetBlock(i, j, id);
                    }
                }
                int c = action.Do();
                if (!Actions.ContainsKey(player))
                {
                    Actions.Add(player, new List <Action>());
                }
                if (Actions[player].Count > 0)
                {
                    Actions[player].Insert(0, action);
                }
                else
                {
                    Actions[player].Add(action);
                }
                sender.sendMessage(c + " blocks modified.");
                return;
            }
            if (split[0] == "//disc")
            {
                Event.Cancelled = true;
                if (!PermissionManager.HasPermission(player, "terraedit.disc"))
                {
                    sender.sendMessage("You don't have enough permissions!");
                    return;
                }
                if (split.Length < 3)
                {
                    sender.sendMessage("USAGE: //disc [radius] [block]");
                    return;
                }
                if (!Pos1.ContainsKey(player) || Pos1[player] == null)
                {
                    sender.sendMessage("You must set position 1 as the circle center!");
                    return;
                }
                int radius;
                if (!Int32.TryParse(split[1], out radius))
                {
                    sender.sendMessage("Invalid radius!");
                    return;
                }
                if (radius < 1)
                {
                    sender.sendMessage("Radius must be higher than 0!");
                    return;
                }
                int id;
                if (!Int32.TryParse(split[2], out id))
                {
                    id = TileNames.FindTileByName(split[2]);
                    if (id == -2)
                    {
                        sender.sendMessage("Invalid block name!");
                        return;
                    }
                }
                if (id < -1 || id > 79)
                {
                    sender.sendMessage("Invalid block ID!");
                    return;
                }
                var action = new Action();
                int px     = Convert.ToInt32(Pos1[player].X);
                int py     = Convert.ToInt32(Pos1[player].Y);
                for (int i = px - radius; i <= px + radius; i++)
                {
                    for (int j = py - radius; j <= py + radius; j++)
                    {
                        if ((px - i) * (px - i) + (py - j) * (py - j) < radius * radius)
                        {
                            action.SetBlock(i, j, id);
                        }
                    }
                }
                int c = action.Do();
                if (!Actions.ContainsKey(player))
                {
                    Actions.Add(player, new List <Action>());
                }
                if (Actions[player].Count > 0)
                {
                    Actions[player].Insert(0, action);
                }
                else
                {
                    Actions[player].Add(action);
                }
                sender.sendMessage(c + " blocks modified.");
                return;
            }
            if (split[0] == "//replace")
            {
                Event.Cancelled = true;
                if (!PermissionManager.HasPermission(player, "terraedit.replace"))
                {
                    sender.sendMessage("You don't have enough permissions!");
                    return;
                }
                if (split.Length < 3)
                {
                    sender.sendMessage("USAGE: //replace [from] [to]");
                    return;
                }
                if (!SelectionMade(player))
                {
                    sender.sendMessage("You haven't made a selection!");
                    return;
                }
                int from;
                if (!Int32.TryParse(split[1], out from))
                {
                    from = TileNames.FindTileByName(split[1]);
                    if (from == -2)
                    {
                        sender.sendMessage("Invalid block name!");
                        return;
                    }
                }
                if (from < -1 || from > 79)
                {
                    sender.sendMessage("Invalid block ID!");
                    return;
                }
                int to;
                if (!Int32.TryParse(split[2], out to))
                {
                    to = TileNames.FindTileByName(split[2]);
                    if (to == -2)
                    {
                        sender.sendMessage("Invalid block name!");
                        return;
                    }
                }
                if (to < -1 || to > 79)
                {
                    sender.sendMessage("Invalid block ID!");
                    return;
                }
                var action = new Action();
                int highX  = Pos1[player].X > Pos2[player].X ? (int)Pos1[player].X : (int)Pos2[player].X;
                int highY  = Pos1[player].Y > Pos2[player].Y ? (int)Pos1[player].Y : (int)Pos2[player].Y;
                int lowX   = Pos1[player].X < Pos2[player].X ? (int)Pos1[player].X : (int)Pos2[player].X;
                int lowY   = Pos1[player].Y < Pos2[player].Y ? (int)Pos1[player].Y : (int)Pos2[player].Y;
                for (int i = lowX; i <= highX; i++)
                {
                    for (int j = lowY; j <= highY; j++)
                    {
                        if (Main.tile.At(i, j).Type == from)
                        {
                            action.SetBlock(i, j, to);
                        }
                    }
                }
                int c = action.Do();
                if (!Actions.ContainsKey(player))
                {
                    Actions.Add(player, new List <Action>());
                }
                if (Actions[player].Count > 0)
                {
                    Actions[player].Insert(0, action);
                }
                else
                {
                    Actions[player].Add(action);
                }
                sender.sendMessage(c + " blocks modified.");
                return;
            }
            if (split[0] == "//undo")
            {
                Event.Cancelled = true;
                if (!PermissionManager.HasPermission(player, "terraedit.undo"))
                {
                    sender.sendMessage("You don't have enough permissions!");
                    return;
                }
                if (Actions[player].Count == 0)
                {
                    sender.sendMessage("Nothing to undo!");
                    return;
                }
                foreach (KeyValuePair <Vector2, ActionBlock> kvp in Actions[player].First().changedBlocks)
                {
                    int X = Convert.ToInt32(kvp.Key.X);
                    int Y = Convert.ToInt32(kvp.Key.Y);
                    //World world = Program.server.getWorld();
                    if (kvp.Value.StartType == -1)
                    {
                        Main.tile.At(X, Y).SetActive(false);
                        NetMessage.SendTileSquare(-1, X, Y, 1);
                    }
                    else
                    {
                        /*WorldGen.KillTile(X, Y, world, false, false, true);
                         * WorldGen.PlaceTile(X, Y, world, kvp.Value.StartType, false, true);*/
                        Main.tile.At(X, Y).SetActive(true);
                        Main.tile.At(X, Y).SetType((byte)kvp.Value.StartType);
                        NetMessage.SendTileSquare(-1, X, Y, 1);
                    }
                }
                Actions[player].Remove(Actions[player].First());
                sender.sendMessage("Last action undone");
                return;
            }

            return;
        }
예제 #13
0
 public void onCommand(PlayerCommandEvent eventargs)
 {
     string command = eventargs.getCommand();
     if (Command.all.Find(command) != null || isEasterEgg(command))
     {
         Player p = new Player(eventargs.getPlayer());
         string message = "";
         if (eventargs.getArgs().size() != 0)
         {
             message = eventargs.getOrginalMessage();
             message = message.Substring(message.IndexOf(' ') + 1);
         }
         HandleCommand(command, message, p);
         eventargs.setCancel(true);
         return;
     }
 }
예제 #14
0
        internal async void ExecuteCommand(PlayerCommandEvent eventdata)
        {
            var      player  = eventdata.Player;
            ICommand?command = null;

            try
            {
                // Unable to find specific command, return list of possible commands.
                if (this.TryGetCommandFromArgumentText(
                        eventdata.CommandText.Substring(1),
                        true,
                        out var potentialCommands,
                        out var groupName,
                        out var remainingArgumentText) == false)
                {
                    var accessibleCommands = await this.FilterCommandWithoutPermissionAsync(player, potentialCommands).ConfigureAwait(false);

                    this.eventAggregator.Publish(
                        new UnknownCommandEvent(
                            player,
                            eventdata.CommandText,
                            accessibleCommands.ToImmutableDictionary(),
                            groupName,
                            remainingArgumentText));

                    return;
                }

                command = potentialCommands.Values.First();

                // Do not try to map arguments if the player can not execute the command at all.
                if (await command.CanExecuteCommandAsync(player).ConfigureAwait(false) == false)
                {
                    this.eventAggregator.Publish(
                        new CommandExecutedEvent(
                            player,
                            CommandResult.Failed(CommandExecutionStatus.NoPermission),
                            null,
                            command));

                    return;
                }

                // Apply current player to context of mapping for certain type conversions.
                void ApplyContext(IMappingOperationOptions options)
                {
                    options.Items[CommandConstants.CommandExecutorKey] = player;
                }

                string[] argumentParts =
                    this.SplitArgumentStringToArgumentList(remainingArgumentText, command.Parameters.Count - 1);
                object[] argumentValues = this.MapArgumentListToTypes(
                    argumentParts,
                    command.Parameters.Skip(1).Select(x => x.Type)
                    .ToList(),
                    ApplyContext);

                var result = await command.TryExecuteAsync(player, argumentValues, true).ConfigureAwait(false);

                this.eventAggregator.Publish(new CommandExecutedEvent(player, result, null, command));
            }
            catch (CommandArgumentMapException e) when(command != null)
            {
                var parameter = command.Parameters[e.ParameterIndex + 1];

                string?mappingMessage = null;

                if (e.InnerException != null && e.InnerException.InnerException != null)
                {
                    mappingMessage = e.InnerException.InnerException.Message;
                }

                this.eventAggregator.Publish(
                    new CommandExecutedEvent(
                        player,
                        CommandResult.Failed(CommandExecutionStatus.ArgumentTypeMismatch, mappingMessage ?? string.Empty),
                        parameter.Name,
                        command));
            }
            catch (Exception e)
            {
                this.logger.LogWarning(e, $"Command failed to execute. ({player}: \"{eventdata.CommandText}\".");

                this.eventAggregator.Publish(
                    new CommandExecutedEvent(
                        player,
                        CommandResult.Failed(CommandExecutionStatus.Exception, e.Message),
                        null,
                        command));
            }
        }
예제 #15
0
        public override void onPlayerCommand(PlayerCommandEvent Event)
        {
            string[] split = Event.Message.Split(' ');
            split[0] = split[0].ToLower().Replace("/", "");
            string  command = split[0];
            ISender sender  = Event.Sender;

            if (command == "kick")
            {
                Event.Cancelled = true;
                if (!PermissionManager.HasPermission(sender, "badmin.kick"))
                {
                    sender.sendMessage("You don't have enough permissions!");
                    return;
                }
                if (split.Length < 2)
                {
                    sender.sendMessage("USAGE: " + (sender is Player ? "/" : "") + "kick [player] (reason)");
                    return;
                }
                int to = FindPlayerByName(split[1]);
                if (to == -1)
                {
                    sender.sendMessage("Couldn't find the player!");
                }
                string name    = Program.server.PlayerList[to].Name;
                string message = split.Length > 2 ? split[2] : "No reason provided";
                sender.sendMessage("You kicked " + name + ". Reason: " + message);
                foreach (Player player in Program.server.PlayerList)
                {
                    player.sendMessage(name + " has been kicked. Reason: " + message);
                }
                ((Player)sender).Kick("KICKED: " + message);
                Console.WriteLine("[bAdmin] " + sender.Name + " kicked " + name + " Reason: " + message);
                return;
            }

            /*if (command == "ban")
             * {
             *      Event.Cancelled(true);
             *      if (!PermissionManager.HasPermission(sender, "badmin.ban"))
             *      {
             *              sender.SendMessage("You don't have enough permissions!", cError);
             *              return;
             *      }
             *      if (split.Length < 2)
             *      {
             *              sender.SendMessage("USAGE: " + (sender is Player ? "/" : "") + "ban [player] (reason)", cError);
             *              return;
             *      }
             *      int to = FindPlayerByName(split[1]);
             *      if (to == -1)
             *      {
             *              sender.SendMessage("Couldn't find the player!", cError);
             *      }
             *      string message = split.Length > 2 ? split[2] : "No reason provided";
             *      sender.SendMessage("You banned " + GetPlayerName(to) + ". Reason: " + message, cInfo);
             *      SendAllMessage(GetPlayerName(to) + " has been banned. Reason: " + message, cInfo);
             *      ((Player)sender).Kick("BANNED: " + message);
             *      Console.WriteLine("[bAdmin] " + sender.GetName() + " banned " + GetPlayerName(to) + " Reason: " + message);
             *      return;
             * }*/
        }