Beispiel #1
0
        public void FinalizeDataHolder()
        {
            AreaTrigger areaTrigger = AreaTriggerMgr.AreaTriggers.Get <AreaTrigger>(this.Id);

            if (areaTrigger == null)
            {
                ContentMgr.OnInvalidDBData("AreaTriggerEntry {0} (#{1}, Type: {2}) had invalid AreaTrigger-id.",
                                           (object)this.Name, (object)this.Id, (object)this.Type);
            }
            else
            {
                areaTrigger.Template = this;
                if (this.TargetPos.IsSet)
                {
                    MapTemplate mapTemplate = WCell.RealmServer.Global.World.GetMapTemplate(this.TargetMap);
                    if (mapTemplate != null)
                    {
                        this.Type = AreaTriggerType.Teleport;
                        int num = (int)ArrayUtil.AddOnlyOne <Vector3>(ref mapTemplate.EntrancePositions,
                                                                      this.TargetPos);
                    }
                }

                this.Handler = AreaTriggerMgr.GetHandler(this.Type);
            }
        }
Beispiel #2
0
		/// <summary>
		/// Teleports into an instance
		/// </summary>
		/// <param name="chr"></param>
		/// <param name="trigger"></param>
		/// <returns></returns>
		public static bool HandleTeleport(Character chr, AreaTrigger trigger)
		{
			var regionInfo = World.GetRegionTemplate(trigger.Template.TargetMap);
#if DEBUG
			chr.SendSystemMessage("Target location: {0}", trigger.Template.TargetMap);
#endif

			if (regionInfo.IsInstance)
			{
				if (regionInfo.Type == MapType.Normal)
				{
					InstanceMgr.LeaveInstance(chr, regionInfo, trigger.Template.TargetPos);
					return true;
				}
				else
				{
					return InstanceMgr.EnterInstance(chr, regionInfo, trigger.Template.TargetPos);
				}
			}
			else if (regionInfo.BGTemplate == null)
			{
				var rgn = World.GetRegion(regionInfo.Id);
				if (rgn != null)
				{
					chr.TeleportTo(rgn, trigger.Template.TargetPos, trigger.Template.TargetOrientation);
					return true;
				}
				else
				{
					ContentMgr.OnInvalidDBData("Invalid Region: " + rgn);
				}
			}
			return true;
		}
Beispiel #3
0
        /// <summary>Teleports into an instance</summary>
        /// <param name="chr"></param>
        /// <param name="trigger"></param>
        /// <returns></returns>
        public static bool HandleTeleport(Character chr, AreaTrigger trigger)
        {
            MapTemplate mapTemplate = World.GetMapTemplate(trigger.Template.TargetMap);

            if (mapTemplate.IsInstance)
            {
                if (mapTemplate.Type != MapType.Normal)
                {
                    return(InstanceMgr.EnterInstance(chr, mapTemplate, trigger.Template.TargetPos));
                }
                InstanceMgr.LeaveInstance(chr, mapTemplate, trigger.Template.TargetPos);
                return(true);
            }

            if (mapTemplate.BattlegroundTemplate == null)
            {
                Map nonInstancedMap = World.GetNonInstancedMap(mapTemplate.Id);
                if (nonInstancedMap != null)
                {
                    chr.TeleportTo(nonInstancedMap, trigger.Template.TargetPos,
                                   new float?(trigger.Template.TargetOrientation));
                    return(true);
                }

                ContentMgr.OnInvalidDBData("Invalid Map: " + (object)nonInstancedMap);
            }
            else
            {
                chr.AddMessage((Action)(() => chr.TeleportTo(trigger.Template.TargetMap, trigger.Template.TargetPos)));
            }

            return(true);
        }
Beispiel #4
0
        /// <summary>
        /// Teleports into an instance
        /// </summary>
        /// <param name="chr"></param>
        /// <param name="trigger"></param>
        /// <returns></returns>
        public static bool HandleTeleport(Character chr, AreaTrigger trigger)
        {
            var mapInfo = World.GetMapTemplate(trigger.Template.TargetMap);

#if DEBUG
            chr.SendSystemMessage("Target location: {0}", trigger.Template.TargetMap);
#endif

            if (mapInfo.IsInstance)
            {
                if (mapInfo.Type == MapType.Normal)
                {
                    InstanceMgr.LeaveInstance(chr, mapInfo, trigger.Template.TargetPos);
                    return(true);
                }
                else
                {
                    return(InstanceMgr.EnterInstance(chr, mapInfo, trigger.Template.TargetPos));
                }
            }
            else if (mapInfo.BattlegroundTemplate == null)
            {
                var rgn = World.GetNonInstancedMap(mapInfo.Id);
                if (rgn != null)
                {
                    chr.TeleportTo(rgn, trigger.Template.TargetPos, trigger.Template.TargetOrientation);
                    return(true);
                }
                else
                {
                    ContentMgr.OnInvalidDBData("Invalid Map: " + rgn);
                }
            }
            return(true);
        }
