public override bool OnTrigger(Player player, AreaTriggerRecord areaTrigger, bool entered) { if (player.IsInCombat()) { SpellInfo spell = Global.SpellMgr.GetSpellInfo(TeleporterSpells.FROZEN_THRONE_TELEPORT); if (spell != null) { ObjectGuid castId = ObjectGuid.Create(HighGuid.Cast, SpellCastSource.Normal, player.GetMapId(), spell.Id, player.GetMap().GenerateLowGuid(HighGuid.Cast)); Spell.SendCastResult(player, spell, 0, castId, SpellCastResult.AffectingCombat); } return(true); } InstanceScript instance = player.GetInstanceScript(); if (instance != null) { if (instance.GetBossState(Bosses.ProfessorPutricide) == EncounterState.Done && instance.GetBossState(Bosses.BloodQueenLanaThel) == EncounterState.Done && instance.GetBossState(Bosses.Sindragosa) == EncounterState.Done && instance.GetBossState(Bosses.TheLichKing) != EncounterState.InProgress) { player.CastSpell(player, TeleporterSpells.FROZEN_THRONE_TELEPORT, true); } } return(true); }
void HandleScript(uint effIndex) { Unit caster = GetCaster(); if (caster) { InstanceScript instance = caster.GetInstanceScript(); if (instance != null) { Unit toyPile = Global.ObjAccessor.GetUnit(caster, instance.GetGuidData(InstanceData.ToyPile0 + RandomHelper.URand(0, 3))); if (toyPile) { caster.CastSpell(toyPile, SpellIds.EnergyOrb, true); // This should probably be incorporated in a dummy effect handler, but I've had trouble getting the correct target // Weighed randomization (approximation) uint[] spells = { SpellIds.RechargeScrapbot, SpellIds.RechargeScrapbot, SpellIds.RechargeScrapbot, SpellIds.RechargePummeler, SpellIds.RechargeBoombot }; for (byte i = 0; i < 5; ++i) { uint spellId = spells[RandomHelper.IRand(0, 4)]; toyPile.CastSpell(toyPile, spellId, true, null, null, instance.GetGuidData(BossIds.Xt002)); } } } Creature creatureBase = caster.GetVehicleCreatureBase(); if (creatureBase) { creatureBase.GetAI().Talk(Texts.Summon); } } }
public override bool OnGossipHello(Player player, Creature creature) { InstanceScript instance = creature.GetInstanceScript(); if (instance != null && ((instance.GetData((uint)Data.BOSS_GRAND_CHAMPIONS) == (uint)EncounterState.Done && instance.GetData((uint)Data.BOSS_BLACK_KNIGHT) == (uint)EncounterState.Done && instance.GetData((uint)Data.BOSS_ARGENT_CHALLENGE_E) == (uint)EncounterState.Done) || instance.GetData((uint)Data.BOSS_ARGENT_CHALLENGE_P) == (uint)EncounterState.Done)) { return(false); } if (instance != null && instance.GetData((uint)Data.BOSS_GRAND_CHAMPIONS) == (uint)EncounterState.NotStarted && instance.GetData((uint)Data.BOSS_ARGENT_CHALLENGE_E) == (uint)EncounterState.NotStarted && instance.GetData((uint)Data.BOSS_ARGENT_CHALLENGE_P) == (uint)EncounterState.NotStarted && instance.GetData((uint)Data.BOSS_BLACK_KNIGHT) == (uint)EncounterState.NotStarted) { player.ADD_GOSSIP_ITEM(GossipOptionIcon.Chat, TrialOfTheChampionConst.GOSSIP_START_EVENT1, eTradeskill.GossipSenderMain, eTradeskill.GossipActionInfoDef + 1); } else if (instance != null) { player.ADD_GOSSIP_ITEM(GossipOptionIcon.Chat, TrialOfTheChampionConst.GOSSIP_START_EVENT2, eTradeskill.GossipSenderMain, eTradeskill.GossipActionInfoDef + 1); } player.SEND_GOSSIP_MENU(player.GetGossipTextId(creature), creature.GetGUID()); return(true); }
public void SpawnInstance() { GameObject instance = GameObject.Instantiate(instPrefab, instParent); /* Vector3 v3 = new Vector3( * Random.Range(0, Camera.main.pixelWidth), * Random.Range(0, Camera.main.pixelHeight), * 6); */ //v3 = Camera.main.ScreenToWorldPoint(v3); Vector3 v3 = new Vector3( notesInfo.notes[sampleWaitTimeIndex].SpawnPosition.x, notesInfo.notes[sampleWaitTimeIndex].SpawnPosition.y, 6); v3.z = 0; instance.transform.localPosition = v3; instance.name = instPrefab.name; InstanceScript instScript = instance.AddComponent <InstanceScript>(); instScript.spawn = spawn; instScript.player = player; instScript.terminateObj = terminateObj; instScript.speed = speed; instScript.m_timeSample = (int)nextSpawnTimeSample; }
public override bool OnGossipHello(Player player, GameObject go) { InstanceScript instance = go.GetInstanceScript(); if (instance == null) { return(false); } Creature PrinceTaldaram = ObjectAccessor.GetCreature(go, instance.GetGuidData(DataTypes.PrinceTaldaram)); if (PrinceTaldaram && PrinceTaldaram.IsAlive()) { go.SetFlag(GameObjectFields.Flags, GameObjectFlags.NotSelectable); go.SetGoState(GameObjectState.Active); switch (go.GetEntry()) { case GameObjectIds.Sphere1: instance.SetData(DataTypes.Sphere1, (uint)EncounterState.InProgress); PrinceTaldaram.GetAI().Talk(TextIds.Say1); break; case GameObjectIds.Sphere2: instance.SetData(DataTypes.Sphere2, (uint)EncounterState.InProgress); PrinceTaldaram.GetAI().Talk(TextIds.Say1); break; } PrinceTaldaram.GetAI <boss_prince_taldaram.boss_prince_taldaramAI>().CheckSpheres(); } return(true); }
void HandlePeriodic(AuraEffect eff) { Unit caster = GetCaster(); if (!caster) { return; } InstanceScript instance = caster.GetInstanceScript(); if (instance == null) { return; } if (instance.GetBossState(ANDataTypes.Hadronox) == EncounterState.Done) { GetAura().Remove(); } else { if (caster.GetPositionZ() >= 750.0f) { caster.CastSpell(caster, _topSpellId, true); } else { caster.CastSpell(caster, _bottomSpellId, true); } } }
public override bool OnTrigger(Player player, AreaTriggerRecord areaTrigger, bool entered) { if (!entered) { return(true); } InstanceScript instance = player.GetInstanceScript(); if (instance != null) { if (instance.GetData(DataTypes.CavernActive) != 0) { return(true); } instance.SetData(DataTypes.CavernActive, 1); Creature tyrannus = ObjectAccessor.GetCreature(player, instance.GetGuidData(DataTypes.TyrannusEvent)); if (tyrannus) { tyrannus.GetAI().Talk(TextIds.SayTyrannusCavernEntrance); } } return(true); }
bool GrandChampionsOutVehicle(Creature creature) { InstanceScript instance = creature.GetInstanceScript(); if (instance == null) { return(false); } Creature pGrandChampion1 = ObjectAccessor.GetCreature(creature, instance.GetGuidData((uint)Data64.DATA_GRAND_CHAMPION_1)); Creature pGrandChampion2 = ObjectAccessor.GetCreature(creature, instance.GetGuidData((uint)Data64.DATA_GRAND_CHAMPION_2)); Creature pGrandChampion3 = ObjectAccessor.GetCreature(creature, instance.GetGuidData((uint)Data64.DATA_GRAND_CHAMPION_3)); if (pGrandChampion1 && pGrandChampion2 && pGrandChampion3) { if (pGrandChampion1.m_movementInfo.transport.guid.IsEmpty() && pGrandChampion2.m_movementInfo.transport.guid.IsEmpty() && pGrandChampion3.m_movementInfo.transport.guid.IsEmpty()) { return(true); } } return(false); }
public override bool OnCheck(Player player, Unit target) { if (!target) { return(false); } InstanceScript instance = target.GetInstanceScript(); if (instance == null) { return(false); } foreach (uint watcherData in new[] { ANDataTypes.WatcherGashra, ANDataTypes.WatcherNarjil, ANDataTypes.WatcherSilthik }) { Creature watcher = instance.GetCreature(watcherData); if (watcher) { if (watcher.IsAlive()) { continue; } } return(false); } return(true); }
void ResetAreaTriggerDone(Player player, AreaTriggerRecord trigger) { InstanceScript instance = player.GetInstanceScript(); if (instance != null) { ResetAreaTriggerDone(instance, trigger.Id); } }
void Awake() { //オブジェクトを登録 contl = GameObject.Find("FighterComtrol"); if (contl != null) { //スクリプトを取得 InScript = contl.GetComponent <InstanceScript>(); } }
void Awake() { if (!isTest) { contl = GameObject.Find("FighterComtrol"); InScript = contl.GetComponent <InstanceScript>(); playSEScript = GetComponent <PlaySEScript>(); hpDirectorScript = GetComponent <HPDirectorScript>(); } }
void HandleProc(AuraEffect aurEff, ProcEventInfo eventInfo) { InstanceScript instance = eventInfo.GetActor().GetInstanceScript(); if (instance == null) { return; } instance.DoCastSpellOnPlayers(SpellIds.AchievementCreditNerfScrapbots); }
public void Reward() { // 3. Reward killer (and group, if necessary). if (_group) { // 3.1. If killer is in group, reward group. _RewardGroup(); } else { // 3.2. Reward single killer (not group case). // 3.2.1. Initialize initial XP amount based on killer's level. _InitXP(_killer); // To avoid unnecessary calculations and calls, // proceed only if XP is not ZERO or player is not on Battleground // (Battlegroundrewards only XP, that's why). if (!_isBattleground || _xp != 0) { // 3.2.2. Reward killer. _RewardPlayer(_killer, false); } } // 5. Credit instance encounter. // 6. Update guild achievements. // 7. Credit scenario criterias Creature victim = _victim.ToCreature(); if (victim != null) { if (victim.IsDungeonBoss()) { InstanceScript instance = _victim.GetInstanceScript(); if (instance != null) { instance.UpdateEncounterStateForKilledCreature(_victim.GetEntry(), _victim); } } uint guildId = victim.GetMap().GetOwnerGuildId(); var guild = Global.GuildMgr.GetGuildById(guildId); if (guild != null) { guild.UpdateCriteria(CriteriaTypes.KillCreature, victim.GetEntry(), 1, 0, victim, _killer); } Scenario scenario = victim.GetScenario(); if (scenario != null) { scenario.UpdateCriteria(CriteriaTypes.KillCreature, victim.GetEntry(), 1, 0, victim, _killer); } } }
public BossAI(Creature creature, uint bossId) : base(creature) { instance = creature.GetInstanceScript(); summons = new SummonList(creature); _bossId = bossId; if (instance != null) { SetBoundary(instance.GetBossBoundary(bossId)); } _scheduler.SetValidator(() => !me.HasUnitState(UnitState.Casting)); }
public void SendRaidInfo() { InstanceInfoPkt instanceInfo = new InstanceInfoPkt(); long now = Time.UnixTime; for (byte i = 0; i < (int)Difficulty.Max; ++i) { foreach (var pair in m_boundInstances[i]) { InstanceBind bind = pair.Value; if (bind.perm) { InstanceSave save = pair.Value.save; InstanceLockInfos lockInfos; lockInfos.InstanceID = save.GetInstanceId(); lockInfos.MapID = save.GetMapId(); lockInfos.DifficultyID = (uint)save.GetDifficultyID(); if (bind.extendState != BindExtensionState.Extended) { lockInfos.TimeRemaining = (int)(save.GetResetTime() - now); } else { lockInfos.TimeRemaining = (int)(Global.InstanceSaveMgr.GetSubsequentResetTime(save.GetMapId(), save.GetDifficultyID(), save.GetResetTime()) - now); } lockInfos.CompletedMask = 0; Map map = Global.MapMgr.FindMap(save.GetMapId(), save.GetInstanceId()); if (map != null) { InstanceScript instanceScript = ((InstanceMap)map).GetInstanceScript(); if (instanceScript != null) { lockInfos.CompletedMask = instanceScript.GetCompletedEncounterMask(); } } lockInfos.Locked = bind.extendState != BindExtensionState.Expired; lockInfos.Extended = bind.extendState == BindExtensionState.Extended; instanceInfo.LockList.Add(lockInfos); } } } SendPacket(instanceInfo); }
public override bool OnGossipHello(Player player, GameObject go) { go.SetFlag(GameObjectFields.Flags, GameObjectFlags.NotSelectable); go.SetGoState(GameObjectState.Active); InstanceScript instance = go.GetInstanceScript(); if (instance != null) { instance.SetData(GDDataTypes.StatueActivate, go.GetEntry()); return(true); } return(false); }
public void SendRaidInfo() { InstanceInfoPkt instanceInfo = new(); long now = GameTime.GetGameTime(); foreach (var difficultyDic in m_boundInstances.Values) { foreach (var instanceBind in difficultyDic.Values) { if (instanceBind.perm) { InstanceSave save = instanceBind.save; InstanceLock lockInfos; lockInfos.InstanceID = save.GetInstanceId(); lockInfos.MapID = save.GetMapId(); lockInfos.DifficultyID = (uint)save.GetDifficultyID(); if (instanceBind.extendState != BindExtensionState.Extended) { lockInfos.TimeRemaining = (int)(save.GetResetTime() - now); } else { lockInfos.TimeRemaining = (int)(Global.InstanceSaveMgr.GetSubsequentResetTime(save.GetMapId(), save.GetDifficultyID(), save.GetResetTime()) - now); } lockInfos.CompletedMask = 0; Map map = Global.MapMgr.FindMap(save.GetMapId(), save.GetInstanceId()); if (map != null) { InstanceScript instanceScript = ((InstanceMap)map).GetInstanceScript(); if (instanceScript != null) { lockInfos.CompletedMask = instanceScript.GetCompletedEncounterMask(); } } lockInfos.Locked = instanceBind.extendState != BindExtensionState.Expired; lockInfos.Extended = instanceBind.extendState == BindExtensionState.Extended; instanceInfo.LockList.Add(lockInfos); } } } SendPacket(instanceInfo); }
public override bool OnGossipHello(Player player, GameObject go) { InstanceScript instance = go.GetInstanceScript(); Creature pKeristrasza = ObjectAccessor.GetCreature(go, instance.GetGuidData(DataTypes.Keristrasza)); if (pKeristrasza && pKeristrasza.IsAlive()) { // maybe these are hacks :( go.SetFlag(GameObjectFields.Flags, GameObjectFlags.NotSelectable); go.SetGoState(GameObjectState.Active); ((boss_keristrasza.boss_keristraszaAI)pKeristrasza.GetAI()).CheckContainmentSpheres(true); } return(true); }
public override bool OnTrigger(Player player, AreaTriggerRecord trigger, bool entered) { uint triggerId = trigger.Id; InstanceScript instance = player.GetInstanceScript(); if (instance != null) { if (instance.IsAreaTriggerDone(triggerId)) { return(true); } else { instance.MarkAreaTriggerDone(triggerId); } } return(_OnTrigger(player, trigger, entered)); }
public override bool OnTrigger(Player player, AreaTriggerRecord areaTrigger, bool entered) { InstanceScript instance = player.GetInstanceScript(); if (instance != null) { if (instance.GetBossState(Bosses.LadyDeathwhisper) != EncounterState.Done) { Creature ladyDeathwhisper = ObjectAccessor.GetCreature(player, instance.GetGuidData(Bosses.LadyDeathwhisper)); if (ladyDeathwhisper) { ladyDeathwhisper.GetAI().DoAction(0); } } } return(true); }
public override void UpdateAI(uint diff) { if (!_hasTrappedUnit) { return; } _events.Update(diff); if (_events.ExecuteEvent() == Misc.EventFailBoned) { InstanceScript instance = me.GetInstanceScript(); if (instance != null) { instance.SetData(DataTypes.BonedAchievement, 0); } } }
void OnApply(AuraEffect aurEff, AuraEffectHandleModes mode) { Unit caster = GetCaster(); if (caster) { InstanceScript instance = caster.GetInstanceScript(); if (instance != null) { if (instance.GetData(DataTypes.NorthrendBeasts) == NorthrendBeasts.SnakesInProgress || instance.GetData(DataTypes.NorthrendBeasts) == NorthrendBeasts.SnakesSpecial) { return; } } } Remove(); }
public override bool OnTrigger(Player player, AreaTriggerRecord areaTrigger, bool entered) { if (!entered) { return(true); } InstanceScript instance = player.GetInstanceScript(); if (instance != null) { instance.SetData(DataTypes.CavernActive, 0); if (instance.GetData(DataTypes.IceShardsHit) == 0) { instance.DoUpdateCriteria(CriteriaTypes.BeSpellTarget, SpellIds.AchievDontLookUpCredit, 0, player); } } return(true); }
public void initialSpawn() { Quaternion rotation = Quaternion.Euler(0, 0, 0); if (randomRotation) { float random = Random.Range(0f, 360f); int zRot; if (random <= 90) { zRot = 0; } else if (random <= 180) { zRot = 90; } else if (random <= 270) { zRot = 180; } else { zRot = 270; } rotation = Quaternion.Euler(0, 0, zRot); } while (spawnDistance <= Vector3.Distance(startPos, endPos)) // Gradually spawn the lasers further and further away until spawndistance reaches the max point the laser can move to { spawnDistance += moveSpeed * Time.fixedDeltaTime * 1000 + startDelay; Vector3 spawnPoint = startPos + dir * spawnDistance; // Get the point 'x' units in the direction it should move towards GameObject wall = (GameObject)Instantiate(prefab, spawnPoint, rotation); script = wall.AddComponent <InstanceScript>(); // This script will handle the actual movement of the prefab, we pass on the target location to that script script.xMove = xMove; script.yMove = yMove; script.zMove = zMove; script.moveSpeed = moveSpeed; script.startMovement = true; } }
public override void JustSummoned(Creature summon) { InstanceScript instance = me.GetInstanceScript(); if (instance != null) { ObjectGuid guid = instance.GetGuidData(DTKDataTypes.Novos); if (!guid.IsEmpty()) { Creature novos = ObjectAccessor.GetCreature(me, guid); if (novos) { novos.GetAI().JustSummoned(summon); } } } if (summon) { summon.GetMotionMaster().MovePath(summon.GetEntry() * 100, false); } }
public override void SummonedCreatureDies(Creature summon, Unit killer) { if (_crystalHandlerCount < 4) { return; } InstanceScript instance = me.GetInstanceScript(); if (instance != null) { ObjectGuid guid = instance.GetGuidData(DTKDataTypes.Novos); if (!guid.IsEmpty()) { Creature novos = ObjectAccessor.GetCreature(me, guid); if (novos) { novos.GetAI().DoAction(DTKDataTypes.ActionCrystalHandlerDied); } } } }
IEnumerator SpawnInterval() { Quaternion rotation = Quaternion.Euler(0, 0, 0); if (randomRotation) { float random = Random.Range(0f, 360f); int zRot; if (random <= 90) { zRot = 0; } else if (random <= 180) { zRot = 90; } else if (random <= 270) { zRot = 180; } else { zRot = 270; } rotation = Quaternion.Euler(0, 0, zRot); } GameObject wall = (GameObject)Instantiate(prefab, new Vector3(xInit, yInit, zInit), rotation); script = wall.AddComponent <InstanceScript>(); // This script will handle the actual movement of the prefab, we pass on the target location to that script script.xMove = xMove; script.yMove = yMove; script.zMove = zMove; script.moveSpeed = moveSpeed; script.startMovement = true; yield return(new WaitForSeconds(interval)); StartCoroutine(SpawnInterval()); }
public void SaveToDB() { // save instance data too string data = ""; uint completedEncounters = 0; Map map = Global.MapMgr.FindMap(GetMapId(), m_instanceid); if (map != null) { Cypher.Assert(map.IsDungeon()); InstanceScript instanceScript = ((InstanceMap)map).GetInstanceScript(); if (instanceScript != null) { data = instanceScript.GetSaveData(); completedEncounters = instanceScript.GetCompletedEncounterMask(); m_entranceId = instanceScript.GetEntranceLocation(); } InstanceScenario scenario = map.ToInstanceMap().GetInstanceScenario(); if (scenario != null) { scenario.SaveToDB(); } } PreparedStatement stmt = DB.Characters.GetPreparedStatement(CharStatements.INS_INSTANCE_SAVE); stmt.AddValue(0, m_instanceid); stmt.AddValue(1, GetMapId()); stmt.AddValue(2, GetResetTimeForDB()); stmt.AddValue(3, (uint)GetDifficultyID()); stmt.AddValue(4, completedEncounters); stmt.AddValue(5, data); stmt.AddValue(6, m_entranceId); DB.Characters.Execute(stmt); }
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); }