【转】做Rom其实没什么奥秘,浅显易懂的补丁制作教程,带刷机脚本示例

本文详细讲解了刷机脚本的工作原理,包括如何修改脚本、制作内核补丁、加入特定脚本等内容。并介绍了如何创建内核单刷包。


重要说明:

看完这个帖子,你将学到:刷机脚本的含义,如何对刷机脚本进行简单修改,如何制作补丁,如何往内核里加入G大脚本,甚至如何制作Rom的zip包
另外,此贴较长,或许以后还会更长,要想学到东西的机油请耐心看

我将先以我的Blade-Bingo-2.3 Rom里的脚本为例,讲一讲刷机脚本。
然后再以我此贴的附件 KernelPatch.zip 内核补丁为例,简单讲一讲内核单刷补丁怎么做。


首先,我想说,其实,补丁的本质就是一个不完整的Rom刷机包
为什么这么说它?我想看完这个帖子大家就明白了。

首先,请把任意一个V880的Rom解压缩(或者直接用双击打开它,当然,前提是这种格式已被压缩软件关联)。
你会看到,根目录下有META-INF、system文件夹和boot.img文件(其他Rom组织方式,如含data、cust等文件夹的Rom暂不细说)。
刷补丁(或者说,刷机),成功的几个要点:正确的文件,准确的脚本,精确的操作。而这样做,的确的有效


system文件夹里是所有刷机所需文件,今天只教大家做内核补丁,所以暂时不去关心这里是什么。
META-INF\com\google\android\目录下有个edify的updater-script刷机脚本,它与Rom厨房默认的脚本有些不同。
如何不同,那里不同,这也不是今天咱们要讨论的问题,暂此越过。
用记事本或高级一点工具的如NotePad2(建议使用高级工具,自动排列,颜色突出,看起来更有条理)打开脚本文件。

------------------------------------------------------------------------------------------------------
ui_print("");
ui_print("      =================================");
ui_print("                   |     ------==bingo1991==------     |");
ui_print("      ============ 2.3.7-0214 =============");
ui_print("");
ui_print("Updating, plese wait....");
ui_print("");
assert(getprop("ro.product.device") == "blade" || getprop("ro.build.product") == "blade" || getprop("ro.product.board") == "blade");
package_extract_file("system/bin/backuptool.sh", "/tmp/backuptool.sh");
set_perm(0, 0, 0777, "/tmp/backuptool.sh");
run_program("/tmp/backuptool.sh", "backup");
show_progress(0.100000, 3);
format("yaffs2", "MTD", "system");
mount("yaffs2", "MTD", "system", "/system");
package_extract_dir("system", "/system");
show_progress(0.600000, 40);
symlink("busybox", "/system/xbin/[", "/system/xbin/[[",
        "/system/xbin/arp", "/system/xbin/ash", "/system/xbin/awk",
        ......
        "/system/xbin/xz", "/system/xbin/xzcat", "/system/xbin/yes",
        "/system/xbin/zcat");
symlink("toolbox", "/system/bin/cat", "/system/bin/cmp",
        "/system/bin/date", "/system/bin/dd", "/system/bin/dmesg",
        ......
        "/system/bin/wipe");
set_perm_recursive(0, 0, 0755, 0644, "/system");
......
set_perm(0, 0, 06755, "/system/xbin/su");
set_perm(0, 0, 06755, "/system/xbin/tcpdump");
show_progress(0.200000, 5);
package_extract_file("system/bin/backuptool.sh", "/tmp/backuptool.sh");
set_perm(0, 0, 0777, "/tmp/backuptool.sh");
run_program("/tmp/backuptool.sh", "restore");
package_extract_file("system/bin/modelid_cfg.sh", "/tmp/modelid_cfg.sh");
set_perm(0, 0, 0777, "/tmp/modelid_cfg.sh");
run_program("/tmp/modelid_cfg.sh");
package_extract_file("system/bin/verify_cache_partition_size.sh", "/tmp/verify_cache_partition_size.sh");
set_perm(0, 0, 0777, "/tmp/verify_cache_partition_size.sh");
run_program("/tmp/verify_cache_partition_size.sh");
show_progress(0.100000, 2);
assert(package_extract_file("boot.img", "/tmp/boot.img"),
       write_raw_image("/tmp/boot.img", "boot"),
       delete("/tmp/boot.img"));
unmount("/system");
ui_print("");
ui_print("   ***[ Thanks for using Blade-Bingo-2.3 ]***");
ui_print("**[ A compatible stable long time support Rom]**");

......号处为省略相同格式的语句。
-----------------------------------------------------------------------------------------------
很多行代码,是不是?看不太懂,是不是?
没关系,前显得很,我挑几处重要的地方讲一讲你就懂了。


