Example #1
0
        public void TryCreatePlayer(UInt16 lnk, ulong accountId, string planeName, string plyName, Byte pro, Byte sex, Iocp.NetConnection connect, RPC.RPCForwardInfo fwd)
        {
            //planesName = ServerFrame.DB.DBConnect.SqlSafeString(planesName);
            plyName = ServerFrame.DB.DBConnect.SqlSafeString(plyName);
            ulong         roleId         = ServerFrame.Util.GenerateObjID(ServerFrame.GameObjectType.Player);
            AsyncExecuter exe            = AsyncExecuteThreadManager.Instance.AsyncExe(false);
            UInt16        returnSerialId = fwd.ReturnSerialId;

            exe.Exec = delegate()
            {
                RPC.PackageWriter        retPkg = new RPC.PackageWriter();
                CSCommon.Data.PlayerData result = mPlayerManager.TryCreatePlayer(Thread.PlayerEnterThread.Instance.DBConnect, mPlanesMgr, accountId, roleId, planeName, plyName, pro, sex);

                //告诉GateServer,创建是否成功
                if (result != null)
                {
                    retPkg.Write((sbyte)1);
                    retPkg.Write(result.RoleDetail);
                    retPkg.DoReturnCommand2(connect, returnSerialId);
                }
                else
                {
                    retPkg.Write((sbyte)-1);
                    retPkg.DoReturnCommand2(connect, returnSerialId);
                }
            };
            //这里要放到一个专门的队列创建
            Thread.PlayerEnterThread.Instance.PushRoleCreator(exe);
        }
Example #2
0
 public void EnterMap(RPC.PackageWriter pkg, CSCommon.Data.PlayerData pd, CSCommon.Data.PlanesData planesData, System.UInt16 mapSourceId, System.UInt64 instanceId, SlimDX.Vector3 pos, System.UInt16 cltHandle)
 {
     pkg.Write(pd);
     pkg.Write(planesData);
     pkg.Write(mapSourceId);
     pkg.Write(instanceId);
     pkg.Write(pos);
     pkg.Write(cltHandle);
     pkg.SetMethod(11);
 }
Example #3
0
        //根据玩家和模板地图获得副本Id
        public ulong GetInstanceMapId(CSCommon.Data.PlayerData pd, ushort mapSourceId)
        {
            if (false == IsInstanceMap(mapSourceId))
            {
                return(0);
            }

            var mapInit = Planes.MapInstanceManager.GetMapInitBySourceId(mapSourceId);

            if (mapInit == null)
            {
                return(0);
            }

            return(ServerFrame.Util.GenerateObjID(ServerFrame.GameObjectType.Map));
        }
Example #4
0
 public void OtherPlane_EnterMap(RPC.PackageWriter pkg, System.UInt64 planesSeverId, System.UInt16 cltHandle, CSCommon.Data.PlayerData pd, CSCommon.Data.PlanesData planesData, System.UInt16 mapSourceId, System.UInt64 mapInstanceId, SlimDX.Vector3 pos)
 {
     pkg.Write(planesSeverId);
     pkg.Write(cltHandle);
     pkg.Write(pd);
     pkg.Write(planesData);
     pkg.Write(mapSourceId);
     pkg.Write(mapInstanceId);
     pkg.Write(pos);
     pkg.SetMethod(7);
 }
Example #5
0
 public void SaveRole(RPC.PackageWriter pkg, System.UInt64 roleId, CSCommon.Data.PlayerData pd)
 {
     pkg.Write(roleId);
     pkg.Write(pd);
     pkg.SetMethod(6);
 }
Example #6
0
 public void LogoutRole(RPC.PackageWriter pkg, System.UInt64 accountId, CSCommon.Data.PlayerData pd)
 {
     pkg.Write(accountId);
     pkg.Write(pd);
     pkg.SetMethod(5);
 }
