Пример #1
0
        public bool InitMap(PlanesInstance planes, ushort index, ulong mapInstanceId, TableWrap.MapInfoData info, PlayerInstance creater)
        {
            mPlanes        = planes;
            mOwner         = creater;
            mIndexInServer = index;
            mMapInfo       = info;
            //             mMapInfo = MapInstanceManager.GetMapInitBySourceId(mapSourceId);
            //             if (mMapInfo == null)
            //                 return false;
            //mUUID = mapInstanceId;

            mMapInstanceId = mapInstanceId;
            mMapSourceId   = (ushort)info.MapData.id;// mapSourceId;
            InitPlayerPool((ushort)mMapInfo.MapData.maxPlayerCount);
            mNavigator = NavigatorMgr.Instance.InitNavigator(mMapSourceId, GetNavFilePath(mMapInfo.MapData.name));

            // 从地图数据中创建实例数据
            m_cellXCount = (int)(mMapInfo.MapData.sizeX / mServerMapCellWidth) + ((mMapInfo.MapData.sizeX % mServerMapCellWidth) > 0 ? 1 : 0);
            m_cellZCount = (int)(mMapInfo.MapData.sizeZ / mServerMapCellHeight) + ((mMapInfo.MapData.sizeZ % mServerMapCellHeight) > 0 ? 1 : 0);

            m_mapCells = new MapCellInstance[m_cellZCount, m_cellXCount];
            for (int i = 0; i < m_cellZCount; i++)
            {
                for (int j = 0; j < m_cellXCount; j++)
                {
                    MapCellInstance mapCell = new MapCellInstance(j, i);
                    m_mapCells[i, j] = mapCell;
                }
            }

            //LoadMapData();
            OnInit();
            return(true);
        }
Пример #2
0
        public void OnLogoutPlane(PlayerInstance player)
        {
            var lastTime = player.PlayerData.RoleDetail.LastLoginDate;
            int today    = System.DateTime.Now.Day;

            player.PlayerData.RoleDetail.TodayPassSecond += (int)((System.DateTime.Now - lastTime).TotalSeconds);
        }
Пример #3
0
 public void RemovePlayerInstance(PlayerInstance player)
 {
     lock (this)
     {
         mPlayers.Remove(player.Id);
     }
 }
Пример #4
0
 public static void SendMsg2Client(PlayerInstance player, CSCommon.Data.Message msg)
 {
     RPC.PackageWriter pkg = new RPC.PackageWriter();
     pkg.SetSinglePkg();
     Wuxia.H_RpcRoot.smInstance.RPC_ReceiveMsg(pkg, msg);
     pkg.DoCommandPlanes2Client(player.Planes2GateConnect, player.ClientLinkId);
 }
Пример #5
0
        public virtual bool OnKilled(PlayerInstance player)
        {
            player.ChangeState(ePlayerState.Dead);
            player.mAttackTarget = null;

            return(true);
        }
Пример #6
0
 public void AddPlayerInstance(PlayerInstance player)
 {
     lock (this)
     {
         mPlayers[player.Id] = player;
     }
 }
Пример #7
0
        public int Execute(PlayerInstance _user, int count, string arg1, string arg2, string arg3)
        {
            var 类型 = Convert.ToInt32(arg1);
            var 数量 = Convert.ToInt32(arg2);

            _user._ChangeMoney((CSCommon.eCurrenceType)类型, CSCommon.Data.eMoneyChangeType.ItemUse, 数量);
            return(1);
        }
Пример #8
0
        //玩家移动时,是否将移动信息记录到数据库
        public virtual bool IsSavePos(PlayerInstance role)
        {
            if (MapInfo.IsInstance)
            {
                return(false);
            }

            return(true);
        }
Пример #9
0
        public override bool IsSavePos(PlayerInstance role)
        {
            if (role.PlayerData.RoleDetail.Camp == (byte)CSCommon.eCamp.None)
            {
                return(true);
            }

            return(false);
        }
