| |
我似乎有两个月没出原创了,这回将首先以我前一阶段做的MOD——“sphinx's blessing"为基础实例,由浅入深的向大家讲解有关MOD制作方面的知识,同时也欢迎大家参与讨论。
第一讲:物品放置
思路: 通常的方法是在编辑器的RENDER窗口中拖放实现,这样的好处是方便,缺点是不容易精确定位(例如将一枚金币放到一个小酒杯里)。那么这里我主要讲一下如何通过编写脚本实现精确定位,首先要确定你要将目标放在哪个位置,即X、Y、Z坐标。通过在开启控制台后点击一物品然后输入GETPOS X即可得到该物品的X坐标,同理得到Y、Z坐标。
简要流程 1 进入游戏,来到目的地,首先用ADDITEM “GOLD_001” 1来在玩家物品背包里加入一个金币,然后将其放到游戏中你想放目标物品的地方,开控制台、点金币、输入GETPOS X/Y/Z命令来知道该金币的3坐标,记下。 2 开启官方编辑器,选择你要放置的物品,例如一个箱子,最好新建ID(例如SPHINX11)。双击该物品开启其设置窗口,在SCRIPT里先什么也不选,然后将其拽到右下方目标单元,例如BALMORA法师工会,放到任意位置即可,放到外边的灰色地带也行。 3 进入游戏,接下来讲如何将想要放的物品放到金币那个位置,这里要用到SETPOS X “数字”这个命令将目标放到X坐标为“数字”的位置,同理再用SETPOS Y/Z将物品定位到已知的X,Y,Z坐标位置(可精确到小数点后两位)。 4 现在已经将目标物品放置到金币位置了,为了精益求精接下来讲微调。通过使用MOVE X “数字”这个命令来使该物品言其本身的X方向移动“数字”个单位。同理使用MOVE Y/Z完成将物品精确的放到你满意的地方。这时再使用GETPOS X/Y/Z命令来得知当前该物品的3坐标,记下(假设是100,111,222)。 5 开启官方编辑器,在顶端横排的菜单中的一个下拉菜单中找到EDITSCRIPT并点击进入脚本编辑窗口,点NEW新建,输入: BEGIN SPHINX01 SPHINX11->SETPOS X 100 SPHINX11->SETPOS Y 111 SPHINX11->SETPOS Z 222 END SPHINX01 点保存,完成了。 6 再次开启该物品的设置窗口,在SCRIPT里的下拉菜单中选刚写好的脚本(SPHINX01),保存。 7 收尾。点编辑器的保存按钮存为ESP文件。使用相关工具例如TESTOOL清理一下GMST垃圾参数后,一个简单的MOD诞生了。
实例 关于第5步那个脚本只是让大家了解基本功能怎样实现的,要力求完美的话还差的远呢。以下是我写的用于那本卷轴的脚本:
begin aaspbk
short placeitem
If ( MenuMode == 1) Return Endif
If ( placeitem == 0) aaspbk2->setpos z -662 aaspbk2->setpos x 507.5 aaspbk2->setpos y -287.42 aaspbk2->setangle x 90
aalaptop3->setpos z -761 aalaptop3->setpos x 47 aalaptop3->setpos y -773
aasplt3->setangle x 270 aasplt3->setpos z -640 aasplt3->setpos x -255 aasplt3->setpos y -270
set placeitem to 1 Endif
setpos z -500 setpos x 375.73 setpos y -431.81
aasplt1->setpos z -500 aasplt1->setpos x 375.73 aasplt1->setpos y -431.81
aasplt2->setpos z -450 aasplt2->setpos x 375.73 aasplt2->setpos y -431.81
aasw1->setpos z -650 aasw1->setpos x 510 aasw1->setpos y -748
aaatd1->setpos z -728.32 aaatd1->setpos x -788.66 aaatd1->setpos y -1041.19
aalaptop1->setangle x 270 aalaptop1->setangle z 270 aalaptop1->setpos z -640 aalaptop1->setpos x -370 aalaptop1->setpos y -637
aagouhuo->setpos z -550 aagouhuo->setpos x 490 aagouhuo->setpos y 0
aa_art_hwk_01->setangle z 90 aa_art_hwk_01->setangle x 270 aa_art_hwk_01->setpos z -230 aa_art_hwk_01->setpos x 321 aa_art_hwk_01->setpos y -2
aaspct1->setpos x -203.7 aaspct1->setpos y -440.6 aaspct1->setpos z -688.79
aalaptop4->setangle z 270 aalaptop4->setangle x 270 aalaptop4->setpos x -370 aalaptop4->setpos y -385 aalaptop4->setpos z -640
short done
if ( done == 1 ) Rotate x 30 Rotate y 40 Rotate Z 45 return endif
if ( OnActivate == 0 ) Rotate x 30 Rotate y 40 Rotate Z 45 return endif
PlaySound "Thunder2" MessageBox "Ladies and gentlemen: I'm Sphinx,and happy to release this mod as a small gift to the fans of TESIII,specially to all the Chinese fans in China and overseas.Enjoy yourself and nice to meet you.Thank you. " MessageBox "My gifts has been given to you." player->addspell, "aaspell1" player->additem, "aaspbt1" 1 player->additem, "aaspbt2" 1 player->additem, "aaspsd1" 1
set done to 1
end aaspbk
大家可以看到,通过这一个脚本我放置了不只一个物品。 关于开头用的 If ( MenuMode == 1) Return Endif 这个部分,是用来使该脚本在开启菜单模式时不运行,为了减少CPU占用率。
我用short placeitem这个命令来定义了一个变量(即placeitem),通过这个值的1和0来控制以下这部分物品: If ( placeitem == 0) aaspbk2->setpos z -662 aaspbk2->setpos x 507.5 aaspbk2->setpos y -287.42 aaspbk2->setangle x 90
aalaptop3->setpos z -761 aalaptop3->setpos x 47 aalaptop3->setpos y -773
aasplt3->setangle x 270 aasplt3->setpos z -640 aasplt3->setpos x -255 aasplt3->setpos y -270
set placeitem to 1 Endif 所有这部分物品都是“放一次就不再放置”的,也就是说在游戏中完家可拾起,而在这个条件语句之外放置的物品则是不可拾取(因为每时每刻都在执行SETPOS这个命令)
关于使物品旋转:通过这3个命令使该卷轴同时分别绕X、Y、Z轴以30、40、45的速度旋转。 Rotate x 30 Rotate y 40 Rotate Z 45
关于成一定角度放置物品:通过这个命令将aasplt3这个物品定位成X轴转270度的位置(本MOD中的几副画就是这样立起来的)。 aasplt3->setangle x 270
关于物品放置就讲到这里,希望对大家有帮助。 祝大家玩的快乐,生活的快乐。
Sphinx于2005年2月23日发表。
|