翔鹰帝国网|帝国时代论坛|帝国时代系列|神话时代
 找回密码
 注册翔鹰会员(昵称)
搜索
查看: 3333|回复: 15

[战役制作] 划时代的工具——python场景工具【AoE2ScenarioParser】

[复制链接]

42

主题

7

精华

6万

积分

宗主教

耕战
11247
鹰币
32856
天龙币
0
回帖
1973

翔鹰建站十周年纪念章二级翔鹰勋章三级嘉禾勋章第十一届火箭筒杯优秀战役第十三届火箭筒杯冠军翔四电影节季军冒险七王者

附庸关系0
 楼主| 发表于 2020-11-1 17:12:53 | 显示全部楼层 |阅读模式
本帖最后由 战斗的人生 于 2020-11-9 01:15 编辑

工具原贴地址:https://github.com/KSneijders/AoE2ScenarioParser/blob/master/README.md#aoe2scenarioparser

这是一个可以编辑后缀为.aoe2scenario的帝国时代2DE战役文件的工具。原作者ID:KSneijders。
我暂且给他命名为:python场景工具


一、功能与介绍:

查看
添加
编辑
移除
触发
条件
效果
单位


这个工具是一个python工具箱,可以通过编写代码,编辑帝国时代2DE的场景文件。写好代码后,运行代码,就可以编辑文件了。

二、工具安装:
此部分十分重要,请务必严格按照步骤来。
本部分教程由木匠大佬Carpenter提供,强烈推荐大家去模组下载他的联机场景金特~


1)   基本工具需求
Python 3.7 (或以上版本,经过实测这个辣鸡包要用到3.7以上的函数。他简介里要求的3.6根本跑不起来)
Python IDE (综合配置环境),建议选择Visual Studio(强烈建议)


命令行控制工具,没有则建议使用电脑自带的cmd,菜单-任务-运行“cmd”即可打开,也就是下面这玩意儿

python3.7和Visual Studio可以在软件官网上安装,cmd则是电脑自带。

2) 命令行配置系统
使用命令行能快速配置,防止手工点击各种辣鸡下载站收获各种安装捆绑全家桶。
首先,为了完成系统环境的配置,我们对系统内置包进行升级。需要升级的包括pip,python。

首先,打开cmd(或者Anaconda Prompt),在窗口输入
  1. python -m pip install --upgrade pip
复制代码
然后敲击回车,等待安装完成

然后,继续在此窗口,分别输入以下命令并回车
  1. pip install python
  2. pip upgrade python
复制代码
安装和升级python。
这样我们就完成了环境的安装。

3) AoE2ScenarioParser本体安装
依然是在cmd窗口,分别输入以下命令并敲回车
  1. pip install AoE2ScenarioParser
  2. pip install bidict
复制代码
以上,我们完成了所有环境与工具安装。接下来就是正式使用了。

三、正式使用:

1)测试
首先,我们创建一个文件名后缀为 .py 的文件


然后用VS打开,输入
  1. from AoE2ScenarioParser.aoe2_scenario import AoE2Scenario
复制代码
接着点击“运行”或者键盘上单击F5运行或者ctrl+F5运行,如果得到以下结果,说明工具箱安装完成。如果报错,说明前面安装过程中出了问题,请对照步骤,再安装一次。


2)通用代码
通用代码如下:
  1. from AoE2ScenarioParser.aoe2_scenario import AoE2Scenario
  2. # Information about the conditions & effects and their attributes
  3. from AoE2ScenarioParser.datasets.conditions import Condition
  4. from AoE2ScenarioParser.datasets.effects import Effect
  5. from AoE2ScenarioParser.datasets.trigger_lists import DiplomacyState, Operator, ButtonLocation, PanelLocation, \
  6.     TimeUnit, VisibilityState, DifficultyLevel, TechnologyState, Comparison, ObjectAttribute, Attribute

  7. # Information of unit/tech/terrain name and their ID
  8. from AoE2ScenarioParser.datasets.buildings import Building, GaiaBuilding
  9. from AoE2ScenarioParser.datasets.techs import Tech
  10. from AoE2ScenarioParser.datasets.heroes import Hero
  11. from AoE2ScenarioParser.datasets.terrains import Terrain
  12. from AoE2ScenarioParser.datasets.units import Unit, GaiaUnit

  13. # Enum of players
  14. from AoE2ScenarioParser.datasets.players import Player, PlayerColor

  15. input_path = " "
  16. output_path = " "
  17. scenario = AoE2Scenario(input_path)

  18. # 代码正文开始

  19. # 代码正文结尾

  20. scenario.write_to_file(output_path)
复制代码
其中,“#”后面的是注释。
需要重点说明的是这两句:
  1. input_path = " "
  2. output_path = " "
复制代码
input_path后的双引号内是战役读取路径,output_path后的双引号内是战役存储路径,比如我设为:
  1. input_path = "D:/Age of emperor2/Mine/Half-work/cooperation/测试0.aoe2scenario"
  2. output_path = "D:/Age of emperor2/Mine/Half-work/cooperation/测试1.aoe2scenario"
复制代码
就可以读取这个文件夹内名字为“测试0”的场景文件,运行代码后得到的是一个新建的名字为“测试1”的场景文件。这两个文件名也可以设为同一个,但我推荐设为不同的名字,这样方便测试和debug。
文件夹路径可以直接复制粘贴。

其他的部分可以直接复制粘贴。建议将这些代码新建为一个新文件,以后每次要用可以直接使用。

3)代码正文
终于,我们来到了正式使用部分。在文末的压缩包中,我会附上所有可以用到的帮助文档。当然你也可以到最上面的原贴地址中查找。
在开始之前,我要介绍一个VS功能,折叠代码。
  1. #region 标记文字
  2. your python code
  3. #endregion
复制代码
它的效果是这样的,可以极大提升代码可读性。

接下来我将分别介绍触发代码写法和单位代码写法。写好需要的代码后,运行代码,就可以编辑场景文件了。注意,触发代码和地图代码并非都要写。如果你想编辑触发,那就写触发代码;如果想编辑单位,那就写单位代码。因为我还没有用到单位代码的所有功能,所以以下只介绍“新建单位功能”,其他功能以后更新。
注意:当读取路径和存储路径相同时不要多次运行代码,因为每运行一次代码场景文件都会被编辑一次。但读取路径和存储路径不同时就不会有这个问题,因为每次运行代码后者都会被完全覆盖。这也是我推荐两个路径设置不同的原因之一。

a)触发部分
触发部分代码分为三个部分,触发编码库导入触发声明触发代码

(1)触发编码库导入
触发编码库导入部分如下,直接复制粘贴即可,放在正文开头即可
  1. trigger_manager = scenario.object_manager.trigger_manager                # 导入触发编码
复制代码

(2)触发声明
触发声明和触发代码部分有前后关系,触发声明必须放在触发代码之前。
触发声明代码全文如下:
  1. 替换触发 = trigger_manager.add_trigger("")
  2. 替换触发.enabled =                                 # 是否开启
  3. 替换触发.looping =                                 # 是否循环
  4. 替换触发.description_stid =                         # 触发文本描述 ID
  5. 替换触发.display_as_objective =                 # 在任务栏显示
  6. 替换触发.display_on_screen =                         # 在屏幕上显示
  7. 替换触发.short_description_stid =                 # 简短描述顺序 ID
  8. 替换触发.header =                                 # 是否作为标题
  9. 替换触发.description_order =                         # 触发任务栏描述顺序
  10. 替换触发.mute_objectives =                         # 禁止发出提示音
  11. 替换触发.description = ""                        # 触发文本描述
  12. 替换触发.name =                                 # 触发名
  13. 替换触发.short_description = ""                        # 简短描述
  14. 替换触发.trigger_id =                         # 触发ID ?用于python代码,无效
  15. 替换触发.condition_order =                         # !不明
  16. 替换触发.conditions =                         # !不明
  17. 替换触发.effect_order =                         # !不明
  18. 替换触发.effects =                                 # !不明
复制代码
其中“替换触发”为代码正文的名称,可以自己定义;在游戏中显示的触发名是由 trigger_manager.add_trigger("")中的双引号内部分定义的。
注意:实际使用时,并不需要把以上每一行代码都复制上,只编写自己需要用到的部分即可。例如,我想新建一个默认开启且循环的触发,我只需要这样写:
  1. t1_1 = trigger_manager.add_trigger("【勇者 S +1 】")
  2. t1_1.enabled = 1            # 是否开启
  3. t1_1.looping = 1            # 是否循环
复制代码

就可以了。这个触发的代码正文名为“ t1_1 ”,为它新建条件与效果时引用的就是这个名字。

(3)触发代码
定义之后,在代码正文内我们就得到了一个名为“替换触发”的触发,可以在触发代码部分为这个触发新建条件与效果了。

