public PortalEventHandler(ActorPortal portal) { this.portal = portal; }
public void OnMapPortalEnter(CM_MAP_PORTAL_ENTER p) { if (account.GMLevel > 0) { Logger.Log.Warn(string.Format("Player:{0}({1}) is trying to enter portal at Map:{6} {2},{3},{4} Dir:{5}", chara.Name, account.UserName, chara.X, chara.Y, chara.Z, chara.Dir, chara.MapID)); } if (Portal.PortalDataManager.Instance.Items.ContainsKey(chara.MapID)) { var query = from portal in Portal.PortalDataManager.Instance[chara.MapID] where chara.DistanceToActor(portal) < 1000 orderby chara.DistanceToActor(portal) select portal; bool warped = false; ActorPortal tmp = query.FirstOrDefault(); if (tmp != null) { foreach (PortalTrigger i in tmp.PortalTriggers) { if (i.Quest > 0) { if (chara.Quests.ContainsKey(i.Quest)) { if (i.Step == chara.Quests[i.Quest].NextStep - 1 || i.Step == -1 || (i.Step == 0 && i.Step == chara.Quests[i.Quest].Step)) { int abs = Math.Abs(i.Dir - chara.Dir); if (abs <= 90 || abs > 270) { Map.Map map = MapManager.Instance.GetMap(i.MapTarget, chara.CharID, chara.PartyID); if (map != null) { warped = true; if (i.X == 0 && i.Y == 0 && i.Z == 0) { Map.SendActorToMap(chara, map, chara.X, chara.Y, chara.Z); } else { Map.SendActorToMap(chara, map, i.X, i.Y, i.Z); } } else { Logger.Log.Warn(string.Format("MapID:{0} isn't defined!", i.MapTarget)); } break; } } } } else { Map.Map map = MapManager.Instance.GetMap(i.MapTarget, chara.CharID, chara.PartyID); if (map != null) { warped = true; if (i.X == 0 && i.Y == 0 && i.Z == 0) { Map.SendActorToMap(chara, map, chara.X, chara.Y, chara.Z); } else { Map.SendActorToMap(chara, map, i.X, i.Y, i.Z); } } } } } if (!warped) { SendPortalNotWarp(); } } else { SendPortalNotWarp(); } //map.SendEventToAllActorsWhoCanSeeActor(SagaBNS.GameServer.Map.MapEvents.PORTAL_ENTER, null, chara, false); }