少年修仙传客户端代码仓库
client_linchunjie
2018-08-27 d106f11e7f44c748f595da36e0cdfd54849649e6
Utility/RuntimeLogUtility.cs
@@ -1,289 +1,308 @@
using UnityEngine;
#if UNITY_EDITOR
using UnityEditor;
#endif
using System.Collections.Generic;
using System.Text;
public class RuntimeLogUtility : MonoBehaviour
{
    public static bool s_BattleLog = false;
    public static bool s_MoveLog = false;
    public static bool s_ForceOneEnemy = false;
    public static bool s_PerpetualAttack = true;
    public static bool s_UseKeyBoardCastSkill = false;
    public static bool s_LogMoveDistance = false;
    public static bool s_SkillEffectLog = false;
    public static bool s_forceAutoFight = false;
    public static string s_LogPath;
    static readonly Dictionary<uint, StringBuilder> s_LogDict = new Dictionary<uint, StringBuilder>();
    static readonly List<string> s_LogList = new List<string>();
    public static bool s_HurtValueLog = false;
    public static void ClearLogs()
    {
        s_LogDict.Clear();
        s_LogList.Clear();
    }
    public static void AddLog_Blue(string info, uint objId = 0)
    {
        string _content;
        if (s_BattleLog)
        {
            _content = string.Format("<color=blue>{0}</color>", info);
            string _strTime = System.DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff");
            Debug.Log(string.Format("[{0}] {1}", _strTime, _content));
        }
        _content = string.Format("<font size=\"2\" color=\"blue\">{0}</font>", info);
        AddLog(_content, objId);
    }
    public static void AddLog_Green(string info, uint objId = 0)
    {
        string _content;
        if (s_BattleLog)
        {
            _content = string.Format("<color=green>{0}</color>", info);
            string _strTime = System.DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff");
            Debug.Log(string.Format("[{0}] {1}", _strTime, _content));
        }
        _content = string.Format("<font size=\"2\" color=\"green\">{0}</font>", info);
        AddLog(_content, objId);
    }
    public static void AddLog_Red(string info, uint objId = 0)
    {
        string _content;
        if (s_BattleLog)
        {
            _content = string.Format("<color=red>{0}</color>", info);
            string _strTime = System.DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff");
            Debug.Log(string.Format("[{0}] {1}", _strTime, _content));
        }
        _content = string.Format("<font size=\"2\" color=\"red\">{0}</font>", info);
        AddLog(_content, objId);
    }
    public static void AddLog_Black(string info, uint objId = 0)
    {
        if (s_BattleLog)
        {
            string _strTime = System.DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff");
            Debug.Log(string.Format("[{0}] {1}", _strTime, info));
        }
        string _content = string.Format("<font size=\"2\" color=\"black\">{0}</font>", info);
        AddLog(_content, objId);
    }
    public static void AddLog(string info, uint objId = 0)
    {
        string _strTime = System.DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff");
        string _content = string.Format("[{0}] {1}<br />", _strTime, info);
        s_LogList.Add(_content);
        if (objId == 0)
        {
            foreach (var _objId in s_LogDict.Keys)
            {
                s_LogDict[_objId].Append(_content);
            }
        }
        else
        {
            if (s_LogDict.ContainsKey(objId) == false)
            {
                s_LogDict.Add(objId, new StringBuilder());
            }
            s_LogDict[objId].Append(_content);
        }
        //if (s_LogList.Count >= 10000)
        //{
        //    SaveNpcLog();
        //}
    }
    public static void SaveNpcLog()
    {
        s_LogPath = Application.dataPath.Substring(0, 3) + "unit3D_Logs/";
        if (System.IO.Directory.Exists(s_LogPath) == false)
        {
            System.IO.Directory.CreateDirectory(s_LogPath);
        }
        string _strTime = System.DateTime.Now.ToString("yyyy-MM-dd-HH-mm-ss-fff");
        string _path = string.Empty;
        foreach (var _objId in s_LogDict.Keys)
        {
            _path = s_LogPath + _objId;
            if (System.IO.Directory.Exists(_path) == false)
            {
                System.IO.Directory.CreateDirectory(_path);
            }
            _path = string.Format(s_LogPath + "{0}/{1}.html", _objId, _strTime);
            using (System.IO.StreamWriter _writer = new System.IO.StreamWriter(_path))
            {
                _writer.Write(s_LogDict[_objId].ToString());
            }
        }
        s_LogDict.Clear();
        _path = string.Format(s_LogPath + "Log_{0}.html", _strTime);
        StringBuilder _stringBuilder = new StringBuilder();
        for (int i = 0; i < s_LogList.Count; ++i)
        {
            _stringBuilder.Append(s_LogList[i]);
        }
        using (System.IO.StreamWriter _writer = new System.IO.StreamWriter(_path))
        {
            _writer.Write(_stringBuilder.ToString());
        }
        s_LogList.Clear();
    }
}
#if UNITY_EDITOR
[CustomEditor(typeof(RuntimeLogUtility))]
public class RuntimeLogUtilityEditor : Editor
{
    private Vector3 _navChkPos;
    private int _npcID;
    public override void OnInspectorGUI()
    {
        GUILayout.Space(5);
        EditorGUILayout.LabelField("Log存储路径", RuntimeLogUtility.s_LogPath);
        if (GUILayout.Button("保存Log"))
        {
            RuntimeLogUtility.SaveNpcLog();
        }
        if (GUILayout.Button("清空Log"))
        {
            RuntimeLogUtility.ClearLogs();
        }
        RuntimeLogUtility.s_BattleLog = EditorGUILayout.Toggle("战斗过程的Log输出", RuntimeLogUtility.s_BattleLog);
        RuntimeLogUtility.s_MoveLog = EditorGUILayout.Toggle("移动过程的Log输出", RuntimeLogUtility.s_MoveLog);
        RuntimeLogUtility.s_ForceOneEnemy = EditorGUILayout.Toggle("强制只攻击一个目标对象", RuntimeLogUtility.s_ForceOneEnemy);
        RuntimeLogUtility.s_PerpetualAttack = EditorGUILayout.Toggle("执行攻击至死逻辑", RuntimeLogUtility.s_PerpetualAttack);
        RuntimeLogUtility.s_UseKeyBoardCastSkill = EditorGUILayout.Toggle("使用键盘释放技能", RuntimeLogUtility.s_UseKeyBoardCastSkill);
        RuntimeLogUtility.s_forceAutoFight = EditorGUILayout.Toggle("是否强制开启AI", RuntimeLogUtility.s_forceAutoFight);
        RuntimeLogUtility.s_SkillEffectLog = EditorGUILayout.Toggle("技能效果log输出", RuntimeLogUtility.s_SkillEffectLog);
        RuntimeLogUtility.s_LogMoveDistance = EditorGUILayout.Toggle("位移距离Log输出", RuntimeLogUtility.s_LogMoveDistance);
        _navChkPos = EditorGUILayout.Vector3Field("检测点", _navChkPos);
        if (GUILayout.Button("检测"))
        {
            Vector3 _position = Vector3.zero;
            if (GActor.TryGetValidPos(_navChkPos, ref _position))
            {
                Debug.Log("正常点........");
            }
            else
            {
                Debug.Log("障碍点........");
            }
        }
        _npcID = EditorGUILayout.IntField("npcID", _npcID);
        if (GUILayout.Button("酷酷酷"))
        {
            GameNetSystem.Instance.Disconnect();
        }
        if (GUILayout.Button("直接重连"))
        {
            GameNetSystem.Instance.Reconnect();
        }
        if (GUILayout.Button("GC.Collect()"))
        {
            System.GC.Collect();
        }
        if (GUILayout.Button("Resources.UnloadUnusedAssets"))
        {
            Resources.UnloadUnusedAssets();
        }
        if (GUILayout.Button("上马/下马"))
        {
            if (PlayerDatas.Instance.hero != null)
            {
                DTC0428_tagPlayerRideHorse.Send_tagPlayerRideHorse(PlayerDatas.Instance.hero.MovingState != E_MovingState.Ride);
            }
        }
        if (GUILayout.Button("采集"))
        {
            GA_Hero _hero = PlayerDatas.Instance.hero;
            if (_hero != null)
            {
                if (_hero.IsCollecting())
                {
                    _hero.Idle();
                }
                else if (_hero.IsIdle())
                {
                    _hero.Collect();
                }
            }
        }
        GUILayout.Space(10);
        EditorGUILayout.LabelField("# 玩家当前信息 #");
        if (PlayerDatas.Instance.hero != null)
        {
            GA_Hero _hero = PlayerDatas.Instance.hero;
            if (_hero.SkillMgr.CurCastSkill != null)
            {
                int _curSkillID = _hero.SkillMgr.CurCastSkill.id;
                bool _isCompelete = _hero.SkillMgr.CurCastSkill.SkillCompelete;
                bool _isXuli = _hero.SkillMgr.CurCastSkill.SkillPreparing;
                string _content = string.Format("ID: {0}, 蓄力:{2}, 完成: {1}", _curSkillID, _isCompelete, _isXuli);
                EditorGUILayout.LabelField("技能信息", _content);
            }
            EditorGUILayout.TextField("队伍ID", _hero.ActorInfo.teamID.ToString());
            EditorGUILayout.TextField("是否处于地图切换", GA_Hero.s_MapSwitching.ToString());
            EditorGUILayout.TextField("当前身体状态", _hero.MovingState.ToString());
            EditorGUILayout.TextField("当前行为状态", _hero.State.ToString());
            EditorGUILayout.TextField("当前AI状态", _hero.aiHandler.currentType.ToString());
            EditorGUILayout.TextField("是否死亡", _hero.ActorInfo.serverDie.ToString());
            if (_hero.SelectTarget != null)
            {
                EditorGUILayout.TextField("当前选择目标", _hero.SelectTarget.ServerInstID.ToString());
            }
            if (_hero.LockTarget != null)
            {
                EditorGUILayout.TextField("当前锁定目标", _hero.LockTarget.ServerInstID.ToString());
            }
            for (MapArea.E_Type i = MapArea.E_Type.RebornSafe; i <= MapArea.E_Type.Boss; i = (MapArea.E_Type)((int)i << 1))
            {
                bool _isIn = MapArea.IsInMapArea(_hero.CurMapArea, i);
                EditorGUILayout.Toggle(i.ToString(), _isIn);
            }
        }
    }
}
using UnityEngine;
#if UNITY_EDITOR
using UnityEditor;
#endif
using System.Collections.Generic;
using System.Text;
public class RuntimeLogUtility : MonoBehaviour
{
    private static string LS_Key_ForceAutoFight = "LS_Key_ForceAutoFight";
    public static bool s_BattleLog = false;
    public static bool s_MoveLog = false;
    public static bool s_ForceOneEnemy = false;
    public static bool s_PerpetualAttack = true;
    public static bool s_UseKeyBoardCastSkill = false;
    public static bool s_LogMoveDistance = false;
    public static bool s_SkillEffectLog = false;
    public static bool s_forceAutoFight
    {
        get
        {
#if UNITY_EDITOR
            return EditorPrefs.GetBool("LS_Key_ForceAutoFight", true);
#else
            return true;
#endif
        }
        set
        {
#if UNITY_EDITOR
            EditorPrefs.SetBool("LS_Key_ForceAutoFight", value);
#endif
        }
    }
    public static string s_LogPath;
    static readonly Dictionary<uint, StringBuilder> s_LogDict = new Dictionary<uint, StringBuilder>();
    static readonly List<string> s_LogList = new List<string>();
    public static bool s_HurtValueLog = false;
    public static void ClearLogs()
    {
        s_LogDict.Clear();
        s_LogList.Clear();
    }
    public static void AddLog_Blue(string info, uint objId = 0)
    {
        string _content;
        if (s_BattleLog)
        {
            _content = string.Format("<color=blue>{0}</color>", info);
            string _strTime = System.DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff");
            Debug.Log(string.Format("[{0}] {1}", _strTime, _content));
        }
        _content = string.Format("<font size=\"2\" color=\"blue\">{0}</font>", info);
        AddLog(_content, objId);
    }
    public static void AddLog_Green(string info, uint objId = 0)
    {
        string _content;
        if (s_BattleLog)
        {
            _content = string.Format("<color=green>{0}</color>", info);
            string _strTime = System.DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff");
            Debug.Log(string.Format("[{0}] {1}", _strTime, _content));
        }
        _content = string.Format("<font size=\"2\" color=\"green\">{0}</font>", info);
        AddLog(_content, objId);
    }
    public static void AddLog_Red(string info, uint objId = 0)
    {
        string _content;
        if (s_BattleLog)
        {
            _content = string.Format("<color=red>{0}</color>", info);
            string _strTime = System.DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff");
            Debug.Log(string.Format("[{0}] {1}", _strTime, _content));
        }
        _content = string.Format("<font size=\"2\" color=\"red\">{0}</font>", info);
        AddLog(_content, objId);
    }
    public static void AddLog_Black(string info, uint objId = 0)
    {
        if (s_BattleLog)
        {
            string _strTime = System.DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff");
            Debug.Log(string.Format("[{0}] {1}", _strTime, info));
        }
        string _content = string.Format("<font size=\"2\" color=\"black\">{0}</font>", info);
        AddLog(_content, objId);
    }
    public static void AddLog(string info, uint objId = 0)
    {
        string _strTime = System.DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff");
        string _content = string.Format("[{0}] {1}<br />", _strTime, info);
        s_LogList.Add(_content);
        if (objId == 0)
        {
            foreach (var _objId in s_LogDict.Keys)
            {
                s_LogDict[_objId].Append(_content);
            }
        }
        else
        {
            if (s_LogDict.ContainsKey(objId) == false)
            {
                s_LogDict.Add(objId, new StringBuilder());
            }
            s_LogDict[objId].Append(_content);
        }
        //if (s_LogList.Count >= 10000)
        //{
        //    SaveNpcLog();
        //}
    }
    public static void SaveNpcLog()
    {
        s_LogPath = Application.dataPath.Substring(0, 3) + "unit3D_Logs/";
        if (System.IO.Directory.Exists(s_LogPath) == false)
        {
            System.IO.Directory.CreateDirectory(s_LogPath);
        }
        string _strTime = System.DateTime.Now.ToString("yyyy-MM-dd-HH-mm-ss-fff");
        string _path = string.Empty;
        foreach (var _objId in s_LogDict.Keys)
        {
            _path = s_LogPath + _objId;
            if (System.IO.Directory.Exists(_path) == false)
            {
                System.IO.Directory.CreateDirectory(_path);
            }
            _path = string.Format(s_LogPath + "{0}/{1}.html", _objId, _strTime);
            using (System.IO.StreamWriter _writer = new System.IO.StreamWriter(_path))
            {
                _writer.Write(s_LogDict[_objId].ToString());
            }
        }
        s_LogDict.Clear();
        _path = string.Format(s_LogPath + "Log_{0}.html", _strTime);
        StringBuilder _stringBuilder = new StringBuilder();
        for (int i = 0; i < s_LogList.Count; ++i)
        {
            _stringBuilder.Append(s_LogList[i]);
        }
        using (System.IO.StreamWriter _writer = new System.IO.StreamWriter(_path))
        {
            _writer.Write(_stringBuilder.ToString());
        }
        s_LogList.Clear();
    }
}
#if UNITY_EDITOR
[CustomEditor(typeof(RuntimeLogUtility))]
public class RuntimeLogUtilityEditor : Editor
{
    private Vector3 _navChkPos;
    private int _npcID;
    public override void OnInspectorGUI()
    {
        GUILayout.Space(5);
        EditorGUILayout.LabelField("Log存储路径", RuntimeLogUtility.s_LogPath);
        if (GUILayout.Button("保存Log"))
        {
            RuntimeLogUtility.SaveNpcLog();
        }
        if (GUILayout.Button("清空Log"))
        {
            RuntimeLogUtility.ClearLogs();
        }
        RuntimeLogUtility.s_BattleLog = EditorGUILayout.Toggle("战斗过程的Log输出", RuntimeLogUtility.s_BattleLog);
        RuntimeLogUtility.s_MoveLog = EditorGUILayout.Toggle("移动过程的Log输出", RuntimeLogUtility.s_MoveLog);
        RuntimeLogUtility.s_ForceOneEnemy = EditorGUILayout.Toggle("强制只攻击一个目标对象", RuntimeLogUtility.s_ForceOneEnemy);
        RuntimeLogUtility.s_PerpetualAttack = EditorGUILayout.Toggle("执行攻击至死逻辑", RuntimeLogUtility.s_PerpetualAttack);
        RuntimeLogUtility.s_UseKeyBoardCastSkill = EditorGUILayout.Toggle("使用键盘释放技能", RuntimeLogUtility.s_UseKeyBoardCastSkill);
        RuntimeLogUtility.s_forceAutoFight = EditorGUILayout.Toggle("是否强制开启AI", RuntimeLogUtility.s_forceAutoFight);
        RuntimeLogUtility.s_SkillEffectLog = EditorGUILayout.Toggle("技能效果log输出", RuntimeLogUtility.s_SkillEffectLog);
        RuntimeLogUtility.s_LogMoveDistance = EditorGUILayout.Toggle("位移距离Log输出", RuntimeLogUtility.s_LogMoveDistance);
        _navChkPos = EditorGUILayout.Vector3Field("检测点", _navChkPos);
        if (GUILayout.Button("检测"))
        {
            Vector3 _position = Vector3.zero;
            if (GActor.TryGetValidPos(_navChkPos, ref _position))
            {
                Debug.Log("正常点........");
            }
            else
            {
                Debug.Log("障碍点........");
            }
        }
        _npcID = EditorGUILayout.IntField("npcID", _npcID);
        if (GUILayout.Button("酷酷酷"))
        {
            PlayerDatas.Instance.hero.Polymorph(!PlayerDatas.Instance.hero.IsPolyMorph);
        }
        if (GUILayout.Button("直接重连"))
        {
            GameNetSystem.Instance.Reconnect();
        }
        if (GUILayout.Button("GC.Collect()"))
        {
            System.GC.Collect();
        }
        if (GUILayout.Button("Resources.UnloadUnusedAssets"))
        {
            Resources.UnloadUnusedAssets();
        }
        if (GUILayout.Button("上马/下马"))
        {
            if (PlayerDatas.Instance.hero != null)
            {
                DTC0428_tagPlayerRideHorse.Send_tagPlayerRideHorse(PlayerDatas.Instance.hero.MovingState != E_MovingState.Ride);
            }
        }
        if (GUILayout.Button("采集"))
        {
            GA_Hero _hero = PlayerDatas.Instance.hero;
            if (_hero != null)
            {
                if (_hero.IsCollecting())
                {
                    _hero.Idle();
                }
                else if (_hero.IsIdle())
                {
                    _hero.Collect();
                }
            }
        }
        GUILayout.Space(10);
        EditorGUILayout.LabelField("# 玩家当前信息 #");
        if (PlayerDatas.Instance.hero != null)
        {
            GA_Hero _hero = PlayerDatas.Instance.hero;
            if (_hero.SkillMgr.CurCastSkill != null)
            {
                int _curSkillID = _hero.SkillMgr.CurCastSkill.id;
                bool _isCompelete = _hero.SkillMgr.CurCastSkill.SkillCompelete;
                bool _isXuli = _hero.SkillMgr.CurCastSkill.SkillPreparing;
                string _content = string.Format("ID: {0}, 蓄力:{2}, 完成: {1}", _curSkillID, _isCompelete, _isXuli);
                EditorGUILayout.LabelField("技能信息", _content);
            }
            EditorGUILayout.TextField("队伍ID", _hero.ActorInfo.teamID.ToString());
            EditorGUILayout.TextField("是否处于地图切换", GA_Hero.s_MapSwitching.ToString());
            EditorGUILayout.TextField("当前身体状态", _hero.MovingState.ToString());
            EditorGUILayout.TextField("当前行为状态", _hero.State.ToString());
            EditorGUILayout.TextField("当前AI状态", _hero.aiHandler.currentType.ToString());
            EditorGUILayout.TextField("是否死亡", _hero.ActorInfo.serverDie.ToString());
            if (_hero.SelectTarget != null)
            {
                EditorGUILayout.TextField("当前选择目标", _hero.SelectTarget.ServerInstID.ToString());
            }
            if (_hero.LockTarget != null)
            {
                EditorGUILayout.TextField("当前锁定目标", _hero.LockTarget.ServerInstID.ToString());
            }
            for (MapArea.E_Type i = MapArea.E_Type.RebornSafe; i <= MapArea.E_Type.Boss; i = (MapArea.E_Type)((int)i << 1))
            {
                bool _isIn = MapArea.IsInMapArea(_hero.CurMapArea, i);
                EditorGUILayout.Toggle(i.ToString(), _isIn);
            }
        }
    }
}
#endif