简述Mount&Blade MOD的安装程序的制作

字体: | 打印

通常来说,MOD做好了,直接用winrar压缩一下就可以发布了,然后使用者解压到 ……Mount&Blade\Modules 下就可以使用了.这样做是很简单的,不需要学习使用什么特殊的软件和工具. 不过相对安装程序而言,这样就不太正式,而且缺乏相应的版权说明以及安装后的补充说明.

下面说一下安装程序的制作.
我们将接触NSIS, NSIS 是“Nullsoft 脚本安装系统”(Nullsoft scrīptable Installation System)的缩写,它是一个相当小,高效率的win32安装系统。可通过样本修改或根据自己要求编写 NSI 脚本文件来定制自己的安装系统, 可实现许可协议的显示、安装类型的选择、写入注册表、写入INI文件、连接程序外壳、语句跳转、提示信息显示、 创建卸载程序、安装和卸载程序图标的定制、 创建快捷方式等其他安装程序应有的功能,是一款操作简单、功能强大的高效率安装软件精品。

1. 要用NSIS制作安装程序,首先得下载并安装一个NSIS.
下面是Nullsoft Installation System v2.37 汉化版的下载地址:
http://www.crsky.com/soft/1180.html

2. 安装了以后,就是编写NSIS脚本,这个对于NSIS新手来说,这个实在太难了.而且这里只是针对Mount&Blade的MOD来制作安装程序,也就没有必要对NSIS去太过深入了.
不用担心,官方论坛的Janus已经为Mount&Blade的MOD编写好了一个专门的NSIS脚本模板.
这个可以到Mount&Blade Unofficial File Repository上下载:
Mount&Blade Mod Installer Script v1.9
http://www.mbrepository.com/modules/PDdownloads/singlefile.php?cid=3&lid=46

下载以后,可以看到3个NSI文件,其实就是NSIS脚本文件,那个1.9版是最新的,我们就用它吧.
把MnB Mod Installer Script 1.9.nsi复制到你要打包制作的安装包的MOD的目录下.
用记事本或者上面提到的NSIS编译器打开MnB Mod Installer Script 1.9.nsi. 建议直接双击用上面提到的NSIS编译器打开.

看起来很长,但是其实我们只用看前39行. 后面的部分我们不需要去了解,也不需要去改动. 需要改动的地方更是少,只有几处而已.

QUOTE:


# Nullsoft Install System (NSIS) Script for Mount&Blade Mod Installation

(Mount&Blade Mod的安装程序的NSIS脚本)
; You'll notice comments start with a "#" or ";". ";" is more appropriate for commenting out whole lines.
你会看到注释部分(绿色显示的部分)以"#"或者";"开头. 用";"来注释掉一整行更加恰当.

!define PRODUCT_NAME "Amazing Stuff Mod"     #The title of your mod goes here(定义你MOD的标题)
!define PRODUCT_FOLDER_NAME "Amazing Stuff"  
#The folder name for your mod; spaces are fine, just mind Windows restrictions (no /\:*?"<>| )(定义你的MOD的文件夹的名字,可以含空格,但是不要使用Windows文件(夹)命名时禁用的符号(/\:*?"<>|))
!define PRODUCT_VERSION "1.0"                #The mod version(你MOD的版本)
!define MB_VERSION "1011"                   #The version of M&B the mod was created for, ex. "808" is version 0.808 of M&B.
            #The above line is used to warn people trying to install to a different M&B version that it probably won't work.
            #For any version older than 808, you should instead list 808 as the version since earlier versions cannot be properly detected.
            #If you want your mod to be installable without warning on any version of M&B, you can comment out the MB_VERSION line (with a ";")

            (定义你的MOD适用的版本,这样是用来警告那些试图把MOD安装到不相符的游戏版本上的人.如果你不想显示这个警告,你可以在这一行的开头加一个";"把整行都注释掉)
Name "${PRODUCT_NAME} ${PRODUCT_VERSION}"    #The title given during setup of your mod, defaults to mod title and version(这个是安装过程中,你MOD的标题,这行不用编辑)
OutFile "amazing_stuff_mod_${PRODUCT_VERSION}.exe"  #The filename of the installer you're creating. Change "amazing_stuff_mod" to an 'internet friendly' version of your mod's title(定义输出的安装文件的名字,改一下前面灰色的部分为你MOD的名字)