代码段1:
ui_print("");是在recovery刷机屏幕上显示出一行空格。
ui_print("      |     ------==bingo1991==------     |");
是在recovery刷机屏幕上显示括号内的文字,为什么不用中文?
因为汉化的Recovery的中文字库极为有限,仅支持刷机界面的那些必须显示的文字,其他不包含的文字会显示成“?”
至此,你可以随便改刷机界面的显示信息了,不过,可别盗版哦。
比如,拿我的Rom,把里面的 bingo1991 改为你的大名,然后不加修改地再发出去。。。
这样的行为是我坚决不会赞同的,违者罚款。罚款请主动交至中国工商银行XXXXXXXXXX账号处。。。。。。
开个玩笑。。。。


代码段2:
assert(getprop("ro.product.device") == "blade" || getprop("ro.build.product") == "blade" || getprop("ro.product.board") == "blade");
获取手机信息,验证你的手机到底是不是V880,否则将无法刷入。
这是为了防止让一些其他机型的小白误刷咱们V880的Rom从而发生变砖的惨剧。
不加这行的Rom所有机型都可以刷入,建议Rom同行或者补丁制作者们一定要加上,人性化关怀
当然,你不加这些,但在补丁或Rom发布时仔细说明适用机型的话也是可以的。


代码段:3:
format("yaffs2", "MTD", "system");
mount("yaffs2", "MTD", "system", "/system");
package_extract_dir("system", "/system");
这是非常重要的一段代码,第一步,格式化MTD为yaffs格式,分区命名为system,就是咱们常常说的system分区了;
第二步,以yaffs2格式将此分区挂载到/system挂载点;
最后,解压缩Rom文件里的system目录到/system。
这样,Rom里的system文件夹下所有内容已经写入system分区了。


代码段4:
symlink("busybox", "/system/xbin/[", "/system/xbin/[[",
        "/system/xbin/arp", "/system/xbin/ash", "/system/xbin/awk",
        ......
        "/system/xbin/xz", "/system/xbin/xzcat", "/system/xbin/yes",
        "/system/xbin/zcat");
symlink("toolbox", "/system/bin/cat", "/system/bin/cmp",
        "/system/bin/date", "/system/bin/dd", "/system/bin/dmesg",
        ......
        "/system/bin/wipe");
set_perm_recursive(0, 0, 0755, 0644, "/system");
set_perm_recursive(0, 2000, 0755, 0755, "/system/bin");
......
set_perm(0, 0, 06755, "/system/xbin/su");
set_perm(0, 0, 06755, "/system/xbin/tcpdump");
这是刷机脚本的主体,是最长的一段代码。
symlink是创建xbin目录下的各种工具与其存放路径的链接,著名的busybox工具也在其中。
set_perm是设置权限,类似Ubuntu下的chmod。这些代码把相应的文件全部设置成正确的权限。
其中,set_perm_recursive(0, 0, 0755, 0644, "/system");与set_perm_recursive(0, 2000, 0755, 0755, "/system/bin");
是以递归方式将目录及目录下的文件设成相应的权限。
余下的代码是把一些特殊的文件设置成需要的权限。
看不懂的机油请直接略过此段


代码段5:
assert(package_extract_file("boot.img", "/tmp/boot.img"),
       write_raw_image("/tmp/boot.img", "boot"),
       delete("/tmp/boot.img"));
这是今天的重点。
首先,我们要知道boot.img是启动分区boot的镜像文件,而内核就在这个文件里面(至少V880是这样的,三星等其他一些机型不是这样的)。
---------------------------
如果我们用工具解开这个文件(文件夹名称在不同工具里稍有不同),会发现一个文件夹和一个zImage文件。
文件夹内是ramdisk的内容,zImage就是大名鼎鼎的linux内核了(准确地说是内核镜像文件)。
如何加入G大脚本?
解开G大Rom的boot.img,复制ramdisk文件夹里sbin文件夹的内容覆盖目标内核里相同文件夹及内部文件。
修改ramdisk文件夹里的 init.blade.rc 文件(其他机型不同,如华为的机型是init.huawei.rc),在最末位添加
#by geno
service geno /sbin/geno
    oneshot
service optimize /sbin/odex
    disabled
    oneshot
service timing /sbin/timing
    disabled
    oneshot

on property:dev.bootcomplete=1
    start optimize
    start timing
#by geno

为了尊重G大,请务必把首行和末行"#by geno"留着,当然你也可以写一些附加信息,仅限英文或拼音。
这几行的作用是开启G大脚本运行所需的服务。

