public virtual uint GetEnterRoomCost(Room r, Exit e) { return(0); }
public virtual uint GetExitCost(Exit e) { return(0); }
public virtual uint GetPortalCost(Exit e) { return(0); }
public virtual uint GetLeaveRoomCost(Room r, Exit e) { return(0); }
public virtual bool CanUsePortal(Exit p, Room r) { return(true); }
public virtual bool CanUseExit(Exit e) { return(true); }
public virtual uint GetOverrideCost(Exit e, bool isPortal) { return(uint.MaxValue); }
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); }