!define README_FILE "readme.txt"             #Change "readme.txt" to your mod's readme filename, or comment out this line (with a ";") to not have "Show Readme" option at finish(定义安装完后的说明文件(readme.txt),你可以把"readme.txt"改成你MOD的说明文件的名字,或者你可以在这一行的开头加一个";"把整行都注释掉)
!define INSTALL_TEXT "installer.txt"         #"installer.txt" contents will be displayed on the second (license) screen; comment out this line (with a ";") to have it skip that screen(定义将会在第2个界面显示的版权说明文件,你可以把"installer.txt"改成你MOD的版权说明文件的名字,或者你可以在这一行的开头加一个";"把整行都注释掉)

!define MUI_ICON "icons\knight-z8.ico"       #Icon your installer will use(定义你的安装程序的安装图标)
!define MUI_UNICON "icons\knight-z6.ico"    #Icon for the uninstaller (make SURE icon format is same as installer icon, can be same icon)(定义你的安装程序的卸载图标,确保卸载图标的格式和安装图标的格式一致,可以使用相同的图标)


# Optional Graphics (可选的图形化项目)
# make ABSOLUTELY sure the BMP files used in the below lines exist if you uncomment the line, or installer creation will fail(确认下面这些你没有注释掉的行里出现的bmp文件是存在的,否则一定会出错跳出.)

;!define MUI_WELCOMEFINISHPAGE_BITMAP "welcome.bmp"  #Large side bitmap for the Welcome page and the Finish page (should be 164x314 pixels)(你可以把开头的";"去掉,以启用这一行,这一行是定义开始页面和结束页面左边的那个大图的.需要是164x314(像素)的bmp图)
!define MUI_HEADERIMAGE                      #If this isn't defined, the below line does nothing. You should leave this line as it is.(如果没有定义,下面的行不会执行,但是这一行还是得留着,不能注释掉)
;!define MUI_HEADERIMAGE_BITMAP "header.bmp"        #Small bitmap image to display in the top left corner of the header on all other pages (should be 150x57 pixels)(你可以把开头的";"去掉,以启用这一行,这一行是定义其他页面上左上角的那个小图的.需要是150x57(像素)的bmp图)


!define CREATE_UNINSTALLER "no"         #If you want an uninstaller to be created for your mod to be listed in Add/Remove Programs, change this to "yes"(如果你想为你的MOD创建一个卸载程序,把这个"no"改为"yes")

#You probably shouldn't edit below this point.(从这往下的部分你不应该去编辑)
#Really, I'm serious. Don't cry to me if you screw it up.



不过有一行还是可以尝试修改的,第89行.这个是设定安装程序的语言的.你可以把"English"改成"SimpChinese"(简体中文)或者"TradChinese"(繁体中文).
!insertmacro MUI_LANGUAGE "English"   

注意事项:上面定义里用到的 txt文件, ico文件和 bmp文件最好都放在MOD目录下. 这样填的时候就直接填文件名字就可以了,而不需要填文件的路径了.
              ico文件,也就是图标文件可以自备,也可以采用 Mount&Blade Mod Installer Script v1.9 里提供的图标文件.

提示:转到292行.你会看到:
File /nonfatal /x *.nsi /x *.ico /x *.zip /x *.exe /x *.rar /x *.bak /x *.orig /x *.lnk /x installer.txt /x readme_installer.rtf *.*

文件名前加"/x"(注意空格)的含义是排除掉该文件或者该类型的文件. 这里的文件名可以使用通配字符串"*", "*.exe"的意思就是(该目录下的)所有的exe文件.
这一行就是排除文件用的,使得这些文件不出现在使用者该MOD的目录下. 这里排除了nsi文件(NSIS脚本文件),  ico文件(图标文件), 其他排除的文件,自己看吧. 这样你就不用担心,把写好的NSIS脚本文件放在MOD目录下编译,导致NSIS脚本文件被安装者获得,图标文件也是一样的. 如果你为你的安装程序加了2张bmp图,你不想最终安装到MOD的目录下,你可以在这一行里加两个排除就可以 /x xxx.bmp /x yyy.bmp. 不要简单地用/x *.bmp, 这样那个main.bmp(MOD的那个图标)也将被排除掉.
特别说明:虽然排除了ico文件,bmp文件等.也只是不把这些文件安装到使用者该MOD的目录下,上面定义里用到的ico文件和bmp文件仍然包含在安装程序里,安装程序的图标仍然正常显示,安装过程中那2个bmp图也正常显示, 定义里没有用到的ico文件和bmp文件那就是真的被排除了,完全不包含到安装程序里了.


到此为止,脚本部分就完成了.再次强调,这个脚本文件(MnB Mod Installer Script 1.9.nsi)是要放在你的MOD的目录下的.

