Пример #1
0
        public virtual void FillPositions()
        {
            foreach (DBKeepPosition[] positionGroup in this.Positions.Values)
            {
                for (int i = this.Height; i >= 0; i--)
                {
                    DBKeepPosition position = positionGroup[i] as DBKeepPosition;
                    if (position != null)
                    {
                        bool create = false;
                        if (position.ClassType == "DOL.GS.Keeps.GameKeepBanner")
                        {
                            if (this.AbstractKeep.Banners[position.TemplateID] == null)
                            {
                                create = true;
                            }
                        }
                        else if (position.ClassType == "DOL.GS.Keeps.GameKeepDoor")
                        {
                            if (this.AbstractKeep.Doors[position.TemplateID] == null)
                            {
                                create = true;
                            }
                        }
                        else if (position.ClassType == "DOL.GS.Keeps.FrontierTeleportStone")
                        {
                            if (this.AbstractKeep.TeleportStone == null)
                            {
                                create = true;
                            }
                        }
                        else if (position.ClassType == "DOL.GS.Keeps.Patrol")
                        {
                            if (position.KeepType == (int)AbstractGameKeep.eKeepType.Any || position.KeepType == (int)AbstractKeep.KeepType)
                            {
                                if (this.AbstractKeep.Patrols[position.TemplateID] == null)
                                {
                                    Patrol p = new Patrol(this);
                                    p.SpawnPosition = position;
                                    p.PatrolID      = position.TemplateID;
                                    p.InitialiseGuards();
                                }
                            }
                            continue;
                        }
                        else
                        {
                            if (this.AbstractKeep.Guards[position.TemplateID] == null)
                            {
                                create = true;
                            }
                        }
                        if (create)
                        {
                            //create the object
                            try
                            {
                                Assembly  asm = Assembly.GetExecutingAssembly();
                                IKeepItem obj = (IKeepItem)asm.CreateInstance(position.ClassType, true);
                                if (obj != null)
                                {
                                    obj.LoadFromPosition(position, this);
                                }

                                if (ServerProperties.Properties.ENABLE_DEBUG)
                                {
                                    if (obj is GameLiving)
                                    {
                                        (obj as GameLiving).Name += " is living, component " + obj.Component.ID;
                                    }
                                    else if (obj is GameObject)
                                    {
                                        (obj as GameObject).Name += " is object, component " + obj.Component.ID;
                                    }
                                }
                            }
                            catch (Exception ex)
                            {
                                log.Error("GameKeepComponent:FillPositions: " + position.ClassType, ex);
                            }
                        }
                        else
                        {
                            //move the object
                            if (position.ClassType == "DOL.GS.Keeps.GameKeepBanner")
                            {
                                IKeepItem banner = this.AbstractKeep.Banners[position.TemplateID] as IKeepItem;
                                if (banner.Position != position)
                                {
                                    banner.MoveToPosition(position);
                                }
                            }
                            else if (position.ClassType == "DOL.GS.Keeps.GameKeepDoor")
                            {
                                //doors dont move
                            }
                            else if (position.ClassType == "DOL.GS.Keeps.FrontierPortalStone")
                            {
                                //these dont move
                            }
                            else
                            {
                                IKeepItem guard = this.AbstractKeep.Guards[position.TemplateID] as IKeepItem;
                                guard.MoveToPosition(position);
                            }
                        }
                        break;
                    }
                }
            }

            foreach (GameKeepGuard guard in this.AbstractKeep.Guards.Values)
            {
                if (guard.PatrolGroup != null)
                {
                    continue;
                }
                if (guard.HookPoint != null)
                {
                    continue;
                }
                if (guard.Position == null)
                {
                    continue;
                }
                if (guard.Position.Height > guard.Component.Height)
                {
                    guard.RemoveFromWorld();
                }
                else
                {
                    if (guard.Position.Height <= guard.Component.Height &&
                        guard.ObjectState != GameObject.eObjectState.Active && !guard.IsRespawning)
                    {
                        guard.AddToWorld();
                    }
                }
            }

            foreach (GameKeepBanner banner in this.AbstractKeep.Banners.Values)
            {
                if (banner.Position == null)
                {
                    continue;
                }
                if (banner.Position.Height > banner.Component.Height)
                {
                    banner.RemoveFromWorld();
                }
                else
                {
                    if (banner.Position.Height <= banner.Component.Height &&
                        banner.ObjectState != GameObject.eObjectState.Active)
                    {
                        banner.AddToWorld();
                    }
                }
            }
        }