如何删除G大内核里的开机第二屏(非开机动画)?
仔细看看ramdisk目录下是否有个 initlogo.rle 文件,它就是第二屏了,不想要的删掉就行。
其实第二屏的作用是让你在等待开机的“漫长”时光里有点东西可以看,让你感觉不那么漫长。
你如果需要的话,可以自己制作第二屏,必须在linux系统下(如Ubuntu)制作,方法此处不说了,问度娘。

至此,重新打包boot.img,并替换回去,你就有一个加入了G大脚本的内核了。 3月1日补充:抱歉,忘了一件很重要的事。
就是,G大脚本还需要/etc/目录下有 enhanced.conf 配置文件的配合。
所以,刷了我附件的内核补丁的机油请自己下载enhanced.zip解压,把  enhanced.conf  放到/system/etc目录下,重启即可。
等等,你还没说怎么替换内核呢?
什么,到这步还要说吗?比如你要换B大N361里的最新内核,解包提取zImage替换就行了嘛。
----------------------------
好了,如果你有耐心看了上面的关于boot.img的介绍,我们已经拥有一个加入了G大脚本,并且使用最新N361内核的boot.img了。
而代码段5的作用无疑就是将boot.img镜像刷入boot启动分区。


代码6:
unmount("/system");卸载前面挂载的system分区。


代码7:
刷机脚本中对此出现的show_progress(p, t);
这是个显示进程的脚本,即在t秒的时间内显示的进度条增加p。
如show_progress(0.5, 20);就是指在20秒的时间内让进度条的进度增加20% ,用来显示刷机进度,很有用。
这些代码添加的位置和数据不合适的话,有时会给人刷机进程卡住了或者一下子很快的感觉。


好了,刷机脚本讲到这里,已经差不多了。
接下来,讲讲如何做内核单刷包,相信你已经心领神会了。
最好的办法是找一个现成的补丁,把刷机脚本改成如下内容:

ui_print("Kernel Patch for CM7");
show_progress(0.500000, 0);
ui_print("Installing...");
assert(package_extract_file("boot.img", "/tmp/boot.img"),
       write_raw_image("/tmp/boot.img", "boot"),
       delete("/tmp/boot.img"));       
ui_print("Install complete!");

删掉其他目录,在补丁根目录留下META-INF文件夹,请保证其子目录\com\google\android\里的update-binary和updater-script还在,且updater-script脚本已经改成上述的样子了(当然,ui_print("XXX");语句可以不加或改成你想要的,但要有意义的文字)。
再在根目录加入你想要的boot.img,重新打包,OK,内核单刷包完成了!
如果你不忙的话,在脚本的最前面加上代码段2,很人性化。
当然,条件允许的话,最好还签个名。重要说明:
看完这个帖子,你将学到:刷机脚本的含义,如何对刷机脚本进行简单修改,如何制作补丁,如何往内核里加入G大脚本,甚至如何制作Rom的zip包
另外,此贴较长,或许以后还会更长,要想学到东西的机油请耐心看

我将先以我的Blade-Bingo-2.3 Rom里的脚本为例,讲一讲刷机脚本。
然后再以我此贴的附件 KernelPatch.zip 内核补丁为例,简单讲一讲内核单刷补丁怎么做。


首先,我想说,其实,补丁的本质就是一个不完整的Rom刷机包
为什么这么说它?我想看完这个帖子大家就明白了。

首先,请把任意一个V880的Rom解压缩(或者直接用双击打开它,当然,前提是这种格式已被压缩软件关联)。
你会看到,根目录下有META-INF、system文件夹和boot.img文件(其他Rom组织方式,如含data、cust等文件夹的Rom暂不细说)。
刷补丁(或者说,刷机),成功的几个要点:正确的文件,准确的脚本,精确的操作。而这样做,的确的有效


system文件夹里是所有刷机所需文件,今天只教大家做内核补丁,所以暂时不去关心这里是什么。
META-INF\com\google\android\目录下有个edify的updater-script刷机脚本,它与Rom厨房默认的脚本有些不同。
如何不同,那里不同,这也不是今天咱们要讨论的问题,暂此越过。
用记事本或高级一点工具的如NotePad2(建议使用高级工具,自动排列,颜色突出,看起来更有条理)打开脚本文件。

------------------------------------------------------------------------------------------------------
ui_print("");
ui_print("      =================================");
ui_print("                   |     ------==bingo1991==------     |");
ui_print("      ============ 2.3.7-0214 =============");
ui_print("");
ui_print("Updating, plese wait....");
ui_print("");
assert(getprop("ro.product.device") == "blade" || getprop("ro.build.product") == "blade" || getprop("ro.product.board") == "blade");
package_extract_file("system/bin/backuptool.sh", "/tmp/backuptool.sh");
set_perm(0, 0, 0777, "/tmp/backuptool.sh");
run_program("/tmp/backuptool.sh", "backup");
show_progress(0.100000, 3);
format("yaffs2", "MTD", "system");
mount("yaffs2", "MTD", "system", "/system");
package_extract_dir("system", "/system");
show_progress(0.600000, 40);
symlink("busybox", "/system/xbin/[", "/system/xbin/[[",
        "/system/xbin/arp", "/system/xbin/ash", "/system/xbin/awk",
        ......
        "/system/xbin/xz", "/system/xbin/xzcat", "/system/xbin/yes",
        "/system/xbin/zcat");