所有条件代码如下,其中“替换条件”为该条件在代码正文内的名称,可以自己定义,每个条件的名字必须独立;“替换触发”为该条件所在的触发的代码正文名。与触发代码一样,条件代码也不需要复制每一行,只复制自己需要的即可。
  1. # 条件:无
  2. 替换条件 = 替换触发.add_condition(Condition.NONE)

  3. # 将单位带入指定区域
  4. 替换条件 = 替换触发.add_condition(Condition.BRING_OBJECT_TO_AREA)
  5. 替换条件.unit_object =                 # 单位地图 ID
  6. 替换条件.area_1_x =
  7. 替换条件.area_1_y =                 # 起始点 xy 坐标
  8. 替换条件.area_2_x =
  9. 替换条件.area_2_y =                 # 终止点 xy 坐标
  10. 替换条件.inverted =                 # 反向条件

  11. # 条件:将单位带给指定单位
  12. 替换条件 = 替换触发.add_condition(Condition.BRING_OBJECT_TO_OBJECT)
  13. 替换条件.unit_object =                 # 单位地图 ID
  14. 替换条件.next_object =                 # 目标单位地图 ID
  15. 替换条件.inverted =                         # 反向条件

  16. # 条件:拥有物件数目 >=
  17. 替换条件 = 替换触发.add_condition(Condition.OWN_OBJECTS)
  18. 替换条件.amount_or_quantity =         # 数值
  19. 替换条件.object_list =                 # 物件固有 ID
  20. 替换条件.player =                         # 起始玩家        
  21. 替换条件.object_group =                 # 物件组
  22. 替换条件.object_type =                 # 物件类型

  23. # 条件:区域内物件数目 <=
  24. 替换条件 = 替换触发.add_condition(Condition.OWH_FEWER_OBJECTS)
  25. 替换条件.amount_or_quantity =         # 数值
  26. 替换条件.object_list =                 # 物件固有 ID
  27. 替换条件.player =                         # 起始玩家
  28. 替换条件.area_1_x =
  29. 替换条件.area_1_y =                         # 起始点 xy 坐标
  30. 替换条件.area_2_x =
  31. 替换条件.area_2_y =                         # 终止点 xy 坐标
  32. 替换条件.object_group =                 # 物件组
  33. 替换条件.object_type =                 # 物件类型

  34. # 条件:区域内物件数目 >=
  35. 替换条件 = 替换触发.add_condition(Condition.OBJECT_IN_AREA)
  36. 替换条件.amount_or_quantity =         # 数值
  37. 替换条件.object_list =                 # 物件固有 ID
  38. 替换条件.player =                         # 起始玩家
  39. 替换条件.area_1_x =
  40. 替换条件.area_1_y =                         # 起始点 xy 坐标
  41. 替换条件.area_2_x =
  42. 替换条件.area_2_y =                         # 终止点 xy 坐标
  43. 替换条件.object_group =                 # 物件组
  44. 替换条件.object_type =                 # 物件类型
  45. 替换条件.inverted =                         # 反向条件

  46. # 条件:消灭单位
  47. 替换条件 = 替换触发.add_condition(Condition.DESTROY_OBJECT)
  48. 替换条件.unit_object =                 # 单位地图 ID
  49. 替换条件.inverted =                         # 反向条件

  50. # 条件:捕获单位
  51. 替换条件 = 替换触发.add_condition(Condition.DESTROY_OBJECT)
  52. 替换条件.unit_object =                 # 单位地图 ID
  53. 替换条件.player =                         # 起始玩家
  54. 替换条件.inverted =                         # 反向条件

  55. # 条件:堆积属性
  56. 替换条件 = 替换触发.add_condition(Condition.ACCUMULATE_ATTRIBUTE)
  57. 替换条件.amount_or_quantity =                 # 数值
  58. 替换条件.resource_type_or_tribute_list =                 # 资源ID
  59. 替换条件.player =                                 # 起始玩家
  60. 替换条件.inverted =                                 # 反向条件

  61. # 条件:研究科技
  62. 替换条件 = 替换触发.add_condition(Condition.RESEARCH_TECHNOLOGY)
  63. 替换条件.player =                         # 起始玩家
  64. 替换条件.technology =                 # 科技ID
  65. 替换条件.inverted =                         # 反向条件

  66. # 条件:定时器
  67. 替换条件 = 替换触发.add_condition(Condition.TIMER)
  68. 替换条件.timer =                         # 定时器
  69. 替换条件.inverted =                         # 反向条件

  70. # 条件:选择单位
  71. 替换条件 = 替换触发.add_condition(Condition.OBJECT_SELECTED)
  72. 替换条件.unit_object =                 # 单位地图 ID
  73. 替换条件.inverted =                         # 反向条件

  74. # 条件:AI 信号
  75. 替换条件 = 替换触发.add_condition(Condition.AI_SIGNAL)
  76. 替换条件.ai_signal =                         # AI 信号 ID
  77. 替换条件.inverted =                         # 反向条件

  78. # 条件:玩家被打败
  79. 替换条件 = 替换触发.add_condition(Condition.PLAYER_DEFEATED)
  80. 替换条件.player =                         # 起始玩家
  81. 替换条件.inverted =                         # 反向条件

  82. # 条件:单位已有目标
  83. 替换条件 = 替换触发.add_condition(Condition.OBJECT_HAS_TARGET)
  84. 替换条件.unit_object =                 # 单位地图 ID
  85. # 替换条件.next_object =                 # 目标单位地图 ID
  86. # 替换条件.object_list =                 # 物件固有 ID
  87. # 替换条件.object_group =                 # 物件组
  88. # 替换条件.object_type =                 # 物件类型
  89. 替换条件.inverted =                 # 反向条件

  90. # 条件:单位可视
  91. 替换条件 = 替换触发.add_condition(Condition.OBJECT_VISIBLE)
  92. 替换条件.unit_object =                 # 单位地图 ID

  93. # 条件:单位不可视
  94. 替换条件 = 替换触发.add_condition(Condition.OBJECT_NOT_VISIBLE)
  95. 替换条件.unit_object =                 # 单位地图 ID

  96. # 条件:研究科技中
  97. 替换条件 = 替换触发.add_condition(Condition.RESEARCHING_TECH)
  98. 替换条件.player =                         # 起始玩家
  99. 替换条件.technology =                 # 科技ID
  100. 替换条件.inverted =                         # 反向条件

  101. # 条件:已驻扎单位
  102. 替换条件 = 替换触发.add_condition(Condition.UNITS_GARRISONED)
  103. 替换条件.amount_or_quantity =                 # 数值
  104. 替换条件.unit_object =                         # 单位地图 ID
  105. 替换条件.inverted =                                 # 反向条件

  106. # 条件:难度等级 <=
  107. 替换条件 = 替换触发.add_condition(Condition.DIFFICULTY_LEVEL)
  108. #替换条件.condition_type =                         # ?条件类型?
  109. 替换条件.amount_or_quantity =                 # 数值
  110. 替换条件.inverted =                                 # 反向条件

  111. # 条件:概率
  112. 替换条件 = 替换触发.add_condition(Condition.CHANCE)
  113. 替换条件.amount_or_quantity =                 # 数值

  114. # 条件:科技研发状态
  115. 替换条件 = 替换触发.add_condition(Condition.TECHNOLOGY_STATE)
  116. 替换条件.amount_or_quantity =                 # 数值
  117. 替换条件.player =                                 # 起始玩家
  118. 替换条件.technology =                         # 科技ID
  119. 替换条件.inverted =                                 # 反向条件

  120. # 条件:检测变量
  121. 替换条件 = 替换触发.add_condition(Condition.VARIABLE_VALUE)
  122. 替换条件.amount_or_quantity =                 # 数值
  123. 替换条件.inverted =                                 # 反向条件
  124. 替换条件.variable =                                 # 变量 ID
  125. 替换条件.comparison =                         # 数值比较
  126.         # = 0;< 1;> 2;<= 3;>= 4

  127. # 条件:单位 HP
  128. 替换条件 = 替换触发.add_condition(Condition.OBJECT_HP)
  129. 替换条件.amount_or_quantity =                 # 数值
  130. 替换条件.unit_object =                         # 单位地图 ID
  131. 替换条件.inverted =                                 # 反向条件
  132. 替换条件.comparison =                         # 数值比较
  133.         # = 0;< 1;> 2;<= 3;>= 4

  134. # 条件:同盟关系
  135. 替换条件 = 替换触发.add_condition(Condition.DIPLOMACY_STATE)
  136. 替换条件.amount_or_quantity =                 # 数值
  137.         # 同盟 = 0;中立 = 2;敌对 = 3
  138. 替换条件.player =                                 # 起始玩家
  139. 替换条件.target_player =                         # 对象玩家
复制代码