Пример #2
0
        /// <summary>
        /// Populate GameKeepItems for this component into the keep
        /// </summary>
        public virtual void FillPositions()
        {
            foreach (DBKeepPosition[] positionGroup in Positions.Values)
            {
                for (int i = this.Height; i >= 0; i--)
                {
                    if (positionGroup[i] is DBKeepPosition position)
                    {
                        bool   create = false;
                        string sKey   = position.TemplateID + ID;

                        switch (position.ClassType)
                        {
                        case "DOL.GS.Keeps.GameKeepBanner":
                            if (Keep.Banners.ContainsKey(sKey) == false)
                            {
                                create = true;
                            }
                            break;

                        case "DOL.GS.Keeps.GameKeepDoor":
                            if (Keep.Doors.ContainsKey(sKey) == false)
                            {
                                create = true;
                            }
                            break;

                        case "DOL.GS.Keeps.FrontierTeleportStone":
                            if (Keep.TeleportStone == null)
                            {
                                create = true;
                            }
                            break;

                        case "DOL.GS.Keeps.Patrol":
                            if ((position.KeepType == (int)AbstractGameKeep.eKeepType.Any || position.KeepType == (int)Keep.KeepType) &&
                                Keep.Patrols.ContainsKey(sKey) == false)
                            {
                                Patrol p = new Patrol(this);
                                p.SpawnPosition = position;
                                p.PatrolID      = position.TemplateID;
                                p.InitialiseGuards();
                            }
                            continue;

                        case "DOL.GS.Keeps.FrontierHastener":
                            if (Keep.HasHastener && log.IsWarnEnabled)
                            {
                                log.Warn($"FillPositions(): KeepComponent_ID {InternalID}, KeepPosition_ID {position.ObjectId}: There is already a {position.ClassType} on Keep {Keep.KeepID}");
                            }

                            if (Keep.Guards.ContainsKey(sKey) == false)
                            {
                                Keep.HasHastener = true;
                                create           = true;
                            }
                            break;

                        case "DOL.GS.Keeps.MissionMaster":
                            if (Keep.HasCommander && log.IsWarnEnabled)
                            {
                                log.Warn($"FillPositions(): KeepComponent_ID {InternalID}, KeepPosition_ID {position.ObjectId}: There is already a {position.ClassType} on Keep {Keep.KeepID}");
                            }

                            if (Keep.Guards.ContainsKey(sKey) == false)
                            {
                                Keep.HasCommander = true;
                                create            = true;
                            }
                            break;

                        case "DOL.GS.Keeps.GuardLord":
                            if (Keep.HasLord && log.IsWarnEnabled)
                            {
                                log.Warn($"FillPositions(): KeepComponent_ID {InternalID}, KeepPosition_ID {position.ObjectId}: There is already a {position.ClassType} on Keep {Keep.KeepID}");
                            }

                            if (Keep.Guards.ContainsKey(sKey) == false)
                            {
                                Keep.HasLord = true;
                                create       = true;
                            }
                            break;

                        default:
                            if (Keep.Guards.ContainsKey(sKey) == false)
                            {
                                create = true;
                            }
                            break;
                        }                        // switch (position.ClassType)

                        if (create)
                        {
                            //create the object
                            try
                            {
                                Assembly  asm = Assembly.GetExecutingAssembly();
                                IKeepItem obj = (IKeepItem)asm.CreateInstance(position.ClassType, true);
                                if (obj != null)
                                {
                                    obj.LoadFromPosition(position, this);
                                }

                                if (ServerProperties.Properties.ENABLE_DEBUG)
                                {
                                    if (obj is GameLiving living)
                                    {
                                        living.Name += " is living, component " + obj.Component.ID;
                                    }
                                    else if (obj is GameObject game)
                                    {
                                        game.Name += " is object, component " + obj.Component.ID;
                                    }
                                }
                            }
                            catch (Exception ex)
                            {
                                log.Error("FillPositions(): " + position.ClassType, ex);
                            }
                        }
                        else
                        {
                            /* Why move the object?  We should notify the server admin of the duplicate and let them figure out what is causing it in their DB.
                             * Otherwise, we're assuming the former position/component combination wasn't valid, and that's an error that should be reported in any case.
                             * //move the object
                             * switch (position.ClassType)
                             * {
                             *      case "DOL.GS.Keeps.GameKeepBanner":
                             *              if (this.AbstractKeep.Banners[position.TemplateID] is IKeepItem banner && banner.Position != position)
                             *                      banner.MoveToPosition(position);
                             *              break;
                             *      case "DOL.GS.Keeps.GameKeepDoor":
                             *      case "DOL.GS.Keeps.FrontierPortalStone":
                             *              break;  // these dont move
                             *      default:
                             *              if (this.AbstractKeep.Guards[position.TemplateID] is IKeepItem guard)
                             *                      guard.MoveToPosition(position);
                             *              break;
                             * }*/
                            if (log.IsWarnEnabled)
                            {
                                log.Warn($"FillPositions(): Keep {Keep.KeepID} already has a {position.ClassType} assigned to Position {position.ObjectId} on Component {InternalID}");
                            }
                        }
                        break; // We found the highest item for that position, move onto the next one
                    }          // if (positionGroup[i] is DBKeepPosition position)
                }              // for (int i = this.Height; i >= 0; i--)
            }                  // foreach (DBKeepPosition[] positionGroup in this.Positions.Values)

            foreach (var guard in Keep.Guards.Values)
            {
                if (guard.PatrolGroup != null)
                {
                    continue;
                }
                if (guard.HookPoint != null)
                {
                    continue;
                }
                if (guard.Position == null)
                {
                    continue;
                }
                if (guard.Position.Height > guard.Component.Height)
                {
                    guard.RemoveFromWorld();
                }
                else
                {
                    if (guard.Position.Height <= guard.Component.Height &&
                        guard.ObjectState != GameObject.eObjectState.Active && !guard.IsRespawning)
                    {
                        guard.AddToWorld();
                    }
                }
            }

            foreach (var banner in Keep.Banners.Values)
            {
                if (banner.Position == null)
                {
                    continue;
                }
                if (banner.Position.Height > banner.Component.Height)
                {
                    banner.RemoveFromWorld();
                }
                else
                {
                    if (banner.Position.Height <= banner.Component.Height &&
                        banner.ObjectState != GameObject.eObjectState.Active)
                    {
                        banner.AddToWorld();
                    }
                }
            }
        }
