【国王的恩赐:交错世界】自定义兵种MOD教程补全(含新兵种下载)
本帖最后由 hxsgame 于 2010-12-5 09:48 编辑因为制作自定义单位走了不少弯路。。怨念颇多,所以想把自定义兵种的方法补完一下,弯路嘛。。走一次就够多了~~~
以下分5个部分:
1, 新兵简介和附件下载
2, 兵种.atom文件重要部分功能补全
3,详细说说强大的 posthitmaster=
4, 一些常用API
5, 个人的一些经验分享
1,先看看加入的新兵吧
附件:
附件说明:
此兵种用于交错世界
1,添加了新兵种“独眼巨精”(设计思路为:防御兼辅助控制型兵种,自认为不会破坏游戏平衡吧 哈哈)
2,开放了训练所5级兵种训练,但考虑平衡性,仅支持把“独眼巨人”训练成“独眼巨精”(主要是为玩家老存档提供获得“独眼巨精”的途径,同时避免开图没刷出“独眼巨精”没得玩的情况,不喜欢的话可以不用)
3,新建存档或老存档逃跑后有“独眼巨精”加入(方便体验新兵种,同样的,不喜欢可以不要 嘎~~我真啰嗦。。)
“独眼巨精”的特性:肉盾,可治疗和复活,魔法弱点,射击距离6格以上受到30%伤害惩罚
“独眼巨精”的技能:普通攻击有一定几率晕眩,可以击退目标,击退距离与目标等级有关
使用方法请参见压缩包里的说明文件
之前有篇帖子“【国王的恩赐:戎装公主】MOD学,兵种MOD方向教程”大家可以百度一下~~里面很多地方已经说的比较详细了,就不再重复,下面是扩展部分:
2,为方便说明,还是把zcyclop.atom拿出来晒晒的~~顺便把几处重点项强调说明一下~~
main {
class=chesspiece
model {
0=zcyclop.bma
1=cyclop_death.bma
}
cullcat=0
}
arena_params {
features_label=cpi_zcyclop_feat
features_hints=shot_header/shot_hint,agedsniper_header/agedsniper_hint,stonefairy_header/stonefairy_hint,no_melee_header/no_melee_hint
race=neutral
cost=12000
level=5
leadership=1700
attack=47
defense=77
defenseup=17
initiative=3
speed=2
hitpoint=770
movetype=0
krit=17
hitback=1
hitbackprotect=0
attacks=moveattack,throw,stun //攻击和特技列表,这里列出的是函数名,函数的定义就在下面。PS:关于这条的应用“【国王的恩赐:戎装公主】MOD学,兵种MOD方向教程”里已经讲的很清楚了,我就不再废话了。
posthitmaster=zcyclop_stun,zcyclop_posthit //每次攻击后调用的脚本函数名,这里是调用lua脚本,函数的定义在某些.lua文件里(比如这里调用的函数就在zcyclop.lua里)。在自定义单位技能方面,个人感觉这里应用起来非常方便,所以下面会详细说明
features=shot,poison_immunitet //兵种的特性函数调用表,对应着unit_features.lua和addon_unit_features.lua内定义的函数,比如 独眼巨人 不能治疗和复活,就是在这里设置的
resistances {
physical=55
poison=70
magic=0
fire=60
astral=30 //星抗性PS:如果出现在 damage {}函数中则是 星伤害,比如 damage { astral=1,2 } 星伤害1~2
}
moveattack {
group=1,1
nonextifenemy=1
ad_factor=1
damage {
physical=35,87
}
custom_params {
stun=33 // posthitmaster=调用的zcyclop_stun函数需要读取的数值,在函数中判断 晕眩 的几率
}
}
stun {
class=throw
hinthead=special_zcyclop_potentthrow_head
hint=special_zcyclop_potentthrow_hint
reload=3
distance=100
penalty=1
mindist=1
picture=BA1_Push_
picture_small=BA1_Push_small.png
animation=cast/throw/thtarget
throw=cyclopcast //远程攻击 弹丸 文件,对应同名的.atom文件,比如这里是 cyclopcast.atom (这个文件里可以定义 弹丸 的模型文件、飞行速度还可以加载控制动画效果等等,很强大~)
framekey=x
damage {
physical=60,120
}
custom_params {
fury=1 //posthitmaster=调用的zcyclop_posthit函数需要读取的数值,在函数中判断 是否要执行 击退 效果
}
}
throw {
class=throw
group=1,2
distance=6 //射程定义,单位是格数
picture=ba1_waterflask_
picture_small=ba1_waterflask_small.png
mindist=1
base_attack=1
penalty=0.7 //惩罚系数,当目标距离超过 distance定义的数字时,伤害*该系数。
showdmg=1
animation=cast/throw/thtarget
throw=cyclopcast
framekey=x
damage {
physical=35,87
}
custom_params {
stun=33
}
}
}
3,好吧,现在来详细说说 posthitmaster= 项的应用:
posthitmaster=后列出的函数会在攻击后被无条件调用(无条件的意思是:不论是普通攻击还是技能攻击。。所以如果是希望,特定技能攻击才触发的效果需要利用一些变量作为判定条件,比如上面的fury=1 ),多个函数名用逗号隔开,函数实现可以写在任意.lua文件里~~
具体的定义的格式如下:
function 任意函数名(damage,addrage,attacker,receiver,minmax,userdata,hitbacking)
参数表解释:
damage -- 伤害
addrage -- 增加的狂怒值
attacker -- 发动攻击的单位
receiver -- 攻击的目标单位
minmax -- 用于某种逻辑判断,具体不详。。使用时照搬格式就好,哈哈
userdata -- 不详。。
hitbacking -- 反击判断
参数很多,个人感觉常用的就是attacker和receiver吧~我们来举个简单例子直观说明一下:
实现 普通攻击有几率产生击晕效果 的代码
function zcyclop_stun(damage,addrage,attacker,receiver,minmax) //定义函数,函数名就是 posthitmaster= 后接的函数名~~废话。。
if minmax==0and damage>0 then //minmax的逻辑判断,照搬就好~~
local stun=tonumber(Attack.get_custom_param("stun")) //从调用本函数的原函数的custom_param代码段中读取“stun”的值(这里就是取zcyclop.atom文件stun {}中的custom_param{}的stun值),赋给stun PS:这个API函数很重要,可以实现.lua和.atom代码的互动,实现更多功能(个人感觉有了它,无所不能。。。)
if stun~=nil then
local rnd=Game.CurLocRand(1,100) //取1~100的一个随机数
if rnd<=stun then
effect_stun_attack(receiver,0,2) //调用effect_stun_attack函数(游戏原有的 晕眩 处理函数,代码在spell_effects.lua文件里)
return -damage,addrage
end
end
end
return damage,addrage
end
总之利用这个接口,大家就尽情发挥想象力吧~~~~
4,列出了游戏的一些API,希望对喜欢自定义兵种的朋友有点帮助:
因为人很懒,有部分API解释做了直接引用。。
Attack类:
Attack.get_target():得到攻击对象的index,index几乎就可以视作是一个对象,下面所有idx开头的参数都可以使用这个index来调用。另外一般来说index=0的对象就是调用函数的那个兵,比如某兵被攻击调用了posthitslave,那么在该函数里index=0的就是被攻击的兵
Attack.cell_adjacent(idx ,dir):返回在dir列表中与idx所在格子相邻的一个格子
Attack.trace (idx , dir):返回dir列表中,从idx的位置向右数的所有格子的总数,是一个数值
Attack.angleto(attacker,receiver):返回攻击者与目标之间的角度,实际就是返回两个格子之间的角度
Attack.aseq_rotate(idx_actor, idx_target):使idx_actor的朝向转向idx_target。
Attack.aseq_time(idx, “x”):等待返回的时间,然后执行后面的代码。
Attack.act_aseq(idx, action):在idx的动作序列里面增加action动作并立即返回,一般与Attack.aseq_time(idx, “x”)连用,以保证视觉效果的逻辑性(程序会有专门的另外线程处理动作,会按照动作序列一个个播放)。
Attack.act_size(idx):返回idx的数量。
Attack.act_totalhp(idx):返回idx的总血量。
Attack.act_get_par(idx, par):返回idx的各种属性(比如par=”initiative”时返回主动性)。
Attack.atom_spawn(idx, t, atom):在t时刻在idx的位置生成一个atom对象(一般用来生成一些特效之类一次性的东西),atom为atom文件名。
Attack.cell_resurrect(idx, hp, t):在t时刻复活idx,hp为复活的血量。
Attack.get_custom_param(par):读取原函数对应的custom_params里的参数,par指定参数名,注意返回值为string类型
Attack.act_del_spell(idx, effect):去除idx的effect状态,effect省略时去除所有状态。
Attack.act_enable_attack(idx, attack, enable):允许/禁止idx的某种特技,attack为特技名,enable为true时允许,false时禁止。
Attack.resort(idx):根据主动性重新排列行动的先后顺序(一般在类似召唤了新兵的场合使用)。
string类,字符串操作
string.format("atom%xxi",d):将%xxi部分替换成d的值添加到atom字符串,xx是一个两位数字,比如01、02、10这类的,表示添加字符的宽度。一般与Attack.atom_spawn(idx, t, atom)联用实现atom文件的特定显示,比如d=1,那么Attack.atom_spawn(idx, t, string.format("zz%02i",d)),就是显示zz01.atom文件。
Game类:
Game.GVNum ("talant_",num):修改公主的特定属性值为num,返回值是指定的属性修改后的值。num参数省略时返回指定属性的当前值。公主的属性表示有很多,比如talant_collector_race_human 为1时表示可以训练人族部队,talant_collector_army_level的数值表示可以训练的部队等级,等等。。
Game.Ang2Dir(angle):返回某个角度上的所有格子的列表。类似一个数组啥的
Game.CurLocRand(min, max):在min和max之间产生随机数。
5,最后把自己做自定义兵种的几点经验分享一下:
1,游戏的函数定义都在.lua文件里,因为lua不是wingdows默认支持的文件格式,所以无法查找其内部字段,可以用批量后缀名修改工具全部改成.txt文件,这样通过函数名查找函数代码就方便多了
2,通道注册文件textures.sub,一定要放在data\下才有用,其他地方无法成功注册,会造成贴图显示错误
3,兵种用的图像文件.png,一定要压进.kfs文件中(不一定是游戏原有的.kfs自己建一个也可以,但必须是.kfs文件),不然刚进游戏的读档界面兵种头像会黑掉。。(脑袋想爆了也不晓得啥原因。。)
4,交错世界1.30版本的文件调用顺序貌似是先加载data\再用sessions\orcs\下去覆盖,所以MOD建议放在sessions\orcs\下比较好(只是建议~~)但参见2,条~textures.sub例外还是在data\下才有用。。
祝大家玩的开心~对兵种有意见或是补充欢迎提出,谢谢支持~~
这个太专业了,楼主你太牛了! 最近都没时间玩这个游戏了 唉 {:3_148:}么么小希希~{:3_188:} 大家喜欢就好,哈哈:lol
回3L~这游戏值得收藏,以后慢慢来玩嘛~~ 不错不错 就是需要LZ这样的人才这样的技术贴啦{:3_136:} 沉底了要哈哈
不能隐藏悲剧呀哈哈 真沉了 哈哈,自己挖个坟~~ 谢谢分享,这是技术贴啊,高科技…… 现在没时间玩了~~哈哈,还念当初呀~,还好这经典游戏还是有同志们顶着~ :D就这个还不错。。。。 就这个还不错。。。。~支持下 太专业了,版主说的我有很多地方不懂,学习请教中。 谢谢楼主分享 1111111 给跪,技术型 支持 嘻嘻,好喜欢哦,thank you 还能挖坟吗 谢谢楼主,辛苦了。
楼主厉害了,很赞哦;P 请问一下魅魔女王出场自带给对方9回合的灵魂连结在哪个文件里改啊 感谢分享
页:
[1]