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); }
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); }
public void RemovePlayerInstance(PlayerInstance player) { lock (this) { mPlayers.Remove(player.Id); } }
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); }
public virtual bool OnKilled(PlayerInstance player) { player.ChangeState(ePlayerState.Dead); player.mAttackTarget = null; return(true); }
public void AddPlayerInstance(PlayerInstance player) { lock (this) { mPlayers[player.Id] = player; } }
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); }
//玩家移动时,是否将移动信息记录到数据库 public virtual bool IsSavePos(PlayerInstance role) { if (MapInfo.IsInstance) { return(false); } return(true); }
public override bool IsSavePos(PlayerInstance role) { if (role.PlayerData.RoleDetail.Camp == (byte)CSCommon.eCamp.None) { return(true); } return(false); }
// 将格子中的信息同步给某个玩家,返回值是实际同步的玩家数量 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); }
public override bool OnKilled(PlayerInstance player) { if (!base.OnKilled(player)) { return(false); } return(true); }
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); }
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); }
public PlayerInstance FindPlayer(ulong id) { PlayerInstance retPlayer = null; if (mPlayerDictionary.TryGetValue(id, out retPlayer)) { return(retPlayer); } return(null); }
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); }
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(); }
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; }
public virtual bool FollowTarget(PlayerInstance player, RoleActor target) { if (null == player) { return(false); } if (null == target || target.IsDie) { return(false); } return(true); }
/// <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); }
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); }
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); }
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); }
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); }
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); }
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); }
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; }
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)); }
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); }
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); }; } }
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)) { } }