4. 编译脚本,通过脚本把文件转化为安装程序.
在MnB Mod Installer Script 1.9.nsi上点右键,会看到菜单里有"编译 NSIS 脚本"和"编译 NSIS 脚本(选择压缩器)"两个菜单项. 点"编译 NSIS 脚本"就直接编译了,而没有进行压缩. 点"编译 NSIS 脚本(选择压缩器)",在下拉菜单里可以选择压缩器. 建议选LZMA.
都确定之后,NSIS编译器就开始编译了. 在MOD目录下生成一个MOD安装程序,当然是exe文件了. 最好用winrar压缩一下,因为几乎所有网站都是不允许直接上传exe文件的.

PS: 重要技巧.
      其实Janus编写的Mount&Blade Mod的安装程序的NSIS脚本实现了一个相当重要的功能. 通过它制作出来的MOD安装程序会首先复制使用者的native文件夹里的所有文件到要安装的MOD的文件夹里. 然后再用MOD安装程序制作者提供的自己MOD文件夹里的文件进行覆盖. 也就是说,MOD安装程序制作者只用提供自己MOD里与native里不相同的(修改过的)文件就可以了.
      建议做安装程序的时候,把MOD复制一份到其他地方再做. 做的时候,可以把整个SceneObj文件夹删掉,如果你没有改变native的任何场景的话,或者SceneObj文件夹里只放你修改过的场景文件,而把没有修改过的全部删掉. map.txt也可以删掉,如果你没有改动native的地图的话. 其实相对native你没有改过的文件都可以删掉. 这样可以大大减小安装程序的体积,而又不会遗漏什么. 建议除了map.txt以外的txt还是都保留,因为txt文件是相互关联的,通常你无法确定这些文件相对native是否都有改动.而且如果某使用者胡乱修改他自己native里的txt文件的话,很可能导致MOD安装程序制作者提供的其他txt文件和使用者修改的txt文件之间不匹配,而导致BUG.

[ 本帖最后由 rubik 于 2008-11-22 16:36 编辑 ]


我也来说两句 查看全部评论 相关评论

  • sword-assassin (2008-11-22 05:49:35)

    嗯...rubik辛苦了...收藏学习了~
  • sars1 (2008-11-22 07:52:57)

    黎明前又出了一个技术帖,感谢
  • thebestbower (2008-11-22 10:07:48)

    又见好贴,技术性要求有点高,我想应该有一款傻瓜式软件能制作安装程序
  • qq2005521 (2008-11-22 12:41:49)

    打酱油的,顺便看看!
  • oolonglgx (2008-11-22 13:19:22)

    只有一个地方有点困惑,就是安装mod的人删掉了native(可能性很小)或者native改动很大,第二种情况多一点。我以前在native中加了很多装备模型和贴图,使用这类自动安装的mod后,新装的mod把我在native中加的那些额外的东西都复制过来了,开始我还纳闷儿这mod啥时候把我自己瞎整的东西都给用上了  。。其实就是native里同名的文件会被覆盖,但额外的东西不会被覆盖掉且一股脑儿都复制过来了。不知道现在这个版本对此有没有改进。
    总之这个绝对是好东西,感谢分享!
  • rubik (2008-11-22 16:41:15)

    QUOTE:

    原帖由 oolonglgx 于 2008-11-22 13:19 发表
    只有一个地方有点困惑,就是安装mod的人删掉了native(可能性很小)或者native改动很大,第二种情况多一点。我以前在native中加了很多装备模型和贴图,使用这类自动安装的mod后,新装的mod把我在native中加的那 ...
    这个问题,好像没有解决,但是不会对MOD造成影响. 因为module.ini 还是MOD自己的,那些从native里复制过来的模型和贴图文件不会被module.ini调用,只是会占用一定空间而已.

    [ 本帖最后由 rubik 于 2008-12-21 03:16 编辑 ]
  • Rivendare (2008-11-22 16:43:20)

    再在里面维护一个“需求的文件的列表”,复制的时候根据这个列表批处理?
  • xuyixu (2008-11-22 18:10:14)

    rubik辛苦了...收藏学习了~
  • alixyang (2008-12-04 11:18:14)

    QUOTE:

    原帖由 Rivendare 于 2008-11-22 16:43 发表
    再在里面维护一个“需求的文件的列表”,复制的时候根据这个列表批处理?
    才发现这个好文章。还没仔细看, 我想有个具体列表是很必要的,最好再加上文件大小及修改时间比较

    修改native的人还是有相当比例,至少给出一个比较结果让人知道怎么回事.....