├── GBGR.Skill.Editor ├── GBGR.Skill.Editor │ ├── Skill.cs │ ├── Ui.cs │ ├── Program.cs │ ├── GBGR.Skill.Editor.csproj │ ├── Form1.Designer.cs │ └── Form1.cs └── GBGR.Skill.Editor.sln ├── .editorconfig ├── README.md ├── locale ├── Ui.json ├── zh-CN.json ├── zh-TW.json ├── ja-JP.json └── en-US.json └── .gitignore /GBGR.Skill.Editor/GBGR.Skill.Editor/Skill.cs: -------------------------------------------------------------------------------- 1 | namespace GBGR.Skill.Editor; 2 | 3 | internal class Skill 4 | { 5 | public string Id { get; set; } = string.Empty; 6 | public string Name { get; set; } = string.Empty; 7 | } 8 | -------------------------------------------------------------------------------- /.editorconfig: -------------------------------------------------------------------------------- 1 | # editorconfig.org 2 | root = true 3 | 4 | # 設定預設行尾字符為 LF,適用於所有文件 5 | [*] 6 | end_of_line = lf 7 | 8 | # 設定字符編碼 9 | charset = utf-8 10 | 11 | # 移除文件末尾的多餘空行 12 | trim_trailing_whitespace = true 13 | 14 | # 確保文件末尾有一個空行 15 | insert_final_newline = true 16 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # GBFRSkillEditor 2 | 3 | ## Warning 4 | Please backup your original file 5 | 6 | ## Required 7 | - .NET Runtime 8.0.2 8 | - GBFRDataTools(https://github.com/Nenkai/GBFRDataTools) 9 | - gbfrelink.utility.manager(https://github.com/WistfulHopes/gbfrelink.utility.manager) 10 | - skill_status.tbl (※Important※ Only custom this file) 11 | -------------------------------------------------------------------------------- /GBGR.Skill.Editor/GBGR.Skill.Editor/Ui.cs: -------------------------------------------------------------------------------- 1 | namespace GBGR.Skill.Editor; 2 | 3 | public class Ui 4 | { 5 | public string Code { get; set; } = default!; 6 | public string FileToolStripMenuItem { get; set; } = default!; 7 | public string OpenToolStripMenuItem { get; set; } = default!; 8 | public string SaveAsToolStripMenuItem { get; set; } = default!; 9 | public string SaveButton { get; set; } = default!; 10 | public string SkillLabel { get; set; } = default!; 11 | } 12 | -------------------------------------------------------------------------------- /GBGR.Skill.Editor/GBGR.Skill.Editor/Program.cs: -------------------------------------------------------------------------------- 1 | namespace GBGR.Skill.Editor 2 | { 3 | internal static class Program 4 | { 5 | /// 6 | /// The main entry point for the application. 7 | /// 8 | [STAThread] 9 | static void Main() 10 | { 11 | // To customize application configuration such as set high DPI settings or default font, 12 | // see https://aka.ms/applicationconfiguration. 13 | ApplicationConfiguration.Initialize(); 14 | Application.Run(new Form1()); 15 | } 16 | } 17 | } -------------------------------------------------------------------------------- /GBGR.Skill.Editor/GBGR.Skill.Editor/GBGR.Skill.Editor.csproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | WinExe 5 | net8.0-windows 6 | enable 7 | true 8 | enable 9 | b263abe5072c23fa8bda9d66807508cf.ico 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /locale/Ui.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "Code": "en-US", 4 | "fileToolStripMenuItem": "File", 5 | "openToolStripMenuItem": "Open", 6 | "saveAsToolStripMenuItem": "Save As", 7 | "SaveButton": "Save", 8 | "SkillLabel": "Skill" 9 | }, 10 | { 11 | "Code": "ja-JP", 12 | "fileToolStripMenuItem": "ファイル", 13 | "openToolStripMenuItem": "開く", 14 | "saveAsToolStripMenuItem": "名前を付けて保存", 15 | "SaveButton": "セーブ", 16 | "SkillLabel": "スキル" 17 | }, 18 | { 19 | "Code": "zh-TW", 20 | "fileToolStripMenuItem": "檔案", 21 | "openToolStripMenuItem": "開啟", 22 | "saveAsToolStripMenuItem": "另存新檔", 23 | "SaveButton": "儲存", 24 | "SkillLabel": "技能" 25 | }, 26 | { 27 | "Code": "zh-CN", 28 | "fileToolStripMenuItem": "文件", 29 | "openToolStripMenuItem": "打开", 30 | "saveAsToolStripMenuItem": "另存为", 31 | "SaveButton": "保存", 32 | "SkillLabel": "技能" 33 | } 34 | ] 35 | -------------------------------------------------------------------------------- /GBGR.Skill.Editor/GBGR.Skill.Editor.sln: -------------------------------------------------------------------------------- 1 | 2 | Microsoft Visual Studio Solution File, Format Version 12.00 3 | # Visual Studio Version 17 4 | VisualStudioVersion = 17.9.34607.119 5 | MinimumVisualStudioVersion = 10.0.40219.1 6 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GBGR.Skill.Editor", "GBGR.Skill.Editor\GBGR.Skill.Editor.csproj", "{9C983CD7-59D7-48E8-8D7A-A53C04EE9046}" 7 | EndProject 8 | Global 9 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 10 | Debug|Any CPU = Debug|Any CPU 11 | Release|Any CPU = Release|Any CPU 12 | EndGlobalSection 13 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 14 | {9C983CD7-59D7-48E8-8D7A-A53C04EE9046}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 15 | {9C983CD7-59D7-48E8-8D7A-A53C04EE9046}.Debug|Any CPU.Build.0 = Debug|Any CPU 16 | {9C983CD7-59D7-48E8-8D7A-A53C04EE9046}.Release|Any CPU.ActiveCfg = Release|Any CPU 17 | {9C983CD7-59D7-48E8-8D7A-A53C04EE9046}.Release|Any CPU.Build.0 = Release|Any CPU 18 | EndGlobalSection 19 | GlobalSection(SolutionProperties) = preSolution 20 | HideSolutionNode = FALSE 21 | EndGlobalSection 22 | GlobalSection(ExtensibilityGlobals) = postSolution 23 | SolutionGuid = {EB2AF6CF-797D-4A3A-8FFB-95A309C5B2BE} 24 | EndGlobalSection 25 | EndGlobal 26 | -------------------------------------------------------------------------------- /locale/zh-CN.json: -------------------------------------------------------------------------------- 1 | { 2 | "B0 E0 7A 88": "无", 3 | "C1 74 96 AC": "破防特效", 4 | "63 0C 36 1C": "蓄力攻击", 5 | "B9 50 78 F1": "连击加成", 6 | "28 5F A4 A7": "连击收招", 7 | "1D 80 60 B3": "集中炮火", 8 | "17 9A 97 C0": "暴击伤害", 9 | "60 4F 58 DC": "伤害上限", 10 | "39 83 48 3F": "背水", 11 | "6D 4D 69 6B": "弱点伤害", 12 | "83 36 1A 4F": "弱化状态特效", 13 | "0D 2F 50 8F": "奋不顾身", 14 | "80 5F EC 3F": "协同攻击", 15 | "1B 11 5B C3": "蓄力会心", 16 | "55 7F D1 A9": "OVERDRIVE特效", 17 | "B0 8C 07 84": "快速蓄力", 18 | "EB 21 E3 EA": "能力伤害", 19 | "FF FB C8 2F": "热血", 20 | "10 5B AB 57": "追击", 21 | "97 85 07 8D": "投掷", 22 | "9B 1A F1 71": "暴君", 23 | "27 8C 58 4C": "属性克制转换", 24 | "64 4D 2E 7C": "躲避仇火", 25 | "B0 57 2B 3C": "格挡仇火", 26 | "31 57 39 70": "穷寇心", 27 | "96 5C 22 DC": "修罗", 28 | "3B 16 A3 A8": "刀上舞", 29 | "E4 E0 68 15": "先发制人", 30 | "8D 27 CE 82": "身无长技", 31 | "62 58 3E 33": "骰子剑", 32 | "1F CD 85 EE": "ベルセルク", 33 | "A1 53 81 3D": "スパルタ", 34 | "D2 15 C1 51": "スーパーアルティメットJust回避", 35 | "28 3C 22 40": "浩劫", 36 | "1C 9A 07 50": "攻击力", 37 | "9B A1 78 8D": "暴击率", 38 | "96 F0 72 F3": "体力", 39 | "EE 00 B7 CE": "昏厥", 40 | "FE FD AB E0": "守护", 41 | "8D 5B A9 48": "金剛", 42 | "9C BA CD E6": "坚守", 43 | "0C F6 3B 8B": "躲避性能", 44 | "46 08 A2 0A": "格挡性能", 45 | "B5 7D AA 09": "凝神", 46 | "A8 92 B2 29": "抗争", 47 | "60 F8 70 14": "坚持", 48 | "D6 75 AA 74": "刚健", 49 | "79 67 1C EC": "摇曳步", 50 | "87 4A 79 AF": "躲避距离", 51 | "76 1F E3 B6": "不动", 52 | "B9 A5 59 37": "昏厥抗性", 53 | "81 26 57 FB": "冰冻抗性", 54 | "E7 D7 C9 1D": "水牢抗性", 55 | "A7 8C 4F D5": "泥沙抗性", 56 | "AF 49 3B 97": "中毒抗性", 57 | "85 96 FA A2": "缓速抗性", 58 | "B3 A6 84 7C": "灼热抗性", 59 | "1F 92 42 22": "麻痹抗性", 60 | "0F 86 02 97": "灾祸抗性", 61 | "DD 53 B4 50": "能力封印抗性", 62 | "82 87 B4 CF": "奥义封印抗性", 63 | "1E 70 4A DD": "异能耐受", 64 | "91 E1 F2 4B": "攻击DOWN抗性", 65 | "B1 60 DE 66": "防御DOWN抗性", 66 | "E0 65 AD 0E": "全弱化效果抵抗", 67 | "2B 37 18 60": "挑衅", 68 | "9E 59 53 00": "蓄力强化", 69 | "9D E3 A8 A1": "霸体", 70 | "F3 3A 88 24": "药水携带数", 71 | "94 46 9A E6": "豪胆", 72 | "86 FA F3 95": "自动复活", 73 | "75 7D 60 DC": "匿踪", 74 | "EF C5 87 F6": "获得经验值", 75 | "82 30 6F C8": "获得金币", 76 | "E5 2A 42 5E": "获得MSP", 77 | "CB 33 20 08": "钳蟹之共鸣", 78 | "97 98 0D 1B": "钳蟹的报恩", 79 | "3F A9 E8 57": "因子强化", 80 | "E6 B5 D8 9A": "7Net", 81 | "75 D7 E1 DB": "α秘纹", 82 | "6E DB 2A 8D": "β秘纹", 83 | "13 2E 86 5C": "γ秘纹", 84 | "68 02 03 CD": "英勇神速", 85 | "E2 10 85 A3": "英勇灵气", 86 | "DC 14 DE DA": "英勇之心", 87 | "18 D9 FE 3B": "守护者的决心", 88 | "36 63 49 F8": "守护者的骄傲", 89 | "9E FA FD 9A": "守护者的战气", 90 | "74 46 1E 15": "舵手的坚持", 91 | "F0 FD 74 A3": "舵手的指引", 92 | "24 4D 6F D7": "舵手的战气", 93 | "48 EF 8E B4": "魔法师的伶俐", 94 | "F5 E5 AA 11": "魔法师的心愿", 95 | "B3 63 01 C0": "魔法师的战气", 96 | "48 F5 83 AA": "老兵的智慧", 97 | "0C 6B 1B 92": "老兵的天眼", 98 | "1B BE 42 0E": "老兵的战气", 99 | "7F F6 D0 23": "玫瑰早绽", 100 | "A9 C7 A4 C2": "玫瑰缤纷", 101 | "4A AD 19 85": "玫瑰的战气", 102 | "70 C1 9D 9A": "圣骑士的剑舞", 103 | "88 23 2E 52": "圣骑士的威光", 104 | "BC 02 52 B8": "圣骑士的战气", 105 | "2F 23 63 54": "古今无双的气概", 106 | "4C 81 1D 45": "古今无双的强者", 107 | "F0 6C 02 0F": "古今无双的战气", 108 | "3D 22 08 D9": "幽幻之谊", 109 | "02 D6 51 73": "幽幻之应", 110 | "42 D6 39 A3": "幽幻战气", 111 | "EB 7B B0 29": "斩姬梦幻", 112 | "CD 89 3B A6": "斩姬武艺", 113 | "24 AD D1 FD": "斩姬战气", 114 | "82 93 DF 8C": "白龙的誓约", 115 | "8C 2D 01 D1": "白龙的荣耀", 116 | "EB CB 16 63": "白龙的战气", 117 | "74 A7 65 2E": "勇士的毅力", 118 | "68 F8 EF 16": "勇士的信念", 119 | "1C 6C F6 D8": "勇士的战气", 120 | "5C 73 0A E6": "王者一心", 121 | "23 52 F0 6F": "王者行进", 122 | "07 46 50 BA": "王者的战气", 123 | "C4 CD CB 86": "屠龙者的威猛", 124 | "99 45 FA 05": "屠龙者的才智", 125 | "F1 79 D3 C7": "屠龙者的战气", 126 | "74 F1 3C EC": "极致谋略", 127 | "9D 3A 51 AF": "极致真理", 128 | "34 2E B9 E6": "极致的战气", 129 | "25 C6 D6 0C": "变幻自如的迅刃", 130 | "20 92 B4 A3": "变幻自如的妖剑士", 131 | "27 BB EF DA": "变换自如的战气", 132 | "76 A1 BF 6E": "真红烈焰", 133 | "D0 DB D5 F1": "真红翔舞", 134 | "17 52 13 4F": "真红的战气", 135 | "69 E8 40 74": "冥暗刚刃", 136 | "65 41 12 CD": "冥暗自若", 137 | "88 BB F9 D7": "冥暗的战气", 138 | "F5 09 C8 77": "剑圣的炼气", 139 | "F5 E3 30 92": "剑圣的闪刃", 140 | "7A C4 4F 7B": "剑圣的战气", 141 | "4D EC 05 EF": "涯之七星", 142 | "E0 F8 5F E8": "魔眼的万箭", 143 | "AF B8 72 85": "魔眼的凜翔", 144 | "D9 93 B2 81": "魔眼的战气", 145 | "AB 14 12 28": "涯之二王", 146 | "9B 1E 0D D4": "天司長の霊威", 147 | "FC 6D 80 15": "天司長の風雅", 148 | "06 67 5F 4E": "天司長の戦気", 149 | "9E F5 2E 1A": "アイン", 150 | "3C 09 A2 93": "异能增长", 151 | "10 C0 D0 7A": "异能战意", 152 | "34 A6 64 B0": "异能之心", 153 | "06 CC 89 93": "回复性能", 154 | "25 DA 85 60": "自愈", 155 | "4F F7 CF 7C": "HP吸收", 156 | "E9 12 8D 31": "迅捷能力", 157 | "DC EC F2 05": "怒涛", 158 | "D3 9F FF B5": "激昂", 159 | "0A E1 C8 D2": "明镜止水", 160 | "D0 69 DD 7E": "怒发冲冠", 161 | "7D A7 18 CD": "万能药", 162 | "2E 48 2C 3F": "强化效果延长" 163 | } 164 | -------------------------------------------------------------------------------- /locale/zh-TW.json: -------------------------------------------------------------------------------- 1 | { 2 | "B0 E0 7A 88": "無", 3 | "C1 74 96 AC": "Break特攻", 4 | "63 0C 36 1C": "蓄力攻擊", 5 | "B9 50 78 F1": "連技加成", 6 | "28 5F A4 A7": "連技終結", 7 | "1D 80 60 B3": "集中火炮", 8 | "17 9A 97 C0": "爆擊傷害", 9 | "60 4F 58 DC": "傷害上限", 10 | "39 83 48 3F": "背水", 11 | "6D 4D 69 6B": "弱點傷害", 12 | "83 36 1A 4F": "弱化狀態特攻", 13 | "0D 2F 50 8F": "捨身", 14 | "80 5F EC 3F": "聯手攻擊", 15 | "1B 11 5B C3": "蓄力會心", 16 | "55 7F D1 A9": "Overdrive特攻", 17 | "B0 8C 07 84": "蓄力加速", 18 | "EB 21 E3 EA": "技能傷害", 19 | "FF FB C8 2F": "渾身", 20 | "10 5B AB 57": "追擊", 21 | "97 85 07 8D": "投擲", 22 | "9B 1A F1 71": "暴君", 23 | "27 8C 58 4C": "有利屬性轉換", 24 | "64 4D 2E 7C": "逆襲(閃避)", 25 | "B0 57 2B 3C": "逆襲(防禦)", 26 | "31 57 39 70": "窮鼠", 27 | "96 5C 22 DC": "修羅", 28 | "3B 16 A3 A8": "一線之隔", 29 | "E4 E0 68 15": "先制", 30 | "8D 27 CE 82": "手無寸鐵", 31 | "62 58 3E 33": "一天地六", 32 | "1F CD 85 EE": "狂戰士", 33 | "A1 53 81 3D": "斯巴達", 34 | "D2 15 C1 51": "超究極精準閃避", 35 | "28 3C 22 40": "大災厄之破滅", 36 | "1C 9A 07 50": "攻擊", 37 | "9B A1 78 8D": "爆擊機率", 38 | "96 F0 72 F3": "體力", 39 | "EE 00 B7 CE": "暈眩", 40 | "FE FD AB E0": "守護", 41 | "8D 5B A9 48": "金剛", 42 | "9C BA CD E6": "堅守", 43 | "0C F6 3B 8B": "迴避性能", 44 | "46 08 A2 0A": "防禦性能", 45 | "B5 7D AA 09": "聚精會神", 46 | "A8 92 B2 29": "抗戰", 47 | "60 F8 70 14": "奮勇", 48 | "D6 75 AA 74": "剛健", 49 | "79 67 1C EC": "捨戰求避", 50 | "87 4A 79 AF": "迴避距離", 51 | "76 1F E3 B6": "不動", 52 | "B9 A5 59 37": "昏厥抗性", 53 | "81 26 57 FB": "冰結抗性", 54 | "E7 D7 C9 1D": "水牢抗性", 55 | "A7 8C 4F D5": "纏沙抗性", 56 | "AF 49 3B 97": "中毒抗性", 57 | "85 96 FA A2": "緩速抗性", 58 | "B3 A6 84 7C": "灼熱抗性", 59 | "1F 92 42 22": "麻痺抗性", 60 | "0F 86 02 97": "災禍抗性", 61 | "DD 53 B4 50": "技能封印抗性", 62 | "82 87 B4 CF": "奧義封印抗性", 63 | "1E 70 4A DD": "抵禦異靈", 64 | "91 E1 F2 4B": "攻擊DOWN抗性", 65 | "B1 60 DE 66": "防禦DOWN抗性", 66 | "E0 65 AD 0E": "全弱化效果抗性", 67 | "2B 37 18 60": "挑釁", 68 | "9E 59 53 00": "蓄力強化", 69 | "9D E3 A8 A1": "畏怯無效", 70 | "F3 3A 88 24": "藥水持有數量", 71 | "94 46 9A E6": "堅毅", 72 | "86 FA F3 95": "自動復活", 73 | "75 7D 60 DC": "隱匿", 74 | "EF C5 87 F6": "取得經驗值", 75 | "82 30 6F C8": "取得盧比", 76 | "E5 2A 42 5E": "取得MSP", 77 | "CB 33 20 08": "蟹之共嗚", 78 | "97 98 0D 1B": "蟹之報恩", 79 | "3F A9 E8 57": "因子強化", 80 | "E6 B5 D8 9A": "Seven Net", 81 | "75 D7 E1 DB": "阿爾法・符碼", 82 | "6E DB 2A 8D": "貝塔・符碼", 83 | "13 2E 86 5C": "伽馬・符碼", 84 | "68 02 03 CD": "英勇強驅", 85 | "E2 10 85 A3": "英勇氣場", 86 | "DC 14 DE DA": "英勇之心", 87 | "18 D9 FE 3B": "守護者的決心", 88 | "36 63 49 F8": "守護者的傲氣", 89 | "9E FA FD 9A": "守護者的戦氣", 90 | "74 46 1E 15": "操舵者的骨氣", 91 | "F0 FD 74 A3": "操舵者的引領", 92 | "24 4D 6F D7": "操舵手的戦氣", 93 | "48 EF 8E B4": "魔導士的機智", 94 | "F5 E5 AA 11": "魔導士的心願", 95 | "B3 63 01 C0": "魔導士的戦氣", 96 | "48 F5 83 AA": "老兵的智慧", 97 | "0C 6B 1B 92": "老兵的慧眼", 98 | "1B BE 42 0E": "老兵的戦氣", 99 | "7F F6 D0 23": "薔薇早開", 100 | "A9 C7 A4 C2": "薔薇繚亂", 101 | "4A AD 19 85": "薔薇的戦氣", 102 | "70 C1 9D 9A": "聖騎士的劍光", 103 | "88 23 2E 52": "聖騎士的威風", 104 | "BC 02 52 B8": "聖騎士的戦氣", 105 | "2F 23 63 54": "古今無雙的風範", 106 | "4C 81 1D 45": "古今無雙的能人", 107 | "F0 6C 02 0F": "古今無双的戦氣", 108 | "3D 22 08 D9": "幽幻羈絆", 109 | "02 D6 51 73": "幽幻呼應", 110 | "42 D6 39 A3": "幽幻的戦氣", 111 | "EB 7B B0 29": "斬姬夢幻", 112 | "CD 89 3B A6": "斬姬武藝", 113 | "24 AD D1 FD": "斬姫的戦氣", 114 | "82 93 DF 8C": "白龍的誓約", 115 | "8C 2D 01 D1": "白龍的驕傲", 116 | "EB CB 16 63": "白竜的戦氣", 117 | "74 A7 65 2E": "勇士的毅力", 118 | "68 F8 EF 16": "勇士的信念", 119 | "1C 6C F6 D8": "勇士的戦氣", 120 | "5C 73 0A E6": "王者的堅定", 121 | "23 52 F0 6F": "王者的行進", 122 | "07 46 50 BA": "王者的戦氣", 123 | "C4 CD CB 86": "屠龍的勇猛", 124 | "99 45 FA 05": "屠龍的才智", 125 | "F1 79 D3 C7": "竜殺し的戦氣", 126 | "74 F1 3C EC": "極致計略", 127 | "9D 3A 51 AF": "極致真理", 128 | "34 2E B9 E6": "極致的戦氣", 129 | "25 C6 D6 0C": "變化自如的快刀", 130 | "20 92 B4 A3": "變化自如的妖劍士", 131 | "27 BB EF DA": "変幻自在的戦氣", 132 | "76 A1 BF 6E": "鮮紅的氣焰", 133 | "D0 DB D5 F1": "鮮紅的翔舞", 134 | "17 52 13 4F": "真紅的戦氣", 135 | "69 E8 40 74": "冥闇的鋼刃", 136 | "65 41 12 CD": "冥闇的自若", 137 | "88 BB F9 D7": "冥闇的戦氣", 138 | "F5 09 C8 77": "剣聖的練氣", 139 | "F5 E3 30 92": "剣聖的閃刃", 140 | "7A C4 4F 7B": "剣聖的戦氣", 141 | "4D EC 05 EF": "盡涯的七星", 142 | "E0 F8 5F E8": "魔眼的万箭", 143 | "AF B8 72 85": "魔眼的凜翔", 144 | "D9 93 B2 81": "魔眼的戦氣", 145 | "AB 14 12 28": "盡涯的二王", 146 | "9B 1E 0D D4": "天司長的靈威", 147 | "FC 6D 80 15": "天司長的風雅", 148 | "06 67 5F 4E": "天司長的戦氣", 149 | "9E F5 2E 1A": "Ain", 150 | "3C 09 A2 93": "替身增長", 151 | "10 C0 D0 7A": "替身破敵", 152 | "34 A6 64 B0": "替身之心", 153 | "06 CC 89 93": "回復性能", 154 | "25 DA 85 60": "淨癒再生", 155 | "4F F7 CF 7C": "HP吸收", 156 | "E9 12 8D 31": "技能加速", 157 | "DC EC F2 05": "怒濤", 158 | "D3 9F FF B5": "高揚", 159 | "0A E1 C8 D2": "明鏡止水", 160 | "D0 69 DD 7E": "怒髮衝冠", 161 | "7D A7 18 CD": "萬能藥", 162 | "2E 48 2C 3F": "強化効果延長" 163 | } 164 | -------------------------------------------------------------------------------- /locale/ja-JP.json: -------------------------------------------------------------------------------- 1 | { 2 | "B0 E0 7A 88": "なし", 3 | "C1 74 96 AC": "ブレイク特攻", 4 | "63 0C 36 1C": "チャージアタック", 5 | "B9 50 78 F1": "コンボボーナス", 6 | "28 5F A4 A7": "コンボフィニッシュ", 7 | "1D 80 60 B3": "集中砲火", 8 | "17 9A 97 C0": "クリティカルダメージ", 9 | "60 4F 58 DC": "ダメージ上限", 10 | "39 83 48 3F": "背水", 11 | "6D 4D 69 6B": "弱点攻撃", 12 | "83 36 1A 4F": "弱体状態特効", 13 | "0D 2F 50 8F": "捨て身", 14 | "80 5F EC 3F": "連携攻撃", 15 | "1B 11 5B C3": "溜め会心", 16 | "55 7F D1 A9": "オーバードライブ特効", 17 | "B0 8C 07 84": "クイックチャージ", 18 | "EB 21 E3 EA": "アビリティダメージ", 19 | "FF FB C8 2F": "渾身", 20 | "10 5B AB 57": "追撃", 21 | "97 85 07 8D": "投擲", 22 | "9B 1A F1 71": "暴君", 23 | "27 8C 58 4C": "有利属性変換", 24 | "64 4D 2E 7C": "回避リベンジ", 25 | "B0 57 2B 3C": "ガードリベンジ", 26 | "31 57 39 70": "窮鼠", 27 | "96 5C 22 DC": "修羅", 28 | "3B 16 A3 A8": "紙一重", 29 | "E4 E0 68 15": "先制", 30 | "8D 27 CE 82": "裸一貫", 31 | "62 58 3E 33": "一天六地", 32 | "1F CD 85 EE": "ベルセルク", 33 | "A1 53 81 3D": "スパルタ", 34 | "D2 15 C1 51": "スーパーアルティメットJust回避", 35 | "28 3C 22 40": "カタストロフィ", 36 | "1C 9A 07 50": "攻撃力", 37 | "9B A1 78 8D": "クリティカル確率", 38 | "96 F0 72 F3": "体力", 39 | "EE 00 B7 CE": "スタン", 40 | "FE FD AB E0": "守護", 41 | "8D 5B A9 48": "金剛", 42 | "9C BA CD E6": "堅守", 43 | "0C F6 3B 8B": "回避性能", 44 | "46 08 A2 0A": "ガード性能", 45 | "B5 7D AA 09": "精神一到", 46 | "A8 92 B2 29": "抗戦", 47 | "60 F8 70 14": "ふんばり", 48 | "D6 75 AA 74": "剛健", 49 | "79 67 1C EC": "フラジャイルドッジ", 50 | "87 4A 79 AF": "回避距離", 51 | "76 1F E3 B6": "不動", 52 | "B9 A5 59 37": "気絶耐性", 53 | "81 26 57 FB": "氷結耐性", 54 | "E7 D7 C9 1D": "水牢耐性", 55 | "A7 8C 4F D5": "砂だるま耐性", 56 | "AF 49 3B 97": "毒耐性", 57 | "85 96 FA A2": "スロウ耐性", 58 | "B3 A6 84 7C": "灼熱耐性", 59 | "1F 92 42 22": "麻痺耐性", 60 | "0F 86 02 97": "災禍耐性", 61 | "DD 53 B4 50": "アビリティ封印耐性", 62 | "82 87 B4 CF": "奥義封印耐性", 63 | "1E 70 4A DD": "レジストオルタ", 64 | "91 E1 F2 4B": "攻撃DOWN耐性", 65 | "B1 60 DE 66": "防御DOWN耐性", 66 | "E0 65 AD 0E": "全弱体効果耐性", 67 | "2B 37 18 60": "挑発", 68 | "9E 59 53 00": "チャージ強化", 69 | "9D E3 A8 A1": "怯み無効", 70 | "F3 3A 88 24": "ポーション所持数", 71 | "94 46 9A E6": "ガッツ", 72 | "86 FA F3 95": "自動復活", 73 | "75 7D 60 DC": "ステルス", 74 | "EF C5 87 F6": "取得経験値", 75 | "82 30 6F C8": "取得ルピ", 76 | "E5 2A 42 5E": "取得MSP", 77 | "CB 33 20 08": "カニの共鳴", 78 | "97 98 0D 1B": "カニの恩返し", 79 | "3F A9 E8 57": "ジーン強化", 80 | "E6 B5 D8 9A": "セブンネット", 81 | "75 D7 E1 DB": "アルファ・コード", 82 | "6E DB 2A 8D": "ベータ・コード", 83 | "13 2E 86 5C": "ガンマ・コード", 84 | "68 02 03 CD": "ブレイブドライブ", 85 | "E2 10 85 A3": "ブレイブオーラ", 86 | "DC 14 DE DA": "ブレイブハート", 87 | "18 D9 FE 3B": "守護者の決意", 88 | "36 63 49 F8": "守護者の矜持", 89 | "9E FA FD 9A": "守護者の戦気", 90 | "74 46 1E 15": "操舵士の意地", 91 | "F0 FD 74 A3": "操舵士の導き", 92 | "24 4D 6F D7": "操舵手の戦気", 93 | "48 EF 8E B4": "魔導士の機転", 94 | "F5 E5 AA 11": "魔導士の願い", 95 | "B3 63 01 C0": "魔導士の戦気", 96 | "48 F5 83 AA": "老兵の知恵", 97 | "0C 6B 1B 92": "老兵の一隻眼", 98 | "1B BE 42 0E": "老兵の戦気", 99 | "7F F6 D0 23": "薔薇の早咲き", 100 | "A9 C7 A4 C2": "薔薇の繚乱", 101 | "4A AD 19 85": "薔薇の戦気", 102 | "70 C1 9D 9A": "聖騎士の剣光", 103 | "88 23 2E 52": "聖騎士の威風", 104 | "BC 02 52 B8": "聖騎士の戦気", 105 | "2F 23 63 54": "古今無双の気風", 106 | "4C 81 1D 45": "古今無双の腕達者", 107 | "F0 6C 02 0F": "古今無双の戦気", 108 | "3D 22 08 D9": "幽幻の絆", 109 | "02 D6 51 73": "幽幻の呼応", 110 | "42 D6 39 A3": "幽幻の戦気", 111 | "EB 7B B0 29": "斬姫の夢幻", 112 | "CD 89 3B A6": "斬姫の武芸", 113 | "24 AD D1 FD": "斬姫の戦気", 114 | "82 93 DF 8C": "白竜の誓い", 115 | "8C 2D 01 D1": "白竜の誇り", 116 | "EB CB 16 63": "白竜の戦気", 117 | "74 A7 65 2E": "勇士の根性", 118 | "68 F8 EF 16": "勇士の信念", 119 | "1C 6C F6 D8": "勇士の戦気", 120 | "5C 73 0A E6": "王者の一心", 121 | "23 52 F0 6F": "王者の行進", 122 | "07 46 50 BA": "王者の戦気", 123 | "C4 CD CB 86": "竜殺しの猛威", 124 | "99 45 FA 05": "竜殺しの才覚", 125 | "F1 79 D3 C7": "竜殺しの戦気", 126 | "74 F1 3C EC": "極致の計略", 127 | "9D 3A 51 AF": "極致の真理", 128 | "34 2E B9 E6": "極致の戦気", 129 | "25 C6 D6 0C": "変幻自在の快刀", 130 | "20 92 B4 A3": "変幻自在の妖剣士", 131 | "27 BB EF DA": "変幻自在の戦気", 132 | "76 A1 BF 6E": "真紅の気焔", 133 | "D0 DB D5 F1": "真紅の翔舞", 134 | "17 52 13 4F": "真紅の戦気", 135 | "69 E8 40 74": "冥闇の剛刃", 136 | "65 41 12 CD": "冥闇の自若", 137 | "88 BB F9 D7": "冥闇の戦気", 138 | "F5 09 C8 77": "剣聖の練気", 139 | "F5 E3 30 92": "剣聖の閃刃", 140 | "7A C4 4F 7B": "剣聖の戦気", 141 | "4D EC 05 EF": "涯ての七星", 142 | "E0 F8 5F E8": "魔眼の万箭", 143 | "AF B8 72 85": "魔眼の凜翔", 144 | "D9 93 B2 81": "魔眼の戦気", 145 | "AB 14 12 28": "涯ての二王", 146 | "9B 1E 0D D4": "天司長の霊威", 147 | "FC 6D 80 15": "天司長の風雅", 148 | "06 67 5F 4E": "天司長の戦気", 149 | "9E F5 2E 1A": "アイン", 150 | "3C 09 A2 93": "オルタナティブクロウ", 151 | "10 C0 D0 7A": "オルタナティブブレイカー", 152 | "34 A6 64 B0": "オルタナティブハート", 153 | "06 CC 89 93": "回復性能", 154 | "25 DA 85 60": "リジェネレーション", 155 | "4F F7 CF 7C": "HP吸収", 156 | "E9 12 8D 31": "クイックアビリティ", 157 | "DC EC F2 05": "怒涛", 158 | "D3 9F FF B5": "高揚", 159 | "0A E1 C8 D2": "明鏡止水", 160 | "D0 69 DD 7E": "怒髪天", 161 | "7D A7 18 CD": "万能薬", 162 | "2E 48 2C 3F": "強化効果延長" 163 | } 164 | -------------------------------------------------------------------------------- /locale/en-US.json: -------------------------------------------------------------------------------- 1 | { 2 | "B0 E0 7A 88": "None", 3 | "C1 74 96 AC": "Break Assassin", 4 | "63 0C 36 1C": "Charged Attack DMG", 5 | "B9 50 78 F1": "Combo Booster", 6 | "28 5F A4 A7": "Combo Finisher", 7 | "1D 80 60 B3": "Concentrated Fire", 8 | "17 9A 97 C0": "Critical Damage", 9 | "60 4F 58 DC": "Damage Cap", 10 | "39 83 48 3F": "Enmity", 11 | "6D 4D 69 6B": "Weak Point DMG", 12 | "83 36 1A 4F": "Injury to Insult", 13 | "0D 2F 50 8F": "Life on the Line", 14 | "80 5F EC 3F": "Linked Together", 15 | "1B 11 5B C3": "Lucky Charge", 16 | "55 7F D1 A9": "Overdrive Assassin", 17 | "B0 8C 07 84": "Quick Charge", 18 | "EB 21 E3 EA": "Skilled Assault", 19 | "FF FB C8 2F": "Stamina", 20 | "10 5B AB 57": "Supplementary Damage", 21 | "97 85 07 8D": "Throw", 22 | "9B 1A F1 71": "Tyranny", 23 | "27 8C 58 4C": "War Elemental", 24 | "64 4D 2E 7C": "Dodge Payback", 25 | "B0 57 2B 3C": "Guard Payback", 26 | "31 57 39 70": "Berserker", 27 | "96 5C 22 DC": "Power Hungry", 28 | "3B 16 A3 A8": "Glass Cannon", 29 | "E4 E0 68 15": "Head Start", 30 | "8D 27 CE 82": "Less Is More", 31 | "62 58 3E 33": "Roll of the Die", 32 | "1F CD 85 EE": "Berserker Echo", 33 | "A1 53 81 3D": "Spartan Echo", 34 | "D2 15 C1 51": "Super Ultimate Perfect Dodge", 35 | "28 3C 22 40": "Catastrophe", 36 | "1C 9A 07 50": "ATK", 37 | "9B A1 78 8D": "Critical Hit Rate", 38 | "96 F0 72 F3": "HP", 39 | "EE 00 B7 CE": "Stun Power", 40 | "FE FD AB E0": "Aegis", 41 | "8D 5B A9 48": "金剛", 42 | "9C BA CD E6": "Garrison", 43 | "0C F6 3B 8B": "Improved Dodge", 44 | "46 08 A2 0A": "Improved Guard", 45 | "B5 7D AA 09": "Nimble Defense", 46 | "A8 92 B2 29": "Precise Resilience", 47 | "60 F8 70 14": "Steel Nerves", 48 | "D6 75 AA 74": "Stronghold", 49 | "79 67 1C EC": "Flight over Fight", 50 | "87 4A 79 AF": "Untouchable", 51 | "76 1F E3 B6": "Firm Stance", 52 | "B9 A5 59 37": "Dizzy Resistance", 53 | "81 26 57 FB": "Glaciate Resistance", 54 | "E7 D7 C9 1D": "Held Under Resistance", 55 | "A7 8C 4F D5": "Sandtomb Resistance", 56 | "AF 49 3B 97": "Poison Resistance", 57 | "85 96 FA A2": "Slow Resistance", 58 | "B3 A6 84 7C": "Burn Resistance", 59 | "1F 92 42 22": "Paralysis Resistance", 60 | "0F 86 02 97": "Blight Resistance", 61 | "DD 53 B4 50": "Skill Sealed Resistance", 62 | "82 87 B4 CF": "SBA Sealed Resistance", 63 | "1E 70 4A DD": "Darkflame Resistance", 64 | "91 E1 F2 4B": "Attack Down Resistance", 65 | "B1 60 DE 66": "Defense Down Resistance", 66 | "E0 65 AD 0E": "Natural Defenses", 67 | "2B 37 18 60": "Provoke", 68 | "9E 59 53 00": "Steady Focus", 69 | "9D E3 A8 A1": "Stout Heart", 70 | "F3 3A 88 24": "Potion Hoarder", 71 | "94 46 9A E6": "Guts", 72 | "86 FA F3 95": "Autorevive", 73 | "75 7D 60 DC": "Low Profile", 74 | "EF C5 87 F6": "Fast Learner", 75 | "82 30 6F C8": "Rupie Tycoon", 76 | "E5 2A 42 5E": "Path to Mastery", 77 | "CB 33 20 08": "Crabby Resonance", 78 | "97 98 0D 1B": "Crabvestment Returns", 79 | "3F A9 E8 57": "Sigil Booster", 80 | "E6 B5 D8 9A": "Seven Net", 81 | "75 D7 E1 DB": "Alpha", 82 | "6E DB 2A 8D": "Beta", 83 | "13 2E 86 5C": "Gamma", 84 | "68 02 03 CD": "Fearless Drive", 85 | "E2 10 85 A3": "Fearless Spirit", 86 | "DC 14 DE DA": "Fearless Heart", 87 | "18 D9 FE 3B": "Guardian's Conviction", 88 | "36 63 49 F8": "Guardian's Honor", 89 | "9E FA FD 9A": "Guardian's Warpath", 90 | "74 46 1E 15": "Helmsman's Navigation", 91 | "F0 FD 74 A3": "Helmsman's Tenacity", 92 | "24 4D 6F D7": "Helmsman's Warpath", 93 | "48 EF 8E B4": "Mage's Aspiration", 94 | "F5 E5 AA 11": "Mage's Savvy", 95 | "B3 63 01 C0": "Mage's Warpath", 96 | "48 F5 83 AA": "Veteran's Insight", 97 | "0C 6B 1B 92": "Veteran's Vision", 98 | "1B BE 42 0E": "Veteran's Warpath", 99 | "7F F6 D0 23": "Rose's Blooming", 100 | "A9 C7 A4 C2": "Rose's Profusion", 101 | "4A AD 19 85": "Rose's Warpath", 102 | "70 C1 9D 9A": "Holy Knight's Luster", 103 | "88 23 2E 52": "Holy Knight's Grandeur", 104 | "BC 02 52 B8": "Holy Knight's Warpath", 105 | "2F 23 63 54": "Eternal Rage's Mettle", 106 | "4C 81 1D 45": "Eternal Rage's Ethos", 107 | "F0 6C 02 0F": "Eternal Rage's Warpath", 108 | "3D 22 08 D9": "Phantasm's Concord", 109 | "02 D6 51 73": "Phantasm's Harmony", 110 | "42 D6 39 A3": "Phantasm's Warpath", 111 | "EB 7B B0 29": "Butterfly's Grace", 112 | "CD 89 3B A6": "Butterfly's Valor", 113 | "24 AD D1 FD": "Butterfly's Warpath", 114 | "82 93 DF 8C": "White Dragon's Oath", 115 | "8C 2D 01 D1": "White Dragon's Glory", 116 | "EB CB 16 63": "White Dragon's Warpath", 117 | "74 A7 65 2E": "Hero's Creed", 118 | "68 F8 EF 16": "Hero's Will", 119 | "1C 6C F6 D8": "Hero's Warpath", 120 | "5C 73 0A E6": "Lord's Procession", 121 | "23 52 F0 6F": "Lord's Ambition", 122 | "07 46 50 BA": "Lord's Warpath", 123 | "C4 CD CB 86": "Dragonslayer's Dominance", 124 | "99 45 FA 05": "Dragonslayer's Ingenuity", 125 | "F1 79 D3 C7": "Dragonslayer's Warpath", 126 | "74 F1 3C EC": "Founder's Strategy", 127 | "9D 3A 51 AF": "Founder's Truth", 128 | "34 2E B9 E6": "Founder's Warpath", 129 | "25 C6 D6 0C": "Swordmaster's Prowess", 130 | "20 92 B4 A3": "Swordmaster's Art", 131 | "27 BB EF DA": "Swordmaster's Warpath", 132 | "76 A1 BF 6E": "Crimson's Clout", 133 | "D0 DB D5 F1": "Crimson's Flight", 134 | "17 52 13 4F": "Crimson's Warpath", 135 | "69 E8 40 74": "Ebony's Presence", 136 | "65 41 12 CD": "Ebony's Poise", 137 | "88 BB F9 D7": "Ebony's Warpath", 138 | "F5 09 C8 77": "Spirit Edge's Rally", 139 | "F5 E3 30 92": "Spirit Edge's Fury", 140 | "7A C4 4F 7B": "Spirit Edge's Warpath", 141 | "4D EC 05 EF": "Seven-Star Boundary", 142 | "E0 F8 5F E8": "Dark Huntress's Volley", 143 | "AF B8 72 85": "Dark Huntress's Surge", 144 | "D9 93 B2 81": "Dark Huntress's Warpath", 145 | "AB 14 12 28": "Two-Crown Boundary", 146 | "9B 1E 0D D4": "Supreme Primarch's Awe", 147 | "FC 6D 80 15": "Supreme Primarch's Nimbus", 148 | "06 67 5F 4E": "Supreme Primarch's Warpath", 149 | "9E F5 2E 1A": "Ain", 150 | "3C 09 A2 93": "Versalis Foundation", 151 | "10 C0 D0 7A": "Versalis Ignition", 152 | "34 A6 64 B0": "Versalis' Heart", 153 | "06 CC 89 93": "Improved Healing", 154 | "25 DA 85 60": "Regen", 155 | "4F F7 CF 7C": "Drain", 156 | "E9 12 8D 31": "Quick Cooldown", 157 | "DC EC F2 05": "Cascade", 158 | "D3 9F FF B5": "Uplift", 159 | "0A E1 C8 D2": "Nimble Onslaught", 160 | "D0 69 DD 7E": "Precise Wrath", 161 | "7D A7 18 CD": "Potent Greens", 162 | "2E 48 2C 3F": "Suplplements" 163 | } 164 | -------------------------------------------------------------------------------- /GBGR.Skill.Editor/GBGR.Skill.Editor/Form1.Designer.cs: -------------------------------------------------------------------------------- 1 | namespace GBGR.Skill.Editor 2 | { 3 | partial class Form1 4 | { 5 | /// 6 | /// Required designer variable. 7 | /// 8 | private System.ComponentModel.IContainer components = null; 9 | 10 | /// 11 | /// Clean up any resources being used. 12 | /// 13 | /// true if managed resources should be disposed; otherwise, false. 14 | protected override void Dispose(bool disposing) 15 | { 16 | if (disposing && (components != null)) 17 | { 18 | components.Dispose(); 19 | } 20 | base.Dispose(disposing); 21 | } 22 | 23 | #region Windows Form Designer generated code 24 | 25 | /// 26 | /// Required method for Designer support - do not modify 27 | /// the contents of this method with the code editor. 28 | /// 29 | private void InitializeComponent() 30 | { 31 | System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Form1)); 32 | SkillListComboBox = new ComboBox(); 33 | DataGridView1 = new DataGridView(); 34 | SaveButton = new Button(); 35 | menuStrip1 = new MenuStrip(); 36 | FileToolStripMenuItem = new ToolStripMenuItem(); 37 | OpenToolStripMenuItem = new ToolStripMenuItem(); 38 | SaveAsToolStripMenuItem = new ToolStripMenuItem(); 39 | SkillLabel = new Label(); 40 | LocaleList = new ComboBox(); 41 | ((System.ComponentModel.ISupportInitialize)DataGridView1).BeginInit(); 42 | menuStrip1.SuspendLayout(); 43 | SuspendLayout(); 44 | // 45 | // SkillListComboBox 46 | // 47 | SkillListComboBox.FormattingEnabled = true; 48 | SkillListComboBox.Location = new Point(81, 28); 49 | SkillListComboBox.Name = "SkillListComboBox"; 50 | SkillListComboBox.Size = new Size(208, 23); 51 | SkillListComboBox.TabIndex = 0; 52 | SkillListComboBox.SelectedValueChanged += SkillList_SelectedValueChanged; 53 | // 54 | // DataGridView1 55 | // 56 | DataGridView1.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize; 57 | DataGridView1.Location = new Point(12, 56); 58 | DataGridView1.Name = "DataGridView1"; 59 | DataGridView1.Size = new Size(963, 397); 60 | DataGridView1.TabIndex = 1; 61 | // 62 | // SaveButton 63 | // 64 | SaveButton.Location = new Point(295, 27); 65 | SaveButton.Name = "SaveButton"; 66 | SaveButton.Size = new Size(75, 23); 67 | SaveButton.TabIndex = 2; 68 | SaveButton.Text = "Save"; 69 | SaveButton.UseVisualStyleBackColor = true; 70 | SaveButton.Click += SaveButton_Click; 71 | // 72 | // menuStrip1 73 | // 74 | menuStrip1.Items.AddRange(new ToolStripItem[] { FileToolStripMenuItem }); 75 | menuStrip1.Location = new Point(0, 0); 76 | menuStrip1.Name = "menuStrip1"; 77 | menuStrip1.Size = new Size(987, 24); 78 | menuStrip1.TabIndex = 3; 79 | menuStrip1.Text = "menuStrip1"; 80 | // 81 | // FileToolStripMenuItem 82 | // 83 | FileToolStripMenuItem.DropDownItems.AddRange(new ToolStripItem[] { OpenToolStripMenuItem, SaveAsToolStripMenuItem }); 84 | FileToolStripMenuItem.Name = "FileToolStripMenuItem"; 85 | FileToolStripMenuItem.Size = new Size(38, 20); 86 | FileToolStripMenuItem.Text = "File"; 87 | // 88 | // OpenToolStripMenuItem 89 | // 90 | OpenToolStripMenuItem.Name = "OpenToolStripMenuItem"; 91 | OpenToolStripMenuItem.Size = new Size(117, 22); 92 | OpenToolStripMenuItem.Text = "Open"; 93 | OpenToolStripMenuItem.Click += OpenToolStripMenuItem_Click; 94 | // 95 | // SaveAsToolStripMenuItem 96 | // 97 | SaveAsToolStripMenuItem.Name = "SaveAsToolStripMenuItem"; 98 | SaveAsToolStripMenuItem.Size = new Size(117, 22); 99 | SaveAsToolStripMenuItem.Text = "Save As"; 100 | SaveAsToolStripMenuItem.Click += SaveAsToolStripMenuItem_Click; 101 | // 102 | // SkillLabel 103 | // 104 | SkillLabel.AutoSize = true; 105 | SkillLabel.Location = new Point(12, 31); 106 | SkillLabel.Name = "SkillLabel"; 107 | SkillLabel.Size = new Size(29, 15); 108 | SkillLabel.TabIndex = 4; 109 | SkillLabel.Text = "Skill"; 110 | // 111 | // LocaleList 112 | // 113 | LocaleList.FormattingEnabled = true; 114 | LocaleList.Location = new Point(854, 27); 115 | LocaleList.Name = "LocaleList"; 116 | LocaleList.Size = new Size(121, 23); 117 | LocaleList.TabIndex = 5; 118 | LocaleList.Text = "en-US"; 119 | LocaleList.SelectedValueChanged += LocaleList_SelectedValueChanged; 120 | // 121 | // Form1 122 | // 123 | AutoScaleDimensions = new SizeF(7F, 15F); 124 | AutoScaleMode = AutoScaleMode.Font; 125 | ClientSize = new Size(987, 464); 126 | Controls.Add(LocaleList); 127 | Controls.Add(SkillLabel); 128 | Controls.Add(SaveButton); 129 | Controls.Add(DataGridView1); 130 | Controls.Add(SkillListComboBox); 131 | Controls.Add(menuStrip1); 132 | Icon = (Icon)resources.GetObject("$this.Icon"); 133 | MainMenuStrip = menuStrip1; 134 | Name = "Form1"; 135 | Text = "GBFR Skill Editor"; 136 | ((System.ComponentModel.ISupportInitialize)DataGridView1).EndInit(); 137 | menuStrip1.ResumeLayout(false); 138 | menuStrip1.PerformLayout(); 139 | ResumeLayout(false); 140 | PerformLayout(); 141 | } 142 | 143 | #endregion 144 | 145 | private ComboBox SkillListComboBox; 146 | private DataGridView DataGridView1; 147 | private Button SaveButton; 148 | private MenuStrip menuStrip1; 149 | private ToolStripMenuItem FileToolStripMenuItem; 150 | private ToolStripMenuItem OpenToolStripMenuItem; 151 | private Label SkillLabel; 152 | private ComboBox LocaleList; 153 | private ToolStripMenuItem SaveAsToolStripMenuItem; 154 | } 155 | } 156 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Created by https://www.toptal.com/developers/gitignore/api/visualstudio 2 | # Edit at https://www.toptal.com/developers/gitignore?templates=visualstudio 3 | 4 | ### VisualStudio ### 5 | ## Ignore Visual Studio temporary files, build results, and 6 | ## files generated by popular Visual Studio add-ons. 7 | ## 8 | ## Get latest from https://github.com/github/gitignore/blob/main/VisualStudio.gitignore 9 | 10 | # User-specific files 11 | *.rsuser 12 | *.suo 13 | *.user 14 | *.userosscache 15 | *.sln.docstates 16 | 17 | # User-specific files (MonoDevelop/Xamarin Studio) 18 | *.userprefs 19 | 20 | # Mono auto generated files 21 | mono_crash.* 22 | 23 | # Build results 24 | [Dd]ebug/ 25 | [Dd]ebugPublic/ 26 | [Rr]elease/ 27 | [Rr]eleases/ 28 | x64/ 29 | x86/ 30 | [Ww][Ii][Nn]32/ 31 | [Aa][Rr][Mm]/ 32 | [Aa][Rr][Mm]64/ 33 | bld/ 34 | [Bb]in/ 35 | [Oo]bj/ 36 | [Ll]og/ 37 | [Ll]ogs/ 38 | 39 | # Visual Studio 2015/2017 cache/options directory 40 | .vs/ 41 | # Uncomment if you have tasks that create the project's static files in wwwroot 42 | #wwwroot/ 43 | 44 | # Visual Studio 2017 auto generated files 45 | Generated\ Files/ 46 | 47 | # MSTest test Results 48 | [Tt]est[Rr]esult*/ 49 | [Bb]uild[Ll]og.* 50 | 51 | # NUnit 52 | *.VisualState.xml 53 | TestResult.xml 54 | nunit-*.xml 55 | 56 | # Build Results of an ATL Project 57 | [Dd]ebugPS/ 58 | [Rr]eleasePS/ 59 | dlldata.c 60 | 61 | # Benchmark Results 62 | BenchmarkDotNet.Artifacts/ 63 | 64 | # .NET Core 65 | project.lock.json 66 | project.fragment.lock.json 67 | artifacts/ 68 | 69 | # ASP.NET Scaffolding 70 | ScaffoldingReadMe.txt 71 | 72 | # StyleCop 73 | StyleCopReport.xml 74 | 75 | # Files built by Visual Studio 76 | *_i.c 77 | *_p.c 78 | *_h.h 79 | *.ilk 80 | *.meta 81 | *.obj 82 | *.iobj 83 | *.pch 84 | *.pdb 85 | *.ipdb 86 | *.pgc 87 | *.pgd 88 | *.rsp 89 | *.sbr 90 | *.tlb 91 | *.tli 92 | *.tlh 93 | *.tmp 94 | *.tmp_proj 95 | *_wpftmp.csproj 96 | *.log 97 | *.tlog 98 | *.vspscc 99 | *.vssscc 100 | .builds 101 | *.pidb 102 | *.svclog 103 | *.scc 104 | 105 | # Chutzpah Test files 106 | _Chutzpah* 107 | 108 | # Visual C++ cache files 109 | ipch/ 110 | *.aps 111 | *.ncb 112 | *.opendb 113 | *.opensdf 114 | *.sdf 115 | *.cachefile 116 | *.VC.db 117 | *.VC.VC.opendb 118 | 119 | # Visual Studio profiler 120 | *.psess 121 | *.vsp 122 | *.vspx 123 | *.sap 124 | 125 | # Visual Studio Trace Files 126 | *.e2e 127 | 128 | # TFS 2012 Local Workspace 129 | $tf/ 130 | 131 | # Guidance Automation Toolkit 132 | *.gpState 133 | 134 | # ReSharper is a .NET coding add-in 135 | _ReSharper*/ 136 | *.[Rr]e[Ss]harper 137 | *.DotSettings.user 138 | 139 | # TeamCity is a build add-in 140 | _TeamCity* 141 | 142 | # DotCover is a Code Coverage Tool 143 | *.dotCover 144 | 145 | # AxoCover is a Code Coverage Tool 146 | .axoCover/* 147 | !.axoCover/settings.json 148 | 149 | # Coverlet is a free, cross platform Code Coverage Tool 150 | coverage*.json 151 | coverage*.xml 152 | coverage*.info 153 | 154 | # Visual Studio code coverage results 155 | *.coverage 156 | *.coveragexml 157 | 158 | # NCrunch 159 | _NCrunch_* 160 | .*crunch*.local.xml 161 | nCrunchTemp_* 162 | 163 | # MightyMoose 164 | *.mm.* 165 | AutoTest.Net/ 166 | 167 | # Web workbench (sass) 168 | .sass-cache/ 169 | 170 | # Installshield output folder 171 | [Ee]xpress/ 172 | 173 | # DocProject is a documentation generator add-in 174 | DocProject/buildhelp/ 175 | DocProject/Help/*.HxT 176 | DocProject/Help/*.HxC 177 | DocProject/Help/*.hhc 178 | DocProject/Help/*.hhk 179 | DocProject/Help/*.hhp 180 | DocProject/Help/Html2 181 | DocProject/Help/html 182 | 183 | # Click-Once directory 184 | publish/ 185 | 186 | # Publish Web Output 187 | *.[Pp]ublish.xml 188 | *.azurePubxml 189 | # Note: Comment the next line if you want to checkin your web deploy settings, 190 | # but database connection strings (with potential passwords) will be unencrypted 191 | *.pubxml 192 | *.publishproj 193 | 194 | # Microsoft Azure Web App publish settings. Comment the next line if you want to 195 | # checkin your Azure Web App publish settings, but sensitive information contained 196 | # in these scripts will be unencrypted 197 | PublishScripts/ 198 | 199 | # NuGet Packages 200 | *.nupkg 201 | # NuGet Symbol Packages 202 | *.snupkg 203 | # The packages folder can be ignored because of Package Restore 204 | **/[Pp]ackages/* 205 | # except build/, which is used as an MSBuild target. 206 | !**/[Pp]ackages/build/ 207 | # Uncomment if necessary however generally it will be regenerated when needed 208 | #!**/[Pp]ackages/repositories.config 209 | # NuGet v3's project.json files produces more ignorable files 210 | *.nuget.props 211 | *.nuget.targets 212 | 213 | # Microsoft Azure Build Output 214 | csx/ 215 | *.build.csdef 216 | 217 | # Microsoft Azure Emulator 218 | ecf/ 219 | rcf/ 220 | 221 | # Windows Store app package directories and files 222 | AppPackages/ 223 | BundleArtifacts/ 224 | Package.StoreAssociation.xml 225 | _pkginfo.txt 226 | *.appx 227 | *.appxbundle 228 | *.appxupload 229 | 230 | # Visual Studio cache files 231 | # files ending in .cache can be ignored 232 | *.[Cc]ache 233 | # but keep track of directories ending in .cache 234 | !?*.[Cc]ache/ 235 | 236 | # Others 237 | ClientBin/ 238 | ~$* 239 | *~ 240 | *.dbmdl 241 | *.dbproj.schemaview 242 | *.jfm 243 | *.pfx 244 | *.publishsettings 245 | orleans.codegen.cs 246 | 247 | # Including strong name files can present a security risk 248 | # (https://github.com/github/gitignore/pull/2483#issue-259490424) 249 | #*.snk 250 | 251 | # Since there are multiple workflows, uncomment next line to ignore bower_components 252 | # (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) 253 | #bower_components/ 254 | 255 | # RIA/Silverlight projects 256 | Generated_Code/ 257 | 258 | # Backup & report files from converting an old project file 259 | # to a newer Visual Studio version. Backup files are not needed, 260 | # because we have git ;-) 261 | _UpgradeReport_Files/ 262 | Backup*/ 263 | UpgradeLog*.XML 264 | UpgradeLog*.htm 265 | ServiceFabricBackup/ 266 | *.rptproj.bak 267 | 268 | # SQL Server files 269 | *.mdf 270 | *.ldf 271 | *.ndf 272 | 273 | # Business Intelligence projects 274 | *.rdl.data 275 | *.bim.layout 276 | *.bim_*.settings 277 | *.rptproj.rsuser 278 | *- [Bb]ackup.rdl 279 | *- [Bb]ackup ([0-9]).rdl 280 | *- [Bb]ackup ([0-9][0-9]).rdl 281 | 282 | # Microsoft Fakes 283 | FakesAssemblies/ 284 | 285 | # GhostDoc plugin setting file 286 | *.GhostDoc.xml 287 | 288 | # Node.js Tools for Visual Studio 289 | .ntvs_analysis.dat 290 | node_modules/ 291 | 292 | # Visual Studio 6 build log 293 | *.plg 294 | 295 | # Visual Studio 6 workspace options file 296 | *.opt 297 | 298 | # Visual Studio 6 auto-generated workspace file (contains which files were open etc.) 299 | *.vbw 300 | 301 | # Visual Studio 6 auto-generated project file (contains which files were open etc.) 302 | *.vbp 303 | 304 | # Visual Studio 6 workspace and project file (working project files containing files to include in project) 305 | *.dsw 306 | *.dsp 307 | 308 | # Visual Studio 6 technical files 309 | 310 | # Visual Studio LightSwitch build output 311 | **/*.HTMLClient/GeneratedArtifacts 312 | **/*.DesktopClient/GeneratedArtifacts 313 | **/*.DesktopClient/ModelManifest.xml 314 | **/*.Server/GeneratedArtifacts 315 | **/*.Server/ModelManifest.xml 316 | _Pvt_Extensions 317 | 318 | # Paket dependency manager 319 | .paket/paket.exe 320 | paket-files/ 321 | 322 | # FAKE - F# Make 323 | .fake/ 324 | 325 | # CodeRush personal settings 326 | .cr/personal 327 | 328 | # Python Tools for Visual Studio (PTVS) 329 | __pycache__/ 330 | *.pyc 331 | 332 | # Cake - Uncomment if you are using it 333 | # tools/** 334 | # !tools/packages.config 335 | 336 | # Tabs Studio 337 | *.tss 338 | 339 | # Telerik's JustMock configuration file 340 | *.jmconfig 341 | 342 | # BizTalk build output 343 | *.btp.cs 344 | *.btm.cs 345 | *.odx.cs 346 | *.xsd.cs 347 | 348 | # OpenCover UI analysis results 349 | OpenCover/ 350 | 351 | # Azure Stream Analytics local run output 352 | ASALocalRun/ 353 | 354 | # MSBuild Binary and Structured Log 355 | *.binlog 356 | 357 | # NVidia Nsight GPU debugger configuration file 358 | *.nvuser 359 | 360 | # MFractors (Xamarin productivity tool) working folder 361 | .mfractor/ 362 | 363 | # Local History for Visual Studio 364 | .localhistory/ 365 | 366 | # Visual Studio History (VSHistory) files 367 | .vshistory/ 368 | 369 | # BeatPulse healthcheck temp database 370 | healthchecksdb 371 | 372 | # Backup folder for Package Reference Convert tool in Visual Studio 2017 373 | MigrationBackup/ 374 | 375 | # Ionide (cross platform F# VS Code tools) working folder 376 | .ionide/ 377 | 378 | # Fody - auto-generated XML schema 379 | FodyWeavers.xsd 380 | 381 | # VS Code files for those working on multiple tools 382 | .vscode/* 383 | !.vscode/settings.json 384 | !.vscode/tasks.json 385 | !.vscode/launch.json 386 | !.vscode/extensions.json 387 | *.code-workspace 388 | 389 | # Local History for Visual Studio Code 390 | .history/ 391 | 392 | # Windows Installer files from build outputs 393 | *.cab 394 | *.msi 395 | *.msix 396 | *.msm 397 | *.msp 398 | 399 | # JetBrains Rider 400 | *.sln.iml 401 | 402 | ### VisualStudio Patch ### 403 | # Additional files built by Visual Studio 404 | 405 | # End of https://www.toptal.com/developers/gitignore/api/visualstudio 406 | 407 | *.ico 408 | *.png -------------------------------------------------------------------------------- /GBGR.Skill.Editor/GBGR.Skill.Editor/Form1.cs: -------------------------------------------------------------------------------- 1 | using System.Data; 2 | using Newtonsoft.Json; 3 | 4 | namespace GBGR.Skill.Editor 5 | { 6 | public partial class Form1 : Form 7 | { 8 | internal static string CurrentSkillId = ""; 9 | internal static string CurrentLocale = ""; 10 | internal static string EditedStr = ""; 11 | internal static string NullStr = "00-00-00-00-"; 12 | internal static string OrignalStr = ""; 13 | internal static string StartStr = ""; 14 | 15 | internal static int SkillIndex = 0; 16 | internal static int SkillLength = 0; 17 | 18 | internal static bool InitToken = true; 19 | internal static bool isNewSave = true; 20 | 21 | internal static List LocaleDropDown = []; 22 | internal static List SkillList = []; 23 | internal static List UiText = []; 24 | 25 | internal static DataTable Dt = new(); 26 | internal static OpenFileDialog? OpenFileDialog; 27 | internal static SaveFileDialog? SaveFileDialog; 28 | 29 | public Form1() 30 | { 31 | InitializeComponent(); 32 | LoadUiText(); 33 | } 34 | 35 | private void SaveButton_Click(object sender, EventArgs e) 36 | { 37 | SaveTblFile(); 38 | } 39 | 40 | private void OpenToolStripMenuItem_Click(object sender, EventArgs e) 41 | { 42 | OpenTblFile(); 43 | } 44 | 45 | private void SkillList_SelectedValueChanged(object sender, EventArgs e) 46 | { 47 | GetCurrentSkillId(); 48 | 49 | if (CurrentSkillId == "B0 E0 7A 88" || CurrentSkillId == "") 50 | return; 51 | 52 | GetSkillParameter(); 53 | 54 | LoadSkillParameterToDataTable(); 55 | } 56 | 57 | private void LocaleList_SelectedValueChanged(object sender, EventArgs e) 58 | { 59 | GetCurrentLocale(); 60 | 61 | LocaleInit(CurrentLocale); 62 | 63 | if (OrignalStr != "") 64 | { 65 | LoadSkillList(); 66 | } 67 | } 68 | 69 | private void SaveAsToolStripMenuItem_Click(object sender, EventArgs e) 70 | { 71 | isNewSave = true; 72 | 73 | if (OrignalStr != "") 74 | { 75 | SaveTblFile(); 76 | } 77 | } 78 | 79 | private void InitDataTable() 80 | { 81 | Dt = new DataTable(); 82 | 83 | Dt.Columns.Add("Level (lv)"); 84 | Dt.Columns.Add("Param 1"); 85 | Dt.Columns.Add("Param 2"); 86 | Dt.Columns.Add("Param 3"); 87 | Dt.Columns.Add("Param 4"); 88 | Dt.Columns.Add("Param 5"); 89 | Dt.Columns.Add("Param 6"); 90 | Dt.Columns.Add("Skill ID").ReadOnly = true; 91 | Dt.Columns.Add("Unique ID").ReadOnly = true; 92 | 93 | DataGridView1.DataSource = Dt; 94 | } 95 | 96 | private void GetCurrentSkillId() 97 | { 98 | if (InitToken && OrignalStr == "") 99 | { 100 | return; 101 | } 102 | 103 | var skill = (Skill)SkillListComboBox.SelectedItem!; 104 | 105 | CurrentSkillId = skill.Id; 106 | } 107 | 108 | private void GetSkillParameter() 109 | { 110 | var skillId = CurrentSkillId.Replace(" ", "-"); 111 | int lastIndex = 0; 112 | 113 | var indexList = new List(); 114 | var skillList = new List(); 115 | // 每個Skill Level 字串長度為108 116 | 117 | while ((lastIndex = OrignalStr.IndexOf(skillId, lastIndex)) != -1) 118 | { 119 | var currentIndex = lastIndex - 72; 120 | 121 | indexList.Add(currentIndex); 122 | skillList.Add(OrignalStr.Substring(currentIndex, 108)); 123 | lastIndex += skillId.Length; 124 | } 125 | 126 | SkillIndex = indexList[0]; 127 | SkillLength = indexList.Count * 108; 128 | SkillList = skillList; 129 | } 130 | 131 | private void LoadSkillParameterToDataTable() 132 | { 133 | Dt.Clear(); 134 | 135 | foreach (var item in SkillList) 136 | { 137 | var temp = item.Split("-"); 138 | 139 | var row = Dt.NewRow(); 140 | 141 | // - Level 142 | row[0] = Convert.ToInt32(temp[32], 16); 143 | // - Param 1 144 | row[1] = BitConverter.ToSingle([Convert.ToByte(temp[0], 16), Convert.ToByte(temp[1], 16), Convert.ToByte(temp[2], 16), Convert.ToByte(temp[3], 16)]); 145 | // - Param 2 146 | row[2] = BitConverter.ToSingle([Convert.ToByte(temp[4], 16), Convert.ToByte(temp[5], 16), Convert.ToByte(temp[6], 16), Convert.ToByte(temp[7], 16)]); 147 | // - Param 3 148 | row[3] = BitConverter.ToSingle([Convert.ToByte(temp[8], 16), Convert.ToByte(temp[9], 16), Convert.ToByte(temp[10], 16), Convert.ToByte(temp[11], 16)]); 149 | // - Param 4 150 | row[4] = BitConverter.ToSingle([Convert.ToByte(temp[12], 16), Convert.ToByte(temp[13], 16), Convert.ToByte(temp[14], 16), Convert.ToByte(temp[15], 16)]); 151 | // - Param 5 152 | row[5] = BitConverter.ToSingle([Convert.ToByte(temp[16], 16), Convert.ToByte(temp[17], 16), Convert.ToByte(temp[18], 16), Convert.ToByte(temp[19], 16)]); 153 | // - Param 6 154 | row[6] = BitConverter.ToSingle([Convert.ToByte(temp[20], 16), Convert.ToByte(temp[21], 16), Convert.ToByte(temp[22], 16), Convert.ToByte(temp[23], 16)]); 155 | // - Skill ID 156 | row[7] = temp[24] + "-" + temp[25] + "-" + temp[26] + "-" + temp[27] + "-"; 157 | // - Unique Id 158 | row[8] = temp[28] + "-" + temp[29] + "-" + temp[30] + "-" + temp[31] + "-"; 159 | Dt.Rows.Add(row); 160 | } 161 | } 162 | 163 | private string ReturnHexString() 164 | { 165 | // 9 SET 166 | // 1 Param 1 167 | // 2 Param 2 168 | // 3 Param 3 169 | // 4 None 170 | // 5 None 171 | // 6 None 172 | // 7 Skill Id 173 | // 8 Unique Skill Id 174 | // 9 Skill Level 175 | 176 | var editedSkill = string.Empty; 177 | 178 | foreach (DataRow row in Dt.Rows) 179 | { 180 | var param1 = ConvertToHex(row, 1) + "-"; 181 | var param2 = ConvertToHex(row, 2) + "-"; 182 | var param3 = ConvertToHex(row, 3) + "-"; 183 | var param4 = ConvertToHex(row, 4) + "-"; 184 | var param5 = ConvertToHex(row, 5) + "-"; 185 | var param6 = ConvertToHex(row, 6) + "-"; 186 | var skillId = row[7] + "" + row[8]; 187 | 188 | var level = Convert.ToInt32(row[0]).ToString("X2") + "-00-00-00-"; 189 | 190 | // SkillId: 9B-1A-F1-71-FC-05-A8-7B- 191 | // level: 01-00-00-00- 192 | var tempSkill = param1 + param2 + param3 + param4 + param5 + param6 + skillId + level; 193 | 194 | editedSkill += tempSkill; 195 | } 196 | 197 | return editedSkill; 198 | } 199 | 200 | private string ConvertToHex(DataRow row, int column) 201 | { 202 | return BitConverter.ToString(BitConverter.GetBytes(Convert.ToSingle(row[column]))); 203 | } 204 | 205 | private byte[] SaveToByteArray() 206 | { 207 | EditedStr = OrignalStr[..SkillIndex] + ReturnHexString() + OrignalStr[(SkillIndex + SkillLength)..]; 208 | 209 | // 賦值給存檔時不用再讀取新檔案位元 210 | var replacedString = StartStr + EditedStr; 211 | 212 | var replaced = replacedString.Trim('-').Split("-"); 213 | var byteArray = new List(); 214 | 215 | foreach (var item in replaced) 216 | { 217 | byteArray.Add(Convert.ToByte(Convert.ToInt32(item, 16))); 218 | } 219 | 220 | return [.. byteArray]; 221 | } 222 | 223 | private void LoadSkillList() 224 | { 225 | #if DEBUG 226 | var json = File.ReadAllText($"E:\\repo\\GBFR.Skill.Editor\\locale\\{CurrentLocale}.json"); 227 | #else 228 | var json = File.ReadAllText($".\\locale\\{CurrentLocale}.json"); 229 | #endif 230 | 231 | var skillDict = JsonConvert.DeserializeObject>(json)!; 232 | var skillList = new List(); 233 | 234 | foreach (var item in skillDict) 235 | { 236 | var skill = new Skill 237 | { 238 | Id = item.Key, 239 | Name = item.Value, 240 | }; 241 | 242 | skillList.Add(skill); 243 | } 244 | 245 | SkillListComboBox.DataSource = skillList; 246 | SkillListComboBox.DisplayMember = "Name"; 247 | } 248 | 249 | private void LoadUiText() 250 | { 251 | #if DEBUG 252 | var uIjson = File.ReadAllText("E:\\repo\\GBFR.Skill.Editor\\locale\\Ui.json"); 253 | #else 254 | var uIjson = File.ReadAllText(".\\locale\\Ui.json"); 255 | #endif 256 | 257 | UiText = JsonConvert.DeserializeObject>(uIjson)!; 258 | 259 | LocaleList.DataSource = UiText.Select(x => x.Code).ToList(); 260 | } 261 | 262 | private void LocaleInit(string locale) 263 | { 264 | var currentUiText = UiText.Where(x => x.Code == locale).First(); 265 | 266 | FileToolStripMenuItem.Text = currentUiText.FileToolStripMenuItem; 267 | OpenToolStripMenuItem.Text = currentUiText.OpenToolStripMenuItem; 268 | SaveAsToolStripMenuItem.Text = currentUiText.SaveAsToolStripMenuItem; 269 | SaveButton.Text = currentUiText.SaveButton; 270 | SkillLabel.Text = currentUiText.SkillLabel; 271 | } 272 | 273 | private void GetCurrentLocale() 274 | { 275 | CurrentLocale = LocaleList.SelectedItem != null ? LocaleList.SelectedItem.ToString()! : LocaleList.SelectedText!; 276 | } 277 | 278 | #region SaveTblFile 儲存Tbl檔案 279 | private void SaveTblFile() 280 | { 281 | SaveFileDialog ??= new SaveFileDialog 282 | { 283 | Filter = "tbl files (*.tbl)|*.tbl", 284 | Title = "Save File", 285 | FileName = "skill_status.tbl" // 預設檔案名稱 286 | }; 287 | 288 | var byteArray = SaveToByteArray(); 289 | 290 | if (!isNewSave) 291 | { 292 | File.WriteAllBytes(SaveFileDialog.FileName, [.. byteArray]); 293 | } 294 | // 顯示對話框並檢查使用者是否按下了「保存」按鈕 295 | else if (SaveFileDialog.ShowDialog() == DialogResult.OK) 296 | { 297 | File.WriteAllBytes(SaveFileDialog.FileName, [.. byteArray]); 298 | isNewSave = false; 299 | } 300 | else 301 | { 302 | return; 303 | } 304 | 305 | OrignalStr = EditedStr; 306 | 307 | MessageBox.Show("Save Success", "Success", MessageBoxButtons.OK, MessageBoxIcon.None); 308 | } 309 | #endregion 310 | 311 | #region OpenTblFile 開啟Tbl檔案 312 | private void OpenTblFile() 313 | { 314 | isNewSave = true; 315 | 316 | OpenFileDialog ??= new OpenFileDialog 317 | { 318 | Title = "Select File", 319 | #if DEBUG 320 | InitialDirectory = "D:\\Desktop\\Reloaded-II\\Mods\\gbfr.custom.skill.level\\GBFR\\data\\system\\table", 321 | #endif 322 | Filter = "tbl files (*.tbl)|*.tbl" 323 | }; 324 | 325 | if (OpenFileDialog.ShowDialog() == DialogResult.OK) 326 | { 327 | InitDataTable(); 328 | LoadSkillList(); 329 | } 330 | else 331 | { 332 | return; 333 | } 334 | 335 | var ms = new MemoryStream(); 336 | 337 | OpenFileDialog.OpenFile().CopyTo(ms); 338 | 339 | byte[] dataByte = ms.ToArray(); 340 | 341 | var str = BitConverter.ToString(dataByte, 0, dataByte.Length); 342 | StartStr = str[..24]; 343 | 344 | // 2024/03/08 fix Crabvestment Returns issue 345 | OrignalStr = str[24..] + "-"; 346 | } 347 | #endregion 348 | } 349 | } 350 | --------------------------------------------------------------------------------