Esempio n. 1
0
		/// <summary>
		/// this function load all faction from DB
		/// </summary>	
		public static bool Init()
		{
			m_factions = new Hashtable(1);

			var dbfactions =	GameServer.Database.SelectAllObjects<DBFaction>();
			foreach(DBFaction dbfaction in dbfactions)
			{
				Faction myfaction = new Faction();
				myfaction.LoadFromDatabase(dbfaction);
				m_factions.Add(dbfaction.ID,myfaction);
			}

			var dblinkedfactions =	GameServer.Database.SelectAllObjects<DBLinkedFaction>();
			foreach(DBLinkedFaction dblinkedfaction in dblinkedfactions)
			{
				Faction faction = GetFactionByID(dblinkedfaction.LinkedFactionID);
				Faction linkedFaction = GetFactionByID(dblinkedfaction.FactionID);
				if (faction == null || linkedFaction == null) 
				{
					log.Warn("Missing Faction or friend faction with Id :"+dblinkedfaction.LinkedFactionID+"/"+dblinkedfaction.FactionID);
					continue;
				}
				if (dblinkedfaction.IsFriend)
					faction.AddFriendFaction(linkedFaction);
				else
					faction.AddEnemyFaction(linkedFaction);
			}

			var dbfactionAggroLevels =	GameServer.Database.SelectAllObjects<DBFactionAggroLevel>();
			foreach(DBFactionAggroLevel dbfactionAggroLevel in dbfactionAggroLevels)
			{
				Faction faction = GetFactionByID(dbfactionAggroLevel.FactionID);
				if (faction == null)
				{
					log.Warn("Missing Faction with Id :"+dbfactionAggroLevel.FactionID);
					continue;
				}
				faction.PlayerxFaction.Add(dbfactionAggroLevel.CharacterID,dbfactionAggroLevel.AggroLevel);
			}
			return true;
		}
