跳到正文

行为

让定义变形、生成单位、回血、给钱或爆炸的规则;卡片上的按钮;护盾;以及航母的舰载机群。

定义可以带 rules:发生在它身上的事——变成本模组的另一个定义、生成单位、回血、给钱、获得增益、爆炸——在某事发生时(on)、某条件成立时(when)、定时(every),或玩家按下卡片上的按钮时(button)。这些词是一套封闭的词汇,模组载入时逐一校验,所以规则只能做游戏本来就能安全做到的事:没有脚本,生成单位永远不会超出一方的人口上限,游戏自带的单位也没有任何规则。

变形

静止时是一棵树、移动或开火时又变回坦克的幻影坦克——两个定义,互相变换。精灵图的 anims 让它移动时显示坦克的帧、静止时显示树的帧;伪装形态为 untargetable,敌方无法选中它:

{ "id": "mymod-mirage", "extends": "mbt", "name": "Mirage Tank",
  "rules": [{ "when": { "still": 1, "quiet": 0.8 }, "do": { "morph": "mymod-mirage-tree" } }] },
{ "id": "mymod-mirage-tree", "extends": "mymod-mirage", "name": "Mirage Tank", "producedBy": [],
  "untargetable": true,
  "rules": [{ "when": { "moving": true }, "do": { "morph": "mymod-mirage" } },
            { "on": "fired", "do": { "morph": "mymod-mirage" } }] }

在卡片上自己升级的英雄:每个按钮都是一个显示目标形态的图块,像生产一样边做边付钱,并等待它所 requires 的建筑:

{ "id": "mymod-hero", "extends": "mbt", "name": "Hero Tank",
  "rules": [
    { "button": { "cost": 600, "time": 20, "ai": true }, "do": { "morph": "mymod-hero-gunner" } },
    { "button": { "cost": 900, "time": 30, "requires": ["radar"] }, "do": { "morph": "mymod-hero-sniper" } }
  ] }

变形(morph)保留的是同一个单位:选中与编队、击杀与等级、生命值的比例,以及新形态能执行的命令。

生成单位

死者为击杀者一方复活是 { "on": "destroyed", "do": { "spawn": { "unit": "mymod-zombie", "side": "killer" } } };会繁殖的巢穴是带 spawn 的 every;自带乘员的车辆是 { "on": "created", "do": { "spawn": { "unit": "…", "count": 4, "into": "hold" } } }。

护盾

定义可以有先于船体承受伤害的能量护盾 shield,以及自我修复的 regen。

舰载机群

单位可以带有舰载机群 wing:搭载本模组的飞机,向它攻击的目标出击,返航补给,损失后重新制造——轻航母的无人机、驱逐舰的那架反潜机。这些飞机作为己方单位作战,但玩家不能选中或指挥它们。

参考

规则(defs[].rules[])

字段类型必填默认含义
oncreated | destroyed | fired | damaged | kill | morphed在发生这些事时执行:被造出(`created`,地图上预置的也算)、被摧毁(`destroyed`,在倒下的地方)、开火(`fired`)、受伤(`damaged`)、击杀(`kill`)、变形完成(`morphed`)
whencondition当此条件变为成立时执行;须先变回不成立才会再次触发(见“条件”)
everynumber 0.25–3600在存活期间每隔若干秒执行一次
buttonbutton卡片上由玩家按下的按钮(见“按钮”)
ifcondition触发时同时检查:仅当它也成立时才执行;用于按钮时,不成立则按钮置灰
chancenumber 0–11触发时执行的概率
cooldownnumber 0–3600再次执行前的冷却秒数
maxinteger 1–1000同一单位上最多执行的次数
doeffect | effect[]必填执行的效果:一个效果或最多 8 个效果的列表,依次执行(见“效果”)

每条规则只有一个触发方式。when 在条件变为成立的那一刻执行,须先变回不成立才会再次触发;被 if 或 cooldown 拦下的,会在条件仍成立时再试。every 从单位被造出或上次变形起计时。do 依次执行,遇到变形即停止。

条件(when、if)

