示例#1
0
        public static bool HandleCommandChase(Character character, string initialCommand,
                                              CommandHandling.CommandArgs Args)
        {
            if (Args.Count > 0)
            {
                string other     = Args[0].Value.ToLower();
                var    otherChar = Server.Instance.GetCharacter(other);
                if (otherChar != null)
                {
                    if (character.MapID != otherChar.MapID)
                    {
                        character.ChangeMap(otherChar.MapID);
                    }

                    var p = new Packet(0xC1);
                    p.WriteShort(otherChar.Position.X);
                    p.WriteShort(otherChar.Position.Y);
                    character.SendPacket(p);
                    return(true);
                }

                MessagePacket.SendText(MessagePacket.MessageTypes.RedText, "Victim not found.",
                                       character, MessagePacket.MessageMode.ToPlayer);
            }
            return(true);
        }
示例#2
0
        public static bool HandleCommand(Character chr, CommandHandling.CommandArgs args)
        {
            if (args.Sign != '!' && args.Sign != '/')
            {
                return(false);
            }
            try
            {
                var initialCommand = args.Command.ToLowerInvariant();
                if (_commands.TryGetValue(initialCommand, out var handler))
                {
                    var rank = UserAdminLevels.NormalPlayer;
                    if (Server.Tespia)
                    {
                        rank |= UserAdminLevels.Tespian;
                    }
                    if (chr.BetaPlayer)
                    {
                        rank |= UserAdminLevels.BetaPlayer;
                    }

                    if (chr.GMLevel >= 1)
                    {
                        rank |= UserAdminLevels.Intern;
                    }
                    if (chr.GMLevel >= 2)
                    {
                        rank |= UserAdminLevels.GM;
                    }
                    if (chr.GMLevel >= 3)
                    {
                        rank |= UserAdminLevels.Admin;
                    }

                    Trace.WriteLine($"User ranks: {rank}");
                    CommandCharacter = chr;
                    if ((handler.Ranks & rank) != 0)
                    {
                        return(handler.Handler(chr, initialCommand, args));
                    }
                    else
                    {
                        HandlerHelpers.ShowError("You cannot use this command.");
                    }
                }
            }
            catch
            {
            }
            finally
            {
                CommandCharacter = null;
            }

            return(false);
        }
示例#3
0
        public override bool FilterAdminCommand(Character character, CommandHandling.CommandArgs command)
        {
            switch (command.Command)
            {
            case "omok":

                OnStart(character, GameKindEnum.Omok);
                return(true);

            case "senduser":
                // Arg: <charname> <portalname>
                if (command.Count == 2)
                {
                    var charName   = command[0].Value;
                    var portalName = command[1].Value;

                    if (Portals.TryGetValue(portalName, out Portal portal))
                    {
                        var c = FindUser(charName);
                        if (c != null)
                        {
                            c.ChangeMap(ID, portal);
                        }
                    }
                }
                return(true);

            case "reset":
                // Do map reset....
                return(true);

            case "matchtable":
            {
                SendAvatarInfo(character);

                var p = new Packet(ServerMessages.TOURNAMENT_MATCH_TABLE);
                // This one is nasty. We cannot write lots of data at once.
                for (var i = 0; i < SLOTS; i++)
                {
                    for (var j = 0; j < 6; j++)
                    {
                        p.WriteInt(character.ID);
                    }
                }
                var round = CurrentRound;
                if (round >= 100)
                {
                    round -= 100;
                }
                p.WriteByte((byte)round);
                character.SendPacket(p);
                return(true);
            }



            case "prize":
                // Arg: <itemid1> <itemid2>
                // TODO add validation
                if (command.Count == 2)
                {
                    PrizeSet = true;
                    var p = new Packet(ServerMessages.TOURNAMENT_SET_PRIZE);
                    ItemID[0] = command[0].GetInt32();
                    ItemID[1] = command[1].GetInt32();

                    p.WriteBool(true);
                    p.WriteByte(1);
                    p.WriteInt(ItemID[0]);
                    p.WriteInt(ItemID[1]);
                    SendPacket(p);

                    // For the user himself
                    p = new Packet(ServerMessages.TOURNAMENT_SET_PRIZE);
                    p.WriteBool(true);
                    p.WriteByte(0);
                    character.SendPacket(p);
                }
                return(true);

            case "giveprize":
                // Arg: <itemid> <portalname>
                if (command.Count == 2)
                {
                    var itemid     = command[0].GetInt32();
                    var portalName = command[1].Value;

                    if (Portals.TryGetValue(portalName, out Portal portal))
                    {
                        var item = BaseItem.CreateFromItemID(itemid);
                        item.GiveStats(ItemVariation.None);
                        var reward = Reward.Create(item);

                        // Drops through floor with X + 50 on pt 2
                        DropPool.Create(
                            reward,
                            0,
                            0,
                            DropType.Normal,
                            0,
                            new Pos((short)(portal.X + 40), portal.Y),
                            portal.X + 40,
                            0,
                            false,
                            0,
                            true,     // Yes, by pet??!?
                            false
                            );
                    }
                }
                return(true);
            }
            return(false);
        }
示例#4
0
 public static bool HandleCommandWhereAmI(Character character, string initialCommand, CommandHandling.CommandArgs Args)
 {
     ShowInfo($"You are on mapid {character.MapID}, X {character.Position.X}, Y {character.Position.Y}, FH {character.Foothold}");
     return(true);
 }
示例#5
0
        public static bool HandleMapCommand(Character character, string initialCommand, CommandHandling.CommandArgs Args)
        {
            if (Args.Count <= 0)
            {
                return(true);
            }

            var FieldID = -1;

            if (!Args[0].IsNumber())
            {
                var MapStr = Args[0];
                var TempID = GetMapidFromName(MapStr);

                if (TempID == -1)
                {
                    switch (MapStr)
                    {
                    case "here":
                        FieldID = character.MapID;
                        break;

                    case "town":
                        FieldID = character.Field.ReturnMap;
                        break;
                    }
                }
                else
                {
                    FieldID = TempID;
                }
            }
            else
            {
                FieldID = Args[0].GetInt32();
            }

            if (DataProvider.Maps.ContainsKey(FieldID))
            {
                character.ChangeMap(FieldID);
            }
            else
            {
                ShowError("Map not found.");
            }
            return(true);
        }