Пример #10
0
        // 将格子中的信息同步给某个玩家,返回值是实际同步的玩家数量
        public int AsyncMapCellDataToClient(PlayerInstance player, int maxCount, Random rand, RPC.DataWriter data)
        {
            int retValue = maxCount;

            if (Players.Count <= maxCount)
            {
                if (Players.Contains(player))
                {
                    retValue = Players.Count - 1;
                }
                else
                {
                    retValue = Players.Count;
                }

                data.Write((Byte)retValue);

                foreach (var role in Players)
                {
                    if (role.Id == player.Id)
                    {
                        continue;
                    }

                    data.Write(role.PlayerData.RoleDetail, true);
                    data.Write(role.Id);
                }
            }
            else
            {
                int startIdx = rand.Next(Players.Count - maxCount);

                if (Players.IndexOf(player) >= startIdx)
                {
                    retValue = maxCount - 1;
                }
                else
                {
                    retValue = maxCount;
                }

                data.Write((Byte)retValue);

                for (int i = startIdx; i < startIdx + maxCount; i++)
                {
                    if (Players[i].Id == player.Id)
                    {
                        continue;
                    }

                    data.Write(Players[i].PlayerData.RoleDetail, true);
                    data.Write(Players[i].Id);
                }
            }

            return(retValue);
        }
Пример #11
0
        public override bool OnKilled(PlayerInstance player)
        {
            if (!base.OnKilled(player))
            {
                return(false);
            }

            return(true);
        }
Пример #12
0
        public void RPC_GetPlayerInfo(ulong id, RPC.RPCForwardInfo fwd)
        {
            RPC.PackageWriter retPkg = new RPC.PackageWriter();
            PlayerInstance    player = HostMap.FindPlayer(id);

            if (player == null)
            {
                retPkg.Write((sbyte)(-1));
                retPkg.DoReturnPlanes2Client(fwd);
                return;
            }
            retPkg.Write((sbyte)1);
            ////一级属性
            //retPkg.Write(player.FinalPoint.Power);
            //retPkg.Write(player.FinalPoint.Body);
            //retPkg.Write(player.FinalPoint.Dex);
            ////二级属性
            //retPkg.Write(player.mFinalRoleValue.Atk);
            //retPkg.Write(player.mFinalRoleValue.MaxHP);
            //retPkg.Write(player.mFinalRoleValue.MaxMP);
            //retPkg.Write(player.mFinalRoleValue.Hit);
            //retPkg.Write(player.mFinalRoleValue.Dodge);
            //retPkg.Write(player.mFinalRoleValue.Crit);
            //retPkg.Write(player.mFinalRoleValue.CritDef);
            //retPkg.Write(player.mFinalRoleValue.DeadlyHitRate);
            //retPkg.Write(player.mFinalRoleValue.Def[0]);
            //retPkg.Write(player.mFinalRoleValue.Def[1]);
            //retPkg.Write(player.mFinalRoleValue.Def[2]);
            //retPkg.Write(player.mFinalRoleValue.Def[3]);
            //retPkg.Write(player.mFinalRoleValue.Def[4]);
            //retPkg.Write(player.mFinalRoleValue.UpHurtRate);
            //retPkg.Write(player.mFinalRoleValue.DownHurtRate);
            //retPkg.Write(player.mFinalRoleValue.UnusualDefRate);

            retPkg.Write(player.FinalRoleValue.Power);
            retPkg.Write(player.FinalRoleValue.Body);
            retPkg.Write(player.FinalRoleValue.Dex);
            //二级属性
            retPkg.Write(player.FinalRoleValue.Atk);
            retPkg.Write(player.FinalRoleValue.MaxHP);
            retPkg.Write(player.FinalRoleValue.MaxMP);
            retPkg.Write(player.FinalRoleValue.Hit);
            retPkg.Write(player.FinalRoleValue.Dodge);
            retPkg.Write(player.FinalRoleValue.Crit);
            retPkg.Write(player.FinalRoleValue.CritDef);
            retPkg.Write(player.FinalRoleValue.DeadlyHitRate);
            retPkg.Write(player.FinalRoleValue.GetDef(eElemType.Gold));
            retPkg.Write(player.FinalRoleValue.GetDef(eElemType.Wood));
            retPkg.Write(player.FinalRoleValue.GetDef(eElemType.Water));
            retPkg.Write(player.FinalRoleValue.GetDef(eElemType.Fire));
            retPkg.Write(player.FinalRoleValue.GetDef(eElemType.Earth));
            retPkg.Write(player.FinalRoleValue.UpHurtRate);
            retPkg.Write(player.FinalRoleValue.DownHurtRate);
            retPkg.Write(player.FinalRoleValue.UnusualDefRate);
            retPkg.DoReturnPlanes2Client(fwd);
        }
