/// <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; }
/// <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); */ }
/// <summary> /// remove enemy faction /// </summary> /// <param name="faction"></param> public void RemoveEnemyFaction(Faction faction) { if (m_enemyFactions.Contains(faction)) m_enemyFactions.Remove(faction); }
/// <summary> /// add enemy faction /// </summary> /// <param name="faction"></param> public void AddEnemyFaction(Faction faction) { if (!m_enemyFactions.Contains(faction)) m_enemyFactions.Add(faction); }
/// <summary> /// remove friend faction /// </summary> /// <param name="faction"></param> public void RemoveFriendFaction(Faction faction) { if (m_friendFactions.Contains(faction)) m_friendFactions.Remove(faction); }
/// <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); }