Example #7
0
        public void EnterMap(CSCommon.Data.PlayerData pd, CSCommon.Data.PlanesData planesData, ushort mapSourceId, ulong instanceId, SlimDX.Vector3 pos, UInt16 cltHandle, Iocp.NetConnection connect, RPC.RPCForwardInfo fwd)
        {
//             var map = Planes.PlanesManager.Instance.GetGlobalMap(planesData, pd.RoleDetail.MapSourceId);
//             if (map == null)
//                 return;

            Planes.PlayerInstance player = Planes.PlanesServerDataManager.Instance.FindPlayerInstance(pd.RoleDetail.RoleId);
            if (player != null)
            {                                                                                                  //玩家就在这个服务器
                Planes.MapInstanceManager.Instance.PlayerLeaveMap(player, false);                              //离开地图
                player.PlanesInstance.LeavePlanes(player.Id);                                                  //离开位面
                var planes = Planes.MapInstanceManager.Instance.PlanesManager.GetPlanesInstance(planesData);
                planes.EnterPlanes(player);                                                                    //进位面

                Planes.MapInstanceManager.Instance.PlayerEnterMap(player, mapSourceId, instanceId, pos, true); //进地图
            }
            else
            {
                #region CreatePlayerInstance
                try
                {
                    player = Planes.PlayerInstance.CreatePlayerInstance(pd, connect as Iocp.TcpConnect, cltHandle);
                    if (player == null)//创建角色
                    {
                        RPC.PackageWriter pkg = new RPC.PackageWriter();
                        H_RPCRoot.smInstance.HGet_GateServer(pkg).DisconnectPlayer(pkg, pd.RoleDetail.AccountId, (sbyte)eServerType.Planes);
                        pkg.DoCommand(connect, RPC.CommandTargetType.DefaultType);

                        RPC.PackageWriter retPkg = new RPC.PackageWriter();
                        retPkg.Write((sbyte)eRet_GotoMap.CreatePlayerFailed);
                        retPkg.DoReturnCommand2(connect, fwd.ReturnSerialId);

                        Log.Log.Server.Print("DataServer1 force disconnect player!");
                        Log.Log.Server.Print(new System.Diagnostics.StackTrace(0, true).ToString());
                        return;
                    }
                }
                catch (System.Exception ex)
                {
                    Log.Log.Server.Print(ex.ToString());
                    Log.Log.Server.Print(ex.StackTrace.ToString());
                    RPC.PackageWriter pkg = new RPC.PackageWriter();
                    H_RPCRoot.smInstance.HGet_GateServer(pkg).DisconnectPlayer(pkg, pd.RoleDetail.AccountId, (sbyte)eServerType.Planes);
                    pkg.DoCommand(connect, RPC.CommandTargetType.DefaultType);
                    RPC.PackageWriter retPkg = new RPC.PackageWriter();
                    retPkg.Write((sbyte)eRet_GotoMap.CreatePlayerFailed);
                    retPkg.DoReturnCommand2(connect, fwd.ReturnSerialId);

                    Log.Log.Server.Print("PlanesServer2 force disconnect player!");
                    Log.Log.Server.Print(new System.Diagnostics.StackTrace(0, true).ToString());
                    return;
                }
                #endregion
                Planes.PlanesServerDataManager.Instance.AddPlayerInstance(player);                             //进服务器
                var planes = Planes.MapInstanceManager.Instance.PlanesManager.GetPlanesInstance(planesData);
                planes.EnterPlanes(player);                                                                    //进位面

                Planes.MapInstanceManager.Instance.PlayerEnterMap(player, mapSourceId, instanceId, pos, true); //进地图

                var overPkg = new RPC.PackageWriter();
                Wuxia.H_RpcRoot.smInstance.RPC_OnJumpMapOver(overPkg, (int)mapSourceId, pos.X, pos.Z);
                overPkg.DoCommandPlanes2Client(player.Planes2GateConnect, player.ClientLinkId);
            }

            {
                RPC.PackageWriter retPkg = new RPC.PackageWriter();
                retPkg.Write((sbyte)eRet_GotoMap.EnterMap);
                retPkg.Write(pd.RoleDetail.LocationX);
                retPkg.Write(pd.RoleDetail.LocationY);
                retPkg.Write(pd.RoleDetail.LocationZ);
                //retPkg.Write(player.Id);
                retPkg.Write(player.PlayerData.RoleDetail.RoleHp);
                retPkg.Write(player.PlayerData.RoleDetail.RoleMaxHp);
                retPkg.Write(player.PlayerData.RoleDetail.RoleSpeed);
                retPkg.Write(player.IndexInMap);
                retPkg.Write(player.HostMap.IndexInServer);
                retPkg.DoReturnCommand2(connect, fwd.ReturnSerialId);
            }

            return;
        }