Пример #3
0
		public virtual void FillPositions()
		{
			foreach (DBKeepPosition[] positionGroup in this.Positions.Values)
			{
				for (int i = this.Height; i >= 0; i--)
				{
					DBKeepPosition position = positionGroup[i] as DBKeepPosition;
					if (position != null)
					{
						bool create = false;
						if (position.ClassType == "DOL.GS.Keeps.GameKeepBanner")
						{
							if (this.Keep.Banners[position.TemplateID] == null)
								create = true;
						}
						else if (position.ClassType == "DOL.GS.Keeps.GameKeepDoor")
						{
							if (this.Keep.Doors[position.TemplateID] == null)
								create = true;
						}
						else if (position.ClassType == "DOL.GS.Keeps.FrontierTeleportStone")
						{
							if (this.Keep.TeleportStone == null)
								create = true;
						}
						else if (position.ClassType == "DOL.GS.Keeps.Patrol")
						{
							if (position.KeepType == (int)AbstractGameKeep.eKeepType.Any || position.KeepType == (int)Keep.KeepType)
							{
								if (this.Keep.Patrols[position.TemplateID] == null)
								{
									Patrol p = new Patrol(this);
									p.SpawnPosition = position;
									p.PatrolID = position.TemplateID;
									p.InitialiseGuards();
								}
							}
							continue;
						}
						else
						{
							if (this.Keep.Guards[position.TemplateID] == null)
								create = true;
						}
						if (create)
						{
							//create the object
							try
							{
								Assembly asm = Assembly.GetExecutingAssembly();
								IKeepItem obj = (IKeepItem)asm.CreateInstance(position.ClassType, true);
								if (obj != null)
									obj.LoadFromPosition(position, this);

								if (ServerProperties.Properties.ENABLE_DEBUG)
								{
									if (obj is GameLiving)
										(obj as GameLiving).Name += " is living, component " + obj.Component.ID;
									else if (obj is GameObject)
										(obj as GameObject).Name += " is object, component " + obj.Component.ID;
								}
							}
							catch (Exception ex)
							{
								log.Error("GameKeepComponent:FillPositions: " + position.ClassType, ex);
							}
								
						}
						else
						{
							//move the object
							if (position.ClassType == "DOL.GS.Keeps.GameKeepBanner")
							{
								IKeepItem banner = this.Keep.Banners[position.TemplateID] as IKeepItem;
								if (banner.Position != position)
								{
									banner.MoveToPosition(position);
								}
							}
							else if (position.ClassType == "DOL.GS.Keeps.GameKeepDoor")
							{
								//doors dont move
							}
							else if (position.ClassType == "DOL.GS.Keeps.FrontierPortalStone")
							{ 
								//these dont move
							}
							else
							{
								IKeepItem guard = this.Keep.Guards[position.TemplateID] as IKeepItem;
								guard.MoveToPosition(position);
							}
						}
						break;
					}
				}
			}

			foreach (GameKeepGuard guard in this.Keep.Guards.Values)
			{
				if (guard.PatrolGroup != null)
					continue;
				if (guard.HookPoint != null) continue;
				if (guard.Position == null) continue;
				if (guard.Position.Height > guard.Component.Height)
					guard.RemoveFromWorld();
				else
				{
					if (guard.Position.Height <= guard.Component.Height &&
						guard.ObjectState != GameObject.eObjectState.Active && !guard.IsRespawning)
						guard.AddToWorld();
				}
			}

			foreach (GameKeepBanner banner in this.Keep.Banners.Values)
			{
				if (banner.Position == null) continue;
				if (banner.Position.Height > banner.Component.Height)
					banner.RemoveFromWorld();
				else
				{
					if (banner.Position.Height <= banner.Component.Height &&
						banner.ObjectState != GameObject.eObjectState.Active)
						banner.AddToWorld();
				}
			}
		}