symlink("toolbox", "/system/bin/cat", "/system/bin/cmp",
        "/system/bin/date", "/system/bin/dd", "/system/bin/dmesg",
        ......
        "/system/bin/wipe");
set_perm_recursive(0, 0, 0755, 0644, "/system");
......
set_perm(0, 0, 06755, "/system/xbin/su");
set_perm(0, 0, 06755, "/system/xbin/tcpdump");
show_progress(0.200000, 5);
package_extract_file("system/bin/backuptool.sh", "/tmp/backuptool.sh");
set_perm(0, 0, 0777, "/tmp/backuptool.sh");
run_program("/tmp/backuptool.sh", "restore");
package_extract_file("system/bin/modelid_cfg.sh", "/tmp/modelid_cfg.sh");
set_perm(0, 0, 0777, "/tmp/modelid_cfg.sh");
run_program("/tmp/modelid_cfg.sh");
package_extract_file("system/bin/verify_cache_partition_size.sh", "/tmp/verify_cache_partition_size.sh");
set_perm(0, 0, 0777, "/tmp/verify_cache_partition_size.sh");
run_program("/tmp/verify_cache_partition_size.sh");
show_progress(0.100000, 2);
assert(package_extract_file("boot.img", "/tmp/boot.img"),
       write_raw_image("/tmp/boot.img", "boot"),
       delete("/tmp/boot.img"));
unmount("/system");
ui_print("");
ui_print("   ***[ Thanks for using Blade-Bingo-2.3 ]***");
ui_print("**[ A compatible stable long time support Rom]**");

......号处为省略相同格式的语句。
-----------------------------------------------------------------------------------------------
很多行代码,是不是?看不太懂,是不是?
没关系,前显得很,我挑几处重要的地方讲一讲你就懂了。


代码段1:
ui_print("");是在recovery刷机屏幕上显示出一行空格。
ui_print("      |     ------==bingo1991==------     |");
是在recovery刷机屏幕上显示括号内的文字,为什么不用中文?
因为汉化的Recovery的中文字库极为有限,仅支持刷机界面的那些必须显示的文字,其他不包含的文字会显示成“?”
至此,你可以随便改刷机界面的显示信息了,不过,可别盗版哦。
比如,拿我的Rom,把里面的 bingo1991 改为你的大名,然后不加修改地再发出去。。。
这样的行为是我坚决不会赞同的,违者罚款。罚款请主动交至中国工商银行XXXXXXXXXX账号处。。。。。。
开个玩笑。。。。


代码段2:
assert(getprop("ro.product.device") == "blade" || getprop("ro.build.product") == "blade" || getprop("ro.product.board") == "blade");
获取手机信息,验证你的手机到底是不是V880,否则将无法刷入。
这是为了防止让一些其他机型的小白误刷咱们V880的Rom从而发生变砖的惨剧。
不加这行的Rom所有机型都可以刷入,建议Rom同行或者补丁制作者们一定要加上,人性化关怀
当然,你不加这些,但在补丁或Rom发布时仔细说明适用机型的话也是可以的。


代码段:3:
format("yaffs2", "MTD", "system");
mount("yaffs2", "MTD", "system", "/system");
package_extract_dir("system", "/system");
这是非常重要的一段代码,第一步,格式化MTD为yaffs格式,分区命名为system,就是咱们常常说的system分区了;
第二步,以yaffs2格式将此分区挂载到/system挂载点;
最后,解压缩Rom文件里的system目录到/system。
这样,Rom里的system文件夹下所有内容已经写入system分区了。


代码段4:
symlink("busybox", "/system/xbin/[", "/system/xbin/[[",
        "/system/xbin/arp", "/system/xbin/ash", "/system/xbin/awk",
        ......
        "/system/xbin/xz", "/system/xbin/xzcat", "/system/xbin/yes",
        "/system/xbin/zcat");
symlink("toolbox", "/system/bin/cat", "/system/bin/cmp",
        "/system/bin/date", "/system/bin/dd", "/system/bin/dmesg",
        ......
        "/system/bin/wipe");
