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; } } } }