コード例 #1
0
 public PortalEventHandler(ActorPortal portal)
 {
     this.portal = portal;
 }
コード例 #2
0
        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);
        }