|
3 | 3 |
|
4 | 4 | #include "stdafx.h" |
5 | 5 | #pragma comment (lib, "Version.lib") |
6 | | - |
| 6 | +void TEST(char* In, char*In2, char*Out); |
7 | 7 | BOOL GetFileVersion() |
8 | 8 | { |
9 | 9 |
|
@@ -89,42 +89,56 @@ int main(int argc, char *argv[]) |
89 | 89 | printf("\n [SpaceEngine 汉化生成器 1.0.0.7]\n\n"); |
90 | 90 | Color(0x7); |
91 | 91 | if (argc == 3) { |
| 92 | + printf("[翻译模式]\n"); |
92 | 93 | WCharAdd.WMainInit(); |
93 | 94 | TEST(argv[1], argv[2]); |
94 | 95 | } |
95 | 96 | else if (argc==5) { |
| 97 | + printf("[读取内存模式]\n"); |
96 | 98 | ReadAdd RA(argv[1], argv[2], argv[3],atoi(argv[4])); |
97 | 99 |
|
98 | 100 |
|
99 | 101 | } |
100 | 102 | else if (argc==4) { |
| 103 | + if(strstr(argv[3],"%")!=0){ printf("[读取CEXML模式]\n"); |
101 | 104 | GetOff GF(argv[1], argv[2], argv[3]); |
| 105 | + } |
| 106 | + else { |
| 107 | + printf("[排除模式]\n"); |
| 108 | + TEST(argv[1], argv[2], argv[3]); } |
102 | 109 |
|
103 | 110 | } |
104 | 111 | else { |
105 | 112 |
|
106 | 113 | Color(0XA); |
107 | | - printf("\n用法: %s [输入文件] [输出文件]\n 读取SE内存: %s [偏移列表文件] [输出文件] [输出格式] [PID] \n CE XML格式地址析出 %s [输入文件] [输出文件] [输出格式]", argv[0], argv[0], argv[0]); |
| 114 | + printf("\n用法: 自动翻译: %s [输入文件] [输出文件]\n 排除翻译: %s [输入文件] [排除列表文件] [输出文件]\n 读取SE内存: %s [偏移列表文件] [输出文件] [输出格式] [PID] \n CE XML格式地址析出 %s [输入文件] [输出文件] [输出格式]", argv[0], argv[0], argv[0], argv[0]); |
108 | 115 | Color(0xC); |
109 | | - printf("\n [翻译模式] 输入文件必须使用Unicode编码,现在存在FontConfig\\FontTexture字符的行会被忽略.\n"); |
| 116 | + printf("\n [翻译模式] 输入文件必须使用Unicode编码,现在存在FontConfig\\FontTexture字符的行会被忽略,请以空行结尾.\n"); |
110 | 117 | Color(0x7); |
111 | 118 | printf("\n 程序目录下需要Config.ini字符配置文件 若不存在则自动创建\n 翻译一行一个\n 要复制的话最好用UE的[用户剪切板(ctrl+数字)]去复制,系统剪切板会破坏内容\n 即便如此,有时一些内容仍然会被破坏,请自行检查.重点检查换行是否正常(一般是被插入0A)\n 错误的字节用16进制编辑删除.\n \n示例"); |
112 | 119 | Color(0xB); |
113 | | - printf("\n 命令: %s gui.txt chs-gui.cfg\n ", argv[0]); |
| 120 | + printf("\n 命令: %s gui.txt chs-gui.cfg\n", argv[0]); |
114 | 121 | Color(0xE); |
115 | | - printf("输入文件内容: \"SYSTEM\" \"系统\" \n"); |
| 122 | + printf(" 输入文件内容: \"SYSTEM\" \"系统\" \n"); |
| 123 | + |
| 124 | + Color(0x7); |
| 125 | + printf("\n [排除翻译] 排除列表文件内粘贴SE.log里提示的未知翻译 输出过滤后的翻译,过滤对于某版本无用的翻译可以增加加载速度\n示例"); |
| 126 | + Color(0xB); |
| 127 | + printf("\n 命令: %s gui.txt exc.txt gui2.txt\n ", argv[0]); |
116 | 128 | Color(0x7); |
117 | | - printf("\n [读取内存模式] 根据文件内偏移读取内存并输出到文件 格式化需要两个格式化参数 %%X或%%d 和%%s 详参printf函数输出格式"); |
| 129 | + |
| 130 | + Color(0x7); |
| 131 | + printf("\n [读取内存模式] 根据文件内偏移读取内存并输出到文件 格式化需要两个格式化参数 %%X或%%d 和%%s 详参printf函数输出格式,"); |
118 | 132 | Color(0xC); |
119 | 133 | printf("\n 若仍不了解请使用示例格式 0x00 %%X = %%s\n 输入文件内必须是偏移值而不是内存地址 错误的偏移值可能会导致程序爆炸 "); |
120 | 134 | Color(0x7); |
121 | | - printf("\n 用CE搜个绿色基址然后点开看到后面的XXX.exe + ABCD... 的 + XXX部分就是偏移了\n PID是进程ID 打开任务管理器看"); |
| 135 | + printf("\n 用CE搜个绿色基址然后点开看到后面的XXX.exe + ABCD... 的 + XXX部分就是偏移了\n PID是进程ID 打开任务管理器看 此功能用于汉化无法通过gui.cfg改变的字串\n示例"); |
122 | 136 | Color(0xB); |
123 | | - printf("\n 命令: %s offset.txt out.txt 0x00%%X=%%s \n ", argv[0]); |
| 137 | + printf("\n 命令: %s offset.txt out.txt 0x00%%X=%%s [PID] \n ", argv[0]); |
124 | 138 | Color(0xE); |
125 | 139 | printf("输入文件内容: 0x0012345 \n"); |
126 | 140 | Color(0x7); |
127 | | - printf("\n [CE XML地址析出] 从CE内复制的地址是XML格式的 无法直接进行读取,故添加此功能 用于配合[读取内存模式]\n 输出格式同上 %%s输出 程序+偏移 %%d或%%X 只输出偏移"); |
| 141 | + printf("\n [CE XML地址析出] 从CE内复制的地址是XML格式的 无法直接进行读取,故添加此功能 用于配合[读取内存模式]\n 输出格式同上 %%s输出 程序+偏移 %%d或%%X 只输出偏移 \n示例"); |
128 | 142 | Color(0xB); |
129 | 143 | printf("\n 命令: %s ce.txt ceout.txt %%s\n %s ce.txt ceout.txt %%d\n %s ce.txt ceout.txt %%X\n ", argv[0], argv[0], argv[0]); |
130 | 144 | Color(0x7); |
@@ -171,6 +185,95 @@ int main(int argc, char *argv[]) |
171 | 185 | CloseHandle(hHandle); |
172 | 186 | return 0; |
173 | 187 | } |
| 188 | +std::vector<std::wstring> wstrv; |
| 189 | + |
| 190 | +void TEST(char* In, char*In2,char*Out) { |
| 191 | + FILE*fp, *fp2,*fp3; |
| 192 | + fopen_s(&fp, In, "rb"); |
| 193 | + fopen_s(&fp2, In2, "rb"); |
| 194 | + fopen_s(&fp3, Out, "wb+"); |
| 195 | + if (fp == 0|| fp3 == 0 || fp2 == 0) { |
| 196 | + printf("打开文件失败"); |
| 197 | + return; |
| 198 | + } |
| 199 | + fseek(fp2, 0, SEEK_END); |
| 200 | + size_t len = ftell(fp2) / 2; |
| 201 | + wchar_t *buf2 = new WCHAR[len]; |
| 202 | + rewind(fp2); |
| 203 | + fread(buf2, sizeof(wchar_t), len, fp2); |
| 204 | + //std::wstring ws = buf2; |
| 205 | + size_t l = 0,st=0; |
| 206 | + WCHAR P = 0; |
| 207 | + std::wstring ws; |
| 208 | + printf("读取排除列表\n"); |
| 209 | + while (l < len) { |
| 210 | + P = buf2[l++]; |
| 211 | + |
| 212 | + if (P == '"') { st++; |
| 213 | + continue; |
| 214 | + } |
| 215 | + if (P == '\r'|| P == '\n')st = 0; |
| 216 | + else if (st == 1&&P!='"') { |
| 217 | + ws.push_back(P); |
| 218 | + |
| 219 | + } |
| 220 | + else if (st == 2) { |
| 221 | + if(ws.size()>0){ |
| 222 | + wstrv.push_back(ws); |
| 223 | + ws.clear(); |
| 224 | + } |
| 225 | + //st = 0; |
| 226 | + //st = 0; |
| 227 | + } |
| 228 | + |
| 229 | + |
| 230 | + } |
| 231 | + delete[] buf2; |
| 232 | + fseek(fp, 0, SEEK_END); |
| 233 | + len = ftell(fp) / 2; |
| 234 | + rewind(fp); |
| 235 | + wchar_t *buf = new WCHAR[len]; |
| 236 | + fread(buf, sizeof(wchar_t), len, fp); |
| 237 | + buf[0] = ' ', buf[len - 1] = 0; |
| 238 | + |
| 239 | + l = 0; |
| 240 | + st = 0; |
| 241 | + ws.clear(); |
| 242 | + printf("开始排除\n"); |
| 243 | + std::wstring TMP; |
| 244 | + while (l <len) { |
| 245 | + P= buf[l++]; |
| 246 | + ws.push_back(P); |
| 247 | + if (P == '"')st++; |
| 248 | + if (st == 1 && P != '"')TMP.push_back(P); |
| 249 | + if (P == '\r' || P == '\n'){ |
| 250 | + st = 0; |
| 251 | + if (ws.size() > 4) { |
| 252 | + for (std::vector < std::wstring>::iterator it = wstrv.begin();it != wstrv.end();it++){ |
| 253 | + // if(ws.find(L"Accelerating")!=std::string::npos) printf("W2[%d]:[%d] %ws\n", ws.size(), TMP.size(), ws.c_str()); |
| 254 | + if ((*it).compare(TMP) == 0) { TMP.clear(), ws.clear(); } |
| 255 | + } |
| 256 | + |
| 257 | + //WCharAdd.Start(ws, &str); |
| 258 | + // printf("W2[%d]\n", ws.size()); |
| 259 | + if(ws.size()>0){ |
| 260 | + if (ws.find('\n') == std::wstring::npos)ws.push_back('\n'); |
| 261 | + fwrite(ws.c_str(), sizeof(WCHAR), ws.size(), fp3); |
| 262 | + ws.clear(); |
| 263 | + } |
| 264 | + } |
| 265 | + |
| 266 | + TMP.clear(); |
| 267 | + //st = 0; |
| 268 | + //st = 0; |
| 269 | + } |
| 270 | + |
| 271 | + } |
| 272 | + delete[] buf; |
| 273 | + fclose(fp); |
| 274 | + fclose(fp2); |
| 275 | + fclose(fp3); |
| 276 | +} |
174 | 277 |
|
175 | 278 | void TEST(char* In, char*Out) { |
176 | 279 | FILE*fp, *fp2; |
@@ -201,6 +304,7 @@ void TEST(char* In, char*Out) { |
201 | 304 | } |
202 | 305 | i++,j++; |
203 | 306 | } |
| 307 | + delete[] buf; |
204 | 308 | fclose(fp); |
205 | 309 | fclose(fp2); |
206 | 310 | } |
0 commit comments