效果代码与条件代码一样。全文如下:
  1. # 效果:无
  2. 替换效果 = 替换触发.add_effect(Effect.NONE)

  3. # 改变外交态度
  4. 替换效果 = 替换触发.add_effect(Effect.CHANGE_DIPLOMACY)
  5. 替换效果.diplomacy =                         # 外交
  6.                 # 同盟 = 0;中立 = 2;敌对 = 3
  7. 替换效果.player_source =                         # 起始玩家
  8. 替换效果.player_target =                         # 对象玩家

  9. # 研究科技
  10. 替换效果 = 替换触发.add_effect(Effect.RESEARCH_TECHNOLOGY)
  11. 替换效果.player_source =                         # 起始玩家
  12. 替换效果.technology =                         # 科技 ID
  13. 替换效果.force_research_technology =                 # 强制研发科技

  14. # 送出聊天
  15. 替换效果 = 替换触发.add_effect(Effect.SEND_CHAT)
  16. 替换效果.player_source =                         # 起始玩家
  17. 替换效果.string_id =                                 # 文本 ID
  18. 替换效果.message = ""                        # 文本
  19. 替换效果.sound_name =                         # wem 文件名

  20. # 播放音乐
  21. 替换效果 = 替换触发.add_effect(Effect.SEND_CHAT)
  22. 替换效果.player_source =                         # 起始玩家
  23. 替换效果.location_x =
  24. 替换效果.location_y =                         # 位置坐标 xy
  25. 替换效果.sound_name =                         # wem 文件名

  26. # 贡品
  27. 替换效果 = 替换触发.add_effect(Effect.TRIBUTE)
  28. 替换效果.quantity =                                 # 数值
  29. 替换效果.tribute_list =                         # 资源 ID
  30. 替换效果.player_source =                         # 起始玩家
  31. 替换效果.player_target =                         # 对象玩家

  32. # 开启城门
  33. 替换效果 = 替换触发.add_effect(Effect.UNLOCK_GATE)
  34. # 替换效果.number_of_units_selected =                 # ?选择单位数目
  35. 替换效果.selected_object_id =                         # 城门地图 ID

  36. # 闭锁城门
  37. 替换效果 = 替换触发.add_effect(Effect.LOCK_GATE)
  38. # 替换效果.number_of_units_selected =                 # ?选择单位数目
  39. 替换效果.selected_object_id =                         # 城门地图 ID

  40. # 激活触发
  41. 替换效果 = 替换触发.add_effect(Effect.ACTIVATE_TRIGGER)
  42. 替换效果.trigger_id =                         # 触发 ID

  43. # 关闭触发
  44. 替换效果 = 替换触发.add_effect(Effect.DEACTIVATE_TRIGGER)
  45. 替换效果.trigger_id =                         # 触发 ID

  46. # 发送 AI 信号
  47. 替换效果 = 替换触发.add_effect(Effect.AI_SCRIPT_GOAL)
  48. 替换效果.ai_script_goal =                         # AI 信号 ID

  49. # 产生物件
  50. 替换效果 = 替换触发.add_effect(Effect.CREATE_OBJECT)
  51. 替换效果.object_list_unit_id =                         # 物件固有 ID
  52. 替换效果.player_source =                         # 起始玩家
  53. 替换效果.location_x =
  54. 替换效果.location_y =                         # 位置坐标 xy
  55. 替换效果.item_id =                                 # 朝向数字
  56. 替换效果.facet =                                 # 开启朝向

  57. # 指派物件
  58. 替换效果 = 替换触发.add_effect(Effect.TASK_OBJECT)
  59. # 替换效果.number_of_units_selected =                 # ?选择单位数目
  60. 替换效果.object_list_unit_id =                         # 物件固有 ID
  61. 替换效果.player_source =                         # 起始玩家
  62. 替换效果.location_x =
  63. 替换效果.location_y =                         # 位置坐标 xy
  64. 替换效果.area_1_x =
  65. 替换效果.area_1_y =                                 # 起始范围坐标 xy
  66. 替换效果.area_2_x =
  67. 替换效果.area_2_y =                                 # 终止范围坐标 xy
  68. 替换效果.object_group =                         # 物件组
  69. 替换效果.object_type =                         # 物件类型
  70. 替换效果.selected_object_id =                         # 选择单位地图 ID

  71. # 宣布胜利
  72. 替换效果 = 替换触发.add_effect(Effect.DECLARE_VICTORY)
  73. 替换效果.player_source =                         # 起始玩家
  74. 替换效果.enabled_or_victory =                         # 胜利或失败

  75. # 杀死物件
  76. 替换效果 = 替换触发.add_effect(Effect.KILL_OBJECT)
  77. # 替换效果.number_of_units_selected =                 # ?选择单位数目
  78. 替换效果.object_list_unit_id =                         # 物件固有 ID
  79. 替换效果.player_source =                         # 起始玩家
  80. 替换效果.area_1_x =
  81. 替换效果.area_1_y =                                 # 起始范围坐标 xy
  82. 替换效果.area_2_x =
  83. 替换效果.area_2_y =                                 # 终止范围坐标 xy
  84. 替换效果.object_group =                         # 物件组
  85. 替换效果.object_type =                         # 物件类型
  86. 替换效果.selected_object_id =                         # 选择单位地图 ID

  87. # 移除物件
  88. 替换效果 = 替换触发.add_effect(Effect.REMOVE_OBJECT)
  89. # 替换效果.number_of_units_selected =                 # ?选择单位数目
  90. 替换效果.object_list_unit_id =                         # 物件固有 ID
  91. 替换效果.player_source =                         # 起始玩家
  92. 替换效果.area_1_x =
  93. 替换效果.area_1_y =                                 # 起始范围坐标 xy
  94. 替换效果.area_2_x =
  95. 替换效果.area_2_y =                                 # 终止范围坐标 xy
  96. 替换效果.object_group =                         # 物件组
  97. 替换效果.object_type =                         # 物件类型
  98. 替换效果.selected_object_id =                         # 选择单位地图 ID

  99. # 改变视角
  100. 替换效果 = 替换触发.add_effect(Effect.CHANGE_VIEW)
  101. 替换效果.player_source =                         # 起始玩家
  102. 替换效果.location_x =
  103. 替换效果.location_y =                         # 位置坐标 xy
  104. 替换效果.scroll =                                 # 是否瞬移

  105. # 卸下
  106. 替换效果 = 替换触发.add_effect(Effect.UNLOAD)
  107. # 替换效果.number_of_units_selected =                 # ?选择单位数目
  108. 替换效果.object_list_unit_id =                         # 物件固有 ID
  109. 替换效果.player_source =                         # 起始玩家
  110. 替换效果.location_x =
  111. 替换效果.location_y =                         # 位置坐标 xy
  112. 替换效果.area_1_x =
  113. 替换效果.area_1_y =                                 # 起始范围坐标 xy
  114. 替换效果.area_2_x =
  115. 替换效果.area_2_y =                                 # 终止范围坐标 xy
  116. 替换效果.object_group =                         # 物件组
  117. 替换效果.object_type =                         # 物件类型
  118. 替换效果.selected_object_id =                         # 选择单位地图 ID

  119. # 改变所有权
  120. 替换效果 = 替换触发.add_effect(Effect.CHANGE_OWNERSHIP)
  121. # 替换效果.number_of_units_selected =                 # ?选择单位数目
  122. 替换效果.object_list_unit_id =                         # 物件固有 ID
  123. 替换效果.player_source =                         # 起始玩家
  124. 替换效果.player_target =                         # 对象玩家
  125. 替换效果.area_1_x =
  126. 替换效果.area_1_y =                                 # 起始范围坐标 xy
  127. 替换效果.area_2_x =
  128. 替换效果.area_2_y =                                 # 终止范围坐标 xy
  129. 替换效果.object_group =                         # 物件组
  130. 替换效果.object_type =                         # 物件类型
  131. 替换效果.selected_object_id =                         # 选择单位地图 ID

  132. # 巡逻
  133. 替换效果 = 替换触发.add_effect(Effect.PATROL)
  134. # 替换效果.number_of_units_selected =                 # ?选择单位数目
  135. 替换效果.object_list_unit_id =                         # 物件固有 ID
  136. 替换效果.player_source =                         # 起始玩家
  137. 替换效果.location_x =
  138. 替换效果.location_y =                         # 位置坐标 xy
  139. 替换效果.area_1_x =
  140. 替换效果.area_1_y =                                 # 起始范围坐标 xy
  141. 替换效果.area_2_x =
  142. 替换效果.area_2_y =                                 # 终止范围坐标 xy
  143. 替换效果.object_group =                         # 物件组
  144. 替换效果.object_type =                         # 物件类型
  145. 替换效果.selected_object_id =                         # 选择单位地图 ID

  146. # 显示信息
  147. 替换效果 = 替换触发.add_effect(Effect.DISPLAY_INSTRUCTIONS)
  148. 替换效果.object_list_unit_id =                         # 物件固有 ID
  149. 替换效果.player_source =                         # 起始玩家
  150. 替换效果.string_id =                                 # 文本 ID
  151. 替换效果.display_time =                         # 显示时间
  152. 替换效果.instruction_panel_position =                 # 显示位置
  153. 替换效果.play_sound =                         # 是否播放音效
  154. 替换效果.message = ""                        # 文本
  155. 替换效果.sound_name =                         # wem 文件名

  156. # 清除信息
  157. 替换效果 = 替换触发.add_effect(Effect.CLEAR_INSTRUCTIONS)
  158. 替换效果.instruction_panel_position =                 # 显示位置

  159. # 冻结单位
  160. 替换效果 = 替换触发.add_effect(Effect.FREEZE_OBJECT)
  161. # 替换效果.number_of_units_selected =                 # ?选择单位数目
  162. 替换效果.object_list_unit_id =                         # 物件固有 ID
  163. 替换效果.player_source =                         # 起始玩家
  164. 替换效果.area_1_x =
  165. 替换效果.area_1_y =                                 # 起始范围坐标 xy
  166. 替换效果.area_2_x =
  167. 替换效果.area_2_y =                                 # 终止范围坐标 xy
  168. 替换效果.object_group =                         # 物件组
  169. 替换效果.object_type =                         # 物件类型
  170. 替换效果.selected_object_id =                         # 选择单位地图 ID

  171. # 开启高级按钮
  172. #替换效果 = 替换触发.add_effect(Effect.USE_ADVANCED_BUTTONS)
  173. # 原作者:请不要使用这个效果

  174. # 损害物件
  175. 替换效果 = 替换触发.add_effect(Effect.DAMAGE_OBJECT)
  176. 替换效果.quantity =                                 # 数值
  177. # 替换效果.number_of_units_selected =                 # ?选择单位数目
  178. 替换效果.object_list_unit_id =                         # 物件固有 ID
  179. 替换效果.player_source =                         # 起始玩家
  180. 替换效果.area_1_x =
  181. 替换效果.area_1_y =                                 # 起始范围坐标 xy
  182. 替换效果.area_2_x =
  183. 替换效果.area_2_y =                                 # 终止范围坐标 xy
  184. 替换效果.object_group =                         # 物件组
  185. 替换效果.object_type =                         # 物件类型
  186. 替换效果.selected_object_id =                         # 选择单位地图 ID

  187. # 放置地基
  188. 替换效果 = 替换触发.add_effect(Effect.PLACE_FOUNDATION)
  189. 替换效果.object_list_unit_id =                         # 物件固有 ID
  190. 替换效果.player_source =                         # 起始玩家
  191. 替换效果.location_x =
  192. 替换效果.location_y =                         # 位置坐标 xy

  193. # 改变物件名字
  194. 替换效果 = 替换触发.add_effect(Effect.CHANGE_OBJECT_NAME)
  195. # 替换效果.number_of_units_selected =                 # ?选择单位数目
  196. 替换效果.object_list_unit_id =                         # 物件固有 ID
  197. 替换效果.player_source =                         # 起始玩家
  198. 替换效果.string_id =                                 # 文本 ID
  199. 替换效果.area_1_x =
  200. 替换效果.area_1_y =                                 # 起始范围坐标 xy
  201. 替换效果.area_2_x =
  202. 替换效果.area_2_y =                                 # 终止范围坐标 xy
  203. 替换效果.object_group =                         # 物件组
  204. 替换效果.object_type =                         # 物件类型
  205. 替换效果.message = ""                        # 文本
  206. 替换效果.selected_object_id =                         # 选择单位地图 ID

  207. # 改变物件生命值
  208. 替换效果 = 替换触发.add_effect(Effect.HANGE_OBJECT_HP)
  209. 替换效果.quantity =                                 # 数值
  210. # 替换效果.number_of_units_selected =                 # ?选择单位数目
  211. 替换效果.object_list_unit_id =                         # 物件固有 ID
  212. 替换效果.player_source =                         # 起始玩家
  213. 替换效果.area_1_x =
  214. 替换效果.area_1_y =                                 # 起始范围坐标 xy
  215. 替换效果.area_2_x =
  216. 替换效果.area_2_y =                                 # 终止范围坐标 xy
  217. 替换效果.object_group =                         # 物件组
  218. 替换效果.object_type =                         # 物件类型
  219. 替换效果.operation =                         # 改变方式
  220.                 # 设置 = 1;增加 = 2;减少 = 3;相乘 = 4;相除 = 5
  221. 替换效果.selected_object_id =                         # 选择单位地图 ID

  222. # 改变物件攻击力
  223. 替换效果 = 替换触发.add_effect(Effect.CHANGE_OBJECT_ATTACK)
  224. 替换效果.aa_quantity =                         # 攻击防御专用数值
  225. 替换效果.aa_armor_or_attack_type =                 # 攻击护甲类型数值
  226. # 替换效果.number_of_units_selected =                 # ?选择单位数目
  227. 替换效果.object_list_unit_id =                         # 物件固有 ID
  228. 替换效果.player_source =                         # 起始玩家
  229. 替换效果.area_1_x =
  230. 替换效果.area_1_y =                                 # 起始范围坐标 xy
  231. 替换效果.area_2_x =
  232. 替换效果.area_2_y =                                 # 终止范围坐标 xy
  233. 替换效果.object_group =                         # 物件组
  234. 替换效果.object_type =                         # 物件类型
  235. 替换效果.operation =                         # 改变方式
  236.                 # 设置 = 1;增加 = 2;减少 = 3;相乘 = 4;相除 = 5
  237. 替换效果.selected_object_id =                         # 选择单位地图 ID

  238. # 停止物件
  239. 替换效果 = 替换触发.add_effect(Effect.STOP_OBJECT)
  240. # 替换效果.number_of_units_selected =                 # ?选择单位数目
  241. 替换效果.object_list_unit_id =                         # 物件固有 ID
  242. 替换效果.player_source =                         # 起始玩家
  243. 替换效果.area_1_x =
  244. 替换效果.area_1_y =                                 # 起始范围坐标 xy
  245. 替换效果.area_2_x =
  246. 替换效果.area_2_y =                                 # 终止范围坐标 xy
  247. 替换效果.object_group =                         # 物件组
  248. 替换效果.object_type =                         # 物件类型
  249. 替换效果.selected_object_id =                         # 选择单位地图 ID

  250. # 移动攻击
  251. 替换效果 = 替换触发.add_effect(Effect.ATTACK_MOVE)
  252. # 替换效果.number_of_units_selected =                 # ?选择单位数目
  253. 替换效果.object_list_unit_id =                         # 物件固有 ID
  254. 替换效果.player_source =                         # 起始玩家
  255. 替换效果.location_x =
  256. 替换效果.location_y =                         # 位置坐标 xy
  257. 替换效果.area_1_x =
  258. 替换效果.area_1_y =                                 # 起始范围坐标 xy
  259. 替换效果.area_2_x =
  260. 替换效果.area_2_y =                                 # 终止范围坐标 xy
  261. 替换效果.object_group =                         # 物件组
  262. 替换效果.object_type =                         # 物件类型
  263. 替换效果.selected_object_id =                         # 选择单位地图 ID

  264. # 改变物件护甲
  265. 替换效果 = 替换触发.add_effect(Effect.CHANGE_OBJECT_ARMOR)
  266. 替换效果.aa_quantity =                         # 攻击防御专用数值
  267. 替换效果.aa_armor_or_attack_type =                 # 攻击护甲类型数值
  268. # 替换效果.number_of_units_selected =                 # ?选择单位数目
  269. 替换效果.object_list_unit_id =                         # 物件固有 ID
  270. 替换效果.player_source =                         # 起始玩家
  271. 替换效果.area_1_x =
  272. 替换效果.area_1_y =                                 # 起始范围坐标 xy
  273. 替换效果.area_2_x =
  274. 替换效果.area_2_y =                                 # 终止范围坐标 xy
  275. 替换效果.object_group =                         # 物件组
  276. 替换效果.object_type =                         # 物件类型
  277. 替换效果.operation =                         # 改变方式
  278.                 # 设置 = 1;增加 = 2;减少 = 3;相乘 = 4;相除 = 5
  279. 替换效果.selected_object_id =                         # 选择单位地图 ID

  280. # 改变物件射程
  281. 替换效果 = 替换触发.add_effect(Effect.CHANGE_OBJECT_RANGE)
  282. 替换效果.quantity =                 # 数值
  283. # 替换效果.number_of_units_selected =                 # ?选择单位数目
  284. 替换效果.object_list_unit_id =                         # 物件固有 ID
  285. 替换效果.player_source =                         # 起始玩家
  286. 替换效果.area_1_x =
  287. 替换效果.area_1_y =                                 # 起始范围坐标 xy
  288. 替换效果.area_2_x =
  289. 替换效果.area_2_y =                                 # 终止范围坐标 xy
  290. 替换效果.object_group =                         # 物件组
  291. 替换效果.object_type =                         # 物件类型
  292. 替换效果.operation =                         # 改变方式
  293.                 # 设置 = 1;增加 = 2;减少 = 3;相乘 = 4;相除 = 5
  294. 替换效果.selected_object_id =                         # 选择单位地图 ID

  295. # 改变物件移动速度
  296. 替换效果 = 替换触发.add_effect(Effect.CHANGE_OBJECT_SPEED)
  297. 替换效果.quantity =                                 # 数值
  298. # 替换效果.number_of_units_selected =                 # ?选择单位数目
  299. 替换效果.object_list_unit_id =                         # 物件固有 ID
  300. 替换效果.player_source =                         # 起始玩家
  301. 替换效果.area_1_x =
  302. 替换效果.area_1_y =                                 # 起始范围坐标 xy
  303. 替换效果.area_2_x =
  304. 替换效果.area_2_y =                                 # 终止范围坐标 xy
  305. 替换效果.object_group =                         # 物件组
  306. 替换效果.object_type =                         # 物件类型
  307. 替换效果.selected_object_id =                         # 选择单位地图 ID

  308. # 治疗物件
  309. 替换效果 = 替换触发.add_effect(Effect.HEAL_OBJECT)
  310. 替换效果.quantity =                                 # 数值
  311. # 替换效果.number_of_units_selected =                 # ?选择单位数目
  312. 替换效果.object_list_unit_id =                         # 物件固有 ID
  313. 替换效果.player_source =                         # 起始玩家
  314. 替换效果.area_1_x =
  315. 替换效果.area_1_y =                                 # 起始范围坐标 xy
  316. 替换效果.area_2_x =
  317. 替换效果.area_2_y =                                 # 终止范围坐标 xy
  318. 替换效果.object_group =                         # 物件组
  319. 替换效果.object_type =                         # 物件类型
  320. 替换效果.selected_object_id =                         # 选择单位地图 ID

  321. # 传送物件
  322. 替换效果 = 替换触发.add_effect(Effect.TELEPORT_OBJECT)
  323. # 替换效果.number_of_units_selected =                 # ?选择单位数目
  324. 替换效果.object_list_unit_id =                         # 物件固有 ID
  325. 替换效果.player_source =                         # 起始玩家
  326. 替换效果.location_x =
  327. 替换效果.location_y =                         # 位置坐标 xy
  328. 替换效果.area_1_x =
  329. 替换效果.area_1_y =                                 # 起始范围坐标 xy
  330. 替换效果.area_2_x =
  331. 替换效果.area_2_y =                                 # 终止范围坐标 xy
  332. 替换效果.object_group =                         # 物件组
  333. 替换效果.object_type =                         # 物件类型
  334. 替换效果.selected_object_id =                         # 选择单位地图 ID

  335. # 改变物件姿态
  336. 替换效果 = 替换触发.add_effect(Effect.CHANGE_OBJECT_STANCE)
  337. # 替换效果.number_of_units_selected =                 # ?选择单位数目
  338. 替换效果.object_list_unit_id =                         # 物件固有 ID
  339. 替换效果.player_source =                         # 起始玩家
  340. 替换效果.location_x =
  341. 替换效果.location_y =                         # 位置坐标 xy
  342. 替换效果.area_1_x =
  343. 替换效果.area_1_y =                                 # 起始范围坐标 xy
  344. 替换效果.area_2_x =
  345. 替换效果.area_2_y =                                 # 终止范围坐标 xy
  346. 替换效果.object_group =                         # 物件组
  347. 替换效果.object_type =                         # 物件类型
  348. 替换效果.attack_stance =                         # 姿态
  349.                 # 进攻 = 0;防御 = 1;坚守 = 2;投降 = 3
  350. 替换效果.selected_object_id =                         # 选择单位地图 ID

  351. # 显示定时器
  352. 替换效果 = 替换触发.add_effect(Effect.DISPLAY_TIMER)
  353. 替换效果.string_id =                                 # 文本 ID
  354. 替换效果.display_time =                         # 定时器时间
  355. 替换效果.time_unit =                         # 时间单位
  356.                 # 秒 = 0;分 = 1;年 = 2
  357. 替换效果.variable_or_timer =                         # 调用定时器 ID
  358. 替换效果.message = ""                        # 文本

  359. # 启用或禁用单位生产
  360. 替换效果 = 替换触发.add_effect(Effect.ENABLE_DISABLE_OBJECT)
  361. 替换效果.object_list_unit_id =                         # 物件固有 ID
  362. 替换效果.player_source =                         # 起始玩家
  363. 替换效果.enabled_or_victory =                         # 启用或禁用
  364. 替换效果.item_id =                                 # 生产位置

  365. # 启用或禁用科技
  366. 替换效果 = 替换触发.add_effect(Effect.ENABLE_DISABLE_TECHNOLOGY)
  367. 替换效果.player_source =                         # 起始玩家
  368. 替换效果.technology =                         # 科技 ID
  369. 替换效果.enabled_or_victory =                         # 启用或禁用
  370. 替换效果.item_id =                                 # ?

  371. # 修改生产成本
  372. 替换效果 = 替换触发.add_effect(Effect.CHANGE_OBJECT_COST)
  373. 替换效果.object_list_unit_id =                         # 物件固有 ID
  374. 替换效果.player_source =                         # 起始玩家
  375. 替换效果.food =                                 # 木材成本
  376. 替换效果.wood =                                 # 食物成本
  377. 替换效果.stone =                                 # 石料成本
  378. 替换效果.gold =                                 # 黄金成本

  379. # 设置玩家可见
  380. 替换效果 = 替换触发.add_effect(Effect.SET_PLAYER_VISIBILITY)
  381. 替换效果.player_source =                         # 起始玩家
  382. 替换效果.player_target =                         # 对象玩家
  383. 替换效果.visibility_state =                         # 可见模式

  384. # 改变单位头像
  385. 替换效果 = 替换触发.add_effect(Effect.CHANGE_OBJECT_ICON)
  386. # 替换效果.number_of_units_selected =                 # ?选择单位数目
  387. 替换效果.object_list_unit_id =                         # 物件固有 ID
  388. 替换效果.player_source =                         # 起始玩家
  389. 替换效果.location_x =
  390. 替换效果.location_y =                         # 位置坐标 xy
  391. 替换效果.area_1_x =
  392. 替换效果.area_1_y =                                 # 起始范围坐标 xy
  393. 替换效果.area_2_x =
  394. 替换效果.area_2_y =                                 # 终止范围坐标 xy
  395. 替换效果.object_group =                         # 物件组
  396. 替换效果.object_type =                         # 物件类型
  397. 替换效果.object_list_unit_id_2 =                         # 头像 ID
  398. 替换效果.selected_object_id =                         # 选择单位地图 ID

  399. # 替换物件
  400. 替换效果 = 替换触发.add_effect(Effect.REPLACE_OBJECT)
  401. # 替换效果.number_of_units_selected =                 # ?选择单位数目
  402. 替换效果.object_list_unit_id =                         # 物件固有 ID
  403. 替换效果.player_source =                         # 起始玩家
  404. 替换效果.player_target =                         # 对象玩家
  405. 替换效果.location_x =
  406. 替换效果.location_y =                         # 位置坐标 xy
  407. 替换效果.area_1_x =
  408. 替换效果.area_1_y =                                 # 起始范围坐标 xy
  409. 替换效果.area_2_x =
  410. 替换效果.area_2_y =                                 # 终止范围坐标 xy
  411. 替换效果.object_group =                         # 物件组
  412. 替换效果.object_type =                         # 物件类型
  413. 替换效果.object_list_unit_id_2 =                         # 目标单位固有 ID
  414. 替换效果.selected_object_id =                         # 选择单位地图 ID

  415. # 改变物件描述
  416. 替换效果 = 替换触发.add_effect(Effect.CHANGE_OBJECT_DESCRIPTION)
  417. 替换效果.object_list_unit_id =                         # 物件固有 ID
  418. 替换效果.player_source =                         # 起始玩家
  419. 替换效果.string_id =                                 # 文本 ID
  420. 替换效果.message = ""                        # 文本

  421. # 改变玩家名称
  422. 替换效果 = 替换触发.add_effect(Effect.CHANGE_PLAYER_NAME)
  423. 替换效果.player_source =                         # 起始玩家
  424. 替换效果.string_id =                                 # 文本 ID
  425. 替换效果.message = ""                        # 文本

  426. # 改变训练位置
  427. 替换效果 = 替换触发.add_effect(Effect.CHANGE_TRAIN_LOCATION)
  428. 替换效果.object_list_unit_id =                         # 物件固有 ID
  429. 替换效果.player_source =                         # 起始玩家
  430. 替换效果.object_list_unit_id_2 =                         # 目标单位固有 ID
  431. 替换效果.button_location =                         # 按钮位置

  432. # 改变训练位置
  433. 替换效果 = 替换触发.add_effect(Effect.CHANGE_RESEARCH_LOCATION)
  434. 替换效果.player_source =                         # 起始玩家
  435. 替换效果.technology =                         # 科技 ID
  436. 替换效果.object_list_unit_id_2 =                         # 目标单位固有 ID
  437. 替换效果.button_location =                         # 按钮位置

  438. # 改变文明名称
  439. 替换效果 = 替换触发.add_effect(Effect.CHANGE_CIVILIZATION_NAME)
  440. 替换效果.player_source =                         # 起始玩家
  441. 替换效果.string_id =                                 # 文本 ID
  442. 替换效果.message = ""                        # 文本

  443. # 产生驻扎单位
  444. 替换效果 = 替换触发.add_effect(Effect.CREATE_GARRISONED_OBJECT)
  445. # 替换效果.number_of_units_selected =                 # ?选择单位数目
  446. 替换效果.object_list_unit_id =                         # 物件固有 ID
  447. 替换效果.player_source =                         # 起始玩家
  448. 替换效果.area_1_x =
  449. 替换效果.area_1_y =                                 # 起始范围坐标 xy
  450. 替换效果.area_2_x =
  451. 替换效果.area_2_y =                                 # 终止范围坐标 xy
  452. 替换效果.object_list_unit_id_2 =                         # 目标单位固有 ID
  453. 替换效果.selected_object_id =                         # 选择单位地图 ID

  454. # 应答 AI 信号
  455. 替换效果 = 替换触发.add_effect(Effect.ACKNOWLEDGE_AI_SIGNAL)
  456. 替换效果.ai_signal_value =                         # 应答 AI 信号

  457. # 修改属性
  458. 替换效果 = 替换触发.add_effect(Effect.MODIFY_ATTRIBUTE)
  459. 替换效果.quantity =                                 # 数值(攻击护甲修改需*256)
  460. 替换效果.object_list_unit_id =                         # 物件固有 ID
  461. 替换效果.player_source =                         # 起始玩家
  462. # 替换效果.item_id =                                 # 物件ID
  463. 替换效果.operation =                         # 改变方式
  464.                 # 设置 = 1;增加 = 2;减少 = 3;相乘 = 4;相除 = 5
  465. 替换效果.object_attributes =                         # 物件属性

  466. # 修改资源
  467. 替换效果 = 替换触发.add_effect(Effect.MODIFY_RESOURCE)
  468. 替换效果.quantity =                                 # 数值
  469. 替换效果.tribute_list =                         # 资源 ID
  470. 替换效果.player_source =                         # 起始玩家
  471. 替换效果.operation =                         # 改变方式
  472.                 # 设置 = 1;增加 = 2;减少 = 3;相乘 = 4;相除 = 5

  473. # 根据变量修改资源
  474. 替换效果 = 替换触发.add_effect(Effect.MODIFY_RESOURCE_BY_VARIABLE)
  475. 替换效果.tribute_list =                         # 资源 ID
  476. 替换效果.player_source =                         # 起始玩家
  477. 替换效果.operation =                         # 改变方式
  478.                 # 设置 = 1;增加 = 2;减少 = 3;相乘 = 4;相除 = 5
  479. 替换效果.from_variable =                         # 变量 ID

  480. # 修改变量
  481. 替换效果 = 替换触发.add_effect(Effect.CHANGE_VARIABLE)
  482. 替换效果.quantity =                                 # 数值
  483. 替换效果.operation =                         # 改变方式
  484.                 # 设置 = 1;增加 = 2;减少 = 3;相乘 = 4;相除 = 5
  485. 替换效果.from_variable =                         # 变量 ID
  486. 替换效果.message = ""                        # 文本

  487. # 清除定时器
  488. 替换效果 = 替换触发.add_effect(Effect.CLEAR_TIMER)
  489. 替换效果.variable_or_timer =                         # 调用定时器 ID