字段类型必填默认含义
movingboolean正在移动(true)或静止(false)
stillnumber 0–3600已静止至少这么多秒
firedWithinnumber 0–3600最近这么多秒内开过火
quietnumber 0–3600已至少这么多秒没有开火
hurtWithinnumber 0–3600最近这么多秒内受过伤
hpBelownumber 0–1生命低于总量的此比例
hpAbovenumber 0–1生命高于总量的此比例
agenumber 0–36000自被造出或上次变形以来的秒数
flagstring规则设置的某个标记为开
noFlagstring该标记为关
killsinteger 0–10000击杀数至少为此
rankinteger 1–3老兵等级至少为此
onWaterboolean位于水面(true)或陆地(false)
enemyWithinnumber 0.5–32己方可见的敌人在此格数之内
near{ units, kind, side, within, count }附近有其他单位:`within` 格之内至少有 `count` 个属于 `side` 一方的 `units` 或 `kind`(见“附近”)
nightboolean是夜晚(true)或白天(false)
carryinginteger 1–50载有至少这么多单位
killedByid[]用于 `destroyed`:击杀它的是这些定义之一(只有被丧尸杀死的才会尸变)
anycondition条件列表,其中任一成立即可
notcondition必须不成立的条件

附近(when.near)

字段类型必填默认含义
unitsid[]仅限这些定义:原版或任何模组的
kindunit | building仅限单位,或仅限建筑
sidefriend | enemy | anyany归属:己方及盟友(`friend`)、敌方(仅限己方可见的),或任何一方
withinnumber 0.5–32必填从它到对方边缘的格数
countinteger 1–501至少这么多个

单位附近有什么,量到对方的边缘:只有附近有东西可钩时才起飞的飞行兵({ "kind": "building", "within": 8 })、在指挥官身边更勇猛的部队({ "units": ["mymod-captain"], "side": "friend", "within": 10 })、主人走近时苏醒的城墙。敌方单位只有在己方可见时才计入。

效果(do)

字段类型必填默认含义
morphid原地变为本模组的另一个定义:仍是同一个单位(选中状态、击杀与等级、新形态能执行的命令都保留),生命值按比例保留。建筑只能变为占地相同的建筑
spawn{ unit, count, side, into, max }在其旁边或其载舱内生成单位(见“生成”)
healnumber -1000000–1000000回复的生命值;负数为扣除,但不会致死
healPctnumber -1–1按总生命比例回复
metalnumber -99999–99999给予己方的金属;负数为扣除,最低为零
flagstring设置一个标记,供条件读取
unflagstring清除该标记
buff{ speed, damage, reload, taken, for }持续 `for` 秒的倍率:`speed` 速度、`damage` 造成伤害、`reload` 装填时间、`taken` 承受伤害;新的增益会替换旧的
explode{ dmg, radius, cls, friendlyFire }以自身为中心爆炸:中心伤害 `dmg`,在 `radius`(世界像素)边缘降为一半,按 `cls`(默认 he)的装甲倍率计算;除非 `friendlyFire`,否则不伤己方
fxstring在其位置播放的特效:本模组的 `fx.<名字>` 精灵图,或 fx.expl.s、fx.expl.m、fx.expl.l、fx.spark、fx.flak、fx.smoke、fx.splash、fx.splash.l、fx.muzzle、fx.repair、fx.emp、fx.nuke
fxScalenumber 0.05–81特效的缩放倍数
soundstring在其位置播放的声音:武器音效、expl、explBig、upgrade,或本模组的 `sounds`
dieboolean被摧毁,如同无人击杀(其 `destroyed` 规则会执行)
removeboolean无痕消失:没有残骸、不计损失、不触发 `destroyed`

生成(do.spawn)

字段类型必填默认含义
unitid必填生成的单位:原版或本模组的
countinteger 1–161数量
sideown | killerown归属:己方,或(在 `destroyed` 中)击杀者一方
intohold直接放进自身载舱(以剩余空间为限),而不是放在旁边
maxinteger 1–64此规则生成的单位同时存活的上限

按钮(rule.button)

字段类型必填默认含义
nametextthe form it makes按钮名称
desctext提示中的描述
costnumber 0–999990金属,随工作进度支付
timenumber 0–36000满电力下的工作秒数;0 为立即
requiresid[]按下(及持续进行)所需存在的建筑或已研究的科技
aiboolean电脑一方在有余钱时也会按下它

护盾(shield)

字段类型必填默认含义
hpnumber 1–1000000必填在船体受损前可吸收的伤害
regennumber 0–1000000每秒恢复量
delaynumber 0–6003未受伤多少秒后开始恢复

舰载机群(wing)

字段类型必填默认含义
unitid必填舰载机:本模组的飞行器,须为 `"pop": 0`、`"producedBy": []`,只由母舰制造
countinteger 1–161搭载的飞机数
rebuildnumber 0.5–60010损失后多少秒免费补充一架,逐架补充
sortienumber 1–60015飞机出击多少秒后返航
rearmnumber 0–1203返航后多少秒才能再次出击,期间会被修复
rangenumber 1–3210飞机在离母舰多少格内出击

最后编辑