예제 #1
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);
        }
예제 #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)
        {
            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);
        }