set_perm_recursive(0, 0, 0755, 0644, "/system");
set_perm_recursive(0, 2000, 0755, 0755, "/system/bin");
......
set_perm(0, 0, 06755, "/system/xbin/su");
set_perm(0, 0, 06755, "/system/xbin/tcpdump");
这是刷机脚本的主体,是最长的一段代码。
symlink是创建xbin目录下的各种工具与其存放路径的链接,著名的busybox工具也在其中。
set_perm是设置权限,类似Ubuntu下的chmod。这些代码把相应的文件全部设置成正确的权限。
其中,set_perm_recursive(0, 0, 0755, 0644, "/system");与set_perm_recursive(0, 2000, 0755, 0755, "/system/bin");
是以递归方式将目录及目录下的文件设成相应的权限。
余下的代码是把一些特殊的文件设置成需要的权限。
看不懂的机油请直接略过此段


代码段5:
assert(package_extract_file("boot.img", "/tmp/boot.img"),
       write_raw_image("/tmp/boot.img", "boot"),
       delete("/tmp/boot.img"));
这是今天的重点。
首先,我们要知道boot.img是启动分区boot的镜像文件,而内核就在这个文件里面(至少V880是这样的,三星等其他一些机型不是这样的)。
---------------------------
如果我们用工具解开这个文件(文件夹名称在不同工具里稍有不同),会发现一个文件夹和一个zImage文件。
文件夹内是ramdisk的内容,zImage就是大名鼎鼎的linux内核了(准确地说是内核镜像文件)。
如何加入G大脚本?
解开G大Rom的boot.img,复制ramdisk文件夹里sbin文件夹的内容覆盖目标内核里相同文件夹及内部文件。
修改ramdisk文件夹里的 init.blade.rc 文件(其他机型不同,如华为的机型是init.huawei.rc),在最末位添加
#by geno
service geno /sbin/geno
    oneshot
service optimize /sbin/odex
    disabled
    oneshot
service timing /sbin/timing
    disabled
    oneshot

on property:dev.bootcomplete=1
    start optimize
    start timing
#by geno

为了尊重G大,请务必把首行和末行"#by geno"留着,当然你也可以写一些附加信息,仅限英文或拼音。
这几行的作用是开启G大脚本运行所需的服务。

如何删除G大内核里的开机第二屏(非开机动画)?
仔细看看ramdisk目录下是否有个 initlogo.rle 文件,它就是第二屏了,不想要的删掉就行。
其实第二屏的作用是让你在等待开机的“漫长”时光里有点东西可以看,让你感觉不那么漫长。
你如果需要的话,可以自己制作第二屏,必须在linux系统下(如Ubuntu)制作,方法此处不说了,问度娘。

至此,重新打包boot.img,并替换回去,你就有一个加入了G大脚本的内核了。3月1日补充:抱歉,忘了一件很重要的事。
就是,G大脚本还需要/etc/目录下有 enhanced.conf 配置文件的配合。
所以,刷了我附件的内核补丁的机油请自己下载enhanced.zip解压,把 enhanced.conf 放到/system/etc目录下,重启即可。
等等,你还没说怎么替换内核呢?
什么,到这步还要说吗?比如你要换B大N361里的最新内核,解包提取zImage替换就行了嘛。
----------------------------
好了,如果你有耐心看了上面的关于boot.img的介绍,我们已经拥有一个加入了G大脚本,并且使用最新N361内核的boot.img了。
而代码段5的作用无疑就是将boot.img镜像刷入boot启动分区。


代码6:
unmount("/system");卸载前面挂载的system分区。


代码7:
刷机脚本中对此出现的show_progress(p, t);
这是个显示进程的脚本,即在t秒的时间内显示的进度条增加p。
如show_progress(0.5, 20);就是指在20秒的时间内让进度条的进度增加20% ,用来显示刷机进度,很有用。
这些代码添加的位置和数据不合适的话,有时会给人刷机进程卡住了或者一下子很快的感觉。


好了,刷机脚本讲到这里,已经差不多了。
接下来,讲讲如何做内核单刷包,相信你已经心领神会了。
最好的办法是找一个现成的补丁,把刷机脚本改成如下内容:

ui_print("Kernel Patch for CM7");
show_progress(0.500000, 0);
ui_print("Installing...");
assert(package_extract_file("boot.img", "/tmp/boot.img"),
       write_raw_image("/tmp/boot.img", "boot"),
       delete("/tmp/boot.img"));       
ui_print("Install complete!");

删掉其他目录,在补丁根目录留下META-INF文件夹,请保证其子目录\com\google\android\里的update-binary和updater-script还在,且updater-script脚本已经改成上述的样子了(当然,ui_print("XXX");语句可以不加或改成你想要的,但要有意义的文字)。
再在根目录加入你想要的boot.img,重新打包,OK,内核单刷包完成了!
如果你不忙的话,在脚本的最前面加上代码段2,很人性化。

