Пример #1
0
        public void LoadFromDB()
        {
            // Set initial reputations (so everything is nifty before DB data load)
            Initialize();

            SQLResult result = DB.Characters.Select("SELECT faction, standing, flags FROM character_reputation WHERE guid = {0}", _player.GetGUIDLow());

            if (result.Count != 0)
            {
                for (var i = 0; i < result.Count; i++)
                {
                    var factionEntry = DBCStorage.FactionStorage.LookupByKey(result.Read <uint>(i, 0));
                    if (factionEntry != null && factionEntry.reputationListID >= 0)
                    {
                        var faction = _factions.LookupByKey((uint)factionEntry.reputationListID);

                        // update standing to current
                        faction.Standing = result.Read <int>(i, 1);

                        // update counters
                        int            BaseRep  = GetBaseReputation(factionEntry);
                        ReputationRank old_rank = ReputationToRank(BaseRep);
                        ReputationRank new_rank = ReputationToRank(BaseRep + faction.Standing);
                        UpdateRankCounters(old_rank, new_rank);

                        FactionFlags dbFactionFlags = (FactionFlags)result.Read <uint>(i, 2);

                        if (Convert.ToBoolean(dbFactionFlags & FactionFlags.Visible))
                        {
                            SetVisible(faction);                    // have internal checks for forced invisibility
                        }
                        if (Convert.ToBoolean(dbFactionFlags & FactionFlags.Inactive))
                        {
                            SetInactive(faction, true);                             // have internal checks for visibility requirement
                        }
                        if (Convert.ToBoolean(dbFactionFlags & FactionFlags.AtWar)) // DB at war
                        {
                            SetAtWar(faction, true);                                // have internal checks for FACTION_FLAG_PEACE_FORCED
                        }
                        else                                                        // DB not at war
                        {
                            // allow remove if visible (and then not FACTION_FLAG_INVISIBLE_FORCED or FACTION_FLAG_HIDDEN)
                            if (Convert.ToBoolean(faction.Flags & FactionFlags.Visible))
                            {
                                SetAtWar(faction, false);            // have internal checks for FACTION_FLAG_PEACE_FORCED
                            }
                        }

                        // set atWar for hostile
                        if (GetRank(factionEntry) <= ReputationRank.Hostile)
                        {
                            SetAtWar(faction, true);
                        }

                        // reset changed flag if values similar to saved in DB
                        if (faction.Flags == dbFactionFlags)
                        {
                            faction.needSend = false;
                            faction.needSave = false;
                        }
                    }
                }
            }
        }
Пример #2
0
 public bool IsEnemey(FactionFlags flags)
 {
     return (EnemyFlags & flags) != global::FactionFlags.None;
 }
Пример #3
0
        public void LoadFromDB(SQLResult result)
        {
            // Set initial reputations (so everything is nifty before DB data load)
            Initialize();

            if (!result.IsEmpty())
            {
                do
                {
                    var factionEntry = CliDB.FactionStorage.LookupByKey(result.Read <uint>(0));
                    if (factionEntry != null && factionEntry.CanHaveReputation())
                    {
                        var faction = _factions.LookupByKey((uint)factionEntry.ReputationIndex);
                        if (faction == null)
                        {
                            continue;
                        }
                        // update standing to current
                        faction.Standing = result.Read <int>(1);

                        // update counters
                        int            BaseRep  = GetBaseReputation(factionEntry);
                        ReputationRank old_rank = ReputationToRank(BaseRep);
                        ReputationRank new_rank = ReputationToRank(BaseRep + faction.Standing);
                        UpdateRankCounters(old_rank, new_rank);

                        FactionFlags dbFactionFlags = (FactionFlags)result.Read <uint>(2);

                        if (Convert.ToBoolean(dbFactionFlags & FactionFlags.Visible))
                        {
                            SetVisible(faction);                    // have internal checks for forced invisibility
                        }
                        if (Convert.ToBoolean(dbFactionFlags & FactionFlags.Inactive))
                        {
                            SetInactive(faction, true);                             // have internal checks for visibility requirement
                        }
                        if (Convert.ToBoolean(dbFactionFlags & FactionFlags.AtWar)) // DB at war
                        {
                            SetAtWar(faction, true);                                // have internal checks for FACTION_FLAG_PEACE_FORCED
                        }
                        else                                                        // DB not at war
                        {
                            // allow remove if visible (and then not FACTION_FLAG_INVISIBLE_FORCED or FACTION_FLAG_HIDDEN)
                            if (Convert.ToBoolean(faction.Flags & FactionFlags.Visible))
                            {
                                SetAtWar(faction, false);            // have internal checks for FACTION_FLAG_PEACE_FORCED
                            }
                        }

                        // set atWar for hostile
                        if (GetRank(factionEntry) <= ReputationRank.Hostile)
                        {
                            SetAtWar(faction, true);
                        }

                        // reset changed flag if values similar to saved in DB
                        if (faction.Flags == dbFactionFlags)
                        {
                            faction.needSend = false;
                            faction.needSave = false;
                        }
                    }
                } while (result.NextRow());
            }
        }
Пример #4
0
 public FactionInfo(int index, FactionFlags flags, int standing)
 {
     Index = index;
     Flags = flags;
     Standing = standing;
 }
Пример #5
0
 public static bool HasAnyFlag(this FactionFlags flags, FactionFlags otherFlags)
 {
     return((flags & otherFlags) != 0);
 }
Пример #6
0
 public void HideFactionFlag()
 {
     RemoveIcon(FactionFlags.GetFlagIconName(GetComponent <Ship>().faction));
 }
Пример #7
0
 public void ShowFactionFlag()
 {
     AddIcon(FactionFlags.GetFlagIconName(GetComponent <Ship>().faction));
 }
Пример #8
0
		public static bool HasAnyFlag(this FactionFlags flags, FactionFlags otherFlags)
		{
			return (flags & otherFlags) != 0;
		}