using System; using System.Collections.Generic; using System.Linq; using System.Reflection; using System.Text; using System.IO; using ProxyCore; namespace Mapper.Scripting { public class AreaScript { public AreaScript(params uint[] AreaID) { AreaId = AreaID; } public readonly uint[] AreaId; public int RequiredMapperVersion { get; protected set; } public virtual bool CanUseExit(Exit e) { return true; } public virtual bool CanUsePortal(Exit p, Room r) { return true; } public virtual string GetExitCommand(Exit e) { return e.Command == "stop" ? null : e.Command; } public virtual string GetDoorCommand(Exit e) { if(!string.IsNullOrEmpty(e.DoorCommand)) return e.DoorCommand; if(e.HasFlag("door") && PathfindResult.IsDirectionCommand(e.Command) != 'x') return "open " + e.Command; return string.Empty; } public virtual uint GetLeaveRoomCost(Room r, Exit e) { return r.LeaveCost; } public virtual uint GetExitCost(Exit e) { return e.Cost; } public virtual uint GetPortalCost(Exit e) { return e.Cost; } public virtual uint GetEnterRoomCost(Room r, Exit e) { return r.EntryCost; } public virtual void OnEnterRoom(Room r, Room oldRoom) { } public virtual void OnLeaveRoom(Room r, Room newRoom) { } public virtual void OnEnterArea(Area a, Area oldArea) { } public virtual void OnLeaveArea(Area a, Area newArea) { } } public class AreaScriptMgr { internal static Dictionary Scripts = new Dictionary(); internal static AreaScript Default = new AreaScript(); public static void RegisterScript(uint AreaId, AreaScript Script) { if(Script != null) Scripts[AreaId] = Script; } internal static AreaScript GetScript(uint AreaId) { return Scripts.ContainsKey(AreaId) ? Scripts[AreaId] : Default; } } }