Skip to content

AI 脚本与触发

此页面列出了所有 Phobos 引入的 AI 脚本与地图触发相关的修改。

Bug 修复与杂项

  • 动作脚本 移动到单元格 现在遵守 YR 的单元格计算规则。使用 1000 * Y + X 获取单元格值。(先前使用遗留自 RA1 的 128 * Y + X
  • 现在游戏可以读取的路径点范围拓展到了 [0, 2147483647]。(先前为 [0,701])
  • 地图触发结果 41 播放动画在... 现在可以更完善地创建可以播放音效、造成杀伤以及使用设置了 TiberiumChainReaction 参数的动画(需要 修改 FAData.ini)。
  • 地图触发结果 125 将建筑建于... 现在可以设置是否播放建造动画(需要修改 FAData.ini)。
  • 全局变量(rulesmd.ini 中的 VariableNames)和局部变量(地图中的 VariableNames)现在都没有数量限制了。
  • 动作脚本 部署 现在会让拥有 DeploysInto 的载具自动寻找空地以进行部署,而不再是直接呆住。
  • 由触发结果 7、80、107 生成的小队现在可以正常使用 IFV 和 OpenTopped 逻辑。
  • 如果预先放置了拥有 NaturalParticleSystem 的建筑,它总是在游戏开始时被创建。这一行为已被移除。
  • 用于 AI 动作脚本的超级武器 56 超时空传送至建筑57 超时空传送至目标10104 超时空传送至敌方基地 现在可以通过 [General] -> AIChronoSphereSWAIChronoWarpSW 分别明确设置。如果设置了 AIChronoSphereSW 但没有设置 AIChronoWarpSW,那么游戏会检查前者指定的 SW.PostDependent 来获取关联的超级武器。如果也没有设置那么会分别使用 [SuperWeaponTypes] 列表中最后一个 Type=ChronoSphereType=ChronoWarp 的超级武器。
  • 修复了 AI 小队招募数量与生产计划不一致导致不足以建立小队的问题。

更高的覆盖物数量上限

  • 现在可以让地图包含索引上限高达 65535 的覆盖物。

  • 在地图文件中设置 [Basic] -> NewINIFormat=5 以启用该功能。

Note

使用此功能的地图 无法 被原版游戏加载。

Warning

并非所有工具都完全支持此功能,它们可能会崩溃或损坏地图。我们推荐在使用此功能时使用 World-Altering Editor 地图编辑器。

单人任务地图

基地节点修复

  • 在单人战役中你可以决定 AI 是否修复由 Deliver 超武(Ares 功能)提供的基地节点/建筑。
    • 你可以通过设置 [Basic] -> RepairBaseNodes 来全局控制,或者在特定地图文件的 [Some House] 中设置同名标签。局部标签会覆盖全局。

rulesmd.ini

ini
[Basic]
RepairBaseNodes=false              ; boolean

在地图文件:

ini
[Country House]
RepairBaseNodes=                   ; List of 3 booleans indicating whether AI repair basenodes in Easy / Normal / Difficult game diffculty.

默认载入图与简报位置

  • 现在可以为单人战役地图的载入图像素偏移值和载入图图像以及色盘设置默认值,如果地图自身没有定义这些或载入图与色盘丢失那么会将其作为默认值使用。

missionmd.ini

ini
[Defaults]
DefaultLS640BriefLocX=0  ; integer
DefaultLS640BriefLocY=0  ; integer
DefaultLS800BriefLocX=0  ; integer
DefaultLS800BriefLocY=0  ; integer
DefaultLS640BkgdName=    ; filename - including the .shp extension.
DefaultLS800BkgdName=    ; filename - including the .shp extension.
DefaultLS800BkgdPal=     ; filename - including the .pal extension

Note

尽管标签名为 DefaultLS800BkgdPal,但实际上就像原本游戏中的 LS800BkgdPal 那样适用于两种情况。

基地车重新部署

  • 现在你可以通过设置 [Basic] -> MCVRedeploys 来决定单人战役中的基地车能否重部署。这会覆盖 [MultiplayerDialogSettings] -> MCVRedeploys 但仅生效于单人战役地图中。

在地图文件:

ini
[Basic]
MCVRedeploys=                 ; boolean

在 missionmd.ini 中设置最佳时间和相关字符串条目

  • 默认情况下单人战役地图的最佳通关时间和消息文本是在地图文件自身的 [Ranking] 小节中定义的。现在也可以在 missionmd.ini 的地图文件小节中设置这些值,并且这些值会优先于地图文件中的设置,若未设置则使用地图文件中的内容为默认值。

missionmd.ini

ini
[SOMEMISSION]             ; Filename of mission map
Ranking.ParTimeEasy=      ; time string (hh:mm:ss)
Ranking.ParTimeMedium=    ; time string (hh:mm:ss)
Ranking.ParTimeHard=      ; time string (hh:mm:ss)
Ranking.UnderParTitle=    ; CSF entry key
Ranking.UnderParMessage=  ; CSF entry key
Ranking.OverParTitle=     ; CSF entry key
Ranking.OverParMessage=   ; CSF entry key

启动时显示简报对话框

  • 现在你可以通过在地图文件的 [Basic] 小节或 missionmd.ini(前者优先)中设置 ShowBriefing 为 true 来使简报对话框在单人战役地图启动时显示。用户可以通过在 RA2MD.INI 中设置 ShowBriefing 为 false 来禁用这一功能。
    • BriefingTheme(按优先级从高到低的顺序为:地图文件、missionmd.inirulesmd.ini 中的阵营条目)可以用来定义在简报界面播放的自定义主题。若未设置则载入图主题会一直播放直至游戏场景实际开始。
    • 可以分别通过设置 ShowBriefingResumeButtonLabelShowBriefingResumeButtonStatusLabel 来自定义启动简报对话框界面恢复按钮的字符串标签以及按钮的状态文本。它们默认为在其他情况下打开简报对话框界面时使用相同的标签

missionmd.ini

ini
[SOMEMISSION]   ; Filename of mission map
ShowBriefing=   ; boolean
BriefingTheme=  ; Theme name

在地图文件:

ini
[Basic]
ShowBriefing=false  ; boolean
BriefingTheme=      ; Theme name

rulesmd.ini

ini
[SOMESIDE]      ; Side
BriefingTheme=  ; Theme name

uimd.ini

ini
[UISettings]
ShowBriefingResumeButtonLabel=GUI:Resume                      ; CSF entry key
ShowBriefingResumeButtonStatusLabel=STT:BriefingButtonReturn  ; CSF entry key

RA2MD.INI

ini
[Phobos]
ShowBriefing=true  ; boolean

动作脚本

10000-10999 游戏内行为

10000-10049 攻击行为

  • 这些行为通过第二个参数指示小队类型使用特遣部队接近并攻击目标,该参数是一个通用预定义组的索引。请参阅下表以了解可能的行为(第一个参数)和参量(第二个参数值)。
  • 基于威胁值的攻击行为会考虑 rulesmd.ini 中的 TargetSpecialThreatCoefficientDefaultEnemyHouseThreatBonus 标签。
  • 所有攻击其他空中单位的战机在执行此脚本时会直接将其结束。由于如果没有这一效果那么战机类在开发此功能时存在一些无法修复的 Bug 因此这种行为是故意的
  • AITargetTypes 动作通过第二个参数指示小队类型使用特遣部队接近并攻击目标,该参数是 AITargetTypes 中一个由 modder 自行定义的组的索引。请参阅下表以了解可能的行为(第一个参数)和参量(第二个参数值)。

aimd.ini

ini
[SOMESCRIPTTYPE]  ; ScriptType
x=i,n             ; For i values check the next table
行为参数重复目标优先级描述
10000目标类型 #YesCloser
10001目标类型 #NoCloser当一个小队成员击杀指定目标时结束
10002AITargetTypes 索引 #YesCloser
10003AITargetTypes 索引 #NoCloser当一个小队成员击杀指定目标时结束
10004AITargetTypes 索引 #YesCloser从列表中选取 1 个随机目标
10005目标类型 #YesFarther
10006目标类型 #NoFarther当一个小队成员击杀指定目标时结束
10007AITargetTypes 索引 #YesFarther
10008AITargetTypes 索引 #NoFarther当一个小队成员击杀指定目标时结束
10009AITargetTypes 索引 #YesFarther从列表中选取 1 个随机目标
10010目标类型 #Yes较近且威胁较高
10011目标类型 #No较近且威胁较高当一个小队成员击杀指定目标时结束
10012AITargetTypes 索引 #Yes较近且威胁较高
10013AITargetTypes 索引 #No较近且威胁较高当一个小队成员击杀指定目标时结束
10014目标类型 #Yes较远且威胁较高
10015目标类型 #No较远且威胁较高当一个小队成员击杀指定目标时结束
10016AITargetTypes 索引 #Yes较远且威胁较高
10017AITargetTypes 索引 #No较远且威胁较高当一个小队成员击杀指定目标时结束
  • 下列值为可用于新攻击动作脚本第二个参数的 目标类型 # 参数:
    • 「被视为载具的建筑」意为那些同时设置了 UndeploysIntoFoundation=1x1 且没有设置 ConsideredVehicle 或者设置了 ConsideredVehicle=true 的建筑。
目标类型描述
1Anything任何敌方 载具类型战机类型步兵类型建筑类型
2Structures任何敌方不被视为载具的 建筑类型
3矿车任何敌方拥有 Harvester=yesResourceGatherer=yes载具类型、拥有 ResourceGatherer=yes建筑类型
4Infantry任何地方步兵类型
5Vehicles任何敌方载具类型或被视为载具的建筑
6Factories任何敌方拥有 Factory= 设置的建筑类型
7基地防御任何敌方拥有 IsBaseDefense=yes建筑类型
8所属方威胁任何瞄准小队所属方单位或任何接近小队队长的敌人。
9电厂任何敌方拥有正值 Power=建筑类型
10Occupied任何敌方拥有步兵驻扎的建筑类型
11科技建筑任何拥有 Capturable=yesNeedsEngineer=yes建筑类型
12Refinery任何敌方拥有 Refinery=yesResourceGatherer=yes建筑类型、拥有 ResourceGatherer=yesHarvester=no载具类型(即奴隶矿车)
13心灵控制者任何武器使用 MindControl=yes 弹头的载具类型战机类型步兵类型建筑类型
14空中单位(包括降落的)任何敌方战机类型和拥有 Jumpjet=yes载具类型步兵类型,包括已经降落的和任何其他当前仍在空中的单位
15Naval任何敌方拥有 Naval=yes建筑类型载具类型,以及任何在水上单元格的载具类型战机类型步兵类型
16Disruptors任何敌方拥有正值 InhibitorRange=、正值 RadarJamRadius=CloakGenerator=yesGapGenerator=yes 的对象
17地面载具任何敌方没有 Naval=yes载具类型、降落的战机类型或被视为载具的建筑类型
18Economy任何敌方拥有 Harvester=yesResourceGatherer=yes载具类型、拥有 Refinery=yesResourceGatherer=yesOrePurifier=yes建筑类型
19兵营任何敌方拥有 Factory=InfantryType建筑类型
20重工任何敌方拥有 Naval=noFactory=UnitType建筑类型
21机场任何敌方拥有 Factory=AircraftType建筑类型
22Radar任何敌方拥有 Radar=yesSpySat=yes建筑类型
23高科任何敌方位于 [AI]>BuildTech= 列表中的建筑类型
24船坞任何敌方拥有 Naval=yesFactory=UnitType建筑类型
25超武任何敌方拥有 SuperWeapon=SuperWeapon2=SuperWeapons=建筑类型
26建造厂任何敌方拥有 ConstructionYard=yesFactory=BuildingType建筑类型
27Neutrals任何中立(平民)对象
28Generators任何敌方拥有 CloakGenerator=yesGapGenerator=yes建筑类型
29雷达干扰器任何敌方拥有正值 RadarJamRadius= 的对象
30Inhibitors任何敌方拥有正值 InhibitorRange= 的对象
31海军单位任何敌方拥有 Naval=yes载具类型或任何在水上单元格的载具类型战机类型步兵类型
32机动单位任何载具类型战机类型步兵类型
33Capturable任何拥有 Capturable=yes 的建筑或任何拥有 BridgeRepairHut=yes 且与断桥关联的建筑
34区域威胁任何敌方处于小队队长警戒区域内的对象
35重工与船坞任何敌方拥有 Factory=UnitType建筑类型
36非防御建筑任何敌方拥有 IsBaseDefense=no建筑类型
37桥梁维修小屋任何拥有 BridgeRepairHut=yes 且与断桥关联的建筑
  • 第二个参数是 AITargetTypes 小节中从 0 开始的索引用于指定可选的载具类型战机类型步兵类型建筑类型
  • AITargetTypes 索引 # 值在新的 AITargetTypes 小节中获取,该小节必须在 rulesmd.ini 中声明:

rulesmd.ini

ini
[AITargetTypes]  ; List of TechnoType lists
0=SOMETECHNOTYPE,SOMEOTHERTECHNOTYPE,SAMPLETECHNOTYPE
1=ANOTHERTECHNOTYPE,YETANOTHERTECHNOTYPE
...

10050-10099 移动小队至科技类型位置行为

  • 这些行为通过第二个参数指示小队类型使用特遣部队接近由其指定的目标。请参阅下表以了解可能的行为(第一个参数值)。

aimd.ini

ini
[SOMESCRIPTTYPE]  ; ScriptType
x=i,n             ; For i values check the next table
行为参数目标所属目标优先级描述
10050目标类型 #Enemy较近且威胁较高
10051[AITargetType] 索引 #Enemy较近且威胁较高
10052[AITargetType] 索引 #EnemyCloser在选中列表中选取 1 个随机目标
10053目标类型 #FriendlyCloser
10054[AITargetType] 索引 #FriendlyCloser
10055[AITargetType] 索引 #FriendlyCloser在选中列表中选取 1 个随机目标
10056目标类型 #Enemy较远且威胁较高
10057[AITargetType] 索引 #Enemy较远且威胁较高
10058[AITargetType] 索引 #EnemyFarther在选中列表中选取 1 个随机目标
10059目标类型 #FriendlyFarther
10060[AITargetType] 索引 #FriendlyFarther
10061[AITargetType] 索引 #FriendlyFarther在选中列表中选取 1 个随机目标

10100-10999 一般用途

10100 时效性区域警戒
  • 可以让特遣部队中的单位一定时间内进入区域警戒模式。与原本只能待在运抵进行基本的警戒命令(5,n)不同:它可以更主动地攻击入侵附近区域的目标或保护需要保护的单位。

aimd.ini

ini
[SOMESCRIPTTYPE]  ; ScriptType
x=10100,n         ; integer, time in ingame seconds
10101 等待弹药满载
  • 如果特遣部队中包含使用弹药的单位那么在这些单位弹药满载前脚本不会继续。

aimd.ini

ini
[SOMESCRIPTTYPE]  ; ScriptType
x=10101,0
10102 向小队队长集结
  • 将特遣部队围绕小队队长(该单位在此期间几乎保持不动)进入区域警戒模式给定的事件值。默认的半径是 [General] -> CloseEnough 且单位不会离开此区域。

aimd.ini

ini
[SOMESCRIPTTYPE]  ; ScriptType
x=10102,n
10103 装载入运输载具
  • 如果特遣部队中包含可以被同一特遣部队的运输工具装载的单位,那么该行为会让这些单位进入运输工具。在单人任务地图中,下一个操作必须是等待到满载(43,0)否则脚本将不会继续执行。

aimd.ini

ini
[SOMESCRIPTTYPE]  ; ScriptType
x=10103,0
10104 超时空传送至敌方基地
  • 使用第一个可用的 Type=ChronoSphere 超级武器将小队类型的成员超时空传送到敌方基地附近 [General] -> AISafeDistance(加上参数中定义的可为负值的额外距离)格的位置。超级武器必须先加载到 [General] -> AIMinorSuperReadyPercent 所指定百分比才能被此行为考虑。

aimd.ini

ini
[SOMESCRIPTTYPE]  ; ScriptType
x=10104,n         ; integer, additional distance in cells

12000-12999 补充/设定预设动作。

12000 无目标情况下等待

  • 当在例如新的 通用目标类型攻击 动作和 AITargetTypes 攻击 动作脚本执行前小队类型会考虑如果未选择目标则必须等待 1 秒。第二个参数是一个用于指定未找到目标时充实多少次然后才放弃新的攻击动作脚本并跳转到下一行的参数。默认值 0 表示无限次重试。

aimd.ini

ini
[SOMESCRIPTTYPE]  ; ScriptType
x=12000,n         ; integer n=0

12001 修改目标距离

  • 默认情况下,移动小队至科技类型位置在队长抵达 rulesmd.ini 中声明的CloseEnough 距离时结束。当该行为在移动小队至科技类型位置前执行时会覆盖 CloseEnough 值。这一行为仅对接下来的第一次执行效果有影响而之后再下一次移动时仍会继续使用 CloseEnough

aimd.ini

ini
[SOMESCRIPTTYPE]  ; ScriptType
x=12001,n

12002 设置移动结束参数

  • 设置移动动作结束并跳转到下一行的方式。此操作仅在第一次执行时有效,下次移动时仍会恢复使用 CloseEnough

aimd.ini

ini
[SOMESCRIPTTYPE]  ; ScriptType
x=12002,n
  • 可选参数有:
参数动作结束于...
0小队队长抵达最小距离
1一个单位抵达最小距离
2所有小队成员抵达最小距离

14000-14999 工具行为

14000 设置小队权重奖励

  • 当在例如新的 通用目标类型攻击 动作和 AITargetTypes 攻击 动作脚本执行前小队类型会考虑如果小队目标被小队成员杀死则必须奖励增加 AI 触发的当前权重。当前权重不会超过AI触发最小权重和最大权重的限制。第二个参数是一个正整数。

aimd.ini

ini
[SOMESCRIPTTYPE]  ; ScriptType
x=14000,n         ; integer n=0

14001 增加AI触发权重

  • 当执行此行为时增加 AI 触发的当前权重。当前权重永远不会超过AI触发最小权重和最大权重的限制。注意所有同一 AI 触发的小队类型最后都会更新 AI 触发当前权重。第二个参数是一个正整数。注意原版游戏在 AI 触发周期结束时会使用两个小队中的第一个来计算 AI 触发当前权重,此行为不检查小队是 AI 触发中的第一个还是第二个并在执行行为时计算当前权重。

aimd.ini

ini
[SOMESCRIPTTYPE]  ; ScriptType
x=14001,n

14002 降低AI触发权重

  • 当执行此行为时减少 AI 触发的当前权重。细则同上。

aimd.ini

ini
[SOMESCRIPTTYPE]  ; ScriptType
x=14002,n

14003 撤销小队成功

  • 与动作脚本 49,0 相反的效果。类似小队失败。

aimd.ini

ini
[SOMESCRIPTTYPE]  ; ScriptType
x=14003,0

14004 为 Phobos 新增的攻击/移动脚本强制全局更改小队中的 OnlyTargetHouseEnemy

  • 全局性地强制为小队上的 OnlyTargetHouseEnemy 标签设置一个值。仅适用于 Phobos 新增的攻击/移动脚本。

aimd.ini

ini
[SOMESCRIPTTYPE]  ; ScriptType
x=14004,n         ; integer
  • 可选参数有:
参数描述
-1默认值,不强制更改 OnlyTargetHouseEnemy 标签全局值。
0强制 OnlyTargetHouseEnemy 为 false
1强制 OnlyTargetHouseEnemy 为 true
2强制随机布尔值

16000-16999 流程控制

16000 定时跳转至同一行

  • 当计时器结束时当前动作脚本结束并重新开始同一动作。计时器会会一直重复跳转(无限循环)直到被 16002 号结果打断或小队被摧毁。

aimd.ini

ini
[SOMESCRIPTTYPE]  ; ScriptType
x=16000,n         ; integer n=0, in ingame seconds

16001 定时跳转至下一行

  • 当计时器结束时当前动作脚本结束并开始脚本类型列表中下一个动作。

aimd.ini

ini
[SOMESCRIPTTYPE]  ; ScriptType
x=16001,n         ; integer n=0, in ingame seconds

16002 停止定时跳转

  • 如果激活了定时跳转则该动作将停止进程。

aimd.ini

ini
[SOMESCRIPTTYPE]  ; ScriptType
x=16002,0

16003 随机跳过下一行

  • 执行该动作时会挑选一个在 1 和 100 之间的随机数,如果数值小于等于第二个参数则跳过下一个动作。第二个参数为 0 表示永远不会跳过下一个动作而 100 表示永远跳过下一个动作。

aimd.ini

ini
[SOMESCRIPTTYPE]  ; ScriptType
x=16003,n         ; where 0 > n <= 100

16004 随机选取脚本

  • 当执行此行为时会随机选取一个新的脚本类型并替换当前脚本。第二个参数是新的 AIScriptsList 小节下从 0 开始的索引。

aimd.ini

ini
[SOMESCRIPTTYPE]  ; ScriptType
x=16004,n

第二个参数是 AIScriptsList 小节下从 0 开始的索引,该小节必须在 rulesmd.ini 中声明才能使此脚本生效:

rulesmd.ini

ini
[AIScriptsList]  ; List of ScriptType lists
0=SOMESCRIPTTYPE,SOMEOTHERSCRIPTTYPE,SAMPLESCRIPTTYPE
1=ANOTHERSCRIPTTYPE,YETANOTHERSCRIPTTYPE
...

16005 跳回上一个脚本

  • 在由 94 号动作选择的随机脚本中使用可以使其跳回到上一个脚本,并继续执行 x=94,n 之后的行。

aimd.ini

ini
[SOMESCRIPTTYPE]  ; ScriptType
x=16005,0

18000-18999 变量操作

18000-18023 编辑变量

  • 计算一个变量值。
  • 变量值由于某些原因在触发行为中值类型为 int16 而非 int32,这表示它的范围是从 -2^15 到 2^15-1。
  • 任何超出此范围限制的数值都可能导致无法预测的结果!

aimd.ini

ini
[SOMESCRIPTTYPE]  ; ScriptType
x=i,n             ; where 18000 <= i <= 18023, n is made up of two parts, the low 16 bits is being used to store the variable index, the high 16 bits is being used for storing the param value.

18024 - 18047 使用局部变量编辑变量

  • 使用局部变量的值来操作变量的值。
  • 类似于 18000-18023,但用于操作值的数字是从局部变量中读取的。

aimd.ini

ini
[SOMESCRIPTTYPE]  ; ScriptType
x=i,n             ; where 18024 <= i <= 18047, n is made up of two parts, the low 16 bits is being used to store the variable index, the high 16 bits is being used for storing the local variable index.

18000 - 18071 使用全局变量编辑变量

  • 使用全局变量的值来操作变量的值。
  • 类似于 18000-18023,但用于操作值的数字是从全局变量中读取的。

aimd.ini

ini
[SOMESCRIPTTYPE]  ; ScriptType
x=i,n             ; where 18048 <= i <= 18071, n is made up of two parts, the low 16 bits is being used to store the variable index, the high 16 bits is being used for storing the global variable index.

19000-19999 杂项/未分类

此类别目前为空。

触发结果

500 单人任务存档

  • 立即保存当前游戏。

Note

要让此结果用于多人游戏,你必须使用支持多人存档后的 YRpp spawner 版本。

  • 这些原有 CSF 条目将会被使用:TXT_SAVING_GAMETXT_GAME_WAS_SAVEDTXT_ERROR_SAVING_GAME
  • 存档描述将会类似 地图描述名称 - CSF文本
  • 例如:盟军战役25: 僵僵の钱 - 钱全被偷光了!

mycampaign.map

ini
[Actions]
...
ID=ActionCount,[Action1],500,4,[CSFKey],0,0,0,0,A,[ActionX]
...

501 编辑变量

  • 计算一个变量值。
  • 变量值为 int32,这表示它的范围是从 -2^31 到 2^31-1。
  • 任何超出此范围限制的数值都可能导致无法预测的结果!

mycampaign.map

ini
[Actions]
...
ID=ActionCount,[Action1],501,0,[VariableIndex],[Operation],[Number],[IsGlobalVariable],0,A,[ActionX]
...
操作描述
0当前值 = 数字
1当前值 = 当前值 + 数字
2当前值 = 当前值 - 数字
3当前值 = 当前值 * 数字
4当前值 = 当前值/数字
5当前值 = 当前值 % 数字
6当前值 = 当前值 左移 数字 位
7当前值 = 当前值 右移 数字 位
8当前值 = 当前值 按位取反
9当前值 = 当前值 异或 数字
10当前值 = 当前值 位或 数字
11当前值 = 当前值 位与 数字

502 生成随机数

  • 在 [Min, Max] 范围内生成一个随机整数并存入给定变量。

mycampaign.map

ini
[Actions]
...
ID=ActionCount,[Action1],502,0,[VariableIndex],[Min],[Max],[IsGlobalVariable],0,A,[ActionX]
...

503 输出变量的值

  • 输出变量值至消息列表。

mycampaign.map

ini
[Actions]
...
ID=ActionCount,[Action1],503,0,[VariableIndex],[IsGlobalVariable],0,0,0,A,[ActionX]
...

504 变量间计算

  • 将两个变量的值进行计算。
  • 类似 501,但计算数值读取自另一变量。

mycampaign.map

ini
[Actions]
...
ID=ActionCount,[Action1],504,0,[VariableIndex],[Operation],[VariableForOperationIndex],[IsGlobalVariable],[IsOperationGlobalVariable],A,[ActionX]
...

Operation 可以见上 501 号动作。

505 在坐标释放超级武器

  • 谨慎使用
  • 在指定位置发射 [SuperWeaponTypes] 列表中的超级武器。
  • HouseIndex 可取以下值:
所属方索引描述
>= 0地图上当前所属方的索引
4475-4482类似范围 0-7 的索引
-1选择一个非中立的随机所属方
-2选择第一个中立所属方
-3选择随机人类玩家
  • 坐标的 X 和 Y 可以使用正数值或使用 -1 来表示在可视区域内随机。

mycampaign.map

ini
[Actions]
...
ID=ActionCount,[Action1],505,0,0,[SuperWeaponTypesIndex],[HouseIndex],[CoordinateX],[CoordinateY],A,[ActionX]
...

506 在路径点释放超级武器

  • 谨慎使用
  • 在指定路径点发射 [SuperWeaponTypes] 列表中的超级武器。

mycampaign.map

ini
[Actions]
...
ID=ActionCount,[Action1],506,0,0,[SuperWeaponTypesIndex],[HouseIndex],[WaypointIndex],0,A,[ActionX]
...

510 切换基地重新部署设定

  • 通过设置第三个参数强制基地车能否重部署。

mycampaign.map

ini
[Actions]
...
ID=ActionCount,[Action1],510,0,0,[MCVRedeploy],0,0,0,A,[ActionX]
...

511 反部署建筑至路径点

  • 反部署特定建筑类型为载具并移动至一个特定路径点。
    • 若将此处建筑类型设为 <All> 则反部署所有建筑。

mycampaign.map

ini
[Actions]
...
ID=ActionCount,[Action1],511,-10,[BuildingTypesID],[HouseIndex],0,0,0,[WaypointIndex],[ActionX]
...

606 编辑仇恨值

  • 编辑触发所属方对指定所属方的仇恨值。
  • -1为 所有国家。

mycampaign.map

ini
[Actions]
...
ID=ActionCount,[Action1],606,0,[HouseIndex],[Operation],[Number],0,0,A,[ActionX]
...
操作描述
0当前值 = 数字
1当前值 = 当前值 + 数字
2当前值 = 当前值 - 数字
3当前值 = 当前值 * 数字
4当前值 = 当前值/数字
5当前值 = 当前值 % 数字
6当前值 = 当前值 左移 数字 位
7当前值 = 当前值 右移 数字 位
8当前值 = 当前值 按位取反
9当前值 = 当前值 异或 数字
10当前值 = 当前值 位或 数字
11当前值 = 当前值 位与 数字

607 清除仇恨值

  • 清空触发所属方对指定所属方的仇恨值。
  • -1为 所有国家。

mycampaign.map

ini
[Actions]
...
ID=ActionCount,[Action1],607,0,[HouseIndex],0,0,0,0,A,[ActionX]
...

608 强制宣战

  • 强制和指定所属方成为敌人且不会因任何因素发生改变。
  • -1 会解除强制宣战。
  • -2 则强制没有敌人。

mycampaign.map

ini
[Actions]
...
ID=ActionCount,[Action1],608,0,0,[HouseIndex],0,0,0,A,[ActionX]
...

609 设置雷达模式

  • 更改触发所属方的当前雷达模式

mycampaign.map

ini
[Actions]
...
ID=ActionCount,[Action1],609,0,0,[RadarMode],0,0,0,A,[ActionX]
...
  • 可选参数有:
参数描述
0常规模式,需要提供雷达的建筑并且电力充足。
1改为 FreeRadar 模式
2强制开启雷达
3强制关闭雷达

610 设置所属方的 TeamDelays

  • 设置触发所属方的 TeamDelays 值。
    • 若该值小于 0 则使用 [General] -> TeamDelays 的值。

mycampaign.map

ini
[Actions]
...
ID=ActionCount,[Action1],610,0,0,[Number],0,0,0,A,[ActionX]
...

800-802 显示横幅

  • 在屏幕固定位置显示一个“横幅”。
    • 结果 800 将会创建一个新的横幅或替换掉拥有相同 Banner ID 的旧有横幅。显示文本横幅时将使用 局部 变量的值。
    • 结果 801 将会创建一个新的横幅或替换掉拥有相同 Banner ID 的旧有横幅。显示文本横幅时将使用 全局 变量的值。
    • 结果 802 将会删除与设定 Banner ID 相同的横幅。
  • 使用该功能前需在 ini 文件中配置 BannerType 属性。横幅支持使用一个 PCX 文件,一个 SHP 文件,或一个 CSF 条目。若多项同时设置则同样按此处所列的优先级顺序生效。
    • SHP.Palette 控制绘制 SHP 横幅时所使用的色盘。
    • CSF.Color 控制使用 CSF 条目横幅时的文本颜色
    • CSF.Background 控制使用 CSF 条目横幅时是否具有黑色底色。
    • CSF.VariableFormat 控制使用 CSF 条目横幅时的变量显示方式。
      • none - 不显示变量。
      • variable - 仅显示变量,并忽略 CSF 条目文本。
      • prefix/prefixed - 变量在其他文本 显示。
      • suffix/suffixed - 变量在其他文本 显示。
    • Duration 决定横幅的显示时长。负值代表会在被删除前一直显示。横幅自身不会在不显示时被删除。
    • Delay 决定横幅因一个正值 Duration 而结束显示后多久才会再次显示。负值代表不会再次显示。
      • 一个 SHP 横幅会在再次显示时从上次结束时的帧开始。这可以通过 SHP.RefreshAfterDelay=true 更改为从头开始。

rulesmd.ini

ini
[BannerTypes]
0=SOMEBANNER

[SOMEBANNER]                ; BannerType
PCX=                        ; filename - including the .pcx extension
SHP=                        ; filename - including the .shp extension
SHP.Palette=palette.pal     ; filename - including the .pal extension
SHP.RefreshAfterDelay=false ; boolean
CSF=                        ; CSF entry key
CSF.Color=                  ; integer - Red,Green,Blue, defaults to MessageTextColor of the owner Side
CSF.Background=false        ; boolean
CSF.VariableFormat=none     ; List of Variable Format Enumeration (none|variable|prefix/prefixed|surfix/surfixed)
Duration=-1                 ; integer
Delay=-1                    ; integer

mycampaign.map

ini
[Actions]
...
ID=ActionCount,[Action1],800,4,[SOMEBANNER],[Unique ID],[Horizontal position],[Vertical position],[VariableIndex],A,[ActionX]
ID=ActionCount,[Action1],801,4,[SOMEBANNER],[Unique ID],[Horizontal position],[Vertical position],[VariableIndex],A,[ActionX]
ID=ActionCount,[Action1],802,0,[Unique ID],0,0,0,0,A,[ActionX]
...

触发条件

500-511 变量比较

  • 比较变量值与给定值。

mycampaign.map

ini
[Events]
...
ID=EventCount,[Event1],[EVENTID],2,[VariableIndex],[Param],[EventX]
...
条件 ID描述全局
500当前值 > 数字No
501当前值 < 数字No
502当前值 = 数字No
503当前值 >= 数字No
504当前值 <= 数字No
505当前值 & 数字 != 0No
506当前值 > 数字Yes
507当前值 < 数字Yes
508当前值 = 数字Yes
509当前值 >= 数字Yes
510当前值 <= 数字Yes
511当前值 & 数字 != 0Yes

512-523 变量与局部变量比较

  • 比较变量值与给定局部变量值。

mycampaign.map

ini
[Events]
...
ID=EventCount,[Event1],[EVENTID],2,[VariableIndex],[LocalVariableIndex],[EventX]
...
条件 ID描述全局
512当前值 > 局部变量值No
513当前值 < 局部变量值No
514当前值 = 局部变量值No
515当前值 >= 局部变量值No
516当前值 <= 局部变量值No
517当前值 & 局部变量值 != 0No
518当前值 > 局部变量值Yes
519当前值 < 局部变量值Yes
520当前值 = 局部变量值Yes
521当前值 >= 局部变量值Yes
522当前值 <= 局部变量值Yes
523当前值 & 局部变量值 != 0Yes

524-535 变量与全局变量比较

  • 比较变量值与给定全局变量值。

mycampaign.map

ini
[Events]
...
ID=EventCount,[Event1],[EVENTID],2,[VariableIndex],[GlobalVariableIndex],[EventX]
...
条件 ID描述全局
524当前值 > 全局变量值No
525当前值 < 全局变量值No
526当前值 = 全局变量值No
527当前值 >= 全局变量值No
528当前值 <= 全局变量值No
529当前值 & 全局变量值 != 0No
530当前值 > 全局变量值Yes
531当前值 < 全局变量值Yes
532当前值 = 全局变量值Yes
533当前值 >= 全局变量值Yes
534当前值 <= 全局变量值Yes
535当前值 & 全局变量值 != 0Yes

600 对象护盾被摧毁

mycampaign.map

ini
[Events]
...
ID=EventCount,...,600,2,0,0,...
...

601-602 检查所属方是否有/无科技类型

  • 601:当指定所属方至少拥有一个设定的科技类型时触发。
  • 602:当指定所属方没有任何一个设定的科技类型时触发。
    • 多人游戏所属方(索引 4475 至 4482)支持。

mycampaign.map

ini
[Events]
...
ID=EventCount,...,[EVENTID],2,[HouseIndex],[TechnoType],...
...

Note

Ares 的 81 & 82 号条件不同,这里的所属方使用触发条件中的所属方参数而不是触发自身的所有者。

604-605 检查特定科技类型进入单元格

  • 604:检查进入单元格的科技类型是否与条件中指定的 ID相同。
  • 605:检查进入单元格的科技类型是否出现在选定的 AITargetTypes 列表中。
  • HouseIndex 可以自定义为指定所属方。

mycampaign.map

[Events]
...
ID=EventCount,...,604,2,[HouseIndex],[TechnoType],...
ID=EventCount,...,605,2,[HouseIndex],[AITargetTypes index#],...
...
所属方索引描述
>= 0地图上当前所属方的索引
-1该值将被忽略(任何所属方均有效)
-2选择地图触发的所有者

606 AttachEffect 已被附加到单位

  • 检查一个 AttachEffectType 是否已附加到某个单位上。不适用于触发器启动前就已附加的 Attach Effect
  • 具体而言,该条件将在下述情况被满足:
    • 初始 AE:初始赋予时(在 AttachEffect.InitialDelays 帧后)、重新创建时(在 AttachEffect.DelaysAttachEffect.RecreationDelays 帧后)。
    • 外源 AE:赋予时、对同一单位赋予同一 AE 使其刷新时。

mycampaign.map

ini
[Events]
...
ID=EventCount,...,606,2,0,[AttachEffectType],...
...