Пример #13
0
        public int Execute(PlayerInstance _user, int count, string arg1, string arg2, string arg3)
        {
            if (_user.PlayerData.RoleDetail.RoleMp >= _user.FinalRoleValue.MaxMP)
            {
                return((int)CSCommon.eRet_UseItem.MpMax);
            }
            var 一次加蓝 = Convert.ToInt32(arg1);

            _user.ChangeMP(一次加蓝);
            return(1);
        }
Пример #14
0
        public PlayerInstance FindPlayer(ulong id)
        {
            PlayerInstance retPlayer = null;

            if (mPlayerDictionary.TryGetValue(id, out retPlayer))
            {
                return(retPlayer);
            }

            return(null);
        }
Пример #15
0
 public int Execute(PlayerInstance _user, int count, string arg1, string arg2, string arg3)
 {
     user = _user;
     if (user.PlayerData.RoleDetail.RoleHp >= user.PlayerData.RoleDetail.RoleMaxHp)
     {
         return((int)CSCommon.eRet_UseItem.HpMax);
     }
     一次加血        = Convert.ToInt32(arg1);
     时间间隔        = Convert.ToSingle(arg2);
     持续时间        = Convert.ToSingle(arg3);
     mTimeHandle = ServerFrame.TimerManager.doLoop(时间间隔, used);
     return(1);
 }
Пример #16
0
        public void Init(PlayerInstance role, CSCommon.Data.AchieveData data)
        {
            mRole = role;
            if (data.RoleId != mRole.Id)
            {
                data.RoleId = mRole.Id;
            }
            AchieveUnSerialize(data.Achievement);
            CopyUnSerialize(data.CopyInfo);

            //初始化成就监听
            InitAchieveObjiects();
        }
Пример #17
0
        public override void Push2Processor(RPC.RPCSpecialHolder holder, int ptype)
        {
            if (ptype == (int)RPC.PackageType.PKGT_C2P_Player_Send || ptype == (int)RPC.PackageType.PKGT_C2P_Player_SendAndWait)
            {
                Planes.MapInstance mapInstance = Planes.MapInstanceManager.Instance.GetMapInstance(holder.mForward.MapIndexInServer);
                if (mapInstance == null)
                {
                    holder.DestroyBuffer();
                    Log.Log.Server.Info("玩家地图索引非法");
                    return;
                }

                RPC.RPCSpecialHolderProcessor RpcProcessor = mapInstance.RpcProcessor;
                if (RpcProcessor == null)
                {
                    holder.DestroyBuffer();
                    Log.Log.Server.Info("地图的RPC处理器不合法");
                    //RPC.PackageWriter pkg = new RPC.PackageWriter();
                    //H_RPCRoot.smInstance.HGet_GateServer(pkg).DisconnectPlayerByConnectHandle(pkg, holder.mForward.Handle);
                    //pkg.DoCommand(holder.mForward.Planes2GateConnect, RPC.CommandTargetType.DefaultType);
                    return;
                }
                Planes.PlayerInstance player = mapInstance.GetPlayer(holder.mForward.PlayerIndexInMap);
                if (player == null)
                {//切换地图后还有数据包发来该位面
                    holder.DestroyBuffer();

                    //Log.FileLog.WriteLine("找不到RPC处理的玩家");
                    //RPC.PackageWriter pkg = new RPC.PackageWriter();
                    //H_RPCRoot.smInstance.HGet_GateServer(pkg).DisconnectPlayerByConnectHandle(pkg, holder.mForward.Handle);
                    //pkg.DoCommand(holder.mForward.Planes2GateConnect, RPC.CommandTargetType.DefaultType);
                    return;
                }
                else
                {
                    if (player.Id != holder.mForward.RoleId)
                    {
                        holder.DestroyBuffer();
                        Log.FileLog.WriteLine("RPC玩家Id不符合");
                        return;
                    }
                    holder.mRoot = player;
                    //RPC.RPCSpecialHolderProcessor.Process(holder);
                    RpcProcessor.PushHolder(holder);
                    return;
                }
            }

            holder.DestroyBuffer();
            return;
        }
Пример #18
0
        public virtual bool FollowTarget(PlayerInstance player, RoleActor target)
        {
            if (null == player)
            {
                return(false);
            }

            if (null == target || target.IsDie)
            {
                return(false);
            }

            return(true);
        }
Пример #19
0
        /// <summary>
        /// 实际消耗
        /// </summary>
        public override bool SkillConsume(RoleActor actor, SkillActive skill)
        {
            if (!base.SkillConsume(actor, skill))
            {
                return(false);
            }

            PlayerInstance player    = actor as PlayerInstance;
            var            lvData    = CSTable.StaticDataManager.PlayerLevel[player.RoleLevel, (byte)player.RolePro];
            float          consumeMp = lvData.mp * skill.LevelData.consume;

            player.ChangeMP(-1 * (int)consumeMp);

            return(true);
        }
