예제 #1
0
파일: Faction.cs 프로젝트: mynew4/DOLSharp
		public void OnCommand(GameClient client, string[] args)
		{
			if (args.Length < 2)
			{
				DisplaySyntax(client);
				return;
			}
			Faction myfaction = (Faction)client.Player.TempProperties.getProperty<object>(TEMP_FACTION_LAST, null);
			switch (args[1])
			{
				#region Create
				case "create":
					{
						if (args.Length < 4)
						{
							DisplaySyntax(client);
							return;
						}
						string name = args[2];
						int baseAggro = 0;
						try
						{
							baseAggro = Convert.ToInt32(args[3]);
						}
						catch
						{
							client.Player.Out.SendMessage(LanguageMgr.GetTranslation(client.Account.Language, "GMCommands.Faction.Create.BAMustBeNumber"), eChatType.CT_Say, eChatLoc.CL_SystemWindow);
							return;
						}

						int max = 0;
						//Log.Info("count:" + FactionMgr.Factions.Count.ToString());
						if (FactionMgr.Factions.Count != 0)
						{
							//Log.Info("count >0");
							IEnumerator enumerator = FactionMgr.Factions.Keys.GetEnumerator();
							while (enumerator.MoveNext())
							{
								//Log.Info("max :" + max + " et current :" + (int)enumerator.Current);
								max = System.Math.Max(max, (int)enumerator.Current);
							}
						}
						//Log.Info("max :" + max);
						DBFaction dbfaction = new DBFaction();
						dbfaction.BaseAggroLevel = baseAggro;
						dbfaction.Name = name;
						dbfaction.ID = (max + 1);
						//Log.Info("add obj to db with id :" + dbfaction.ID);
						GameServer.Database.AddObject(dbfaction);
						//Log.Info("add obj to db");
						myfaction = new Faction();
						myfaction.LoadFromDatabase(dbfaction);
						FactionMgr.Factions.Add(dbfaction.ID, myfaction);
						client.Player.TempProperties.setProperty(TEMP_FACTION_LAST, myfaction);
						client.Player.Out.SendMessage(LanguageMgr.GetTranslation(client.Account.Language, "GMCommands.Faction.Create.NewCreated"), eChatType.CT_Say, eChatLoc.CL_SystemWindow);
					}
					break;
				#endregion Create
				#region Assign
				case "assign":
					{
						if (myfaction == null)
						{
							client.Player.Out.SendMessage(LanguageMgr.GetTranslation(client.Account.Language, "GMCommands.Faction.MustSelectFaction"), eChatType.CT_Say, eChatLoc.CL_SystemWindow);
							return;
						}

						GameNPC npc = client.Player.TargetObject as GameNPC;
						if (npc == null)
						{
							client.Player.Out.SendMessage(LanguageMgr.GetTranslation(client.Account.Language, "GMCommands.Faction.Assign.MustSelectMob"), eChatType.CT_Say, eChatLoc.CL_SystemWindow);
							return;
						}
						npc.Faction = myfaction;
						client.Player.Out.SendMessage(LanguageMgr.GetTranslation(client.Account.Language, "GMCommands.Faction.Assign.MobHasJoinedFact", npc.Name, myfaction.Name), eChatType.CT_Say, eChatLoc.CL_SystemWindow);
					}
					break;
				#endregion Assign
				#region AddFriend
				case "addfriend":
					{
						if (myfaction == null)
						{
							client.Player.Out.SendMessage(LanguageMgr.GetTranslation(client.Account.Language, "GMCommands.Faction.MustSelectFaction"), eChatType.CT_Say, eChatLoc.CL_SystemWindow);
							return;
						}
						if (args.Length < 3)
						{
							DisplaySyntax(client);
							return;
						}
						int id = 0;
						try
						{
							id = Convert.ToInt32(args[2]);
						}
						catch
						{
							client.Player.Out.SendMessage(LanguageMgr.GetTranslation(client.Account.Language, "GMCommands.Faction.IndexMustBeNumber"), eChatType.CT_Say, eChatLoc.CL_SystemWindow);
							return;
						}
						Faction linkedfaction = FactionMgr.GetFactionByID(id);
						if (linkedfaction == null)
						{
							client.Player.Out.SendMessage(LanguageMgr.GetTranslation(client.Account.Language, "GMCommands.Faction.FactionNotLoaded"), eChatType.CT_Say, eChatLoc.CL_SystemWindow);
							return;
						}
						DBLinkedFaction dblinkedfaction = new DBLinkedFaction();
						dblinkedfaction.FactionID = myfaction.ID;
						dblinkedfaction.LinkedFactionID = linkedfaction.ID;
						dblinkedfaction.IsFriend = true;
						GameServer.Database.AddObject(dblinkedfaction);
						myfaction.AddFriendFaction(linkedfaction);
					}
					break;
				#endregion AddFriend
				#region AddEnemy
				case "addenemy":
					{
						if (myfaction == null)
						{
							client.Player.Out.SendMessage(LanguageMgr.GetTranslation(client.Account.Language, "GMCommands.Faction.MustSelectFaction"), eChatType.CT_Say, eChatLoc.CL_SystemWindow);
							return;
						}
						if (args.Length < 3)
						{
							DisplaySyntax(client);
							return;
						}
						int id = 0;
						try
						{
							id = Convert.ToInt32(args[2]);
						}
						catch
						{
							client.Player.Out.SendMessage(LanguageMgr.GetTranslation(client.Account.Language, "GMCommands.Faction.IndexMustBeNumber"), eChatType.CT_Say, eChatLoc.CL_SystemWindow);
							return;
						}
						Faction linkedfaction = FactionMgr.GetFactionByID(id);
						if (linkedfaction == null)
						{
							client.Player.Out.SendMessage(LanguageMgr.GetTranslation(client.Account.Language, "GMCommands.Faction.FactionNotLoaded"), eChatType.CT_Say, eChatLoc.CL_SystemWindow);
							return;
						}
						DBLinkedFaction dblinkedfaction = new DBLinkedFaction();
						dblinkedfaction.FactionID = myfaction.ID;
						dblinkedfaction.LinkedFactionID = linkedfaction.ID;
						dblinkedfaction.IsFriend = false;
						GameServer.Database.AddObject(dblinkedfaction);
						myfaction.AddEnemyFaction(linkedfaction);
					}
					break;
				#endregion AddEnemy
				#region List
				case "list":
					{
						foreach (Faction faction in FactionMgr.Factions.Values)
							client.Player.Out.SendMessage("#" + faction.ID.ToString() + ": " + faction.Name + " (" + faction.BaseAggroLevel + ")", eChatType.CT_Say, eChatLoc.CL_SystemWindow);
						return;
					}
				#endregion List
				#region Select
				case "select":
					{
						if (args.Length < 3)
						{
							DisplaySyntax(client);
							return;
						}
						int id = 0;
						try
						{
							id = Convert.ToInt32(args[2]);
						}
						catch
						{
							client.Player.Out.SendMessage(LanguageMgr.GetTranslation(client.Account.Language, "GMCommands.Faction.IndexMustBeNumber"), eChatType.CT_Say, eChatLoc.CL_SystemWindow);
							return;
						}
						Faction tempfaction = FactionMgr.GetFactionByID(id);
						if (tempfaction == null)
						{
							client.Player.Out.SendMessage(LanguageMgr.GetTranslation(client.Account.Language, "GMCommands.Faction.FactionNotLoaded"), eChatType.CT_Say, eChatLoc.CL_SystemWindow);
							return;
						}
						client.Player.TempProperties.setProperty(TEMP_FACTION_LAST, tempfaction);
					}
					break;
				#endregion Select
				#region Default
				default:
					{
						DisplaySyntax(client);
						return;
					}
				#endregion Default
			}
		}
예제 #2
0
 /// <summary>
 /// load faction from DB
 /// </summary>
 /// <param name="dbfaction"></param>
 public void LoadFromDatabase(DBFaction dbfaction)
 {
     m_name = dbfaction.Name;
     m_id = dbfaction.ID;
     m_baseAggroLevel = dbfaction.BaseAggroLevel;
 }