复制代码

接下来,我用一个示例,来帮助大家理解条件和效果代码写法。
首先定义一个触发:
  1. t1_1 = trigger_manager.add_trigger("【勇者 S +1 】")
  2. t1_1.enabled = 1            # 是否开启
  3. t1_1.looping = 1            # 是否循环
复制代码
然后为它创建条件与效果:
  1. # 区域内物件数目 >=
  2. c1_1_1 = t1_1.add_condition(Condition.OBJECT_IN_AREA)
  3. c1_1_1.amount_or_quantity = 1            # 数值
  4. c1_1_1.object_list = 1304                # 物件固有 ID
  5. c1_1_1.player = 1                        # 起始玩家
  6. c1_1_1.area_1_x = 200
  7. c1_1_1.area_1_y = 222                        # 起始点 xy 坐标
  8. c1_1_1.area_2_x = 200
  9. c1_1_1.area_2_y = 222                        # 终止点 xy 坐标

  10. # 传送物件
  11. e1_1_1 = t1_1.add_effect(Effect.TELEPORT_OBJECT)
  12. e1_1_1.object_list_unit_id = 1304                        # 物件固有 ID
  13. e1_1_1.player_source = 1                        # 起始玩家
  14. e1_1_1.location_x = 239
  15. e1_1_1.location_y = 239                        # 位置坐标 xy
  16. e1_1_1.area_1_x = 200
  17. e1_1_1.area_1_y = 222                                # 起始范围坐标 xy
  18. e1_1_1.area_2_x = 200
  19. e1_1_1.area_2_y = 222                                # 终止范围坐标 xy

  20. # 移除物件
  21. e1_1_2 = t1_1.add_effect(Effect.REMOVE_OBJECT)
  22. e1_1_2.object_list_unit_id = 1304                        # 物件固有 ID
  23. e1_1_2.player_source = 1                        # 起始玩家
  24. e1_1_2.area_1_x = 239
  25. e1_1_2.area_1_y = 239                                # 起始范围坐标 xy
  26. e1_1_2.area_2_x = 239
  27. e1_1_2.area_2_y = 239                                # 终止范围坐标 xy

  28. # 修改变量
  29. e1_1_3 = t1_1.add_effect(Effect.CHANGE_VARIABLE)
  30. e1_1_3.quantity = 1                                # 数值
  31. e1_1_3.operation = 2                        # 改变方式
  32.                 # 设置 = 1;增加 = 2;减少 = 3;相乘 = 4;相除 = 5
  33. e1_1_3.from_variable = 11                        # 变量 ID
  34. e1_1_3.message = "勇者力量"                        # 文本

  35. # 修改变量
  36. e1_1_4 = t1_1.add_effect(Effect.CHANGE_VARIABLE)
  37. e1_1_4.quantity = 15                                # 数值
  38. e1_1_4.operation = 2                        # 改变方式
  39.                 # 设置 = 1;增加 = 2;减少 = 3;相乘 = 4;相除 = 5
  40. e1_1_4.from_variable = 15                        # 变量 ID
  41. e1_1_4.message = "勇者力量增加值"                        # 文本
