public ErrorCode OnGc2BsRequestFrameActions(NetSessionBase session, Google.Protobuf.IMessage message) { BSUser user = BS.instance.userMgr.GetUser(session.id); if (user != null) { Protos.GC2BS_RequestFrameActions request = (Protos.GC2BS_RequestFrameActions)message; Protos.BS2GC_RequestFrameActionsRet ret = ProtoCreator.R_GC2BS_RequestFrameActions(request.Opts.Pid); BS.instance.battleMgr.HandleRequestFrameActions(user.battle, request.From, request.To, ret); BS.instance.netSessionMgr.Send(user.gcSID, ret); } return(ErrorCode.Success); }
/// <summary> /// 获取指定范围内的帧行为集合 /// </summary> /// <param name="from">开始帧数(包括该帧)</param> /// <param name="to">结束帧数, -1表示最新帧数</param> /// <param name="ret">需要填充的消息</param> internal void FillHistoryToMessage(int from, int to, Protos.BS2GC_RequestFrameActionsRet ret) { from = from < 0 ? 0 : from; to = to < 0 ? this._battle.frame : (to > this._battle.frame ? this._battle.frame : to); int fromIndex = from / this._battle.keyframeStep; int toIndex = to / this._battle.keyframeStep; IList <int> keys = this._histroy.Keys; IList <Google.Protobuf.ByteString> values = this._histroy.Values; for (int i = fromIndex; i <= toIndex; i++) { ret.Frames.Add(keys[i]); ret.Actions.Add(values[i]); } }
/// <summary> /// 处理玩家请求帧行为的历史数据 /// </summary> /// <param name="from">起始帧</param> /// <param name="to">结束帧</param> /// <param name="ret">需要填充的消息</param> internal void HandleRequestFrameActions(int from, int to, Protos.BS2GC_RequestFrameActionsRet ret) => this._frameActionMgr.FillHistoryToMessage(from, to, ret);
/// <summary> /// 处理玩家请求帧行为的历史数据 /// </summary> /// <param name="battle">战场</param> /// <param name="from">起始帧</param> /// <param name="to">结束帧</param> /// <param name="ret">需要填充的消息</param> internal void HandleRequestFrameActions(Battle battle, int from, int to, Protos.BS2GC_RequestFrameActionsRet ret) => battle.HandleRequestFrameActions(@from, to, ret);