public void SetVisible(FactionTemplateRecord factionTemplateEntry) { if (factionTemplateEntry.Faction == 0) { return; } var factionEntry = CliDB.FactionStorage.LookupByKey(factionTemplateEntry.Faction); if (factionEntry.Id != 0) { // Never show factions of the opposing team if (!Convert.ToBoolean(factionEntry.ReputationRaceMask[1] & SharedConst.GetMaskForRace(_player.GetRace())) && factionEntry.ReputationBase[1] == Reputation_Bottom) { SetVisible(factionEntry); } } }
// this allows calculating base reputations to offline players, just by race and class public static int GetBaseReputationOf(FactionRecord factionEntry, Race race, Class playerClass) { if (factionEntry == null) { return(0); } ulong raceMask = (ulong)SharedConst.GetMaskForRace(race); uint classMask = (1u << ((int)playerClass - 1)); for (int i = 0; i < 4; i++) { if ((factionEntry.ReputationClassMask[i] == 0 || factionEntry.ReputationClassMask[i].HasAnyFlag((short)classMask)) && (factionEntry.ReputationRaceMask[i] == 0 || factionEntry.ReputationRaceMask[i].HasAnyFlag((uint)raceMask))) { return(factionEntry.ReputationBase[i]); } } return(0); }
int GetFactionDataIndexForRaceAndClass(FactionRecord factionEntry) { if (factionEntry == null) { return(-1); } long raceMask = SharedConst.GetMaskForRace(_player.GetRace()); short classMask = (short)_player.GetClassMask(); for (int i = 0; i < 4; i++) { if ((factionEntry.ReputationRaceMask[i].HasAnyFlag(raceMask) || (factionEntry.ReputationRaceMask[i] == 0 && factionEntry.ReputationClassMask[i] != 0)) && (factionEntry.ReputationClassMask[i].HasAnyFlag(classMask) || factionEntry.ReputationClassMask[i] == 0)) { return(i); } } return(-1); }
uint GetDefaultStateFlags(FactionRecord factionEntry) { if (factionEntry == null) { return(0); } long raceMask = SharedConst.GetMaskForRace(_player.GetRace()); uint classMask = _player.GetClassMask(); for (int i = 0; i < 4; i++) { if ((Convert.ToBoolean(factionEntry.ReputationRaceMask[i] & raceMask) || (factionEntry.ReputationRaceMask[i] == 0 && factionEntry.ReputationClassMask[i] != 0)) && (Convert.ToBoolean(factionEntry.ReputationClassMask[i] & classMask) || factionEntry.ReputationClassMask[i] == 0)) { return(factionEntry.ReputationFlags[i]); } } return(0); }
public int GetBaseReputation(FactionRecord factionEntry) { if (factionEntry == null) { return(0); } long raceMask = SharedConst.GetMaskForRace(_player.GetRace()); uint classMask = _player.GetClassMask(); for (var i = 0; i < 4; i++) { if ((Convert.ToBoolean(factionEntry.ReputationRaceMask[i] & raceMask) || (factionEntry.ReputationRaceMask[i] == 0 && factionEntry.ReputationClassMask[i] != 0)) && (Convert.ToBoolean(factionEntry.ReputationClassMask[i] & classMask) || factionEntry.ReputationClassMask[i] == 0)) { return(factionEntry.ReputationBase[i]); } } // in faction.dbc exist factions with (RepListId >=0, listed in character reputation list) with all BaseRepRaceMask[i] == 0 return(0); }
public bool Meets(ConditionSourceInfo sourceInfo) { Cypher.Assert(ConditionTarget < SharedConst.MaxConditionTargets); WorldObject obj = sourceInfo.mConditionTargets[ConditionTarget]; // object not present, return false if (obj == null) { Log.outDebug(LogFilter.Condition, "Condition object not found for condition (Entry: {0} Type: {1} Group: {2})", SourceEntry, SourceType, SourceGroup); return(false); } bool condMeets = false; Player player = obj.ToPlayer(); Unit unit = obj.ToUnit(); switch (ConditionType) { case ConditionTypes.None: condMeets = true; // empty condition, always met break; case ConditionTypes.Aura: if (unit != null) { condMeets = unit.HasAuraEffect(ConditionValue1, (byte)ConditionValue2); } break; case ConditionTypes.Item: if (player != null) { // don't allow 0 items (it's checked during table load) Cypher.Assert(ConditionValue2 != 0); bool checkBank = ConditionValue3 != 0 ? true : false; condMeets = player.HasItemCount(ConditionValue1, ConditionValue2, checkBank); } break; case ConditionTypes.ItemEquipped: if (player != null) { condMeets = player.HasItemOrGemWithIdEquipped(ConditionValue1, 1); } break; case ConditionTypes.Zoneid: condMeets = obj.GetZoneId() == ConditionValue1; break; case ConditionTypes.ReputationRank: if (player != null) { var faction = CliDB.FactionStorage.LookupByKey(ConditionValue1); if (faction != null) { condMeets = Convert.ToBoolean(ConditionValue2 & (1 << (int)player.GetReputationMgr().GetRank(faction))); } } break; case ConditionTypes.Achievement: if (player != null) { condMeets = player.HasAchieved(ConditionValue1); } break; case ConditionTypes.Team: if (player != null) { condMeets = (uint)player.GetTeam() == ConditionValue1; } break; case ConditionTypes.Class: if (unit != null) { condMeets = Convert.ToBoolean(unit.GetClassMask() & ConditionValue1); } break; case ConditionTypes.Race: if (unit != null) { condMeets = Convert.ToBoolean(SharedConst.GetMaskForRace(unit.GetRace()) & ConditionValue1); } break; case ConditionTypes.Gender: if (player != null) { condMeets = player.GetGender() == (Gender)ConditionValue1; } break; case ConditionTypes.Skill: if (player != null) { condMeets = player.HasSkill((SkillType)ConditionValue1) && player.GetBaseSkillValue((SkillType)ConditionValue1) >= ConditionValue2; } break; case ConditionTypes.QuestRewarded: if (player != null) { condMeets = player.GetQuestRewardStatus(ConditionValue1); } break; case ConditionTypes.QuestTaken: if (player != null) { QuestStatus status = player.GetQuestStatus(ConditionValue1); condMeets = (status == QuestStatus.Incomplete); } break; case ConditionTypes.QuestComplete: if (player != null) { QuestStatus status = player.GetQuestStatus(ConditionValue1); condMeets = (status == QuestStatus.Complete && !player.GetQuestRewardStatus(ConditionValue1)); } break; case ConditionTypes.QuestNone: if (player != null) { QuestStatus status = player.GetQuestStatus(ConditionValue1); condMeets = (status == QuestStatus.None); } break; case ConditionTypes.ActiveEvent: condMeets = Global.GameEventMgr.IsActiveEvent((ushort)ConditionValue1); break; case ConditionTypes.InstanceInfo: { var map = obj.GetMap(); if (map.IsDungeon()) { InstanceScript instance = ((InstanceMap)map).GetInstanceScript(); if (instance != null) { switch ((InstanceInfo)ConditionValue3) { case InstanceInfo.Data: condMeets = instance.GetData(ConditionValue1) == ConditionValue2; break; case InstanceInfo.Data64: condMeets = instance.GetData64(ConditionValue1) == ConditionValue2; break; case InstanceInfo.BossState: condMeets = instance.GetBossState(ConditionValue1) == (EncounterState)ConditionValue2; break; } } } break; } case ConditionTypes.Mapid: condMeets = obj.GetMapId() == ConditionValue1; break; case ConditionTypes.Areaid: condMeets = obj.GetAreaId() == ConditionValue1; break; case ConditionTypes.Spell: if (player != null) { condMeets = player.HasSpell(ConditionValue1); } break; case ConditionTypes.Level: if (unit != null) { condMeets = MathFunctions.CompareValues((ComparisionType)ConditionValue2, unit.GetLevel(), ConditionValue1); } break; case ConditionTypes.DrunkenState: if (player != null) { condMeets = (uint)Player.GetDrunkenstateByValue(player.GetDrunkValue()) >= ConditionValue1; } break; case ConditionTypes.NearCreature: condMeets = obj.FindNearestCreature(ConditionValue1, ConditionValue2, ConditionValue3 == 0 ? true : false) != null; break; case ConditionTypes.NearGameobject: condMeets = obj.FindNearestGameObject(ConditionValue1, ConditionValue2) != null; break; case ConditionTypes.ObjectEntryGuid: if ((uint)obj.GetTypeId() == ConditionValue1) { condMeets = ConditionValue2 == 0 || (obj.GetEntry() == ConditionValue2); if (ConditionValue3 != 0) { switch (obj.GetTypeId()) { case TypeId.Unit: condMeets &= obj.ToCreature().GetSpawnId() == ConditionValue3; break; case TypeId.GameObject: condMeets &= obj.ToGameObject().GetSpawnId() == ConditionValue3; break; } } } break; case ConditionTypes.TypeMask: condMeets = Convert.ToBoolean((TypeMask)ConditionValue1 & obj.ObjectTypeMask); break; case ConditionTypes.RelationTo: { WorldObject toObject = sourceInfo.mConditionTargets[ConditionValue1]; if (toObject != null) { Unit toUnit = toObject.ToUnit(); if (toUnit != null && unit != null) { switch ((RelationType)ConditionValue2) { case RelationType.Self: condMeets = unit == toUnit; break; case RelationType.InParty: condMeets = unit.IsInPartyWith(toUnit); break; case RelationType.InRaidOrParty: condMeets = unit.IsInRaidWith(toUnit); break; case RelationType.OwnedBy: condMeets = unit.GetOwnerGUID() == toUnit.GetGUID(); break; case RelationType.PassengerOf: condMeets = unit.IsOnVehicle(toUnit); break; case RelationType.CreatedBy: condMeets = unit.GetCreatorGUID() == toUnit.GetGUID(); break; } } } break; } case ConditionTypes.ReactionTo: { WorldObject toObject = sourceInfo.mConditionTargets[ConditionValue1]; if (toObject != null) { Unit toUnit = toObject.ToUnit(); if (toUnit != null && unit != null) { condMeets = Convert.ToBoolean((1 << (int)unit.GetReactionTo(toUnit)) & ConditionValue2); } } break; } case ConditionTypes.DistanceTo: { WorldObject toObject = sourceInfo.mConditionTargets[ConditionValue1]; if (toObject != null) { condMeets = MathFunctions.CompareValues((ComparisionType)ConditionValue3, obj.GetDistance(toObject), ConditionValue2); } break; } case ConditionTypes.Alive: if (unit != null) { condMeets = unit.IsAlive(); } break; case ConditionTypes.HpVal: if (unit != null) { condMeets = MathFunctions.CompareValues((ComparisionType)ConditionValue2, unit.GetHealth(), ConditionValue1); } break; case ConditionTypes.HpPct: if (unit != null) { condMeets = MathFunctions.CompareValues((ComparisionType)ConditionValue2, unit.GetHealthPct(), ConditionValue1); } break; case ConditionTypes.WorldState: condMeets = (ConditionValue2 == Global.WorldMgr.GetWorldState((WorldStates)ConditionValue1)); break; case ConditionTypes.PhaseId: condMeets = obj.GetPhaseShift().HasPhase(ConditionValue1); break; case ConditionTypes.Title: if (player != null) { condMeets = player.HasTitle(ConditionValue1); } break; case ConditionTypes.UnitState: if (unit != null) { condMeets = unit.HasUnitState((UnitState)ConditionValue1); } break; case ConditionTypes.CreatureType: { Creature creature = obj.ToCreature(); if (creature) { condMeets = (uint)creature.GetCreatureTemplate().CreatureType == ConditionValue1; } break; } case ConditionTypes.RealmAchievement: { AchievementRecord achievement = CliDB.AchievementStorage.LookupByKey(ConditionValue1); if (achievement != null && Global.AchievementMgr.IsRealmCompleted(achievement)) { condMeets = true; } break; } case ConditionTypes.InWater: if (unit) { condMeets = unit.IsInWater(); } break; case ConditionTypes.TerrainSwap: condMeets = obj.GetPhaseShift().HasVisibleMapId(ConditionValue1); break; case ConditionTypes.StandState: { if (unit) { if (ConditionValue1 == 0) { condMeets = (unit.GetStandState() == (UnitStandStateType)ConditionValue2); } else if (ConditionValue2 == 0) { condMeets = unit.IsStandState(); } else if (ConditionValue2 == 1) { condMeets = unit.IsSitState(); } } break; } case ConditionTypes.DailyQuestDone: { if (player) { condMeets = player.IsDailyQuestDone(ConditionValue1); } break; } case ConditionTypes.Charmed: { if (unit) { condMeets = unit.IsCharmed(); } break; } case ConditionTypes.PetType: { if (player) { Pet pet = player.GetPet(); if (pet) { condMeets = (((1 << (int)pet.GetPetType()) & ConditionValue1) != 0); } } break; } case ConditionTypes.Taxi: { if (player) { condMeets = player.IsInFlight(); } break; } case ConditionTypes.Queststate: { if (player) { if ( (Convert.ToBoolean(ConditionValue2 & (1 << (int)QuestStatus.None)) && (player.GetQuestStatus(ConditionValue1) == QuestStatus.None)) || (Convert.ToBoolean(ConditionValue2 & (1 << (int)QuestStatus.Complete)) && (player.GetQuestStatus(ConditionValue1) == QuestStatus.Complete)) || (Convert.ToBoolean(ConditionValue2 & (1 << (int)QuestStatus.Incomplete)) && (player.GetQuestStatus(ConditionValue1) == QuestStatus.Incomplete)) || (Convert.ToBoolean(ConditionValue2 & (1 << (int)QuestStatus.Failed)) && (player.GetQuestStatus(ConditionValue1) == QuestStatus.Failed)) || (Convert.ToBoolean(ConditionValue2 & (1 << (int)QuestStatus.Rewarded)) && player.GetQuestRewardStatus(ConditionValue1)) ) { condMeets = true; } } break; } case ConditionTypes.ObjectiveComplete: { if (player) { QuestObjective questObj = Global.ObjectMgr.GetQuestObjective(ConditionValue1); if (questObj == null) { break; } condMeets = (!player.GetQuestRewardStatus(questObj.QuestID) && player.IsQuestObjectiveComplete(questObj)); } break; } case ConditionTypes.DifficultyId: { condMeets = (uint)obj.GetMap().GetDifficultyID() == ConditionValue1; break; } default: condMeets = false; break; } if (NegativeCondition) { condMeets = !condMeets; } if (!condMeets) { sourceInfo.mLastFailedCondition = this; } bool script = Global.ScriptMgr.OnConditionCheck(this, sourceInfo); // Returns true by default. return(condMeets && script); }