Esempio n. 2
0
		/// <summary>
		/// Load a npc from the npc template
		/// </summary>
		/// <param name="obj">template to load from</param>
		public override void LoadFromDatabase(DataObject obj)
		{
			if (obj == null) return;
			base.LoadFromDatabase(obj);
			if (!(obj is Mob)) return;
			m_loadedFromScript = false;
			Mob dbMob = (Mob)obj;
			INpcTemplate npcTemplate = NpcTemplateMgr.GetTemplate(dbMob.NPCTemplateID);
			
			if (npcTemplate != null && !npcTemplate.ReplaceMobValues)
			{
				LoadTemplate(npcTemplate);
			}

			TranslationId = dbMob.TranslationId;
			Name = dbMob.Name;
			Suffix = dbMob.Suffix;
			GuildName = dbMob.Guild;
			ExamineArticle = dbMob.ExamineArticle;
			MessageArticle = dbMob.MessageArticle;
			m_x = dbMob.X;
			m_y = dbMob.Y;
			m_z = dbMob.Z;
			m_Heading = (ushort)(dbMob.Heading & 0xFFF);
			m_maxSpeedBase = (short)dbMob.Speed;
			m_currentSpeed = 0;
			CurrentRegionID = dbMob.Region;
			Realm = (eRealm)dbMob.Realm;
			Model = dbMob.Model;
			Size = dbMob.Size;
			Level = dbMob.Level;	// health changes when GameNPC.Level changes
			Flags = (eFlags)dbMob.Flags;
			m_packageID = dbMob.PackageID;

			Strength = (short)dbMob.Strength;
			Constitution = (short)dbMob.Constitution;
			Dexterity = (short)dbMob.Dexterity;
			Quickness = (short)dbMob.Quickness;
			Intelligence = (short)dbMob.Intelligence;
			Piety = (short)dbMob.Piety;
			Charisma = (short)dbMob.Charisma;
			Empathy = (short)dbMob.Empathy;

			MeleeDamageType = (eDamageType)dbMob.MeleeDamageType;
			if (MeleeDamageType == 0)
			{
				MeleeDamageType = eDamageType.Slash;
			}
			m_activeWeaponSlot = eActiveWeaponSlot.Standard;
			ActiveQuiverSlot = eActiveQuiverSlot.None;

			m_faction = FactionMgr.GetFactionByID(dbMob.FactionID);
			LoadEquipmentTemplateFromDatabase(dbMob.EquipmentTemplateID);

			if (dbMob.RespawnInterval == -1)
			{
				dbMob.RespawnInterval = 0;
			}
			m_respawnInterval = dbMob.RespawnInterval * 1000;

			m_pathID = dbMob.PathID;

			if (dbMob.Brain != "")
			{
				try
				{
					var asms = new List<Assembly>();
					asms.Add(typeof(GameServer).Assembly);
					asms.AddRange(ScriptMgr.Scripts);
					ABrain brain = null;
					foreach (Assembly asm in asms)
					{
						brain = (ABrain)asm.CreateInstance(dbMob.Brain, false);
						if (brain != null)
							break;
					}
					if (brain != null)
						SetOwnBrain(brain);
				}
				catch
				{
					log.ErrorFormat("GameNPC error in LoadFromDatabase: can not instantiate brain of type {0} for npc {1}, name = {2}.", dbMob.Brain, dbMob.ClassType, dbMob.Name);
				}
			}

			IOldAggressiveBrain aggroBrain = Brain as IOldAggressiveBrain;
			if (aggroBrain != null)
			{
				aggroBrain.AggroLevel = dbMob.AggroLevel;
				aggroBrain.AggroRange = dbMob.AggroRange;
				if(aggroBrain.AggroRange == Constants.USE_AUTOVALUES)
				{
					if (Realm == eRealm.None)
					{
						aggroBrain.AggroRange = 400;
						if(Name != Name.ToLower())
						{
							aggroBrain.AggroRange = 500;
						}
						if(CurrentRegion.IsDungeon)
						{
							aggroBrain.AggroRange = 300;
						}
					}
					else
					{
						aggroBrain.AggroRange = 500;
					}
				}
				if(aggroBrain.AggroLevel == Constants.USE_AUTOVALUES)
				{
					aggroBrain.AggroLevel = 0;
					if(Level > 5)
					{
						aggroBrain.AggroLevel = 30;
					}
					if(Name != Name.ToLower())
					{
						aggroBrain.AggroLevel = 30;
					}
					if(Realm != eRealm.None)
					{
						aggroBrain.AggroLevel = 60;
					}
				}
			}

			m_race = (short)dbMob.Race;
			m_bodyType = (ushort)dbMob.BodyType;
			m_houseNumber = (ushort)dbMob.HouseNumber;
			m_maxdistance = dbMob.MaxDistance;
			m_roamingRange = dbMob.RoamingRange;
			m_isCloakHoodUp = dbMob.IsCloakHoodUp;
			m_visibleActiveWeaponSlots = dbMob.VisibleWeaponSlots;
			
			Gender = (eGender)dbMob.Gender;
			OwnerID = dbMob.OwnerID;

			if (npcTemplate != null && npcTemplate.ReplaceMobValues)
				LoadTemplate(npcTemplate);
/*
			if (Inventory != null)
				SwitchWeapon(ActiveWeaponSlot);
*/		}
Esempio n. 3
0
 /// <summary>
 /// remove enemy faction
 /// </summary>
 /// <param name="faction"></param>
 public void RemoveEnemyFaction(Faction faction)
 {
     if (m_enemyFactions.Contains(faction))
         m_enemyFactions.Remove(faction);
 }
Esempio n. 4
0
 /// <summary>
 /// add enemy faction
 /// </summary>
 /// <param name="faction"></param>
 public void AddEnemyFaction(Faction faction)
 {
     if (!m_enemyFactions.Contains(faction))
         m_enemyFactions.Add(faction);
 }
Esempio n. 5
0
 /// <summary>
 /// remove friend faction
 /// </summary>
 /// <param name="faction"></param>
 public void RemoveFriendFaction(Faction faction)
 {
     if (m_friendFactions.Contains(faction))
         m_friendFactions.Remove(faction);
 }
Esempio n. 6
0
 /// <summary>
 /// add friend faction to this faction
 /// </summary>
 /// <param name="faction"></param>
 public void AddFriendFaction(Faction faction)
 {
     if (!m_friendFactions.Contains(faction))
         m_friendFactions.Add(faction);
 }