Пример #4
0
		/// <summary>
		/// The command handler itself
		/// </summary>
		/// <param name="client">The client using the command</param>
		/// <param name="args">The command arguments</param>
		public void OnCommand(GameClient client, string[] args)
		{
			if (args.Length == 1)
			{
				DisplaySyntax(client);
				return;
			}

			switch (args[1].ToLower())
			{
				#region Create
				case "create":
					{
						GameKeepGuard guard = null;
						if (args.Length < 3)
						{
							DisplaySyntax(client);
							return;
						}
						
						switch (args[2].ToLower())
						{
							#region Lord
							case "lord":
								{
									guard = new GuardLord();
									break;
								}
							#endregion Lord
							#region Fighter
							case "fighter":
								{
									guard = new GuardFighter();
									break;
								}
							#endregion Fighter
							#region Archer
							case "archer":
								{
									if (args.Length > 3)
										guard = new GuardStaticArcher();
									else
										guard = new GuardArcher();
									break;
								}
							#endregion Archer
							#region Healer
							case "healer":
								{
									guard = new GuardHealer();
									break;
								}
							#endregion Healer
							#region Stealther
							case "stealther":
								{
									guard = new GuardStealther();
									break;
								}
							#endregion Stealther
							#region Caster
							case "caster":
								{
									if (args.Length > 3)
										guard = new GuardStaticCaster();
									else
										guard = new GuardCaster();
									break;
								}
							#endregion Caster
							#region Hastener
							case "hastener":
								{
									guard = new FrontierHastener();
									break;
								}
							#endregion Hastener
							#region Mission
							case "mission":
								{
									guard = new MissionMaster();
									break;
								}
							#endregion Mission
							#region Patrol
							case "patrol":
								{
									if (args.Length < 4)
									{
										DisplayMessage(client, "You need to provide a name for this patrol.");
										return;
									}

									AbstractGameKeep.eKeepType keepType = AbstractGameKeep.eKeepType.Any;

									if (args.Length < 5)
									{
										DisplayMessage(client, "You need to provide the type of keep this patrol works with.");
										int i = 0;
										foreach (string str in Enum.GetNames(typeof(Keeps.AbstractGameKeep.eKeepType)))
										{
											DisplayMessage(client, "#" + i + ": " + str);
											i++;
										}
										return;
									}

									try
									{
										keepType = (AbstractGameKeep.eKeepType)Convert.ToInt32(args[4]);
									}
									catch
									{
										DisplayMessage(client, "Type of keep specified was not valid.");
										return;
									}


									if (client.Player.TargetObject is GameKeepComponent == false)
									{
										DisplayMessage(client, LanguageMgr.GetTranslation(client.Account.Language, "GMCommands.KeepGuard.Create.NoKCompTarget"));
										return;
									}
									GameKeepComponent c = client.Player.TargetObject as GameKeepComponent;;
									Patrol p = new Patrol(c);
									p.PatrolID = args[3];
									p.KeepType = keepType;
									p.SpawnPosition = PositionMgr.CreatePatrolPosition(p.PatrolID, c, client.Player, keepType);
									p.PatrolID = p.SpawnPosition.TemplateID;
									p.InitialiseGuards();
									DisplayMessage(client, "Patrol created for Keep Type " + Enum.GetName(typeof(AbstractGameKeep.eKeepType), keepType));
									return;
								}
							#endregion Patrol
						}

						if (guard == null)
						{
							DisplaySyntax(client);
							return;
						}

						GameKeepComponent component = client.Player.TargetObject as GameKeepComponent;
						if (component != null)
						{
							int height = component.Height;
							if (args.Length > 4)
								int.TryParse(args[4], out height);

							DBKeepPosition pos = PositionMgr.CreatePosition(guard.GetType(), height, client.Player, Guid.NewGuid().ToString(), component);
							//PositionMgr.AddPosition(pos);
							//PositionMgr.FillPositions();
							DBKeepPosition[] list = component.Positions[pos.TemplateID] as DBKeepPosition[];
							if (list == null)
							{
								list = new DBKeepPosition[4];
								component.Positions[pos.TemplateID] = list;
							}
								
							list[pos.Height] = pos;
							component.LoadPositions();
							component.FillPositions();
						}
						else
						{
							guard.CurrentRegion = client.Player.CurrentRegion;
							guard.X = client.Player.X;
							guard.Y = client.Player.Y;
							guard.Z = client.Player.Z;
							guard.Heading = client.Player.Heading;
							guard.Realm = guard.CurrentZone.Realm;
                            guard.LoadedFromScript = false;
                            guard.SaveIntoDatabase();
							
							foreach (AbstractArea area in guard.CurrentAreas)
							{
								if (area is KeepArea)
								{
									AbstractGameKeep keep = (area as KeepArea).Keep;
									guard.Component = new GameKeepComponent();
									guard.Component.Keep = keep;
									break;
								}
							}

							TemplateMgr.RefreshTemplate(guard);
							guard.AddToWorld();

							if (guard.Component != null && guard.Component.Keep != null)
								guard.Component.Keep.Guards.Add(DOL.Database.UniqueID.IDGenerator.GenerateID(), guard);
						}

						PositionMgr.FillPositions();

						DisplayMessage(client, LanguageMgr.GetTranslation(client.Account.Language, "GMCommands.KeepGuard.Create.GuardAdded"));
						break;
					}
				#endregion Create
				#region Position
				case "position":
					{
						switch (args[2].ToLower())
						{
							#region Add
							case "add":
								{
									if (!(client.Player.TargetObject is GameKeepGuard))
									{
										DisplayMessage(client, LanguageMgr.GetTranslation(client.Account.Language, "GMCommands.KeepGuard.Position.TargetGuard"));
										return;
									}

									if (args.Length != 4)
									{
										DisplaySyntax(client);
										return;
									}

									byte height = byte.Parse(args[3]);
									//height = KeepMgr.GetHeightFromLevel(height);
									GameKeepGuard guard = client.Player.TargetObject as GameKeepGuard;
									
									if (PositionMgr.GetPosition(guard) != null)
									{
										DisplayMessage(client, LanguageMgr.GetTranslation(client.Account.Language, "GMCommands.KeepGuard.Position.PAlreadyAss", height));
										return;
									}

									DBKeepPosition pos = PositionMgr.CreatePosition(guard.GetType(), height, client.Player, guard.TemplateID, guard.Component);
									PositionMgr.AddPosition(pos);
									PositionMgr.FillPositions();

									DisplayMessage(client, LanguageMgr.GetTranslation(client.Account.Language, "GMCommands.KeepGuard.Position.GuardPAdded"));
									break;
								}
							#endregion Add
							#region Remove
							case "remove":
								{
									if (!(client.Player.TargetObject is GameKeepGuard))
									{
										DisplayMessage(client, LanguageMgr.GetTranslation(client.Account.Language, "GMCommands.KeepGuard.Position.TargetGuard"));
										return;
									}

									GameKeepGuard guard = client.Player.TargetObject as GameKeepGuard;
									DBKeepPosition pos = guard.Position;
									if (pos != null)
									{
										PositionMgr.RemovePosition(pos);

										if (guard.LoadedFromScript)
										{
											if (guard.PatrolGroup != null)
											{
												foreach (GameKeepGuard g in guard.PatrolGroup.PatrolGuards)
												{
													g.Delete();
												}
											}
											else
											{
												guard.Delete();
											}
										}
									}

									PositionMgr.FillPositions();

									DisplayMessage(client, LanguageMgr.GetTranslation(client.Account.Language, "GMCommands.KeepGuard.Position.GuardRemoved"));
									break;
								}
							#endregion Remove
							#region Default
							default:
								{
									DisplaySyntax(client);
									return;
								}
							#endregion Default
						}
						break;
					}
				#endregion Position
				#region Path
				case "path":
					{
						switch (args[2].ToLower())
						{
							#region Create
							case "create":
								{
									RemoveAllTempPathObjects(client);

									PathPoint startpoint = new PathPoint(client.Player.X, client.Player.Y, client.Player.Z, 100000, ePathType.Once);
									client.Player.TempProperties.setProperty(TEMP_PATH_FIRST, startpoint);
									client.Player.TempProperties.setProperty(TEMP_PATH_LAST, startpoint);
									client.Player.Out.SendMessage(LanguageMgr.GetTranslation(client.Account.Language, "GMCommands.KeepGuard.Path.CreationStarted"), eChatType.CT_System, eChatLoc.CL_SystemWindow);
									CreateTempPathObject(client, startpoint, "TMP PP 1");
									break;
								}
							#endregion Create
							#region Add
							case "add":
								{
									PathPoint path = (PathPoint)client.Player.TempProperties.getProperty<object>(TEMP_PATH_LAST, null);
									if (path == null)
									{
										DisplayMessage(client, LanguageMgr.GetTranslation(client.Account.Language, "GMCommands.KeepGuard.Path.NoPathCreatedYet"));
										return;
									}

									int speedlimit = 1000;
									if (args.Length == 4)
									{
										try
										{
											speedlimit = int.Parse(args[3]);
										}
										catch
										{
											DisplayMessage(client, LanguageMgr.GetTranslation(client.Account.Language, "GMCommands.KeepGuard.Path.NoValidSpLimit", args[2]));
											return;
										}
									}

									PathPoint newpp = new PathPoint(client.Player.X, client.Player.Y, client.Player.Z, speedlimit, path.Type);
									path.Next = newpp;
									newpp.Prev = path;
									client.Player.TempProperties.setProperty(TEMP_PATH_LAST, newpp);

									int len = 0;
									while (path.Prev != null)
									{
										len++;
										path = path.Prev;
									}
									len += 2;

									CreateTempPathObject(client, newpp, "TMP PP " + len);
									DisplayMessage(client, LanguageMgr.GetTranslation(client.Account.Language, "GMCommands.KeepGuard.Path.PPAdded", len));
									break;
								}
							#endregion Add
							#region Save
							case "save":
								{
									PathPoint path = (PathPoint)client.Player.TempProperties.getProperty<object>(TEMP_PATH_LAST, null);
									if (path == null)
									{
										DisplayMessage(client, LanguageMgr.GetTranslation(client.Account.Language, "GMCommands.KeepGuard.Path.NoPathCreatedYet"));
										return;
									}

									GameKeepGuard guard = client.Player.TargetObject as GameKeepGuard;
									if (guard == null || guard.PatrolGroup == null)
									{
										DisplayMessage(client, LanguageMgr.GetTranslation(client.Account.Language, "GMCommands.KeepGuard.Path.TargPatrolGuard"));
										return;
									}

									path.Type = ePathType.Loop;
									PositionMgr.SavePatrolPath(guard.TemplateID, path, guard.Component);
									DisplayMessage(client, LanguageMgr.GetTranslation(client.Account.Language, "GMCommands.KeepGuard.Path.Saved"));
									RemoveAllTempPathObjects(client);
									guard.PatrolGroup.InitialiseGuards();

									PositionMgr.FillPositions();

									DisplayMessage(client, "Patrol groups initialized!");

									break;
								}
							#endregion Save
							#region Default
							default:
								{
									DisplaySyntax(client);
									return;
								}
							#endregion Default
						}
						break;
					}
				#endregion Path
				#region Default
				default:
					{
						DisplaySyntax(client);
						return;
					}
				#endregion Default
			}
		}