• 这里主要用来修改模版的开局奖励和一些基础设置。
  • 对制作 MOD 时查询游戏内部用的 SID 也略有帮助。
  • 制作模版请用模版编辑器。
  • 官方模版放置目录: 游戏目录\HeroesOldenEra_Data\StreamingAssets\map_templates
  • 下载模版放置目录: C:\Users\%USERNAME%\AppData\LocalLow\Unfrozen\HeroesOldenEra\users\Steam_id数字\downloads\map_templates\

上古纪元的模版文件使用的是json格式。

由于部分数据的格式复杂程度,全写成点点点选选选对我的难度可太大了。

所以很多内容是手工填的,但是手工填就很容易导致格式错误,尤其是不懂json格式的。

总之 json 格式的基础知识如下:

  • 数据以键值对形式存在:"键名": 值
  • 键名(Key)​ 必须用双引号​ ""包裹,且必须是字符串。
  • 值(Value)​ 可以是以下几种数据类型之一:
    • 字符串(String):必须用双引号 ""包裹。
    • 数字(Number):直接书写,不加引号。
    • 布尔值(Boolean):直接书写 true或 false。
    • 空值(null):直接书写 null。
    • 对象(Object):用花括号 {}包裹的一组无序的键值对。{"name": "John", "age": 30}
    • 数组(Array):用方括号 []包裹的一组有序的值,值之间用逗号分隔。["apple", "banana", "orange"]
  • 逗号分隔:对象内的键值对之间、数组内的值之间,必须用逗号 ,​ 分隔。
  • 不支持注释:标准的 JSON 格式不支持注释。
  • 常见格式错误:
    • 键名未加双引号:
      { name: "John" } // 错误
      { "name": "John" } // 正确
    • 字符串使用了单引号:
      { 'name': 'John' } // 错误
      { "name": "John" } // 正确
    • 最后一个元素后有多余的逗号(“尾随逗号”):
      {
      "name": "John",
      "age": 30, // 这个逗号是多余的
      }
    • 数字、布尔值或 null 加了引号:
      { "age": "30" } // 这是字符串 "30",不是数字 30
      { "isStudent": "true" } // 这是字符串 "true",不是布尔值 true
    • 不过上古纪元很多数值是用了双引号的,不加反而无效。

下载保存时会使用什么作为文件名。

由于游戏目前快速游戏使用的模版列表是白名单,如果不想改名单推荐替换 Anarchy 这个没有明确拓扑图并且比较混乱的模版。

白名单位置:Core.zip\quickStart.json。

自定义游戏可选无所谓。

模版类型只负责分类。

能否招募新英雄看的是酒馆封禁。

如果没封禁酒馆才到考虑英雄数量。

所以单英雄模式是三管齐下的,至少前两要选对。

选模版时展示的胜利条件和实际胜利条件是不绑定的。

经典胜利 基本上的模版都是开启的。

desertion 和 heroLighting 字面上看是到达特定地点和英雄存活时间。

比较像是剧情图才使用的胜利条件,实际上官方模版这两都是全开启。

失去起始城镇 和 失去起始英雄 看需求。

失去起始城镇 和 失去起始城镇天数 看官方模版并不绑定。可以分开使用。

如果不想启用 失去起始城镇天数 直接留空或者填 0。

坚守指定城镇 需要在 zones → [] → mainObjects 里 "type" 为 "City" 的项里加 "holdCityWinCon": true,并且需要配合坚守城镇天数使用。

这个模式通常是配合单英雄模式使用的。

定时触发要配合 定时通知决战天数 使用。

决战天数是通知天数加倒计时天数。

如果地图连接是开放的,或者没有在关键路口放置竞技场,则能用经典胜利完成地图。

否则需要在地图上放置竞技场。

封闭式要在 connections 里加入类似,{ "name": "Win-Connection", "from": "Center-Win-A", "to": "Center-Win-B", "connectionType": "GladiatorArena", "road": true, "guardValue": 5000000 }

开放式要在 zones → [] → mainObjects 里加入类似{ "type": "GladiatorArena", "placement": "Uniform", "placementArgs": [ "true", "0", "0" ] }

锦标赛模式的参数似乎全都要填。

通知对决天数和通知后开战天数要根据胜利场次需求来填,比如 3 分赢就要填 5 次。

通知对决天数 的格式是:11, 18, 25

通知后开战天数 的格式是:4, 4, 4

代码范例:

    "tournament": true,
    "tournamentPointsToWin": 2,
    "tournamentSaveArmy": true,
    "tournamentDays": [ 3, 5, 7 ],
    "tournamentAnnounceDays": [ 7, 14, 21 ],
    "championSelectRule": "StartHero"

官方模版里只有 Anarchy 和 Maze 开启了这个选项。

并且需要在每个 zones 里有对应的 encounterHolesSettings 设置。

