diff --git a/README.md b/README.md
index f847e4a..582451f 100644
--- a/README.md
+++ b/README.md
@@ -20,61 +20,61 @@ mm6chupchangekey.exe 文件路径及名称 功能1 按键1 功能2 按键2 ...
其中,功能可以是以下之一(以下括号中是注释,请不要在命令行中输入括号和其中的内容):
-* alwaysrun(是否总是奔跑)
-* fliponexit(离开房屋时是否转身)
-* forward(前进)
-* back(后退)
-* "turn left"(左转)
-* "turn right"(右转)
-* yell(呐喊)
-* jump(跳跃)
-* "toggle turnbase"(切换回合制/即时制)
-* inspect(调查前方事物)
-* "skip character"(切换到下一个队员)
-* "cast quick spell"(施展备用魔法)
-* attack(使用武器攻击)
-* "fly up"(向上飞)
-* "fly down"(向下飞)
-* land(降落)
+* `alwaysrun`(是否总是奔跑)
+* `fliponexit`(离开房屋时是否转身)
+* `forward`(前进)
+* `back`(后退)
+* `"turn left"`(左转)
+* `"turn right"`(右转)
+* `yell`(呐喊)
+* `jump`(跳跃)
+* `"toggle turnbase"`(切换回合制/即时制)
+* `inspect`(调查前方事物)
+* `"skip character"`(切换到下一个队员)
+* `"cast quick spell"`(施展备用魔法)
+* `attack`(使用武器攻击)
+* `"fly up"`(向上飞)
+* `"fly down"`(向下飞)
+* `land`(降落)
(本工具暂无法改变仰视俯视平视、打开任务地图摘要休息魔法书等的键位)
-对于alwaysrun和fliponexit,“按键”可以是1或0(即是或否);对于其他,按键可以是以下之一:
-
-* backspace
-* enter
-* space
-* "page up"
-* "page down"
-* end
-* home
-* left
-* up
-* right
-* down
-* insert
-* delete
-* 0 至 9
-* a 至 z
-* =
-* ,
-* -
-* .
-* /
-* `
-* \
-* '
+对于`alwaysrun`和`fliponexit`,“按键”可以是`1`或`0`(即是或否);对于其他,按键可以是以下之一:
+
+* `backspace`
+* `enter`
+* `space`
+* `"page up"`
+* `"page down"`
+* `end`
+* `home`
+* `left`
+* `up`
+* `right`
+* `down`
+* `insert`
+* `delete`
+* `0` 至 `9`
+* `a` 至 `z`
+* `=`
+* `,`
+* `-`
+* `.`
+* `/`
+* `` ` ``
+* `\`
+* `'`
也可以使用(但不建议使用):
-* f1 至 f12
-* tab
-* shift
-* ctrl
-* alt
-* capslock
+* `f1` 至 `f12`
+* `tab`
+* `shift`
+* `ctrl`
+* `alt`
+* `capslock`
-不区分大小写;有空格的请用英文双引号("")包裹起来
+不区分大小写;有空格的请用英文双引号(`""`)包裹起来
## 范例
@@ -88,14 +88,14 @@ mm6chupchangekey.exe "mm6.exe" alwaysrun 1 fliponexit 0 forward w back s "turn l
* 总是奔跑:是(1)
* 离开房屋时转身:否(0)
-* 前进、后退、左转、右转:WSAD
-* 武器攻击:E
-* (打开魔法书:C)
-* 施展备用魔法:CTRL+C或ALT+C
-* 向上飞:F
-* 向下飞:G
-* 降落:V
-(一个特殊的键位是:施展备用魔法的C键和打开魔法书冲突,所以打开魔法书还是C键,施展备用魔法变为CTRL+C或ALT+C)
+* 前进、后退、左转、右转:WSAD
+* 武器攻击:E
+* (打开魔法书:C)
+* 施展备用魔法:CTRL+C或ALT+C
+* 向上飞:F
+* 向下飞:G
+* 降落:V
+(一个特殊的键位是:施展备用魔法的C键和打开魔法书冲突,所以打开魔法书还是C键,施展备用魔法变为CTRL+C或ALT+C)
您也可以双击执行changekey.bat文件,它可以还原为中文完美升级版默认键位(总是奔跑,离开房屋时不转身,其他键位和原版一致)
@@ -103,30 +103,30 @@ mm6chupchangekey.exe "mm6.exe" alwaysrun 1 fliponexit 0 forward w back s "turn l
## 附:魔法门6原版键位表
-* ↑↓←→:前进、后退、左转、右转
-* Shift + ↑↓:跑步移动
-* Ctrl + ←→:侧移
-* Page Down:仰视
-* End:平视
-* Delete:俯视
-* Page Up:向上飞(当施展了空气魔法中的飞行奇术后)
-* Home:降落(着陆)
-* Insert:向下飞
-* Enter:切换回合制/即时制
-* 空格:调查前方事物(拾起地上的物品、打开箱子等)
-* A:使用武器攻击(如敌人距离远,则使用弓箭)
-* S:施展备用魔法(如无,则使用使用武器攻击)
-* X:跳跃
-* R:休息
-* Z:打开队伍属性
-* C:打开魔法书
-* B:切换到下一个队员(跳过当前队员)
-* 1、2、3、4:选中某队员(第二次按打开该队员的属性栏)
-* 5、6:与雇佣的NPC谈话
-* M:打开地图
-* Q:打开当前任务
-* N:打开自动摘要
-* T:打开日历
-* Y:呐喊(驱赶挡路的NPC)
-
-(原版不按Shift为行走状态,较慢,离开房屋时会转身。中文完美升级版开启了总是奔跑,离开房屋时不会转身,没有更改其他键位)
+* ↑↓←→:前进、后退、左转、右转
+* Shift + ↑↓:跑步移动
+* Ctrl + ←→:侧移
+* Page Down:仰视
+* End:平视
+* Delete:俯视
+* Page Up:向上飞(当施展了空气魔法中的飞行奇术后)
+* Home:降落(着陆)
+* Insert:向下飞
+* Enter:切换回合制/即时制
+* 空格:调查前方事物(拾起地上的物品、打开箱子等)
+* A:使用武器攻击(如敌人距离远,则使用弓箭)
+* S:施展备用魔法(如无,则使用使用武器攻击)
+* X:跳跃
+* R:休息
+* Z:打开队伍属性
+* C:打开魔法书
+* B:切换到下一个队员(跳过当前队员)
+* 1、2、3、4:选中某队员(第二次按打开该队员的属性栏)
+* 5、6:与雇佣的NPC谈话
+* M:打开地图
+* Q:打开当前任务
+* N:打开自动摘要
+* T:打开日历
+* Y:呐喊(驱赶挡路的NPC)
+
+(原版不按Shift为行走状态,较慢,离开房屋时会转身。中文完美升级版开启了总是奔跑,离开房屋时不会转身,没有更改其他键位)
diff --git a/mm6chupchangekey/Source.cpp b/mm6chupchangekey/Source.cpp
index b83e8d0..6912141 100644
--- a/mm6chupchangekey/Source.cpp
+++ b/mm6chupchangekey/Source.cpp
@@ -1,11 +1,11 @@
-#include
-#include
+//#include
+//#include
+#include
#include
-//#include
#include
-#include
+//#include
+//#include
//#include
-#include
typedef std::string string;
@@ -266,13 +266,31 @@ void wrongArgumentsAlert(void) {
printf("Wrong arguments.\nUsage: mm6chupchangekey.exe file function1 key1 function2 key2 ...");
}
-bool copyFile(const char *SRC, const char* DEST) {
- std::ifstream src(SRC, std::ios::binary);
- std::ofstream dest(DEST, std::ios::binary);
- dest << src.rdbuf();
- return src && dest;
+//bool copyFile(const char *SRC, const char* DEST) {
+// std::ifstream src(SRC, std::ios::binary);
+// std::ofstream dest(DEST, std::ios::binary);
+// dest << src.rdbuf();
+// return src && dest;
+//}
+
+wchar_t* s2ws(const string& s) {
+ int len;
+ int slength = (int)s.length() + 1;
+ len = MultiByteToWideChar(CP_ACP, 0, s.c_str(), slength, 0, 0);
+ wchar_t* buf = new wchar_t[len];
+ MultiByteToWideChar(CP_ACP, 0, s.c_str(), slength, buf, len);
+ return buf;
+}
+
+string GetExePath() {
+ char buffer[MAX_PATH];
+ GetModuleFileNameA(NULL, buffer, MAX_PATH);
+ string f = string(buffer);
+ return f.substr(0, f.find_last_of("\\/"));
}
+
+
int main(int argc, char * argv[]) {
if (argc >= 3) {
@@ -280,13 +298,11 @@ int main(int argc, char * argv[]) {
int i;
string arg, content;
- char backupExt[8] = ".backup";
- char * backupPath;
- backupPath = (char *)malloc(strlen(argv[1]) + strlen(backupExt) + 1);
- backupPath[0] = '\0';
- strcat(backupPath, argv[1]);
- strcat(backupPath, backupExt);
- copyFile(argv[1], backupPath);
+ string backupSuffix = ".backup";
+ string backupPath = argv[1] + backupSuffix;
+
+ string p = GetExePath();
+ CopyFile(s2ws(p + '\\' + argv[1]), s2ws(p + '\\' + backupPath), 0);
FILE * f;
f = fopen(argv[1], "r+b");
diff --git a/mm6chupchangekey/mm6chupchangekey.vcxproj b/mm6chupchangekey/mm6chupchangekey.vcxproj
index bcda95a..79f9252 100644
--- a/mm6chupchangekey/mm6chupchangekey.vcxproj
+++ b/mm6chupchangekey/mm6chupchangekey.vcxproj
@@ -23,6 +23,7 @@
v4.5.2
ManagedCProj
mm6chupchangekey
+ 8.1
@@ -35,8 +36,8 @@
Application
false
- v140
- true
+ v140_xp
+ false
Unicode
@@ -49,8 +50,8 @@
Application
false
- v140
- true
+ v140_xp
+ false
Unicode
@@ -107,18 +108,26 @@
Level3
WIN32;NDEBUG;%(PreprocessorDefinitions)
+ /SUBSYSTEM:CONSOLE,"5.01" %(AdditionalOptions)
+ MultiThreaded
+ Console
+ 5.01
Level3
NDEBUG;%(PreprocessorDefinitions)
+ /SUBSYSTEM:CONSOLE,"5.01" %(AdditionalOptions)
+ MultiThreaded
+ Console
+ 5.01