Exemplo n.º 1
0
    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();
    }
Exemplo n.º 2
0
    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
    }
Exemplo n.º 3
0
    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();
    }
Exemplo n.º 4
0
    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);
            }
        }
    }
Exemplo n.º 5
0
    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()
        }
    }
Exemplo n.º 6
0
    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);
        }
    }
Exemplo n.º 7
0
    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;
        });
    }
Exemplo n.º 8
0
    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;
    }
Exemplo n.º 9
0
    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");
            }
        }
    }
Exemplo n.º 10
0
    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);
    }
Exemplo n.º 11
0
    public override void StartRecover()
    {
        base.StartRecover();

        FightRecordManager.InstanceHandle <GameRecordDataTeam>();

        Module_Team.instance.HandlePacket(Get <ScTeamStartLoading>());
    }
Exemplo n.º 12
0
 protected override void RecordLog()
 {
     FightRecordManager.RecordLog <LogEffectDestory>(log =>
     {
         log.tag         = (byte)TagType.LogEffectDestory;
         log.currentLife = m_time;
         log.life        = lifeTime;
     });
 }
Exemplo n.º 13
0
    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;
    }
Exemplo n.º 14
0
    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;
        }
    }
Exemplo n.º 15
0
 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;
     });
 }
Exemplo n.º 16
0
    protected override void OnDestroy()
    {
        FightRecordManager.RecordLog <LogUlong>(p =>
        {
            p.tag   = (byte)TagType.MonsterDie;
            p.value = Identify;
        });

        base.OnDestroy();
    }
Exemplo n.º 17
0
    public static int GetMonsterRoomIndex()
    {
        FightRecordManager.RecordLog <LogInt>(log =>
        {
            log.tag   = (byte)TagType.GetMonsterRoomIndex;
            log.value = m_originalRoomIndex;
        });

        return(m_originalRoomIndex++);
    }
Exemplo n.º 18
0
    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;
        }
    }
Exemplo n.º 19
0
    public override void StartRecover()
    {
        base.StartRecover();

        FightRecordManager.InstanceHandle <GameRecordDataPvp>();

        Game.LoadLevel(LevelId);

        Module_PVP.instance.HandlePacket(Get <ScRoomEnter>());
        Module_PVP.instance.HandlePacket(Get <ScRoomStartLoading>());
    }
Exemplo n.º 20
0
    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;
        }
    }
Exemplo n.º 21
0
 void _Packet(ScRoomReward p)
 {
     if (p.reward == null)
     {
         m_reward = PacketObject.Create <PReward>();
     }
     else
     {
         p.reward.CopyTo(ref m_reward);
     }
     FightRecordManager.Set(p);
 }
Exemplo n.º 22
0
    private void ShowRecord()
    {
        EditorGUILayout.BeginVertical(GUI.skin.box);
        FightRecordManager.bAutoSaveRecord = EditorGUILayout.Toggle("是否自动保存游戏录像", FightRecordManager.bAutoSaveRecord);

        if (GUILayout.Button("结束录制"))
        {
            FightRecordManager.EndRecord(true, false);
        }

        EditorGUILayout.EndVertical();
    }
Exemplo n.º 23
0
    void _Packet(ScRoomStartLoading p)
    {
        FightRecordManager.Set(p);

        loading = true;

        m_progress     = 0;
        m_lastProgress = 0;

        Logger.LogInfo("Room start loading!");

        DispatchModuleEvent(EventLoadingStart);
    }
Exemplo n.º 24
0
    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;
        }
    }
Exemplo n.º 25
0
    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
    }
Exemplo n.º 26
0
    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);
    }
Exemplo n.º 27
0
    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();
        }
    }
Exemplo n.º 28
0
 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());
     }
 }
Exemplo n.º 29
0
    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
    }
Exemplo n.º 30
0
    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));
        }
    }