Пример #20
0
        public static PlayerInstance CreatePlayerInstance(CSCommon.Data.PlayerData pd, Iocp.TcpConnect p2gConnect, UInt16 linkId)
        {
            IActorInitBase actInit = new IActorInitBase();

            actInit.GameType = eActorGameType.Player;
            PlayerInstance ret = new PlayerInstance();

            ret.Initialize(actInit);
            if (false == ret.InitRoleInstance(null, pd, p2gConnect, linkId))
            {
                return(null);
            }

            return(ret);
        }
Пример #21
0
        public enEnterMapResult PlayerEnterMap(PlayerInstance role, SlimDX.Vector3 pos, bool bTellClient)
        {
            if (mPlayerPool == null)
            {
                return(enEnterMapResult.Error_InvalidMap);
            }

            if (mFreeSlot.Count == 0)
            {
                return(enEnterMapResult.Error_PlayerFull);
            }

            role.Placement.SetLocation(ref pos);

            if (role.HostMap != this)
            {
                if (!role.HostMap.IsNullMap)
                {
                    role.HostMap.PlayerLeaveMap(role, false);
                }
                role._SetIndexInMap(mFreeSlot.Pop());
                System.Diagnostics.Debug.Assert(mPlayerPool[role.IndexInMap] == null);
                mPlayerPool[role.IndexInMap] = role;
                mPlayerDictionary[role.Id]   = role;

                if (AllMapManager.IsInstanceMap(this.MapSourceId) == false)
                {
                    //role.PlayerData.RoleDetail.MapName = this.MapName;
                    role.PlayerData.RoleDetail.DungeonID   = 0;
                    role.PlayerData.RoleDetail.MapSourceId = this.MapSourceId;
                }
                else
                {
                    role.PlayerData.RoleDetail.DungeonID = this.MapInstanceId;
                }

                role.OnEnterMap(this);
            }

            OnRoleEnterMap(role);

            RPC.PackageWriter pkg = new RPC.PackageWriter();
            H_RPCRoot.smInstance.HGet_GateServer(pkg).PlayerEnterMapInPlanes(pkg, role.Id, role.ClientLinkId, role.IndexInMap, this.IndexInServer);
            pkg.DoCommand(role.Planes2GateConnect, RPC.CommandTargetType.DefaultType);

            role.HostMap = this;
            return(enEnterMapResult.Success);
        }
Пример #22
0
        public int Execute(PlayerInstance _user, int count, string arg1, string arg2, string arg3)
        {
            if (_user.PlayerData.RoleDetail.RoleHp >= _user.PlayerData.RoleDetail.RoleMaxHp)
            {
                return((int)CSCommon.eRet_UseItem.HpMax);
            }
            var 一次加血 = Convert.ToInt32(arg1);

            _user.ChangeHP(一次加血, _user);
            var pkg = new RPC.PackageWriter();

            //Wuxia.H_RpcRoot.smInstance.HIndex(pkg, _user.Id).RPC_SkillReceiveData(pkg, 0, 0, (byte)CSCommon.eHitType.AddHp, 一次加血);
            Wuxia.H_RpcRoot.smInstance.HIndex(pkg, _user.Id).RPC_FlutterInfo(pkg, (byte)CSCommon.eFlutterInfoType.AddHp, 0, 0, 0);
            pkg.DoCommandPlanes2Client(_user.Planes2GateConnect, _user.ClientLinkId);
            return(1);
        }