复制代码
这样,我们就得到了一个完整的触发。

(4)触发组写法
可能写到这里,读者会问:我为了简便操作而来,可你写一个触发的时间够我在地编做二十个了!
这自然。只做一两个触发,根本用不到这个工具。因此,我要介绍一个新概念——触发组。
触发是达成条件,发动效果。而单个触发往往不能满足我们的需求,所以我们需要多个触发共同作用,这就是触发组。在RPG战役和联机场景中,触发组就更常见了,RPG战役中往往一个技能就需要包含几十个触发的触发组。而一个写好的触发组复制粘贴,肯定是要比地编的单个触发复制粘贴要方便很多的。
借用我正在制作的战役的示例。首先,我们定义一组触发,并折叠起来,这样方便阅读:

之后,我们为每一个触发新建条件、效果,并把每一个触发折叠起来,

这样,就得到了一组触发,如图。

需要类似触发组,就复制粘贴,然后运用VScode的替换功能,选取复制部分替换。注意:一定要同时替换触发代码正文名、条件代码正文名和效果代码正文名。
最后,我们得到了数组类似的触发组,如图。(注意图片左边的代码行数)

这是我正在设计的一个战役的其中一个主角的技能。大概是90个触发。而技能与他类似的角色还有9个。这900+触发运用代码编写,可以节省大量工作量。而联机场景中动辄2、3000重复触发,使用这个工具的意义就更大了。