Beispiel #5
0
 internal void NotifyTriggered(AreaTrigger at, Character chr)
 {
     AreaTrigger.ATUseHandler triggered = this.Triggered;
     if (triggered == null)
     {
         return;
     }
     triggered(at, chr);
 }
Beispiel #6
0
        internal void NotifyTriggered(AreaTrigger at, Character chr)
        {
            var evt = Triggered;

            if (evt != null)
            {
                evt(at, chr);
            }
        }
Beispiel #7
0
        /// <summary>Triggers Quest</summary>
        /// <param name="chr"></param>
        /// <param name="trigger"></param>
        /// <returns></returns>
        public static bool HandleQuestTrigger(Character chr, AreaTrigger trigger)
        {
            Quest activeQuest = chr.QuestLog.GetActiveQuest(trigger.Template.TriggerQuestId);

            if (activeQuest == null)
            {
                return(false);
            }
            activeQuest.SignalATVisited(trigger.Id);
            return(true);
        }
Beispiel #8
0
        /// <summary>
        /// Triggers Quest
        /// </summary>
        /// <param name="chr"></param>
        /// <param name="trigger"></param>
        /// <returns></returns>
        public static bool HandleQuestTrigger(Character chr, AreaTrigger trigger)
        {
            var quest = chr.QuestLog.GetActiveQuest(trigger.Template.TriggerQuestId);

            if (quest != null)
            {
                // progress Quest
                quest.SignalATVisited(trigger.Id);
                return(true);
            }
            return(false);
        }
Beispiel #9
0
		/// <summary>
		/// Do nothing
		/// </summary>
		/// <param name="arg1"></param>
		/// <param name="arg2"></param>
		/// <returns></returns>
		public static bool NoAction(Character arg1, AreaTrigger arg2) { return false; }
Beispiel #10
0
		/// <summary>
		/// Cast a spell on the Character.
		/// [NYI]
		/// </summary>
		/// <param name="chr"></param>
		/// <param name="trigger"></param>
		/// <returns></returns>
		public static bool HandleSpell(Character chr, AreaTrigger trigger)
		{
			return false;
		}
Beispiel #11
0
		/// <summary>
		/// Start resting
		/// </summary>
		/// <param name="chr"></param>
		/// <param name="trigger"></param>
		/// <returns></returns>
		public static bool HandleRest(Character chr, AreaTrigger trigger)
		{
			chr.RestTrigger = trigger;
			return true;
		}
Beispiel #12
0
		/// <summary>
		/// Triggers Quest
		/// </summary>
		/// <param name="chr"></param>
		/// <param name="trigger"></param>
		/// <returns></returns>
		public static bool HandleQuestTrigger(Character chr, AreaTrigger trigger)
		{
			var quest = chr.QuestLog.GetActiveQuest(trigger.Template.TriggerQuestId);
			if (quest != null)
			{
				// progress Quest
				quest.SignalATVisited(trigger.Id);
				return true;
			}
			return false;
		}
Beispiel #13
0
		static void OnObservanceHallTriggered(AreaTrigger at, Character chr)
		{
			var instance = chr.Map as UtgardePinnacle;

			if (instance != null && !instance.m_EncounterStarted)
			{
				instance.StartEncounter();
			}
		}
Beispiel #14
0
		internal void NotifyTriggered(AreaTrigger at, Character chr)
		{
			var evt = Triggered;
			if (evt != null)
			{
				evt(at, chr);
			}
		}
Beispiel #15
0
		/// <summary>
		/// Somebody stepped on the Alliance capture areatrigger
		/// </summary>
		/// <param name="at"></param>
		/// <param name="chr"></param>
		private static void AllianceCaptureTriggered(AreaTrigger at, Character chr)
		{
			// Check whether the battle has started and the Character is actively participating
			var team = chr.Battlegrounds.Team;
			var wsg = chr.Region as WarsongGulch;
			if (team != null && wsg != null && wsg.IsActive)
			{
				if (team.Side == BattlegroundSide.Alliance)
				{
					if (wsg.WarsongClan.FlagCarrier == chr && wsg.Silverwing.IsFlagHome)
					{
						wsg.WarsongClan.CaptureFlag(chr);
					}
				}
			}
		}
Beispiel #16
0
 /// <summary>
 /// Do nothing
 /// </summary>
 /// <param name="arg1"></param>
 /// <param name="arg2"></param>
 /// <returns></returns>
 public static bool NoAction(Character arg1, AreaTrigger arg2)
 {
     return(false);
 }
Beispiel #17
0
 /// <summary>
 /// Cast a spell on the Character.
 /// [NYI]
 /// </summary>
 /// <param name="chr"></param>
 /// <param name="trigger"></param>
 /// <returns></returns>
 public static bool HandleSpell(Character chr, AreaTrigger trigger)
 {
     return(false);
 }
Beispiel #18
0
 /// <summary>
 /// Start resting
 /// </summary>
 /// <param name="chr"></param>
 /// <param name="trigger"></param>
 /// <returns></returns>
 public static bool HandleRest(Character chr, AreaTrigger trigger)
 {
     chr.RestTrigger = trigger;
     return(true);
 }