当然,条件允许的话,最好还签个名。


首先声明此贴转载:http://blog.youkuaiyun.com/bingo1991/article/details/7768880

很好的初级教程 KoreEasy指令表[完整版] 其实是通用参数,Kore相关系列皆可通用 ( ) - 必要参数,没填写指令就不会动作 [ ] - 选用参数,没填写即为默认 -=-=-=-=-=-=-=-= 状态查询 =-=-=-=-=-=-=-=- s - 人物状态,列出跟人物有关的重要讯息,相当于仙境传说内无法关掉的状态窗口 i [u/eq/nu] - 物品栏列表,分为可使用物品栏、装备物品栏,及不可使用物品栏 例如:只要列出可使用物品栏 i u cart - 手推车物品列表,商人/铁匠/练金术士 专用 st - 属性数据,列出人物的细部数据(像str力量、agi敏捷、attack攻击力之类的) skills - 技能列表,列出技能名称、技能等级,及其所会消耗的 SP 值 skills desc [(技能标码 #)] - 技能描述 ※注:(技能标码 #) - 请按skills查询 exp 查询目前打怪的经验值效率 -=-=-=-=-=-=-=-= 环境查询 =-=-=-=-=-=-=-=- where - 显示人物目前所有的地图及坐标 who - 显示目前的在线人数 il - 物品列表,列出附近地面所有的物品清单 ml - 怪物列表,列出附近区域所有的怪物清单 nl - NPC 列表,列出附近区域所有的 NPC 清单 pl - 玩家列表,列出附近区域所有的玩家清单 party - 队伍列表,列出队员的联机状态、所在地点,及健康状态 pml - 密语列表,相同于仙境传说内的悄悄话清单,送出/收到的密语人名都会存在这里,以便快速响应 portals - 传送点列表,传送点连接了地图的交通,你可列出附近区域所有的传送点 petl - 宠物列表,列出附近区域所有的宠物清单 -=-=-=-=-=-=-=-= 人物动作 =-=-=-=-=-=-=-=- respawn - 飞回储存点,任何时候皆可用(蝴蝶翅膀) tele - 瞬间移动到地图的任意地点(苍蝇翅膀) sit - 指示人物坐下 stand - 指示人物站起 a (怪物标码 #) - 使用武器攻击指定编号怪物 ※注:(怪物标码 #) -请按ml查询 -=-=-=-=-=-=-= 人物成长加点 =-=-=-=-=-=-=- stat_add (str | agi | vit | int | dex | luk) - 将属性点数加到指定属性上 ※注:必须有可用属性点数才能加,属性点数可突破99(异常状态,会被冻)。 skills add (技能标码 #) - 将技能点数加到指定技能上 ※注1:(技能标码 #) - 请按skills查询 ※注2:必须有可用技能点数才能加 ※注3:技能点数可跳着加,不必管前置点数,即俗称的"跳技" PS. 跳技的BUG已经被修正了,无法再使用,仅供参考 -=-=-=-=-=-=-=-= 物品相关 =-=-=-=-=-=-=-=- take (物件标码 #) - 捡拾地上物品 ※注:(对象标码 #) - 请按il查询 is (物品栏对象标码 #) - 对自己使用物品 eq (物品栏物件标码 #) - 装备物品栏内的物品 uneq (物品栏物件标码 #) - 卸下装备,放到物品栏 drop (物品栏物件标码 #) [(数量)] - 将物品丢到地上,没有指定数量的话,即会将该对象全都丢弃 ※注:(物品栏对象标码 #) - 请按i查询 idenitify - 物品辨识列表,使用放大镜或物品鉴定技能,便能辨识表中的物品 identify (辨识对象标码 #) - 施展物品鉴定技能,或使用放大镜来辨识对象 ※注:(辨识物品标码 #) - 由辨识列表查出的对象指定号码 im (物品栏对象标码 #) (怪物标码 #) - 对怪物使用物品 ※注1:(对象标码 #) - 请按il查询 ※注2:(怪物标码 #) - 请按ml查询 ip (物品栏物件标码 #) (玩家标码 #) - 对玩家使用物品 ※注1:(对象标码 #) - 请按il查询 ※注2:(玩家标码 #) - 请按pl查询 -=-=-=-=-=-=-=-= 技能相关 =-=-=-=-=-=-=-=- sm (技能标码 #) (怪物标码 #) [(技能等级)] - 对怪物施展技能,没有指定技能等级视为施展最高等级 sp (技能标码 #) (玩家标码 #) [(技能等级)] - 对玩家施展技能,没有指定技能等级视为施展最高等级 ss (技能标码 #) [(技能等级)] - 对自己施展技能,没有指定技能等级视为施展最高等级 skills desc (技能标码 #) - 对该技能加入备注描述 ※注1:(技能标码 #) - 请按skills查询 ※注2:(玩家标码 #) - 请按pl查询 ※注3:(怪物标码 #) - 请按ml查询 -=-=-=-=-=-=-=-= 对话功能 =-=-=-=-=-=-=-=- c (讯息) - 公开频道谈话,也能在聊天室内时用 p (讯息) - 队伍频道谈话 g (讯息) - 工会频道谈话 pm (玩家名称 | 密语标码 #) (讯息) - 密语谈话 ※注:(密语标码 #) - 请按pml查询 例如:pm "GM01" Hello~~ e (表情标码 #) - 传送表情符号(爱心、流汗、生气…之类的) ※注:(表情标码 #) - 请按e查询 ignore (旗标:0关 1开) (玩家名称) 忽略该玩家的谈话讯息,仙境传说的服务器不会代为储存忽略名单,重登后数据便会遗失 -=-=-=-=-=-=-=-= 聊天室功能 =-=-=-=-=-=-=-=- crl - 聊天室列表,列出附近区域所有的聊天室 join (聊天室标码 #) [(密码)] - 加入聊天室 ※注:聊天室标码 # - 由聊天室列表查出的聊天室指定号码 leave - 离开目前的聊天室 cri - 聊天室信息表,列出目前所在聊天室的细部信息,及聊天室内玩家的名单 chat "(标题)" [(人数限制) (公开旗标) (密码)] - 建立聊天室,预设为 20 人的公开聊天室 ※注1:"标题" - 聊天室的标题,必须用引号括起来 ※注2:人数限制 - 聊天室可容纳的最大人数,范围1-20 ※注3:公开旗标 - 1(公开) 0(未公开) chatmod "(标题)" [(人数限制) (公开旗标) (密码)] - 修改目前的聊天室属性,不用关闭再重新建立新的聊天室,功能同建立聊天室 kick (聊天室玩家标码 #) - 踢除并挡掉该名玩家进入聊天室 ※注:聊天室玩家标码 # - 由聊天室信息表查出的玩家指定号码 bestow (聊天室玩家标码 #) - 将聊天室管理者的权力让渡给其它玩家 -=-=-=-=-=-=-= 队伍管理功能 =-=-=-=-=-=-=- party - 显示队伍成员的在线状态/所在地/生命值 party create ("队伍名称") - 组织一支队伍 ※注:("队伍名称") - 队伍的名称必须写在两个""内 party join (旗标:0关 1开) - 接受/拒绝收到的组队请求 party kick (队员标号 #) - 将该队员除名 ※注:队员标号 # - 由队伍列表查出的队员指定号码 party leave - 自行脱队 party request (玩家标号 #) - 请求该玩家加入你的队伍 ※注:(玩家标号 #) - 由玩家列表(pl)查出的玩家指定号码 party share (旗标) - 设定队伍经验值分配制度 ※注:(旗标) - 0(各自取得经验值) 1(均分取得经验值) -=-=-=-=-=-=-=-= 仓库功能 =-=-=-=-=-=-=-=- storage - 仓库列表,跟卡普拉女郎沟通过,付出费用后,可列出你仓库中的物品 storage add (物品栏物件标码 #) [(数量)] - 将物品存放到开启的仓库,没有指定数量的话,则以最大数量计 物品栏对象标码 # - 由物品栏对象列表查出的对象指定号码 storage get (仓库物件标码 #) [(数量)] - 由开启的仓库中取回物品,没有指定数量的话,则以最大数量计 仓库对象标码 # - 由仓库列表查出的对象指定号码 storage close - 关闭仓库 -=-=-=-=-=-=-=-= 交易功能 =-=-=-=-=-=-=-=- dl - 交易列表,列出目前交易的细部信息,如: 你/其它人的物品+数量、金钱 deal 用法 1: 接受交易请求 用法 2: 结束我方交易 用法 3: 两方皆结束时进行交易 deal (玩家标码 #) - 向玩家请求交易 玩家标码 # - 由玩家列表查出的玩家指定号码 deal no 用法 1: 取消交易请求 用法 2: 取消目前交易 deal add (物品栏物件标码 # | "z") [(数量)] - 放入物品栏对象/金钱进行交易,没有指定数量的话,则以最大数量计 物品栏对象标码 # - 由物品栏对象列表查出的对象指定号码 z - 指定要加入的金钱数 对象/物品栏管理功能: -=-=-=-=-=-=-=-= 商店相关 =-=-=-=-=-=-=-=- store - 商店列表,可列出上一个所造访商店内的物品及价格 store desc [(商店对象标码 #)] - 对该物品加入备注描述 商店对象标码 # - 由商店列表查出的对象指定号码 buy (商店物件标码 #) [(数量)] - 从商店购买物品,没有指定数量的话,则以 1 件物品计;必须*近商店才能购买物品 商店对象标码 # - 由商店列表查出的对象指定号码 sell (物品栏物件标码 #) [(数量)] - 将物品卖给商店,没有指定数量的话,则以最大数量计 物品栏对象标码 # - 由物品栏对象列表查出的对象标码 shop - 查询自己的商店状态 (假如有用KoreC开店的话) -=-=-=-=-=-=-=-= 手推车相关 =-=-=-=-=-=-=-=- cart add (物品栏物件标码 #) [(数量)] - 把商品放进手推车里面,没有指定数量的话,则以最大数量计 物品栏对象标码 # - 由物品栏对象列表查出的对象标码 cart get (手推车物品栏物件标码#) [(数量)] - 从手推车中取出商品,没有指定数量的话,则将所有物品取出计 手推车物品栏物件标码# - 由手推车物品列表查出的物品标码 -=-=-=-=-=-=-=-= NPC相关 =-=-=-=-=-=-=-=- talk (NPC 标码 #) - 与 NPC 交谈 NPC 标码 # - 由 NPC 列表查出的 NPC 指定号码 talk resp - 响应列表,列出 NPC 可能给你的响应 talk cont - 继续与目前的 NPC 交谈(当提示要继续时) talk no - 取消与目前的 NPC 交谈 talk resp (回应标码 #) - 回应 NPC(当提示要回应时) 回应标码 # - 由回应列表查出的响应指定号码 -=-=-=-=-=-=-=-= 跟随相关 =-=-=-=-=-=-=-=- follow (玩家标码 #) - 跟随玩家 ※注:(玩家标号 #) - 由玩家列表(pl)查出的玩家指定号码 follow stop - 停止跟随 -=-=-=-=-=-=-=-= 肉盾相关 =-=-=-=-=-=-=-=- tank (玩家标码 #) - 为玩家肉盾 ※注:(玩家标号 #) - 由玩家列表(pl)查出的玩家指定号码 tank stop - 停止肉盾 -=-=-=-=-=-=-=-= 修改设置相关 =-=-=-=-=-=-=-=- a no - 关闭自动攻击 a yes - 开启自动攻击 maplock (旗标:0关 1开) -是否锁定地图 -=-=-=-=-=-=-= 传送之阵相关 =-=-=-=-=-=-=- memo - 记忆传送之阵技能的坐标 pw_open - 开启传送之阵 pw_open2 (旗标) - 开启/关闭一个永久的传送点(传送之阵只能维持开启 20 秒) 施展传送之阵无需任何蓝宝石及消耗任何 SP,只有在移动传送点坐标时才需要 SP 你若要改变传送地点,只消运用 conf 指令: conf partyWarper_slot_current 0 如此,下一次的传送点便会开往 partyWarper_slot_0 所指定的地图 pw_auth (玩家名称) (旗标) - 将传送功能授权给该玩家,可使其经由对话指令执行所有的传送相关功能 pw_setup [(x) (y)] - 将传送点设定在坐标(x, y),传送点可在地图的任何地方开启 若是没有指定坐标,传送点便会开往上次所设定的地点 每次 Bot 登入后,传送点都必须先行设定才能开启 -=-=-=-=-=-=-=-= 系统设定 =-=-=-=-=-=-=-=- auth (玩家名称) (旗标) 经由对话指令授权该名玩家操控 Bot conf (变数) [(数值)] - 设定组态变量值,并回写进 config.txt,若没有指定数值,则会显示该变量的数值设定 变数 - config.txt 档案内的某一变量 timeout (形态) (秒数) 设定 Timeout 秒数,并回写进 timeouts.txt,若没有指定数值,则会显示该形态的数值设定 形态 - Timeout 表内的指定名称(档案在 Control 数据夹) 秒数 - 以秒计数,可能有小数点的值(例如 0.5) dump - 离开 Bot 并将要进行解析的封包数据存成 DUMP.txt reload (部份檔名 | "all") ["except" (部份檔名)] - 重新戴入所有符合部份档名的组态/列表档案,若有指定,排除载入符合列在 except 后面的任何档案 例如: reload tables except monsters - 重新载入所有列表档案,除了 monsters 表(monsters.txt) ※注:一般更改设定后不必重开,直接打reload all就会加载新设定了 relog - 与主伺服器重新联机并登 quit - 结束 Bot ,按窗口的[X]有同样效果 ai - 设定开启/关闭AI cl - 清空chat里面的聊天纪录栏
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值