3DMGAME 3DM首页 新闻中心 前瞻 | 评测 游戏库 热门 | 最新 攻略中心 攻略 | 秘籍 下载中心 游戏 | 汉化 购买正版 论坛

注册 登录

QQ登录

只需一步,快速开始

查看: 11353|回复: 45
打印 上一主题 下一主题

[心得] 从零开始学破甲(小白向)

  [复制链接]

34

主题

767

帖子

704

积分

超级玩家

Rank: 5Rank: 5

贡献度
54
金元
4882
积分
704
精华
0
注册时间
2009-7-8
跳转到指定楼层
主题
发表于 2011-5-16 08:20 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 jewelswey 于 2011-5-16 14:12 编辑

夜半写论文没头绪,无聊把GateCloser做了破甲化,想到版里貌似只有1.1版的框架解析。


所以写个2.0的教程混点分。本身脚本比较简单作者又给了注释,我相当于是翻译了一下,马上要天亮也没有测试 。理论上是感觉没什么问题,若是有错误欢迎指出,裨补阙漏。


尽量写的罗嗦些便于对此感兴趣又暂时望而却步的新人。






这里假设我们要修改一件上衣为三段破甲,手头分别有{a.nif(上衣原始模型) b.nif(准备好的二段模型) femaleupperbody.nif(无甲模型——即身形,当然要是有专用的模型就最好,但是一般自改都是利用现成资源,第三段通常都会用果体)} 三个模型文件用于破甲各阶段替换模型。然后将三个文件丢到data\meshes\a\下


然后我们要让名为xxx.esp中id为xxx的上衣破甲化,勾上breakundies.esm和xxx.esp




新建脚本(在脚本中符号“;”为注释符,包括分号在内本行后面的文字只起描述作用,即便写进脚本也不会产生影响)


script type 为 object<这时我们创建了一个名为aaBUxxx的脚本,当脚本写完后打开xxx选择此脚本即完成破甲化,脚本名命名请随意,这里只是举个例子,同时建议在首段写上诸如aa的字符使之排列靠前方便找到


此外我们在这个脚本关联了一个内部参变量who,四个自定参变量。


所有未被赋值的参数在初始状态下都 == 0




我们让break代表破甲的三阶段,即当耐久度为100%时break==0 ,耐久小于等于50%break==1,耐久度为0时break==2。


在这里check是可有可无的,因为它的作用是实现多件装备在同一脚本中完成破甲化,它的好处有很多,既便于统一管理,也方便装备跟脚本的关联以及esp的精简。我在最后会提一下它的用法,所以还是保留check。


flag代表装备的穿着状态,于是它应该是当装备时flag== 0 ,反之为1


wait要解释起来比较麻烦,因为它即作为因变量又作为自变量,在意义上也是表示穿着状态,但起到了动态地调用各部分函数的作用,我的知识有限表述能力也欠佳所以也不赘述以免误导人,只要理解这个破甲脚本的运作过程就不难理解它。




下面开始脚本的主体。


首先要设定脚本的触发方式,我们将脚本关联在上衣上,在游戏中耐久的变化是实时的,所以整个脚本要在实时中执行。 因此接下来应该录入的是<接着设置一个if的条件,第一段破甲应该是耐久度小于等于装备总耐久的1/2,录入以下代码<现在让我们来理一下思路,第一段破甲首先该角色的上衣是尚未破甲的而且他必须活着,然后输出一行屏幕提示破甲,接着将此上衣的材质替换成第二阶段的模型,然后卸下此装备旋即再穿上,在此之间需要播放一段破甲的特效。


为什么要卸了再穿,作者给出的解释是为了避免出错和无用的信息。当这一切完成后,该角色应该是穿着上衣,并且上衣为第二阶段。此时break理应为1,flag为0。完整代码如下<因为wait初始数值为0,所以这一段是从elseif部分开始进行的,输出上身破损的提示后,wait被赋值为1卸下装备后继续从elseif开始,输出提示后wait被赋值为2而此时角色装备已卸下于是跳过下面的if段回到整段代码的最上端运算,最后3个参数被重新赋值,不再进入elseif。整个过程只有一瞬间,所以这个复杂的循环过程是无缝的。


以上是第一阶段的破甲。


第二阶段依样画葫芦。<以上就是简单的三段破甲的全过程,但是到这里还不能结束。因为我们耐久是可以修复的,所以接着要逆向补甲。


依旧一样画葫芦。<通常情况下到这里是可以写end结束脚本了,但是我们是前人栽树后人乘凉,一个好的脚本都是经过不断地发现问题不断修改才能经世致用的。


接下来还要处理两个细节。




首先为了防止角色死亡后脚本停止导致装备的模型路径没有改回原始模型而发生不必要的错误。我们应当让它在穿戴着死亡后初始化。<当玩家或者其他NPC将初始化的装备捡起来穿上,因为耐久度是不会变的,所以又会重新运算一遍这样又能自动回到正常的破损状态。


同理,依葫芦画瓢。让它在从包裹丢弃后初始化。<整个脚本结束,接下来要做的就是关联editid为xxx的上衣了。

接下来简要介绍变量check的用法,如你所见check是用来实现多件破甲在同一脚本中运作。
回到最初的第一段破甲的循环中<假设我们添加第二件上衣为xxx2,这段代码便应该做如下变动。<然后各阶段就应该在存在check==1的地方各添加一条check==2的if循环。
如下<

评分

9

查看全部评分

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|3DMGAME ( 京ICP备14006952号-1  沪公网安备 31011202006753号

GMT+8, 2026-4-17 14:15 , Processed in 0.384307 second(s), 22 queries , Memcached On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表