public void _SaveToFile(string rFileName) { if (null == GameRecordDataHandle) { return; } var dirPath = Util.GetDataPath() + Path; if (Directory.Exists(dirPath)) { //日志过多。删除 DirectoryInfo dInfo = new DirectoryInfo(dirPath); var files = dInfo.GetFiles(); if (files.Length > MAX_FILES) { Directory.Delete(dirPath, true); } } var path = GetFullPath(rFileName); var stream = new MemoryStream(); stream.Write(FightRecordManager.NowTimeToFileName()); //记录关卡ID stream.Write(GameRecordDataHandle.DataType.ToString()); GameRecordDataHandle.Save(stream); stream.Seek(0, SeekOrigin.Begin); var bytes = new byte[stream.Length]; stream.Read(bytes, 0, (int)stream.Length); Logger.LogInfo($" save file : {path}"); Util.SaveFile(path, bytes); stream?.Close(); }
void _Packet(ScTeamStart p) { Logger.LogInfo("Team loading completed!"); FightRecordManager.Set(p); FightRecordManager.StartRecord(); loading = false; m_loadingType = EnumPVELoadingType.None; Level.levelTime = 0; ObjectManager.enableUpdate = false; DispatchModuleEvent(EventStart); #region NetStat statistic #if NETSTAT var r = m_useGameSession ? session.receiver : receiver; if (r != null) { r.ClearStat(); r.pauseNetStatistic = false; } #endif #endregion }
private void ShowRecover() { EditorGUILayout.BeginVertical(GUI.skin.box); EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField("RecoverDataPath", recoverPath, GUI.skin.label); if (GUILayout.Button("...", miniButton)) { recoverPath = EditorUtility.OpenFilePanel("请选择录像数据路径", recoverPath, "*.*"); } EditorGUILayout.EndHorizontal(); EditorGUILayout.IntField("当前帧", FightRecordManager.Frame); FightRecordManager.DebugFrame = EditorGUILayout.IntField("DebugFrame", FightRecordManager.DebugFrame); EditorGUILayout.BeginVertical(GUI.skin.box); EditorGUILayout.SelectableLabel("播放速度"); FightRecordManager.PlaySpeed = EditorGUILayout.Slider(FightRecordManager.PlaySpeed, 0.01f, 5); EditorGUILayout.EndVertical(); if (GUILayout.Button("开始播放录像")) { var error = FightRecordManager.StartRecover(recoverPath); DisplayError(error); } EditorGUILayout.EndVertical(); }
protected override void OnCreatureDead(Event_ e) { FightRecordManager.RecordLog <LogOnCreatureDied>(log => { log.tag = (byte)TagType.OnCreatureDied; log.isTeamMode = modulePVE.isTeamMode; log.onlineCount = moduleTeam.onlineMembers?.Count ?? 0; }); if (!modulePVE.isTeamMode) { base.OnCreatureDead(e); } var c = e.sender as Creature; if (c.creatureCamp == CreatureCamp.PlayerCamp) { bool allDead = m_teamMembers.Count > 0; foreach (var item in m_teamMembers) { if (item && !item.isDead) { allDead = false; } } //全部死亡之后,设置怪物为无敌状态 if (allDead) { SetAllMonsterInvincible(true); QuitState(BattleStates.Watch); } } }
private void IncreaseFrame(int count) { if (count < 1) { return; } for (var i = 0; i < count; ++i) { m_ended = ++m_currentFrame == frameCount; FightRecordManager.RecordLog <LogStateFrame>(l => { l.tag = (byte)TagType.StateFrame; l.frame = (ushort)m_currentFrame; }); stateMachine.SetParam(StateMachineParam.frame, m_currentFrame); stateMachine.SetParam(StateMachineParam.totalFrame, m_totalFrame++); if (ended) { if (!isLaydown && passive && !loop && info.layDownTime > 0) { m_waitToLayDown = true; stateMachine.SetParam(StateMachineParam.nextLayDownTime, info.layDownTime); } stateMachine.onStateEnded?.Invoke(this); break; } HandleFrameEvent(); // m_currentFrame starts with 1, Frame 0 already handled in Enter() } }
void _Packet(ScMatchInfo p) { Logger.LogInfo("Match info: isRobot: {5}, timeLimit: {4}, players: {0}, room: [{1}:{2}, {3}]", p.infoList.Length, p.room.host, p.room.port, p.room.room_key, p.timeLimit, p.isRobot); isMatchRobot = p.isRobot; timeLimit = p.timeLimit; p.infoList.CopyTo(ref m_players); m_playerIndex = m_players.FindIndex(pi => pi.roleId == modulePlayer.id_); Logger.LogDetail("Player roomIndex: {0}", m_playerIndex); modulePVP.Connect(p.room); ScMatchInfo matchInfo = null; p.CopyTo(ref matchInfo); DispatchModuleEvent(EventMatchInfo, matchInfo); if (!isMatchRobot) { FightRecordManager.InstanceHandle <GameRecordDataPvp>(); FightRecordManager.Set(p); } }
private void OnMemberReborn(PTeamMemberInfo memberData) { if (memberData == null) { return; } foreach (var item in m_teamMembers) { if (item.roleId == memberData.roleId && item.health == 0) { item.Revive(); if (item == player) { QuitState(BattleStates.Watch); } break; } } SetAllMonsterInvincible(false); FightRecordManager.RecordLog <LogUlong>(l => { l.tag = (byte)TagType.Reborn; l.value = memberData.roleId; }); }
void _Packet(ScMatchInviteSuccess p) { //邀请成功 p.CopyTo(ref Info_sss); modulePlayer.roleInfo.friendPvpTimes++;//好友pvpc次数加一 Logger.LogInfo("Match info: players: {0}, room: [{1}:{2}, {3}]", p.infoList.Length, p.room.host, p.room.port, p.room.room_key); p.infoList.CopyTo(ref m_players); for (var i = 0; i < m_players.Length; ++i) { Logger.LogInfo("index: {2}, role: {1}[{0}],weapon: {3} gun: {4}", m_players[i].roleId, m_players[i].roleName, i, m_players[i].fashion.weapon, m_players[i].fashion.gun); } m_playerIndex = m_players.FindIndex(pi => pi.roleId == modulePlayer.id_); Logger.LogDetail("Player roomIndex: {0}", m_playerIndex); FightRecordManager.InstanceHandle <GameRecordDataPvp>(); FightRecordManager.SetMatchInfo(p.infoList); ScMatchInviteSuccess info = null; p.CopyTo(ref info); DispatchModuleEvent(EventInvationsucced, info); isbaning = false; isMatchRobot = false; }
private void OnMemberQuitEarlySettlement(FrameData d) { if (moduleTeam.members == null) { return; } var reason = (EnumTeamQuitState)d.parameters.GetValue <int>(0); if (reason != EnumTeamQuitState.EarlySettlement) { return; } var member = moduleTeam.members.GetValue <PTeamMemberInfo>(d.parameters.GetValue <int>(1)); if (member == null) { return; } FightRecordManager.RecordLog <LogTeamQuit>(log => { log.tag = (byte)TagType.TeamQuit; log.roleId = member.roleId; log.reason = (sbyte)reason; }); var c = m_teamMembers.Find(o => o.roleId == member.roleId); if (!c) { return; } //掉线,角色直接死亡 bool alive = c && c.health > 0; if (reason == EnumTeamQuitState.EarlySettlement && !isEndingState && !m_isPVEFinish && !m_recvOverMsg && alive) { c?.Kill(); } //切换队长 if (member.teamLeader > 0) { foreach (var item in moduleTeam.members) { item.teamLeader = (byte)(item.roleId == member.roleId ? 0 : 1); } if (c) { var temp = m_normalMember; m_normalMember = c; m_teamLeader = temp; Logger.LogInfo("OnMemberQuit... team leader change to {0}", m_teamLeader ? m_teamLeader.uiName : "null"); } } }
void _Packet_999(ScRoomStart p) { FightRecordManager.Set(p); FightRecordManager.StartRecord(); m_random.seed = p.seed; Logger.LogDetail("Module_Battle::ScRoomStart: Set random seed to <color=#00FF00FF><b>{0}</b></color> from <color=#00FF00FF><b>PVP</b></color>", m_random.seed); }
public override void StartRecover() { base.StartRecover(); FightRecordManager.InstanceHandle <GameRecordDataTeam>(); Module_Team.instance.HandlePacket(Get <ScTeamStartLoading>()); }
protected override void RecordLog() { FightRecordManager.RecordLog <LogEffectDestory>(log => { log.tag = (byte)TagType.LogEffectDestory; log.currentLife = m_time; log.life = lifeTime; }); }
private void _SaveToFile(object obj) { Logger.LogWarning($"开始文件保存线程:{m_saveThread.GetHashCode()}"); while (m_logThread != null && m_logThread.IsAlive) { Thread.Sleep(100); } while (m_packetThread != null && m_packetThread.IsAlive) { Thread.Sleep(100); } try { var fileName = (string)obj; if (string.IsNullOrWhiteSpace(fileName)) { fileName = FightRecordManager.NowTimeToFileName(); } try { if (m_packetThread != null) { gameRecorder._SaveToFile(fileName); SetSaveState(fileName + ".gr", SaveState.Complete); } } catch (Exception e) { Logger.LogError(e.ToString()); } try { if (m_logThread != null) { gameLogger.SaveToFile(fileName); SetSaveState(fileName + ".log", SaveState.Complete); } } catch (Exception e) { Logger.LogError(e.ToString()); } m_saveThread.Interrupt(); } catch (Exception e) { Logger.LogError(e.ToString()); } Logger.LogWarning($"结束文件保存线程:{m_saveThread.GetHashCode()}"); m_saveThread = null; }
public override void OnRootUpdate(float diff) { if (m_delayCall != null) { var dc = m_delayCall; m_delayCall = null; dc.Invoke(this); } if (FightRecordManager.IsRecovering) { var ps = FightRecordManager.SimulateUpdate(diff); if (ps != null && ps.Count > 0) { foreach (var p in ps) { HandlePacket(p); } ps.Clear(); } } else if (m_receiver != null) { var ps = m_receiver.ReceivedPackets(); foreach (var p in ps) { FightRecordManager.Record(p); HandlePacket(p); } ps.Clear(); } if (m_lastState == SessionState.CONNECTED && (m_socket == null || !m_socket.Connected)) // we lost connection! { Disconnect(); OnLostConnection(); DispatchEvent(Events.SESSION_LOST_CONNECTION); DispatchModuleEvent(EventLostConnection); } m_lastState = state; if (m_lastState == SessionState.CONNECTED && m_waitPing > 0 && (m_waitPing -= diff) <= 0) { SendPing(); } localTimeOffset += diff; if (localTimeOffset >= 1) { localTimeOffset -= 1; serverLocalTimeStamp += 1; serverTimeStamp += 1; } }
protected override void RecordLog2() { FightRecordManager.RecordLog <LogEffectDestory2>(log => { log.tag = (byte)TagType.LogEffectDestory; log.buffCheck = m_buffCheck; log.version = sourceBuff.version; log.isDestroyed = sourceBuff.destroyed; }); }
protected override void OnDestroy() { FightRecordManager.RecordLog <LogUlong>(p => { p.tag = (byte)TagType.MonsterDie; p.value = Identify; }); base.OnDestroy(); }
public static int GetMonsterRoomIndex() { FightRecordManager.RecordLog <LogInt>(log => { log.tag = (byte)TagType.GetMonsterRoomIndex; log.value = m_originalRoomIndex; }); return(m_originalRoomIndex++); }
protected virtual void OnEnterState(int oldMask, BattleStates state) { if (state != BattleStates.Watch) { FightRecordManager.RecordLog <LogInt>(log => { log.tag = (byte)TagType.EnterState; log.value = (int)state; }); } moduleBattle.parseInput = m_stateMask.BitMask(Fighting); switch (state) { case BattleStates.Ended: { if (modulePlayer.isLevelUp) { Window.SetWindowParam <Window_Settlement>(oldLv, oldPoint, oldFatigue, oldMaxFatigue); } Window.ShowAsync(endWindow, w => { if (w) { w.animationSpeed = CombatConfig.sendWindowFadeInSpeed; } }); break; } case BattleStates.Winning: case BattleStates.Losing: { ObjectManager.Foreach <Creature>(c => { c.ClearBuffs(); c.moveState = 0; return(true); }); // Clear all buffs, reset movement state Window.Hide(combatWindow, true); Window.Hide(ultimateMaskWindow, true); AudioManager.PauseAll(AudioTypes.Music); m_victoryTime = (int)((CombatConfig.screenFadeInDuration + CombatConfig.screenFadeOutDuration) * 1000) - 500; if (state == BattleStates.Winning) { moduleGlobal.FadeIn(CombatConfig.screenFadeInAlpha, CombatConfig.screenFadeInDuration, false, YouAreLuckyBaby); AudioManager.PlayMusicMix(heavenMusic); } else { Camera_Combat.enableShotSystem = false; AudioManager.PlayMusicMix(hellMusic); } break; } default: break; } }
public override void StartRecover() { base.StartRecover(); FightRecordManager.InstanceHandle <GameRecordDataPvp>(); Game.LoadLevel(LevelId); Module_PVP.instance.HandlePacket(Get <ScRoomEnter>()); Module_PVP.instance.HandlePacket(Get <ScRoomStartLoading>()); }
private void UpdateAnimMotion() { var idx = (int)m_motionFrame.x + m_currentFrame; var max = (int)m_motionFrame.y; if (!m_motion || m_falling || idx < 1 || idx > max && m_motionIndex >= max) { m_inMotion = false; return; } m_inMotion = true; if (idx > max) { idx = max; } m_motionIndex = idx; var next = m_motion.points[m_motionIndex]; var prev = m_motion.points[m_motionIndex - 1]; var prog = idx == max ? 1.0 : (m_time % 33) / 33.0; var tar = (Vector3_.Lerp(prev, next, prog) - m_motion.points[0]) * 0.01; var c = stateMachine.creature; currentMotionPos = new Vector3_(!c.isForward ? -tar.z : tar.z, tar.y, -tar.x) + c.motionOrigin; if (currentMotionPos.y < 0) { FightRecordManager.RecordLog <LogVector3>(l => { l.tag = (byte)TagType.motionOrigin; l.pos = new double[] { tar.x, tar.y, tar.z }; }); FightRecordManager.RecordLog <LogVector3>(l => { l.tag = (byte)TagType.motionOrigin; l.pos = new double[] { c.motionOrigin.x, c.motionOrigin.y, c.motionOrigin.z }; }); FightRecordManager.RecordLog <LogVector3>(l => { l.tag = (byte)TagType.currentMotionPos; l.pos = new double[3]; l.pos[0] = currentMotionPos.x; l.pos[1] = currentMotionPos.y; l.pos[2] = currentMotionPos.z; }); currentMotionPos.y = 0; } }
void _Packet(ScRoomReward p) { if (p.reward == null) { m_reward = PacketObject.Create <PReward>(); } else { p.reward.CopyTo(ref m_reward); } FightRecordManager.Set(p); }
private void ShowRecord() { EditorGUILayout.BeginVertical(GUI.skin.box); FightRecordManager.bAutoSaveRecord = EditorGUILayout.Toggle("是否自动保存游戏录像", FightRecordManager.bAutoSaveRecord); if (GUILayout.Button("结束录制")) { FightRecordManager.EndRecord(true, false); } EditorGUILayout.EndVertical(); }
void _Packet(ScRoomStartLoading p) { FightRecordManager.Set(p); loading = true; m_progress = 0; m_lastProgress = 0; Logger.LogInfo("Room start loading!"); DispatchModuleEvent(EventLoadingStart); }
protected override void OnDestroy() { base.OnDestroy(); m_player = null; FightRecordManager.EndRecord(false, false); for (var i = 0; i < m_stateHandlers.Length; ++i) { m_stateHandlers[i] = null; } }
protected override void OnDestroy() { base.OnDestroy(); DispatchEvent(FOLLOW_EFFECT_DESTORY, Event_.Pop(conditionValue)); FightRecordManager.RecordLog <LogEmpty>(log => { log.tag = (byte)TagType.FollowEffectDestory; }); #if AI_LOG Module_AI.LogBattleMsg(source, "FollowTargetEffect[logId: {0}] destoryed with pos {0}", logId, position_); #endif }
void _Packet(ScRoomEnter p) { EventManager.AddEventListener(Events.SCENE_LOAD_PROGRESS, OnLoadingProgress); FightRecordManager.Set(p); entered = p.result == 0; loading = false; ended = false; m_reward = null; m_settlementData = null; DispatchModuleEvent(EventEnterMatchRoom); }
public override void OnUpdate(int diff) { if (!enableUpdate) { return; } base.OnUpdate(diff); if (firstStep) { var direction = randomPosition - position_; direction.Normalize(); var p = position_ + direction * (velocity + acceleration * m_time * 0.001) * diff * 0.001; if (p.y < 0) { p.y = 0; } position = position_ = p;; if (Vector3_.Distance(position_, randomPosition) < 0.2 || Vector3_.Dot(startPos - randomPosition, position_ - randomPosition) <= 0) { enableUpdate = false; firstStep = false; } return; } var targetPos = (Vector3_)target.LogicPosition + offset; position = position_ = motion.Evaluate(diff * 0.001); var d = Vector3_.Distance(position_, targetPos); var a = Vector3_.Dot(startPos - targetPos, position_ - targetPos); FightRecordManager.RecordLog <LogEffectPos>(log => { log.tag = (byte)TagType.EffectPos; log.pos = new double[3]; log.pos[0] = position_.x; log.pos[1] = position_.y; log.pos[2] = position_.z; log.distance = d; log.angle = a; }); if (d < 0.2 || a <= 0) { Destroy(); } }
private void _Packet(ScSyncResult msg) { if (msg.result == 1) { if (Level.current.isPvP) { FightStatistic.AddPvpAsyncFightTimes(); } else if (Level.current.isPvE) { FightStatistic.AddPveAsyncFightTimes(); } FightRecordManager.EndRecord(true, true, msg.roomId.ToString()); } }
private void FrameUpdate(FrameData p) { FightRecordManager.FrameUpdate(); m_inputStates = p.inputStates; if (p.action != FrameAction.None) { frameActionData = p; } ObjectManager.LogicUpdate(p.diff); #if AI_LOG Module_AI.LogBattleMsg(null, "FrameUpdate diff is {0},create resource is {1}", p.diff, p.createTip); #endif }
private void TransformToJson() { EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField("RecoverDataPath", recoverPath, GUI.skin.label); if (GUILayout.Button("...", miniButton)) { recoverPath = EditorUtility.OpenFilePanel("请选择录像数据路径", recoverPath, "gr"); } EditorGUILayout.EndHorizontal(); if (GUILayout.Button("开始转换")) { DisplayError(FightRecordManager.TransformToJson(recoverPath)); } }