Пример #23
0
        public sbyte Use(int count, PlayerInstance player)
        {
            sbyte result      = (sbyte)CSCommon.eRet_UseItem.Succeed;
            var   useTemplate = CSTable.StaticDataManager.ItemUse[ItemData.Template.ItemUseId];

            if (useTemplate == null)
            {
                result = (sbyte)CSCommon.eRet_UseItem.TplNull;
                Log.Log.Item.Print("useTemplate == null id={0}", ItemData.Template.ItemUseId);
                return(result);
            }
            if (Script == null)
            {
                Script = System.Activator.CreateInstance(Type.GetType(string.Format("ServerCommon.Planes.{0}", useTemplate.ItemUseMethod)), null) as IUseCommand;
                if (Script == null)
                {
                    result = (sbyte)CSCommon.eRet_UseItem.MethodNull;
                    Log.Log.Item.Print("ERROR:item Use,CreateInstance={0}", useTemplate.ItemUseMethod);
                    return(result);
                }
            }
            int useResult = Script.Execute(player, count, useTemplate.Arg1, useTemplate.Arg2, useTemplate.Arg3);

            if (useResult < 0)
            {
                result = (sbyte)useResult;
            }
            else
            {
                if (useResult > 0)
                {
                    mItemData.StackNum -= useResult;
                    if (mItemData.StackNum > 0)
                    {
                        RPC.PackageWriter pkg = new RPC.PackageWriter();
                        Wuxia.H_RpcRoot.smInstance.RPC_ItemStackNumChanged(pkg, mItemData.ItemId, (byte)mItemData.Inventory, mItemData.StackNum);
                        pkg.DoCommandPlanes2Client(player.Planes2GateConnect, player.ClientLinkId);
                    }
                    else
                    {
                        Inventory.DeleteItem(mItemData.ItemId);
                    }
                }
            }
            return(result);
        }
Пример #24
0
        public bool PlayerLeaveMap(PlayerInstance role, bool bTellGateSver)
        {
            if (mPlayerPool == null)
            {
                return(false);
            }

            if (role.IndexInMap >= mPlayerPool.Length)
            {
                //System.Diagnostics.Debugger.Break();
                for (UInt16 i = 0; i < mPlayerPool.Length; i++)
                {
                    if (mPlayerPool[i] == role)
                    {
                        role._SetIndexInMap(i);
                        break;
                    }
                }
                return(false);
            }
            else
            {
                if (mPlayerPool[role.IndexInMap] != role)
                {
                    return(false);
                }
            }

            //先存盘
            role.OnLeaveMap();

            //后清理
            mPlayerDictionary.Remove(role.Id);
            mPlayerPool[role.IndexInMap] = null;
            mFreeSlot.Push(role.IndexInMap);
            role._SetIndexInMap(System.UInt16.MaxValue);

            if (bTellGateSver)
            {
                RPC.PackageWriter pkg = new RPC.PackageWriter();
                H_RPCRoot.smInstance.HGet_GateServer(pkg).PlayerLeaveMapInPlanes(pkg, role.ClientLinkId);
                pkg.DoCommand(role.Planes2GateConnect, RPC.CommandTargetType.DefaultType);
            }

            return(true);
        }
Пример #25
0
        public PlayerInstance FindPlayerByName(string name)
        {
            PlayerInstance retPlayer = null;

            foreach (var i in mPlayerPool)
            {
                if (i == null)
                {
                    continue;
                }
                if (i.RoleName.CompareTo(name) == 0)//在线
                {
                    retPlayer = i;
                    break;
                }
            }
            return(retPlayer);
        }
Пример #26
0
        public void ClientDisConnect(ulong roleId, Iocp.NetConnection connect, RPC.RPCForwardInfo fwd)
        {
            //清理干净角色后,返回给DS玩家的PlayerData
            Planes.PlayerInstance player = Planes.PlanesServerDataManager.Instance.FindPlayerInstance(roleId);
            if (player == null)
            {
                Log.Log.Server.Print("ClientDisConnect:找不到角色");
                return;
            }
            Planes.MapInstance    map    = player.HostMap;
            Planes.PlanesInstance planes = player.PlanesInstance;

            if (map != null)
            {
                planes = player.PlanesInstance;
                map.PlayerLeaveMap(player, true);//退出地图,并且存盘
            }
            else
            {
                Log.Log.Server.Print("ClientDisConnect:找不到地图");
                return;
            }

            if (planes != null)
            {
                planes.LeavePlanes(roleId);//退出位面
            }
            else
            {
                Log.Log.Server.Print("ClientDisConnect:位面ID不正确");
                return;
            }

            Planes.PlanesServerDataManager.Instance.RemovePlayerInstance(player);//退出服务器

            //客户端连接断开,需要告诉数据服务器,登出账号
            RPC.PackageWriter pkg0 = new RPC.PackageWriter();
            H_RPCRoot.smInstance.HGet_DataServer(pkg0).HGet_PlayerManager(pkg0).LogoutAccount(pkg0, player.AccountId, (sbyte)eServerType.Planes);
            pkg0.DoCommand(mDataConnect, RPC.CommandTargetType.DefaultType);

            return;
        }