最后是条件和效果中可能运用到的常数列表,也会附加在文末压缩包内。其中单位属性、资源ID和攻击防御类型,建议通过DE大典查找。

  1. class DiplomacyState(IntEnum):                # 外交信息
  2.     ALLY = 0                # 盟友=0
  3.     NEUTRAL = 1                # 中立=1
  4.     ENEMY = 3                # 敌人=3


  5. class Operator(IntEnum):                # 数值运算
  6.     SET = 1                        # 设置=1
  7.     ADD = 2                # 增加=2
  8.     SUBTRACT = 3                # 减少=3
  9.     MULTIPLY = 4                # 相乘=4
  10.     DIVIDE = 5                # 相除=5


  11. class ButtonLocation(IntEnum):                # 建筑内位置编号
  12.     LOCATION_0_0 = 0        # 0
  13.     LOCATION_1_0 = 2        # 2
  14.     LOCATION_2_0 = 3        # 3
  15.     LOCATION_3_0 = 4        # 4
  16.     LOCATION_4_0 = 5        # 5
  17.     LOCATION_0_1 = 6        # 6
  18.     LOCATION_1_1 = 7        # 7
  19.     LOCATION_2_1 = 8        # 8
  20.     LOCATION_3_1 = 9        # 9
  21.     LOCATION_4_1 = 10        # 10
  22.     LOCATION_0_2 = 11        # 11
  23.     LOCATION_1_2 = 12        # 12
  24.     LOCATION_2_2 = 13        # 13
  25.     LOCATION_3_2 = 14        # 14
  26.     # LOCATION_4_2 = 15? (Actually placed at 0_0 at the moment)


  27. class PanelLocation(IntEnum):                #显示信息位置
  28.     TOP = 0                # 0
  29.     """Panel at the top of the screen. ~13% from the top"""
  30.     BETWEEN = 1                # 1
  31.     """Panel between the top and the center of the screen. ~33% from the top"""
  32.     CENTER = 2                # 2
  33.     """Panel close to the center of the screen. ~45% from the top"""


  34. class TimeUnit(IntEnum):                # 时间类型
  35.     YEARS = 2                # 年(游戏)=2
  36.     """In-Game years. A year is 5 seconds in-game time."""
  37.     MINUTES = 1                # 分=1
  38.     """In-Game minutes."""
  39.     SECONDS = 0                # 秒=0
  40.     """In-Game seconds."""


  41. class VisibilityState(IntEnum):                # 是否可视
  42.     VISIBLE = 0                # 可视=0
  43.     EXPLORED = 1                # 已探索=1
  44.     INVISIBLE = 2                # 不可视=2


  45. class DifficultyLevel(IntEnum):                # 游戏难度
  46.     EASIEST = 4                # 最易=4
  47.     STANDARD = 3                # 标准=3
  48.     MODERATE = 2                # 中等=2
  49.     HARD = 1                # 困难=1
  50.     HARDEST = 0                # 极难=0
  51.     # EXTREME = 5  # ???


  52. class TechnologyState(IntEnum):        # 科技属性
  53.     DISABLED = 4                # 不可用=4
  54.     NOT_READY = 3                # 暂时不可研发=3
  55.     READY = 2                # 可研发=2
  56.     RESEARCHING = 1        # 研发中=1
  57.     DONE = 0                # 研发完毕=0
  58.     # QUEUED = 5  # ???


  59. class Comparison(IntEnum):                # 数值比较
  60.     EQUAL = 0                # 相等        =0
  61.     LESS = 1                # <        =1
  62.     LARGER = 2                # >        =2
  63.     LESS_OR_EQUAL = 3        # <=        =3
  64.     LARGER_OR_EQUAL = 4        # >=        =4


  65. class ObjectAttribute(IntEnum):                # 单位属性
  66.     HIT_POINTS = 0                  # 生命值
  67.     LINE_OF_SIGHT = 1               # 视野
  68.     GARRISON_CAPACITY = 2           # 驻扎容量
  69.     UNIT_SIZE_X = 3                 # 单位尺寸(碰撞体积X)
  70.     UNIT_SIZE_Y = 4                 # 单位尺寸(碰撞体积Y)
  71.     MOVEMENT_SPEED = 5              # 移动速度
  72.     ROTATION_SPEED = 6              # 旋转速度
  73.     ARMOR = 8                       # 护甲(或许有特殊计算方法?)
  74.     ATTACK = 9                      # 攻击力(或许有特殊计算方法?)
  75.     ATTACK_RELOAD_TIME = 10         # 攻击间隔(攻击重新加载时间)
  76.     ACCURACY_PERCENT = 11           # 准确度百分比(命中率百分比)
  77.     MAX_RANGE = 12                  # 最大射程
  78.     WORK_RATE = 13                  # 工作效率
  79.     CARRY_CAPACITY = 14             # 运载能力(资源携带能力)
  80.     BASE_ARMOR = 15                 # 基础护甲(默认1000点)
  81.     PROJECTILE_UNIT = 16            # 投射物 ID
  82.     ICON_GRAPHICS_ANGLE = 17        # 图标角度
  83.     TERRAIN_DEFENSE_BONUS = 18      # 地形防御奖励(地形伤害加成 ID)
  84.     ENABLE_SMART_PROJECTILES = 19   # 启用智能炮弹(弹道学模式)
  85.     MINIMUM_RANGE = 20              # 最小射程
  86.     ARNOUNT_OF_1ST_RESOURCES = 21   # 资源储备(首位资源储存)
  87.     BLAST_WIDTH = 22                # 爆炸广度(溅射半径)
  88.     SEARCH_RADIUS = 23              # 搜索半径
  89.     HERO_STATUS = 40                # 英雄状态
  90.     FRAME_DELAY = 41                # 帧延迟
  91.     TRAIN_LOCATION = 42             # 训练位置
  92.     TRAIN_BUTTON = 43               # 训练按钮
  93.     BLAST_LEVEL = 44                # 爆炸等级(攻击伤害等级)
  94.     OBJECT_NAME_ID = 50             # 单位名称(字符串 ID)
  95.     SHORT_DESCRIPTION_ID = 51       # 简短介绍(字符串 ID)
  96.     TERRAIN_RESTRICTION_ID = 53     # 地形限制 ID
  97.     DEAD_UNIT_ID = 57               # 死亡单位 ID
  98.     RESOURCE_COSTS = 100            # 花费成本
  99.     TRAIN_TIME = 101                # 训练时间
  100.     TOTAL_MISSILES = 102            # 投射单位总数(投射单位初数量)
  101.     FOOD_COSTS = 103                # 食物成本
  102.     WOOD_COSTS = 104                # 木材成本
  103.     GOLD_COSTS = 105                # 黄金成本
  104.     STONE_COSTS = 106               # 石料成本
  105.     MAX_TOTAL_MISSILES = 107        # 最大投射物数量
  106.     REGENERATION_RATE = 109         # 再生率(再生间隔)


  107. class Attribute(IntEnum):                # 资源ID
  108.     FOOD_STORAGE = 0
  109.     WOOD_STORAGE = 1
  110.     STONE_STORAGE = 2
  111.     GOLD_STORAGE = 3
  112.     POPULATION_HEADROOM = 4
  113.     CONVERSION_RANGE = 5
  114.     CURRENT_AGE = 6
  115.     RELICS_CAPTURED = 7
  116.     UNUSED_RESOURCE_008 = 8
  117.     TRADE_GOODS = 9
  118.     UNUSED_RESOURCE_010 = 10
  119.     CURRENT_POPULATION = 11
  120.     CORPSE_DECAY_TIME = 12
  121.     REMARKABLE_DISCOVERY = 13
  122.     MONUMENTS_CAPTURED = 14
  123.     MEAT_STORAGE = 15
  124.     BERRY_STORAGE = 16
  125.     FISH_STORAGE = 17
  126.     UNUSED_RESOURCE_018 = 18
  127.     TOTAL_UNITS_OWNED = 19
  128.     UNITS_KILLED = 20
  129.     TECHNOLOGY_COUNT = 21
  130.     PERCENT_MAP_EXPLORED = 22
  131.     CASTLE_AGE_TECH_ID = 23
  132.     IMPERIAL_AGE_TECH_ID = 24
  133.     FEUDAL_AGE_TECH_ID = 25
  134.     ATTACK_WARNING_SOUND_ID = 26
  135.     ENABLE_MONK_CONVERSION = 27
  136.     ENABLE_BUILDING_CONVERSION = 28
  137.     UNUSED_RESOURCE_029 = 29
  138.     UNUSED_RESOURCE_030 = 30
  139.     UNUSED_RESOURCE_031 = 31
  140.     BONUS_POPULATION_CAP = 32
  141.     FOOD_MAINTENANCE = 33
  142.     FAITH = 34
  143.     FAITH_RECHARGING_RATE = 35
  144.     FARM_FOOD_AMOUNT = 36
  145.     CIVILIAN_POPULATION = 37
  146.     UNUSED_RESOURCE_038 = 38
  147.     ALL_TECHS_ACHIEVED = 39
  148.     MILITARY_POPULATION = 40
  149.     CONVERSIONS = 41
  150.     STANDING_NDERS = 42
  151.     RAZINGS = 43
  152.     KILL_RATIO = 44
  153.     SURVIVAL_TO_FINISH = 45
  154.     TRIBUTE_INEFFICIENCY = 46
  155.     GOLD_MINING_PRODUCTIVITY = 47
  156.     TOWN_CENTER_UNAVAILABLE = 48
  157.     GOLD_COUNTER = 49
  158.     REVEAL_ALLY = 50
  159.     UNUSED_RESOURCE_051 = 51
  160.     MONASTERIES = 52
  161.     TRIBUTE_SENT = 53
  162.     ALL_MONUMENTS_CAPTURED = 54
  163.     ALL_RELICS_CAPTURED = 55
  164.     ORE_STORAGE = 56
  165.     KIDNAP_STORAGE = 57
  166.     DARK_AGE_TECH_ID = 58
  167.     UNUSED_RESOURCE_059 = 59
  168.     UNUSED_RESOURCE_060 = 60
  169.     UNUSED_RESOURCE_061 = 61
  170.     BUILDING_HOUSING_RATE = 62
  171.     TAX_GATHER_RATE = 63
  172.     GATHER_ACCUMULATOR = 64
  173.     SALVAGE_DECAY_RATE = 65
  174.     UNUSED_RESOURCE_066 = 66
  175.     CAN_CONVERT = 67
  176.     HIT_POINTS_KILLED = 68
  177.     KILLED_P1 = 69
  178.     KILLED_P2 = 70
  179.     KILLED_P3 = 71
  180.     KILLED_P4 = 72
  181.     KILLED_P5 = 73
  182.     KILLED_P6 = 74
  183.     KILLED_P7 = 75
  184.     KILLED_P8 = 76
  185.     CONVERSION_RESISTANCE = 77
  186.     TRADE_VIG_RATE = 78
  187.     STONE_MINING_PRODUCTIVITY = 79
  188.     QUEUED_UNITS = 80
  189.     TRAINING_COUNT = 81
  190.     START_WITH_UNIT_444_PTWC = 82
  191.     BOARDING_RECHARGE_RATE = 83
  192.     STARTING_VILLAGERS = 84
  193.     RESEARCH_COST_MODIFIER = 85
  194.     RESEARCH_TIME_MODIFIER = 86
  195.     CONVERT_BOATS = 87
  196.     FISH_TRAP_FOOD_AMOUNT = 88
  197.     HEAL_RATE_MODIFIER = 89
  198.     HEALING_RANGE = 90
  199.     STARTING_FOOD = 91
  200.     STARTING_WOOD = 92
  201.     STARTING_STONE = 93
  202.     STARTING_GOLD = 94
  203.     ENABLE_PTWC_KIDNAP_LOOT = 95
  204.     BERSERKER_HEAL_TIMER = 96
  205.     DOMINANT_SHEEP_CONTROL = 97
  206.     BUILDING_COST_SUM = 98
  207.     TECH_COST_SUM = 99
  208.     RELIC_INCOME_SUM = 100
  209.     TRADE_INCOME_SUM = 101
  210.     P1_TRIBUTE = 102
  211.     P2_TRIBUTE = 103
  212.     P3_TRIBUTE = 104
  213.     P4_TRIBUTE = 105
  214.     P5_TRIBUTE = 106
  215.     P6_TRIBUTE = 107
  216.     P7_TRIBUTE = 108
  217.     P8_TRIBUTE = 109
  218.     P1_KILL_VALUE = 110
  219.     P2_KILL_VALUE = 111
  220.     P3_KILL_VALUE = 112
  221.     P4_KILL_VALUE = 113
  222.     P5_KILL_VALUE = 114
  223.     P6_KILL_VALUE = 115
  224.     P7_KILL_VALUE = 116
  225.     P8_KILL_VALUE = 117
  226.     P1_RAZINGS = 118
  227.     P2_RAZINGS = 119
  228.     P3_RAZINGS = 120
  229.     P4_RAZINGS = 121
  230.     P5_RAZINGS = 122
  231.     P6_RAZINGS = 123
  232.     P7_RAZINGS = 124
  233.     P8_RAZINGS = 125
  234.     P1_RAZING_VALUE = 126
  235.     P2_RAZING_VALUE = 127
  236.     P3_RAZING_VALUE = 128
  237.     P4_RAZING_VALUE = 129
  238.     P5_RAZING_VALUE = 130
  239.     P6_RAZING_VALUE = 131
  240.     P7_RAZING_VALUE = 132
  241.     P8_RAZING_VALUE = 133
  242.     STANDING_CASTLES = 134
  243.     HIT_POINTS_RAZED = 135
  244.     KILLS_BY_P1 = 136
  245.     KILLS_BY_P2 = 137
  246.     KILLS_BY_P3 = 138
  247.     KILLS_BY_P4 = 139
  248.     KILLS_BY_P5 = 140
  249.     KILLS_BY_P6 = 141
  250.     KILLS_BY_P7 = 142
  251.     KILLS_BY_P8 = 143
  252.     RAZINGS_BY_P1 = 144
  253.     RAZINGS_BY_P2 = 145
  254.     RAZINGS_BY_P3 = 146
  255.     RAZINGS_BY_P4 = 147
  256.     RAZINGS_BY_P5 = 148
  257.     RAZINGS_BY_P6 = 149
  258.     RAZINGS_BY_P7 = 150
  259.     RAZINGS_BY_P8 = 151
  260.     VALUE_KILLED_BY_OTHERS = 152
  261.     VALUE_RAZED_BY_OTHERS = 153
  262.     KILLED_BY_OTHERS = 154
  263.     RAZED_BY_OTHERS = 155
  264.     TRIBUTE_FROM_P1 = 156
  265.     TRIBUTE_FROM_P2 = 157
  266.     TRIBUTE_FROM_P3 = 158
  267.     TRIBUTE_FROM_P4 = 159
  268.     TRIBUTE_FROM_P5 = 160
  269.     TRIBUTE_FROM_P6 = 161
  270.     TRIBUTE_FROM_P7 = 162
  271.     TRIBUTE_FROM_P8 = 163
  272.     VALUE_CURENT_UNITS = 164
  273.     VALUE_CURRENT_BUILDINGS = 165
  274.     FOOD_TOTAL = 166
  275.     WOOD_TOTAL = 167
  276.     STONE_TOTAL = 168
  277.     GOLD_TOTAL = 169
  278.     TOTAL_VALUE_OF_KILLS = 170
  279.     TOTAL_TRIBUTE_RECEIVED = 171
  280.     TOTAL_VALUE_OF_RAZINGS = 172
  281.     TOTAL_CASTLES_BUILT = 173
  282.     TOTAL_WONDERS_BUILT = 174
  283.     TRIBUTE_SCORE = 175
  284.     CONVERT_MIN_ADJUSFIENT = 176
  285.     CONVERT_MAX_ADJUSTMENT = 177
  286.     CONVERT_RESIST_MIN_ADJUSTMENT = 178
  287.     CONVERT_RESIST_MAX_ADJUSTMENT = 179
  288.     CONVERT_BUILDING_MIN = 180
  289.     CONVERT_BUILDING_MAX = 181
  290.     CONVERT_BUILDING_CHANCE = 182
  291.     REVEAL_ENEMY = 183
  292.     VALUE_WONDERS_CASTLES = 184
  293.     FOOD_SCORE = 185
  294.     WOOD_SCORE = 186
  295.     STONE_SCORE = 187
  296.     GOLD_SCORE = 188
  297.     CHOPPING_PRODUCTIVITY = 189
  298.     FOOD_GATHERING_PRODUCTIVITY = 190
  299.     RELIC_GOLD_PRODUCTION_RATE = 191
  300.     CONVERTED_UNITS_DIE = 192
  301.     THEOCRACY = 193
  302.     CRENELLATIONS = 194
  303.     CONSTRUCTION_RATE_MODIFIER = 195
  304.     HUN_WONDER_DISCOUNT = 196
  305.     SPIES_DISCOUNT = 197
  306.     UNUSED_RESOURCE_198 = 198
  307.     UNUSED_RESOURCE_199 = 199
  308.     UNUSED_RESOURCE_200 = 200
  309.     UNUSED_RESOURCE_201 = 201
  310.     UNUSED_RESOURCE_202 = 202
  311.     UNUSED_RESOURCE_203 = 203
  312.     UNUSED_RESOURCE_204 = 204
  313.     FEITORIA_FOOD_PRODUCTIVITY = 205
  314.     FEITORIA_WOOD_PRODUCTIVITY = 206
  315.     FEITORIA_STONE_PRODUCTIVITY = 207
  316.     FEITORIA_GOLD_PRODUCTIVITY = 208
  317.     REVEAL_ENEMY_TOWN_CENTERS = 209
  318.     RELICS_VISIBLE_ON_MAP = 210
  319.     ELEVATION_HIGHER_BONUS = 211
  320.     ELEVATION_LOWER_BONUS = 212
  321.     RAIDING_PRODUCTIVITY = 213
  322.     MERCENARY_KIPCHAK_COUNT = 214
  323.     MERCENARY_KIPCHAK_LIMIT = 215
  324.     SHEPHERD_PRODUCTIVITY = 216
  325.     SHARED_LINE_OF_SIGHT = 217