其它模版都设置为 false。

具体作用还没研究明白。

模版可以自定义 ban 的英雄、魔法、宝物。

在实际数据里是这样的数组:

"magics":["neutral_magic_pocket_dimension", "neutral_magic_light_gate", "neutral_magic_town_portal", "neutral_magic_dimension_door", "neutral_magic_shadow_form" ],

"heroes": ["demon_hero_3", "dungeon_hero_10", "nature_hero_17", "human_hero_8", "human_hero_9", "unfrozen_hero_14", "demon_hero_5", "dungeon_hero_3", "human_hero_11", "unfrozen_hero_8", "nature_hero_9"],

"items": [ "voodoosh_doll_artifact", "flag_of_truce_artifact" ]

在这里则一行填一个 sid。

模版定制的开局奖励。

SID 总共有 8 类:

  1. add_bonus_hero_item: 宝物
  2. add_bonus_res: 资源
  3. add_bonus_hero_exp: 英雄经验
  4. add_bonus_side_exp: 律法经验
  5. add_bonus_hero_spell: 魔法
  6. add_bonus_hero_unit_multipler: 初始兵种倍数
  7. add_bonus_hero_unit: 送指定兵力
  8. add_bonus_hero_stat: 英雄属性

add_bonus_hero_item

代码范例:

{
    "sid": "add_bonus_hero_item",
    "receiverSide": -1,
    "receiverFilter": "start_hero",
    "parameters": [ "swamp_boots_artifact"]
}
  • receiverSide:-1 代表全部玩家都有,0 代表只有第一个玩家有,1 代表只有第二个玩家有,以此类推。
  • receiverFilter:start_hero 代表只有首发英雄有,all_heroes 代表所有英雄都有。
  • parameters:给的宝物的SID,一次只能写一件,想给多件则需要一个个写。其中卷轴的 SID 不能用宝物列表里那个,要用卷轴列表里的。

add_bonus_res

代码范例:

{
    "sid": "add_bonus_res",
    "receiverSide": -1,
    "parameters": [ "gemstones", "15" ]
}
  • receiverSide和receiverFilter:同上,后面不再赘述。
  • parameters:前面是资源 SID,后面是数量。注意这游戏圣杯属于资源而不是宝物。

add_bonus_hero_exp

代码范例:

{
    "sid": "add_bonus_hero_exp",
    "receiverSide": -1,
    "receiverFilter": "start_hero",
    "parameters": [ "15000" ]
}
  • parameters:15000 是给的英雄经验的数量。

add_bonus_side_exp

代码范例:

{
    "sid": "add_bonus_side_exp",
    "receiverSide": -1,
    "parameters": [ "10000" ]
}
  • parameters:10000 是给的律法经验的数量。

add_bonus_hero_spell

代码范例:

{
    "sid": "add_bonus_hero_spell",
    "receiverSide": -1,
    "receiverFilter": "start_hero",
    "parameters": [ "neutral_magic_town_portal" ]
}
  • parameters:给的魔法的 SID,也是只能一个个给。

add_bonus_hero_unit_multipler

代码范例:

{
    "sid": "add_bonus_hero_unit_multipler",
    "receiverSide": -1,
    "receiverFilter": "start_hero",
    "parameters": [ "2" ]
}
  • parameters:给的初始兵力倍数。

add_bonus_hero_unit

代码范例:

{
    "sid": "add_bonus_hero_unit",
    "receiverSide": -1,
    "receiverFilter": "start_hero",
    "parameters": [ "lich_dragon", "1" ]
}
  • parameters:给的额外初始兵力的种类和数量。

add_bonus_hero_stat

代码范例:

{
    "sid": "add_bonus_hero_stat",
    "receiverSide": -1,
    "receiverFilter": "start_hero",
    "parameters": [ "magicCostSidSet", "neutral_magic_town_portal", "-999", "0" ]
}
  • parameters:这个种类实在是多,比如官方模版里用了 4 次,都是这个给回城减魔耗的。具体的参数可以去找对应的技能或者宝物来抄。只要是 type 是 heroStat 的都能用。比如:
    • 招魂能量:"parameters": [ "energyValuesSet", "undead", "0", "1000" ]
    • 后勤给移动力:"parameters": [ "movementPerBonus", "0.10" ]
    • 魔法伤害:"parameters": [ "magicAttackPerBonus", "0.1" ]
    • 魔法值百分比:"parameters": [ "manaBonusPercent", "0.30" ]
    • 奇术给施法次数:"parameters": [ "magicOverloadsPerRound", "1" ]
    • 领导给士气:"parameters": [ "moral", "1" ]
    • 攻击:offence。防御:defence。咒力:spellPower。知识:intelligence。幸运:luck。视野:viewRadius。
  • 可用列表Excel,做MOD有用。