├── 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 |
--------------------------------------------------------------------------------