复制代码

b)单位部分
本工具可以对单位执行新建、查找、编辑和移除。十分抱歉,我目前只使用和测试过了新建功能,因此无法对后三项功能进行介绍。大家有需要的可以自行到原地址学习。以下只介绍新建单位功能。但请相信我,这是一个十分十分强大的功能。
单位部分代码分为两部分,单位编码导入单位代码
单位编码导入代码如下,复制粘贴到代码正文开头即可:

  1. unit_manager = scenario.object_manager.unit_manager
复制代码
单位代码全文如下,除非标注出来,否者只能填写整数:
  1. unit = unit_manager.add_unit(
  2.         player = ,                        # 玩家 ID
  3.         unit_id = ,                        # 单位固有 ID,请查找DE大典
  4.         x = ,                        # 单位 x 坐标,可填写小数
  5.         y = ,                        # 单位 y 坐标,可填写小数
  6.         z = ,                        # 单位 z 坐标,可填写小数
  7.         rotation = ,                        # 单位的朝向,有 0-15 共16个方向
  8.         garrisoned_in_id = ,                        # 单位所驻扎的位置,需要填写地图 ID
  9.         animation_frame = ,                        # 单位初始动画帧数,绝大多数情况用不到
  10.         reference_id =                         # 单位地图 ID,不填则由地编自动分配
  11. )                                # 注意:后括号前不加“ , ”其余每一行末尾必须加半角“ , ”
复制代码
与触发代码一样,以上代码也可以只取所需部分。

接下来,我将向大家介绍这个功能的一种神奇的应用,我称之为“二阶导式新建单位”。
我先放出效果图:


以上只是我为了测试效果而随意画的。理论上,这个工具可以画出任何形状的图形——不用你一个一个单位地手点。
做法很简单。首先,我们使用任何编程软件,比如C++,matlab,推荐使用matlab。


然后编辑代码来进行运算,得到需要的单位的坐标。

然后,输出要写在python场景工具里的代码,注意一定要严格按照格式

最后,将得到的代码复制粘贴到python场景工具的代码正文部分,记得前面要加上单位编码导入。
运行工具,我们就得到了所需的图形。
这种方法,我们写的代码是“输出文件的代码的代码”,因此我将之命名为“二阶导式新建单位”。
虽然这种方法十分复杂,但是熟练掌握之后,你可以绘制任何图形,拥有无限的可能性。当然,如果你有什么新的应用,也欢迎分享给大家。


最后,感谢木匠,游戏ID:Carpenter,提供的环境安装教程。
最后的最后,感谢本工具原作者:KSneijders!

