Ejemplo n.º 1
0
 public virtual uint GetEnterRoomCost(Room r, Exit e)
 {
     return(0);
 }
Ejemplo n.º 2
0
 public virtual uint GetExitCost(Exit e)
 {
     return(0);
 }
Ejemplo n.º 3
0
 public virtual uint GetPortalCost(Exit e)
 {
     return(0);
 }
Ejemplo n.º 4
0
 public virtual uint GetLeaveRoomCost(Room r, Exit e)
 {
     return(0);
 }
Ejemplo n.º 5
0
 public virtual bool CanUsePortal(Exit p, Room r)
 {
     return(true);
 }
Ejemplo n.º 6
0
 public virtual bool CanUseExit(Exit e)
 {
     return(true);
 }
Ejemplo n.º 7
0
 public virtual uint GetOverrideCost(Exit e, bool isPortal)
 {
     return(uint.MaxValue);
 }
Ejemplo n.º 8
0
        private bool OpenRoom(Room r, Exit from, uint cost, Pathfinder p)
        {
            if (r.Mapper_OpenBy != null || (from != null && p.StartRooms.Contains(r)) || r.Area.Entry == uint.MaxValue)
            {
                return(false);
            }

            r.Mapper_OpenBy   = from;
            r.Mapper_OpenCost = cost;

            if (p.IsTargetRoom(r))
            {
                return(true);
            }

            if (_pExits[0].Count > 0 && !r.HasFlag("prison"))
            {
                for (int i = _pExits[0].Count - 1; i >= 0; i--)
                {
                    if (_pExits[0][i].To.Mapper_OpenBy != null)
                    {
                        _pExits[0].RemoveAt(i);
                    }
                    else if (GetScript(r).CanUsePortal(_pExits[0][i], r) && p.CanUsePortal(_pExits[0][i], r))
                    {
                        _pExits[0][i].From = r;
                        AddExit(_pExits[0][i], p, true);
                        _pExits[0].RemoveAt(i);
                    }
                }
            }
            if (_pExits[1].Count > 0 && !r.HasFlag("norecall"))
            {
                for (int i = _pExits[1].Count - 1; i >= 0; i--)
                {
                    if (_pExits[1][i].To.Mapper_OpenBy != null)
                    {
                        _pExits[1].RemoveAt(i);
                    }
                    else if (GetScript(r).CanUsePortal(_pExits[1][i], r) && p.CanUsePortal(_pExits[1][i], r))
                    {
                        _pExits[1][i].From = r;
                        AddExit(_pExits[1][i], p, true);
                        _pExits[1].RemoveAt(i);
                    }
                }
            }
            foreach (Exit e in r.exits)
            {
                if (e.To.Mapper_OpenBy != null)
                {
                    continue;
                }
                if (e.To.Area.Entry == uint.MaxValue)
                {
                    continue;
                }
                if (e.HasFlag("disabled"))
                {
                    continue;
                }
                if (!GetScript(r).CanUseExit(e))
                {
                    continue;
                }
                if (e.MinLevel > p.CharacterLevel)
                {
                    continue;
                }
                if (e.MaxLevel < p.CharacterLevel)
                {
                    continue;
                }
                if (!p.CanUseExit(e))
                {
                    continue;
                }
                AddExit(e, p, false);
            }

            return(false);
        }