using UnityEngine;
|
using UnityEditor;
|
using System.Collections.Generic;
|
using System.Linq;
|
using System.IO;
|
|
public class GMQuickPlayingEditor : EditorWindow
|
{
|
private string searchText = "";
|
private string commandText = "";
|
private Vector2 scrollPosition;
|
private Vector2 reportScrollPosition;
|
private List<ItemConfig> searchResults = new List<ItemConfig>();
|
private int itemCount = 1;
|
private bool isBattlePaused = false;
|
|
// 战报相关
|
private string reportFilePath = "";
|
private string[] reportFiles = new string[0];
|
private int selectedReportIndex = 0;
|
|
[MenuItem("Tools/GM快捷工具 &9")]
|
public static void ShowWindow()
|
{
|
GetWindow<GMQuickPlayingEditor>("GM快捷工具");
|
}
|
|
private void OnEnable()
|
{
|
RefreshReportList();
|
}
|
|
private void OnGUI()
|
{
|
GUILayout.BeginVertical("box");
|
|
// 搜索栏
|
GUILayout.Label("物品搜索", EditorStyles.boldLabel);
|
GUILayout.BeginHorizontal();
|
searchText = EditorGUILayout.TextField("搜索:", searchText);
|
if (GUILayout.Button("查询物品", GUILayout.Width(80)))
|
{
|
OnSearchItem();
|
}
|
GUILayout.EndHorizontal();
|
|
GUILayout.Space(10);
|
|
// 搜索结果显示区域
|
GUILayout.BeginHorizontal();
|
GUILayout.Label($"搜索结果 ({searchResults.Count})", EditorStyles.boldLabel);
|
GUILayout.FlexibleSpace();
|
if (GUILayout.Button("清空列表", GUILayout.Width(80)))
|
{
|
searchResults.Clear();
|
}
|
GUILayout.EndHorizontal();
|
|
scrollPosition = GUILayout.BeginScrollView(scrollPosition, GUILayout.Height(200));
|
GUILayout.BeginVertical("box");
|
|
if (searchResults.Count > 0)
|
{
|
foreach (var item in searchResults)
|
{
|
GUILayout.BeginHorizontal("box");
|
GUILayout.Label($"ID: {item.ID}", GUILayout.Width(80));
|
GUILayout.Label($"名称: {item.ItemName}", GUILayout.Width(150));
|
GUILayout.Label($"等级: {item.LV}", GUILayout.Width(60));
|
if (GUILayout.Button("选择", GUILayout.Width(60)))
|
{
|
OnSelectItem(item);
|
}
|
GUILayout.EndHorizontal();
|
}
|
}
|
else
|
{
|
GUILayout.Label("搜索结果将在这里显示...");
|
}
|
|
GUILayout.EndVertical();
|
GUILayout.EndScrollView();
|
|
GUILayout.Space(10);
|
|
// 数量输入
|
GUILayout.BeginHorizontal();
|
GUILayout.Label("物品数量:", GUILayout.Width(80));
|
itemCount = EditorGUILayout.IntField(itemCount, GUILayout.Width(100));
|
GUILayout.EndHorizontal();
|
|
GUILayout.Space(10);
|
|
// GM命令编辑区域
|
GUILayout.Label("GM命令", EditorStyles.boldLabel);
|
GUILayout.BeginVertical("box");
|
commandText = EditorGUILayout.TextArea(commandText, GUILayout.Height(60));
|
GUILayout.EndVertical();
|
|
GUILayout.Space(5);
|
|
// 发送命令按钮
|
GUILayout.BeginHorizontal();
|
GUILayout.FlexibleSpace();
|
if (GUILayout.Button("发送命令", GUILayout.Width(100), GUILayout.Height(30)))
|
{
|
OnSendCommand();
|
}
|
if (GUILayout.Button("清空", GUILayout.Width(60), GUILayout.Height(30)))
|
{
|
commandText = "";
|
}
|
GUILayout.EndHorizontal();
|
|
GUILayout.Space(10);
|
|
// 提示信息
|
GUIStyle warningStyle = new GUIStyle(EditorStyles.helpBox);
|
warningStyle.normal.textColor = new Color(1f, 0.6f, 0f);
|
warningStyle.fontSize = 11;
|
EditorGUILayout.LabelField("⚠ 添加物品最好跟服务器确认过物品的存在后再添加", warningStyle);
|
|
GUILayout.Space(10);
|
|
// 战报浏览区域
|
GUILayout.Label("战报浏览", EditorStyles.boldLabel);
|
GUILayout.BeginVertical("box");
|
|
GUILayout.BeginHorizontal();
|
if (GUILayout.Button("刷新战报列表", GUILayout.Width(120)))
|
{
|
RefreshReportList();
|
}
|
if (GUILayout.Button("打开战报文件夹", GUILayout.Width(120)))
|
{
|
OpenReportFolder();
|
}
|
GUILayout.EndHorizontal();
|
|
GUILayout.Space(5);
|
|
if (reportFiles.Length > 0)
|
{
|
reportScrollPosition = GUILayout.BeginScrollView(reportScrollPosition, GUILayout.Height(150));
|
|
for (int i = 0; i < reportFiles.Length; i++)
|
{
|
GUILayout.BeginHorizontal("box");
|
string fileName = Path.GetFileName(reportFiles[i]);
|
GUILayout.Label(fileName, GUILayout.Width(300));
|
|
if (GUILayout.Button("加载", GUILayout.Width(60)))
|
{
|
LoadReport(reportFiles[i]);
|
}
|
|
|
GUILayout.EndHorizontal();
|
}
|
|
GUILayout.EndScrollView();
|
}
|
else
|
{
|
GUILayout.Label("未找到战报文件(.bytes)");
|
}
|
|
GUILayout.EndVertical();
|
|
GUILayout.Space(10);
|
|
// 暂停/开始战斗按钮
|
GUILayout.BeginHorizontal();
|
GUILayout.FlexibleSpace();
|
string buttonText = isBattlePaused ? "开始当前战斗" : "暂停当前战斗";
|
if (GUILayout.Button(buttonText, GUILayout.Width(120), GUILayout.Height(30)))
|
{
|
OnPauseBattle();
|
}
|
GUILayout.FlexibleSpace();
|
GUILayout.EndHorizontal();
|
|
GUILayout.EndVertical();
|
}
|
|
private void RefreshReportList()
|
{
|
string reportFolder = Application.dataPath + "/../BattleReport/";
|
if (Directory.Exists(reportFolder))
|
{
|
reportFiles = Directory.GetFiles(reportFolder, "*.bytes");
|
Debug.Log($"找到 {reportFiles.Length} 个战报文件");
|
}
|
else
|
{
|
Directory.CreateDirectory(reportFolder);
|
reportFiles = new string[0];
|
Debug.Log("创建战报文件夹: " + reportFolder);
|
}
|
}
|
|
private void OpenReportFolder()
|
{
|
string reportFolder = Application.dataPath + "/../BattleReport/";
|
if (!Directory.Exists(reportFolder))
|
{
|
Directory.CreateDirectory(reportFolder);
|
}
|
EditorUtility.RevealInFinder(reportFolder);
|
}
|
|
private void LoadReport(string filePath)
|
{
|
if (!File.Exists(filePath))
|
{
|
Debug.LogError("战报文件不存在: " + filePath);
|
return;
|
}
|
|
reportFilePath = filePath;
|
Debug.Log("已加载战报: " + Path.GetFileName(filePath));
|
|
HB430_tagSCTurnFightReport hB430_TagSCTurnFightReport = new HB430_tagSCTurnFightReport();
|
byte[] vBytes = File.ReadAllBytes(filePath);
|
hB430_TagSCTurnFightReport.ReadFromBytes(vBytes);
|
PackageRegedit.Distribute(hB430_TagSCTurnFightReport);
|
}
|
|
private string ExtractGuidFromFileName(string fileName)
|
{
|
// 从文件名中提取 GUID
|
// 格式: B430_ReportBytes_{GUID}_{DateTime}
|
string[] parts = fileName.Split('_');
|
if (parts.Length >= 3)
|
{
|
return parts[2]; // 返回 GUID 部分
|
}
|
return "unknown_guid";
|
}
|
|
private void OnSearchItem()
|
{
|
searchResults.Clear();
|
|
if (string.IsNullOrEmpty(searchText))
|
{
|
Debug.Log("搜索文本为空");
|
return;
|
}
|
|
// 遍历 ItemConfig.dic 进行模糊搜索
|
foreach (var kvp in ItemConfig.dic)
|
{
|
var item = kvp.Value;
|
if (!string.IsNullOrEmpty(item.ItemName) &&
|
item.ItemName.Contains(searchText))
|
{
|
searchResults.Add(item);
|
}
|
}
|
|
// 按 ID 排序
|
searchResults = searchResults.OrderBy(x => x.ID).ToList();
|
|
Debug.Log($"搜索物品: {searchText}, 找到 {searchResults.Count} 个结果");
|
}
|
|
private void OnSelectItem(ItemConfig item)
|
{
|
Debug.Log($"选择物品: {item.ItemName} (ID: {item.ID})");
|
commandText = $"MakeItemCount {item.ID} {itemCount}";
|
}
|
|
private void OnSendCommand()
|
{
|
if (string.IsNullOrEmpty(commandText))
|
{
|
Debug.LogWarning("命令为空,无法发送");
|
return;
|
}
|
|
Debug.Log("发送命令: " + commandText);
|
GMCmdManager.Instance.OnSendGMQuest(commandText);
|
GMCmdManager.Instance.SetRecordCmdlist(commandText);
|
}
|
|
private void OnPauseBattle()
|
{
|
for (int i = 0; i < BattleConst.BattleWindows.Count; i++)
|
{
|
var win = UIManager.Instance.GetUI(BattleConst.BattleWindows[i].Name);
|
if (win != null && win.IsActive())
|
{
|
// 使用反射获取 battleField 字段
|
var battleFieldField = win.GetType().GetField("battleField",
|
System.Reflection.BindingFlags.NonPublic |
|
System.Reflection.BindingFlags.Instance);
|
|
if (battleFieldField != null)
|
{
|
var battleField = battleFieldField.GetValue(win) as BattleField;
|
if (battleField != null)
|
{
|
battleField.IsPause = !battleField.IsPause;
|
isBattlePaused = battleField.IsPause;
|
Debug.Log($"战斗暂停状态切换: {battleField.IsPause}");
|
return;
|
}
|
}
|
}
|
}
|
|
Debug.LogWarning("未找到激活的战斗窗口或 battleField 为空");
|
}
|
}
|