帮助文档下载:(其中DE大典来自夜游神的原贴:https://www.hawkaoe.net/bbs/thread-146061-1-1.html


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册翔鹰会员(昵称)

x

评分

参与人数 3耕战 +500 鹰币 +200 收起 理由
newtonerdai + 100 划时代的DE场景编辑工具の教程.
cly806 + 100 原创精华
cxt + 500 原创精华

查看全部评分

进而无可御,退而无可追,此乃良将
回复

使用道具 举报

28

主题

1

精华

7327

积分

国王

耕战
1251
鹰币
6149
天龙币
0
回帖
140
附庸关系1
发表于 2020-11-1 17:59:56 | 显示全部楼层
好,很有精神!(指用上这个工具以后可以大量制造触发,完成以前受限于工作量而难以完成的各种富有创新精神的触发群)
回复

使用道具 举报

117

主题

9

精华

9万

积分

教皇

Wolotine

耕战
17250
鹰币
546158
天龙币
0
回帖
1570

翔鹰建站十周年纪念章小评论家第十二届火箭筒杯最佳新人第十三届火箭筒杯亚军第十三届火箭筒杯亚军赌徒勋章第八届战鹰杯单人赛冠军

附庸关系11
发表于 2020-11-1 18:46:39 | 显示全部楼层
本帖可称目前撅腚版最牛B教程,甚至不输cly的json教程,是撅腚版技术层面的一次核心突破,即使是新人也能很快上手,运用这些技术做出有亮点的战役。
回复

使用道具 举报

91

主题

14

精华

2万

积分

都主教

耕战
3368
鹰币
20766
天龙币
0
回帖
1353
附庸关系1
发表于 2020-11-1 23:54:48 | 显示全部楼层
好,很有精神!(当c++帝国遇上python的奇妙反应)
回复

使用道具 举报

183

主题

9

精华

2万

积分

教皇

耕战
3325
鹰币
15202
天龙币
0
回帖
1200

翔鹰建站十周年纪念章

附庸关系3
发表于 2020-11-2 01:16:58 | 显示全部楼层
DE大典里没有单位属性,我就整理了一下注释。希望你可以补充进帖子里~

(搜索“单位属性”即可快速定位到你帖子里的相应位置)

  1.     HIT_POINTS = 0                  # 生命值
  2.     LINE_OF_SIGHT = 1               # 视野
  3.     GARRISON_CAPACITY = 2           # 驻扎容量
  4.     UNIT_SIZE_X = 3                 # 单位尺寸(碰撞体积X)
  5.     UNIT_SIZE_Y = 4                 # 单位尺寸(碰撞体积Y)
  6.     MOVEMENT_SPEED = 5              # 移动速度
  7.     ROTATION_SPEED = 6              # 旋转速度
  8.     ARMOR = 8                       # 护甲(或许有特殊计算方法?)
  9.     ATTACK = 9                      # 攻击力(或许有特殊计算方法?)
  10.     ATTACK_RELOAD_TIME = 10         # 攻击间隔(攻击重新加载时间)
  11.     ACCURACY_PERCENT = 11           # 准确度百分比(命中率百分比)
  12.     MAX_RANGE = 12                  # 最大射程
  13.     WORK_RATE = 13                  # 工作效率
  14.     CARRY_CAPACITY = 14             # 运载能力(资源携带能力)
  15.     BASE_ARMOR = 15                 # 基础护甲(默认1000点)
  16.     PROJECTILE_UNIT = 16            # 投射物 ID
  17.     ICON_GRAPHICS_ANGLE = 17        # 图标角度
  18.     TERRAIN_DEFENSE_BONUS = 18      # 地形防御奖励(地形伤害加成 ID)
  19.     ENABLE_SMART_PROJECTILES = 19   # 启用智能炮弹(弹道学模式)
  20.     MINIMUM_RANGE = 20              # 最小射程
  21.     ARNOUNT_OF_1ST_RESOURCES = 21   # 资源储备(首位资源储存)
  22.     BLAST_WIDTH = 22                # 爆炸广度(溅射半径)
  23.     SEARCH_RADIUS = 23              # 搜索半径
  24.     HERO_STATUS = 40                # 英雄状态
  25.     FRAME_DELAY = 41                # 帧延迟
  26.     TRAIN_LOCATION = 42             # 训练位置
  27.     TRAIN_BUTTON = 43               # 训练按钮
  28.     BLAST_LEVEL = 44                # 爆炸等级(攻击伤害等级)
  29.     OBJECT_NAME_ID = 50             # 单位名称(字符串 ID)
  30.     SHORT_DESCRIPTION_ID = 51       # 简短介绍(字符串 ID)
  31.     TERRAIN_RESTRICTION_ID = 53     # 地形限制 ID
  32.     DEAD_UNIT_ID = 57               # 死亡单位 ID
  33.     RESOURCE_COSTS = 100            # 花费成本
  34.     TRAIN_TIME = 101                # 训练时间
  35.     TOTAL_MISSILES = 102            # 投射单位总数(投射单位初数量)
  36.     FOOD_COSTS = 103                # 食物成本
  37.     WOOD_COSTS = 104                # 木材成本
  38.     GOLD_COSTS = 105                # 黄金成本
  39.     STONE_COSTS = 106               # 石料成本
  40.     MAX_TOTAL_MISSILES = 107        # 最大投射物数量
  41.     REGENERATION_RATE = 109         # 再生率(再生间隔)
复制代码



点评

cxt
对了,新桶右推送一下这个帖子  发表于 2020-11-2 04:16
索引:
Userpatch 实用技术贴索引←点击进入
决定版精品贴大索引←点击进入

战役:
《 兔与豹》——柔弱奴隶公主  猛兽口中求生←点击进入
《敛由国的统一》←点击进入

殊途战役制作群 QQ: 616317226
翔鹰帝国Ⅱ:决定版交流群 QQ: 112822759
回复

使用道具 举报

42

主题

7

精华

6万

积分

宗主教

耕战
11247
鹰币
32856
天龙币
0
回帖
1973

翔鹰建站十周年纪念章二级翔鹰勋章三级嘉禾勋章第十一届火箭筒杯优秀战役第十三届火箭筒杯冠军翔四电影节季军冒险七王者

附庸关系0
 楼主| 发表于 2020-11-2 01:35:44 | 显示全部楼层
newtonerdai 发表于 2020-11-2 01:16
DE大典里没有单位属性,我就整理了一下注释。希望你可以补充进帖子里~

(搜索“单位属性”即可快速定位到 ...

好,明天我添加进常数列表里~
进而无可御,退而无可追,此乃良将
回复

使用道具 举报

0

主题

0

精华

92

积分

骑士

耕战
-1
鹰币
129
天龙币
0
回帖
23
附庸关系0
发表于 2020-11-2 05:49:52 | 显示全部楼层
一脸懵懂进来然后一脸懵懂地走开
回复

使用道具 举报

417

主题

19

精华

8万

积分

教皇

耕战
13421
鹰币
41665
天龙币
18
回帖
6011

特级嘉禾勋章三级帝国勋章十字军勋章翔鹰建站十周年纪念章

附庸关系0
发表于 2020-11-2 07:17:34 本帖来自手机 | 显示全部楼层
不错(*๓´╰╯`๓)♡可以拿来解读文件格式
回复

使用道具 举报

10

主题

4

精华

5763

积分

国王

耕战
720
鹰币
4780
天龙币
0
回帖
32
附庸关系0
发表于 2020-11-2 10:53:17 | 显示全部楼层
很具有潜力的触发工具,关于最后的使用单位绘图,我之前做过一些,也有一些经验,不过是在红警里的。
比如在地图上绘制迷宫、图案、文字、图像等。但红警2的单位不能像帝国那样密铺,只能按tile来排列,比较遗憾。




本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册翔鹰会员(昵称)

x
回复

使用道具 举报

42

主题

7

精华

6万

积分

宗主教

耕战
11247
鹰币
32856
天龙币
0
回帖
1973

翔鹰建站十周年纪念章二级翔鹰勋章三级嘉禾勋章第十一届火箭筒杯优秀战役第十三届火箭筒杯冠军翔四电影节季军冒险七王者

附庸关系0
 楼主| 发表于 2020-11-2 12:13:41 | 显示全部楼层
我是谁004 发表于 2020-11-2 07:17
不错(*๓´╰╯`๓)♡可以拿来解读文件格式

这工具得在程序员手里才能开发得好,我就只会最基础的应用
进而无可御,退而无可追,此乃良将
回复

使用道具 举报

42

主题

7

精华

6万

积分

宗主教

耕战
11247
鹰币
32856
天龙币
0
回帖
1973

翔鹰建站十周年纪念章二级翔鹰勋章三级嘉禾勋章第十一届火箭筒杯优秀战役第十三届火箭筒杯冠军翔四电影节季军冒险七王者

附庸关系0
 楼主| 发表于 2020-11-2 12:15:00 | 显示全部楼层
戴子玲 发表于 2020-11-2 10:53
很具有潜力的触发工具,关于最后的使用单位绘图,我之前做过一些,也有一些经验,不过是在红警里的。
比如 ...

我也想到了读取图片像素点,得到位置矩阵,然后输出代码,但我不会就没写上去……
我还没测试过他的坐标可以精确到多少,我输出的时候就直接把f%输出上去了,也不知道精确到几位小数
进而无可御,退而无可追,此乃良将
回复

使用道具 举报

417

主题

19

精华

8万

积分

教皇

耕战
13421
鹰币
41665
天龙币
18
回帖
6011

特级嘉禾勋章三级帝国勋章十字军勋章翔鹰建站十周年纪念章

附庸关系0
发表于 2020-11-2 18:42:16 本帖来自手机 | 显示全部楼层
戴子玲 发表于 2020-11-2 10:53
很具有潜力的触发工具,关于最后的使用单位绘图,我之前做过一些,也有一些经验,不过是在红警里的。
比如 ...

这种以前也做过,不算很完善
https://www.hawkaoe.net/bbs/forum.php?mod=viewthread&tid=135073&highlight=rio
回复

使用道具 举报

23

主题

1

精华

2万

积分

征服者

耕战
3880
鹰币
3530
天龙币
75
回帖
1132

翔鹰建站十周年纪念章二级翔鹰勋章第八届火箭筒杯最佳战役第八届火箭筒杯最佳新人

附庸关系0
发表于 2020-11-2 20:43:14 | 显示全部楼层
学习一下,代工绘图的时代来临了么

                 【2021】天堂之路DE版                                   【2016】霭之坡的窈蔚之森
个人网盘
回复

使用道具 举报

42

主题

1

精华

3万

积分

征服者

耕战
6140
鹰币
39395
天龙币
0
回帖
395

最佳评测员

附庸关系0
发表于 2020-12-30 00:23:15 | 显示全部楼层
本帖最后由 砖烧白开水 于 2020-12-30 01:25 编辑

好了,在用了
回复

使用道具 举报

0

主题

0

精华

44

积分

骑士

耕战
0
鹰币
10
天龙币
0
回帖
5
附庸关系0
发表于 2021-6-18 09:14:23 | 显示全部楼层
太牛了,完全看不懂,没基础。
回复

使用道具 举报

本版积分规则

排行榜|小黑屋|翔鹰帝国

GMT+8, 2024-4-24 13:31 , Processed in 0.289510 second(s), 171 queries , File On.

Powered by Hawk Studio  QS Security Corp.® Licensed

Copyright © 2001-2023, Hawkaoe.net All Rights Reserved

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