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); }
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); }
//根据玩家和模板地图获得副本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)); }
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); }
public void SaveRole(RPC.PackageWriter pkg, System.UInt64 roleId, CSCommon.Data.PlayerData pd) { pkg.Write(roleId); pkg.Write(pd); pkg.SetMethod(6); }
public void LogoutRole(RPC.PackageWriter pkg, System.UInt64 accountId, CSCommon.Data.PlayerData pd) { pkg.Write(accountId); pkg.Write(pd); pkg.SetMethod(5); }
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; }