Пример #27
0
        public override bool SelectTarget(PlayerInstance player)
        {
            player.mScanLastTime = 0;
            RoleActor target = player.GetTarget(player.GetFirstEnmityCanHit());

            //从警戒范围找目标
            if (null == target)
            {
                target = player.FindHatredTarget();
            }
            if (null == target)
            {
                player.mAttackTarget = null;
                return(false);
            }

            player.mAttackTarget = target;

            return(player.FollowTarget(target));
        }
Пример #28
0
        public bool MapPlayerGuid2UInt32(PlayerInstance role)
        {
            if (role.SingleId != 0)
            {
                return(false);
            }
            PlayerInstance temp;

            if (mPlayers.TryGetValue(role.Id, out temp))
            {
                return(false);
            }
            UInt32 singleId = 0;

            for (int count = 0; count < (UInt32)EIdIndexInfo.MaxPlayerInPlanes; count++)
            {
                if (mSingeIdPlayers.TryGetValue(mNextPlayerId, out temp) == false)
                {
                    singleId = mNextPlayerId;
                    mNextPlayerId++;
                    break;
                }
                else
                {
                    ++mNextPlayerId;
                    if (mNextPlayerId >= (UInt32)EIdIndexInfo.PlayerEnd)
                    {
                        mNextPlayerId = (UInt32)EIdIndexInfo.PlayerStart;
                    }
                }
            }

            if (singleId == 0)
            {
                return(false);
            }
            role._SetSingleId(singleId);
            mPlayers.Add(role.Id, role);
            mSingeIdPlayers.Add(singleId, role);
            return(true);
        }
Пример #29
0
        public void EnterPlanes(PlayerInstance player)
        {
            if (player.PlanesInstance == this)
            {
                return;
            }

            lock (this)
            {
                mPlayers[player.Id]   = player;
                player.PlanesInstance = this;
                if (this.PlanesId != 0)//没有在副本里面,副本没有PlanesId
                {
                    player.PlayerData.RoleDetail.PlanesId = this.PlanesId;
                }
            }

            {
                RPC.PackageWriter pkg = new RPC.PackageWriter();
                H_RPCRoot.smInstance.HGet_DataServer(pkg).HGet_PlayerManager(pkg).RoleEnterPlanesSuccessed(pkg, player.Id);
                pkg.DoCommand(IPlanesServer.Instance.DataConnect, RPC.CommandTargetType.DefaultType);
            }

            {
                RPC.PackageWriter pkg = new RPC.PackageWriter();
                H_RPCRoot.smInstance.HGet_ComServer(pkg).HGet_UserRoleManager(pkg).RPC_RoleEnterPlanes(pkg, player.PlayerData.RoleDetail);
                pkg.WaitDoCommand(IPlanesServer.Instance.ComConnect, RPC.CommandTargetType.DefaultType, null).OnFarCallFinished = delegate(RPC.PackageProxy _io, bool isTimeOut)
                {
                    if (isTimeOut)
                    {
                        return;
                    }
                    CSCommon.Data.RankData rd = new CSCommon.Data.RankData();
                    _io.Read(rd);
                    player.PlayerData.RankData = rd;
                    player.PlayerData.RankData._SetHostPlayer(player);
                };
            }
        }
Пример #30
0
        public void PlayerEnterMap(PlayerInstance player, ushort mapSourceId, ulong mapInstanceId, SlimDX.Vector3 pos, bool bSaveRole)
        {
            MapInstance map;

            lock (this)
            {
                if (AllMapManager.IsInstanceMap(mapSourceId))
                {
                    if (false == mInstanceMaps.TryGetValue(mapInstanceId, out map))
                    {
                        map = CreateMapInstance(PlanesInstance.NullPlanesInstance, mapInstanceId, mapSourceId, player);
                        if (map == null)
                        {
                            map = GetDefaultMapInstance(player.PlanesInstance);
                        }
                        mInstanceMaps.Add(mapInstanceId, map);
                    }
                }
                else
                {
                    var planes = player.PlanesInstance;
                    map = planes.GetGlobalMap(mapSourceId);
                    if (map == null)
                    {
                        map = CreateMapInstance(planes, 0, mapSourceId, player);
                        if (map == null)
                        {
                            map = GetDefaultMapInstance(planes);
                        }
                        planes.AddGlobalMap(mapSourceId, map);
                    }
                }
            }

            if (MapInstance.enEnterMapResult.Success != map.PlayerEnterMap(player, pos, true))
            {
            }
        }