コード例 #1
0
        public static void QuestRegion(CommandArgs args)
        {
            if (args.Parameters.Count > 0)
            {
                switch (args.Parameters[0].ToLower())
                {
                case "name":
                {
                    var player = QTools.GetPlayerByID(args.Player.Index);
                    args.Player.SendMessage("Hit a block to get the name of the Quest Region", Color.Yellow);
                    player.AwaitingQRName = true;
                    break;
                }

                case "define":
                {
                    if (args.Parameters.Count > 1)
                    {
                        if (!args.Player.TempPoints.Any(p => p == Point.Zero))
                        {
                            string qregionName = String.Join(" ", args.Parameters.GetRange(1, args.Parameters.Count - 1));
                            var    x           = Math.Min(args.Player.TempPoints[0].X, args.Player.TempPoints[1].X);
                            var    y           = Math.Min(args.Player.TempPoints[0].Y, args.Player.TempPoints[1].Y);
                            var    width       = Math.Abs(args.Player.TempPoints[0].X - args.Player.TempPoints[1].X);
                            var    height      = Math.Abs(args.Player.TempPoints[0].Y - args.Player.TempPoints[1].Y);
                            QMain.QuestRegions.Add(new QuestRegion(qregionName, new List <Quest>(), x, y, width + x, height + y, "Entered Quest Region: " + qregionName, "Left Quest Region: " + qregionName));
                            args.Player.SendMessage(string.Format("Added new Quest Region: \"{0}\"", qregionName), Color.Yellow);
                            QTools.UpdateRegionsInDB();
                        }
                        else
                        {
                            args.Player.SendMessage("Points not set up yet", Color.Red);
                        }
                    }
                    else
                    {
                        args.Player.SendMessage("Invalid syntax! Proper syntax: /questr define [name]", Color.Red);
                    }
                    break;
                }

                case "add":
                {
                    if (args.Parameters.Count > 2)
                    {
                        string      rName = args.Parameters[1];
                        string      qName = args.Parameters[2];
                        Quest       q     = QTools.GetQuestByName(qName);
                        QuestRegion r     = QTools.GetRegionByName(rName);
                        if (r != null && q != null)
                        {
                            args.Player.SendMessage(string.Format("Added Quest: \"{0}\" to the Quest Region: \"{1}\"", q.Name, r.Name), Color.Yellow);
                            r.Quests.Add(q);
                            QTools.UpdateRegionsInDB();
                        }
                        else if (r == null)
                        {
                            args.Player.SendMessage("Invalid Quest Region Name", Color.Red);
                        }
                        else if (q == null)
                        {
                            args.Player.SendMessage("Invalid Quest Name", Color.Red);
                        }
                    }
                    else
                    {
                        args.Player.SendMessage("Invalid syntax! Proper syntax: /questr add [RegionName] [QuestName]", Color.Red);
                    }
                    break;
                }

                case "delete":
                {
                    if (args.Parameters.Count > 1)
                    {
                        string questregionName = string.Join(" ", args.Parameters.GetRange(1, args.Parameters.Count - 1));
                        foreach (QuestRegion qr in QMain.QuestRegions)
                        {
                            if (qr.Name == questregionName)
                            {
                                QMain.QuestRegions.Remove(qr);
                                break;
                            }
                        }
                        QTools.UpdateRegionsInDB();
                        args.Player.SendMessage("Quest Region: " + questregionName + " deleted", Color.Yellow);
                    }
                    else
                    {
                        args.Player.SendMessage("Invalid syntax! Proper syntax: /questr delete [region]", Color.Red);
                    }
                    break;
                }

                case "list":
                {
                    const int pagelimit = 15;
                    const int perline   = 5;
                    int       page      = 0;
                    if (args.Parameters.Count > 1)
                    {
                        if (!int.TryParse(args.Parameters[1], out page) || page < 1)
                        {
                            args.Player.SendMessage(string.Format("Invalid page number ({0})", page), Color.Red);
                            return;
                        }
                        page--;
                    }
                    if (QMain.QuestRegions.Count == 0)
                    {
                        args.Player.SendMessage("There are currently no Quest Regions defined.", Color.Red);
                        return;
                    }
                    int pagecount = QMain.QuestRegions.Count / pagelimit;
                    if (page > pagecount)
                    {
                        args.Player.SendMessage(string.Format("Page number exceeds pages ({0}/{1})", page + 1, pagecount + 1), Color.Red);
                        return;
                    }
                    args.Player.SendMessage(string.Format("Current Quest Regions ({0}/{1}):", page + 1, pagecount + 1), Color.Green);
                    var nameslist = new List <string>();
                    for (int i = (page * pagelimit); (i < ((page * pagelimit) + pagelimit)) && i < QMain.QuestRegions.Count; i++)
                    {
                        nameslist.Add(QMain.QuestRegions[i].Name);
                    }
                    var names = nameslist.ToArray();
                    for (int i = 0; i < names.Length; i += perline)
                    {
                        args.Player.SendMessage(string.Join(", ", names, i, Math.Min(names.Length - i, perline)), Color.Yellow);
                    }
                    if (page < pagecount)
                    {
                        args.Player.SendMessage(string.Format("Type /questr list {0} for more Quest Regions.", (page + 2)), Color.Yellow);
                    }
                    break;
                }
                }
            }
        }