User:在咕咕咕的咕子/世界地图格式:修订间差异
小 (fix,信息解析后面再写) |
小无编辑摘要 |
||
第6行: | 第6行: | ||
==阅前提示== | ==阅前提示== | ||
本页面记载的是Arcaea移动版服务器中存放的世界模式地图的格式。<br> | 本页面记载的是Arcaea移动版服务器中存放的世界模式地图的格式。<br> | ||
地图 | 每张 地图 均为JSON 文档, 建议在 编写 前学习 基 本的JSON文档语法 。<br> | ||
==代码解析== | ==代码解析== | ||
第17行: | 第16行: | ||
} | } | ||
</syntaxhighlight> | </syntaxhighlight> | ||
在地图中,也 | 在地图中,也保存着地图台阶的信息,每个台阶的编写框架如下: | ||
<syntaxhighlight lang="json"> | <syntaxhighlight lang="json"> | ||
{ | { | ||
第36行: | 第35行: | ||
**float -- 浮点数 例:<code>123.456</code> | **float -- 浮点数 例:<code>123.456</code> | ||
**boolean -- 布尔值 例:<code>true</code>(是),<code>false</code>(否) | **boolean -- 布尔值 例:<code>true</code>(是),<code>false</code>(否) | ||
**array -- 数组 例:<code>[4, 2, 2]</code> | |||
**object -- 对象 例:<code>{"info": "helloworld"}</code> | |||
一张地图 内 可以填写的所有信息如下。''(地图信息 可以 乱序排放, 无 排序要求)'' | |||
{ | { | ||
"map_id": string, | "map_id": string, | ||
第75行: | 第76行: | ||
"require_localunlock_songid": string, | "require_localunlock_songid": string, | ||
"require_localunlock_challengeid": string, | "require_localunlock_challengeid": string, | ||
"coordinate": string ( | "coordinate": string (x,y), | ||
"step_count": int, | "step_count": int, | ||
"custom_bg": string, | "custom_bg": string, | ||
第85行: | 第86行: | ||
"steps": [ | "steps": [ | ||
{ | { | ||
"position": int, | |||
"capture": int, | |||
"items": [ | |||
{ | |||
"type": string, | |||
"id": string, | |||
"amount": int | |||
}, ... | |||
], | |||
"restrict_id": string, | |||
"restrict_ids": [ | |||
string, ... | |||
], | |||
"restrict_type": string, | |||
"restrict_difficulty": int, | |||
"step_type": [ | |||
string, ... | |||
], | |||
"speed_limit_value": int, | |||
"plus_stamina_value": int | |||
}, ... | }, ... | ||
] | ] | ||
} | } | ||
第122行: | 第115行: | ||
{ | { | ||
"map_id": "example", | "map_id": "example", | ||
//地图ID | //地图ID string 必需字段 | ||
//请确保输入的map_id与 | //请确保输入的map_id与地图文件名相同 | ||
"is_legacy": false, | "is_legacy": false, | ||
//是否启用Legacy地图机制 | //是否启用Legacy地图 的 机制 boolean | ||
//于1.7.0新增 | //于1.7.0新增 | ||
"is_repeatable": true, | "is_repeatable": true, | ||
//是否启用无限地图机制 | //是否启用无限地图 的 机制 boolean | ||
"is_beyond": false, | "is_beyond": false, | ||
//是否启用Beyond地图机制 | //是否启用Beyond地图 的 机制 boolean | ||
//于3.0.0新增 | //于3.0.0新增 | ||
"beyond_health": 100, | "beyond_health": 100, | ||
//Beyond | //Beyond/Breach地图的总百分比 int | ||
//于3.0.0新增 | //于3.0.0新增 | ||
"character_affinity": [ | "character_affinity": [ | ||
], | ], | ||
//Beyond地图的相性契合搭档 [int | //Beyond地图的相性契合搭档 array[int] | ||
//填写格式: [CharacterID] | |||
//于3.0.0新增 | //于3.0.0新增 | ||
"affinity_multiplier": [ | "affinity_multiplier": [ | ||
], | ], | ||
//Beyond地图的相性契合加成 [float | //Beyond地图的相性契合加成 array[float] | ||
//于3.0.0新增 | //于3.0.0新增 | ||
//character_affinity与affinity_multiplier的照应关系 | //character_affinity与affinity_multiplier的照应关系: | ||
//设character_affinity为[0, 1],character_affinity为[1.0, 1.5] | //设character_affinity为[0, 1],character_affinity为[1.0, 1.5] | ||
//那么该地图的相性契合信息为 | //那么该地图的相性契合信息为: {0: 1.0, 1: 1.5} | ||
"is_breached": false, | "is_breached": false, | ||
//是否启用Breach地图机制 | //是否启用Breach地图 的 机制 boolean | ||
//于5.3.0新增 | //于5.3.0新增 | ||
"disable_over": false, | "disable_over": false, | ||
//是否禁 | //是否禁 止搭档超量加成 参 与进度 计算 boolean | ||
//于5.3.0新增 | //于5.3.0新增 | ||
"new_law": "", | "new_law": "", | ||
//Breach地图的法则 | //Breach地图的法则 string | ||
//于5.3.0新增 | //于5.3.0新增 | ||
//开启Breach地图的机制时,请注意Beyond地图的机制也要开启 | |||
//因为Breach地图中不存在相性契合,因此character_affinity与affinity_multiplier理应均为空数组 | |||
//法则类型(5.3.0): | //法则类型(5.3.0): | ||
//over100_step50 PROG = OVER + STEP/2 | // over100_step50: PROG = OVER + STEP/2 | ||
//frag50 PROG x= FRAG | // frag50: PROG x= FRAG | ||
//lowlevel PROG x= max(1.0, 2.0 - 0.1 x LEVEL) | // lowlevel: PROG x= max(1.0, 2.0 - 0.1 x LEVEL) | ||
//antiheroism PROG = OVER - ||OVER-FRAG|-|OVER-STEP|| | // antiheroism: PROG = OVER - ||OVER-FRAG|-|OVER-STEP|| | ||
"chapter": 0, | "chapter": 0, | ||
//地图章节 int 必需字段 | //地图章节 int 必需字段 | ||
// | //章节 列表: | ||
//0 活动 Event | // 0: 活动 Event | ||
//1001 Beyond | // 1001: Beyond | ||
// 普通章节: | |||
//普通章节 | // 1: 第一章 | ||
// | // 2: 第二章 | ||
// 往后的章节以此类推 | |||
// 陷落 章节: | |||
// 1: 陷落 第一章 | |||
"available_from": -1, | "available_from": -1, | ||
//从X时开始可用 int 必需字段 | // 该地图 从X时开始可用 int 必需字段 | ||
//填写10位/16位时间戳,-1表示 | //填写10位/16位时间戳,-1表示 地图永远 可用 | ||
//于1.5.2新增 | //于1.5.2新增 | ||
"available_to": -1, | "available_to": -1, | ||
// | // 该地图从X 时 开始 关闭 int 必需字段 | ||
//填写10位/16位时间戳,-1表示 | //填写10位/16位时间戳,-1表示 地图永 不关闭 | ||
//于1.5.2新增 | //于1.5.2新增 | ||
"require_type": "", | "require_type": "", | ||
//解锁时所需物品的类型 | //解锁 地图 时所需物品的类型 string | ||
//解锁类型(5.3.0) | //解锁类型(5.3.0): | ||
//pack 曲包(配合require_id使用) | // pack 曲包(配合require_id使用) | ||
//character 角色(616没用过,配合require_id使用) | // character 角色(616没用过,配合require_id使用) | ||
//single 单曲(配合require_id使用) | // single 单曲(配合require_id使用) | ||
//fragment 残片(配合require_value使用) | // fragment 残片(配合require_value使用) | ||
//chart_unlock 解锁谱面(配合require_id使用,格式 | // chart_unlock 解锁谱面(配合require_id使用,格式 为SongID+ratingClass) | ||
//chapter_step 章节步数(配合require_value使用) | // chapter_step 章节 内达到一定 步数(配合require_value使用) | ||
//chapter_maps 完成地图(配合require_value使用,目前只出现在Beyond背景地图中) | // chapter_maps 完成 章节内数张 地图(配合require_value使用,目前只出现在Beyond背景 的 地图中) | ||
"require_id": "", | "require_id": "", | ||
//解锁时需要 | //解锁 地图 时需要 解锁 的物品ID string / array[string] | ||
//[ | // 格式 array[string, ...] 于3.10.0新增 | ||
"require_value": 0, | "require_value": 0, | ||
//解锁时需要花费的对应物品的数量 int | //解锁 地图 时需要花费的对应物品的数量 int | ||
"requires": [ | "requires": [ | ||
{ | { | ||
"type": "", | |||
"id": "", | |||
"value": 0 | |||
} | } | ||
], | ], | ||
//解锁时 | //解锁 地图 时需 要解锁 的多个物品 array[object] | ||
// | //type, id, value三键 效果与require_type, require_id, require_value效果 相同 | ||
//于4.2.0新增 | //于4.2.0新增 | ||
"requires_any": [ | |||
{ | |||
"type": "", | |||
"id": "", | |||
"value": 0 | |||
// | } | ||
// | ], | ||
//解锁地图时需要解锁其中之一的多个物品 array[object] | |||
//格式与requires相同 | |||
//于5.9.0新增 | |||
//require各键的优先级: | |||
// require三键: 即require_type, require_id, require_value | |||
// 存在requires时,优先使用requires中的条件 | |||
// 不存在requires,存在require三键时,使用require三键中的条件 | |||
// 不存在requires,也不存在require三键时,使用requires_any中的条件 | |||
// 如果requires,requires三键,requires_any均不存在,则不设置解锁条件 | |||
"require_localunlock_songid": "", | "require_localunlock_songid": "", | ||
//需要 | // 解锁地图前 需要解 锁的 曲 目 string | ||
//填写 | //填写 格 式: SongID | ||
//于1.5.0新增 | //于1.5.0新增 | ||
"require_localunlock_challengeid": "", | "require_localunlock_challengeid": "", | ||
//需要 | // 解锁地图前 需要通 过的曲目 异象 string | ||
//填写 | //填写 格 式: SongID | ||
//于1.6.0新增 | //于1.6.0新增 | ||
//require_localunlock_challengeid的判断方式: | |||
// 寻找本地"un"文件中SongID_challenge|0|102解锁条件,判断"complete"是否为通过值 | |||
// 如果"complete"被设定为0或条件不存在,默认锁定地图 | |||
"coordinate": "0,0", | "coordinate": "0,0", | ||
//地图在对应章节应用的X/Y坐标 | //地图在对应章节应用的X/Y坐标 string 必需字段 | ||
//前者代表X,后者代表Y | //前者代表X,后者代表Y | ||
//X | // X: 负则左移, 正 则 右 移 | ||
//Y | // Y: 负则下移, 正 则 上 移 | ||
"step_count": | "step_count": 25, | ||
//地图总步数 int 必需字段 | //地图总步数 int 必需字段 | ||
"custom_bg": "", | "custom_bg": "", | ||
//地图 | //地图 的自定义背景 string | ||
//如果不填写,则默认使用章节背景 | //填写格式: FilePath | ||
// | //填写后,游戏会 使 用img/world/FilePath来代替世界模式中显示 的 章节 背景 | ||
// 如果不填写,则默认使用章节背景 | |||
// is_beyond为true时无效果 | |||
//于1.8.3新增 | //于1.8.3新增 | ||
"stamina_cost": 2, | "stamina_cost": 2, | ||
//在 | //在地图内游玩一次所需要的体力 int | ||
"chain_info": {}, | "chain_info": { | ||
// | "id": "", | ||
// | "index": 0 | ||
//id | }, | ||
//声明该地图所在 的链式解锁 object{string: string / int} | |||
//填 写格式: | |||
// id: ChainID | |||
// index: UnlockIndex | |||
// | // 于3.10.0新增 | ||
"steps": [ | "steps": [ | ||
//该地图的台阶设置 [ | //该地图的台阶设置 array[object] 必需字段 | ||
{ | { | ||
"position": 0, | "position": 0, | ||
//台阶的 | //台阶的位 置 int 必需字段 | ||
"capture": 5 | "capture": 5 | ||
//台阶的步数 int | //台阶的步数 int 必需字段 | ||
}, | }, | ||
{ | { | ||
"position": 1, | "position": 1, | ||
"capture": 5, | "capture": 5, | ||
"items": [{}] | "items": [ | ||
//奖励 [ | { | ||
// | "type": "", | ||
"id": "", | |||
"amount": 0 | |||
} | |||
], | |||
// 台阶的 奖励 array[object] | |||
//填写格式: | |||
// type: string | |||
// id: string | |||
// amount: int | |||
//奖励类型(6.0.0): | |||
// character: 搭档,id格式为CharacterID | |||
// world_song: 世界解锁类型的曲目/难度,id格式为SongID(曲目) / SongID+ratingClass(难度) | |||
// single: 单曲,id格式为SongID | |||
// fragment: 残片 | |||
// memory: 记忆源点 | |||
// core: 核心,id格式为CoreID | |||
// pack: 曲包,id格式为PackID | |||
// world_unlock: 世界解锁相关奖励,目前只有背景 | |||
"restrict_type": "" | |||
//限制游玩的类型 string | |||
//填写格式: | |||
// song_id: 限制游玩曲目 | |||
// pack_id: 限制游玩曲包 | |||
"restrict_id": "", | |||
//限制游玩指定的曲目/曲包 string | |||
//填写格式:SongID/PackID | |||
"restrict_ids": [ | |||
], | |||
//限制游玩指定的多首曲目 array[string] | |||
//填写格式:[SongID] | |||
//restrict_type为pack_id时无 效果 | |||
"restrict_difficulty": 0, | |||
//限制游玩指定难度 int | |||
//填写格式:ratingClass | |||
"step_type": [ | |||
], | |||
//台阶的类型 array[string] | |||
//台阶类型(6.0.0): | |||
// randomsong: 随机曲目台阶 | |||
// speedlimit: 限速台阶 | |||
// plusstamina: 体力奖励台阶 | |||
// wall_nell: 假哀寂地图的灰色台阶 | |||
// wall_impossible: 假哀寂地图的破裂灰色台阶 | |||
// special_lament_rain: 假哀寂地图的Lament Rain异象台阶 | |||
"speed_limit_value": 0, | |||
//限速台阶限制的最大流速 int | |||
//填写格式:对应流速x10后的数字 | |||
//仅当step_type中存在speedlimit时有效 | |||
"plus_stamina_value": 0, | |||
//体力奖励台阶奖励的体力数量 int | |||
//仅当step_type中存在plusstamina时有效 | |||
}, | }, | ||
//下列台阶为奖励总览 | |||
{ | { | ||
"position": 2, | "position": 2, | ||
第295行: | 第367行: | ||
"type": "character" | "type": "character" | ||
"id": "0" | "id": "0" | ||
// | // 搭档奖励 | ||
// | //id: CharacterID | ||
} | } | ||
] | ] | ||
第308行: | 第379行: | ||
"type": "world_song", | "type": "world_song", | ||
"id": "shadesoflight" | "id": "shadesoflight" | ||
//世界解锁类型的 | //世界解锁类型的曲 目/难度 奖励 | ||
// | //id: SongID(曲目) / SongID+ratingClass( 难度) | ||
} | } | ||
] | ] | ||
第322行: | 第391行: | ||
"type": "single", | "type": "single", | ||
"id": "auxesia" | "id": "auxesia" | ||
//单曲 | //单曲 奖励 | ||
// | //id: SongID | ||
} | } | ||
] | ] | ||
第336行: | 第404行: | ||
"amount": 616 | "amount": 616 | ||
//残片 | //残片 | ||
} | } | ||
] | ] | ||
第348行: | 第415行: | ||
"amount": 616 | "amount": 616 | ||
//记忆源点 | //记忆源点 | ||
//616没用过,但存在 | //616没用过,但存在 | ||
} | } | ||
第361行: | 第427行: | ||
"id": "core_generic", | "id": "core_generic", | ||
"amount": 1 | "amount": 1 | ||
//核心 | //核心 奖励 | ||
// | //id: CoreID | ||
//核心种类(5.2.6) | //核心种类(5.2.6): | ||
//core_generic 以太之滴 Ether Drop | // core_generic: 以太之滴 Ether Drop | ||
//core_hollow 中空核心 Hollow Core | // core_hollow: 中空核心 Hollow Core | ||
//core_desolate 荒芜核心 Desolate Core | // core_desolate: 荒芜核心 Desolate Core | ||
//core_chunithm CHUNITHM 核心 CHUNITHM Core | // core_chunithm: CHUNITHM 核心 CHUNITHM Core | ||
//core_crimson 深红核心 Crimson Core | // core_crimson: 深红核心 Crimson Core | ||
//core_ambivalent 悖异核心 Ambivalent Core | // core_ambivalent: 悖异核心 Ambivalent Core | ||
//core_scarlet 绯红核心 Scarlet Core | // core_scarlet: 绯红核心 Scarlet Core | ||
//core_groove 音炫核心 Groove Core | // core_groove: 音炫核心 Groove Core | ||
//core_binary 双生核心 Binary Core | // core_binary: 双生核心 Binary Core | ||
//core_colorful 缤纷核心 Colorful Core | // core_colorful: 缤纷核心 Colorful Core | ||
//core_umbral 暗影核心 Umbral Core | // core_course_skip_purchase: 次元结晶 Warped Shard | ||
//core_sunset 暮色核心 Sunset Core | // core_umbral: 暗影核心 Umbral Core | ||
// core_sunset: 暮色核心 Sunset Core | |||
} | } | ||
] | ] | ||
第389行: | 第454行: | ||
"type": "pack", | "type": "pack", | ||
"id": "base" | "id": "base" | ||
//曲包 | //曲包 奖励 | ||
// | //id: PackID | ||
//NS端专属,在移动端也存在,但使用移动端显示时会崩溃 | //NS端专属,在移动端也存在,但使用移动端显示时会崩溃 | ||
} | } | ||
第403行: | 第467行: | ||
"type": "world_unlock", | "type": "world_unlock", | ||
"id": "scenery_chap1" | "id": "scenery_chap1" | ||
//世界解锁相关 | //世界解锁相关 奖励 | ||
//于3.0.0新增 | //于3.0.0新增 | ||
//章节背景(4.4.4) | //章节背景(4.4.4): | ||
//scenery_chap1 失落的世界 Lost World | // scenery_chap1: 失落的世界 Lost World | ||
//scenery_chap2 谜域的界外 Outer Reaches | // scenery_chap2: 谜域的界外 Outer Reaches | ||
//scenery_chap3 聚合的塔尖 Spire of Convergence | // scenery_chap3: 聚合的塔尖 Spire of Convergence | ||
//scenery_chap4 沉眠的回声 Dormant Echoes | // scenery_chap4: 沉眠的回声 Dormant Echoes | ||
//scenery_chap5 无央的决裂 Boundless Divide | // scenery_chap5: 无央的决裂 Boundless Divide | ||
//scenery_chap6 遗忘的构念 Forgotten Construct | // scenery_chap6: 遗忘的构念 Forgotten Construct | ||
//scenery_chap7 回首的天际 Horizon of Anamnesis | // scenery_chap7: 回首的天际 Horizon of Anamnesis | ||
//scenery_beyond | // scenery_beyond: Beyond | ||
} | } | ||
] | ] | ||
第427行: | 第489行: | ||
"type": "anni5tix", | "type": "anni5tix", | ||
"amount": 1 | "amount": 1 | ||
//五周年兑换券 | //五周年兑换券 奖励 | ||
//于3.12.2新增 | //于3.12.2新增 | ||
} | } | ||
] | ] | ||
}, | }, | ||
//下列台阶为限制条件总览 | |||
{ | { | ||
"position": 11, | "position": 11, | ||
第439行: | 第501行: | ||
"restrict_type": "song_id" | "restrict_type": "song_id" | ||
//限制游玩指定曲目 | //限制游玩指定曲目 | ||
//restrict_id: | //restrict_id: SongID | ||
}, | }, | ||
{ | { | ||
第451行: | 第512行: | ||
"restrict_type": "song_id" | "restrict_type": "song_id" | ||
//限制游玩指定的多首曲目 | //限制游玩指定的多首曲目 | ||
//restrict_ids: [ | //restrict_ids: [SongID] | ||
}, | }, | ||
{ | { | ||
第460行: | 第520行: | ||
"restrict_type": "pack_id" | "restrict_type": "pack_id" | ||
//限制游玩指定曲包 | //限制游玩指定曲包 | ||
//restrict_id: | //restrict_id: PackID | ||
}, | }, | ||
{ | { | ||
第468行: | 第527行: | ||
"restrict_difficulty": 2 | "restrict_difficulty": 2 | ||
//限制游玩指定难度 | //限制游玩指定难度 | ||
//restrict_difficulty: | //restrict_difficulty: ratingClass | ||
//于3.10.0新增 | //于3.10.0新增 | ||
}, | }, | ||
//下列台阶为各台阶类型总览 | |||
{ | { | ||
"position": 15, | "position": 15, | ||
第479行: | 第538行: | ||
] | ] | ||
//随机曲目 | //随机曲目 | ||
}, | }, | ||
{ | { | ||
第490行: | 第547行: | ||
"speed_limit_value": 65 | "speed_limit_value": 65 | ||
//流速限制 | //流速限制 | ||
// | //speed_limit_value: 对应流速x10 | ||
}, | }, | ||
{ | { | ||
第501行: | 第557行: | ||
"plus_stamina_value": 12 | "plus_stamina_value": 12 | ||
//体力奖励 | //体力奖励 | ||
// | //plus_stamina_value: 体力 数量 | ||
}, | }, | ||
{ | { | ||
"position": 18, | "position": 18, | ||
"capture": 5, | |||
"step_type": [ | |||
"wall_nell" | |||
] | |||
//假哀寂地图的灰色台阶 | |||
}, | |||
{ | |||
"position": 19, | |||
"capture": 5, | |||
"step_type": [ | |||
"wall_impossible" | |||
] | |||
//假哀寂地图的破裂灰色台阶 | |||
}, | |||
{ | |||
"position": 20, | |||
"capture": 5, | |||
"step_type": [ | |||
"special_lament_rain" | |||
] | |||
//假哀寂地图的Lament Rain异象台阶 | |||
}, | |||
//下列台阶为一些特殊的台阶示例 | |||
{ | |||
"position": 21, | |||
"capture": 5, | "capture": 5, | ||
"items": [ | "items": [ | ||
第518行: | 第598行: | ||
] | ] | ||
//设置多个奖励 | //设置多个奖励 | ||
//游戏内 | // 在 游戏内 显示时, 只 会 显示第一个奖励 | ||
}, | }, | ||
{ | { | ||
"position": | "position": 22, | ||
"capture": 5, | "capture": 5, | ||
"restrict_id": "base", | "restrict_id": "base", | ||
第528行: | 第608行: | ||
"randomsong" | "randomsong" | ||
] | ] | ||
//限制曲包+随机曲目 | //限制曲包 + 随机曲目 | ||
}, | }, | ||
{ | { | ||
"position": | "position": 23, | ||
"capture": 5, | "capture": 5, | ||
"restrict_ids": [ | "restrict_ids": [ | ||
第552行: | 第632行: | ||
} | } | ||
] | ] | ||
//限制 | //限制曲 目 + 限制难度 + 随机曲目 + 体力奖励 + 流速限制 + 残片奖励 | ||
}, | }, | ||
{ | { | ||
"position": | "position": 24, | ||
"capture": 0, | "capture": 0, | ||
"items": [ | "items": [ | ||
第562行: | 第642行: | ||
"id": "core_generic", | "id": "core_generic", | ||
"amount": 5 | "amount": 5 | ||
//最后一格 | //最后一格 必须 设置至少一个奖励 | ||
} | } | ||
] | ] | ||
第575行: | 第655行: | ||
"map_id": "example", | "map_id": "example", | ||
"is_beyond": true, | "is_beyond": true, | ||
"beyond_health": 150, | "beyond_health": 150, | ||
"character_affinity": [ | "character_affinity": [ | ||
0, | 0, | ||
1 | 1 | ||
], | ], | ||
"affinity_multiplier": [ | "affinity_multiplier": [ | ||
1.0, | 1.0, | ||
1.5 | 1.5 | ||
], | ], | ||
"chapter": 1001, | "chapter": 1001, | ||
"available_from": -1, | "available_from": -1, | ||
"available_to": -1, | "available_to": -1, | ||
"require_id": "shadesoflight2", | "require_id": "shadesoflight2", | ||
"require_type": "chart_unlock", | "require_type": "chart_unlock", | ||
"coordinate": "0,0", | "coordinate": "0,0", | ||
"step_count": 5, | "step_count": 5, | ||
"stamina_cost": 3, | "stamina_cost": 3, | ||
"curr_position": 0, | "curr_position": 0, | ||
"curr_capture": 0, | "curr_capture": 0, | ||
第615行: | 第677行: | ||
"steps": [ | "steps": [ | ||
{ | { | ||
// | //配置 台阶时, 请从 下至上进行配置 | ||
"position": 0, | "position": 0, | ||
//最低点,用于标记开头 | // 台阶 最低点,用于标记开头 | ||
"capture": 50 | "capture": 50 | ||
// | //确保全部capture的值相加起来等于beyond_health的值 | ||
}, | }, | ||
{ | { | ||
第636行: | 第697行: | ||
{ | { | ||
"position": 2, | "position": 2, | ||
// | //二点 | ||
"capture": 25, | "capture": 25, | ||
// | // 以 一点得出的百分比 为被减数,capture的值为减数, 相减 后的差为 本点百分比 | ||
//一点从100%开始,相减后得到结果75,则本点从75%开始 | //一点从100%开始, 与capture的值 相减后得到结果75,则本点从75%开始 | ||
"items": [ | "items": [ | ||
第649行: | 第710行: | ||
} | } | ||
] | ] | ||
//奖励只会在本点 | //奖励只会在 到达 本点时领取 | ||
}, | }, | ||
{ | { | ||
"position": 3, | "position": 3, | ||
// | //一点 | ||
"capture": 50, | "capture": 50, | ||
// | // 以beyond_health 的值为 被 减数 ,capture 的值 为减数, 相减 后的差为 本点百分比 | ||
//此地图的beyond_health为150,相减后得到结果100,则本点从100%开始 | //此地图的beyond_health为150, 与capture的值 相减后得到结果100,则本点从100%开始 | ||
"restrict_id": "shadesoflight", | "restrict_id": "shadesoflight", | ||
"restrict_type": "song_id" | "restrict_type": "song_id" | ||
// | //限制 条件 会在到达下一点前一直有效 | ||
}, | }, | ||
{ | { | ||
"position": 4, | "position": 4, | ||
//最高点,用于标记奖励 | // 地图 最高点,用于标记奖励 | ||
"capture": 0, | "capture": 0, | ||
第686行: | 第747行: | ||
"map_id": "example", | "map_id": "example", | ||
"is_beyond": true, | "is_beyond": true, | ||
"beyond_health": 200, | "beyond_health": 200, | ||
"character_affinity": [ | "character_affinity": [ | ||
], | ], | ||
"affinity_multiplier": [ | "affinity_multiplier": [ | ||
], | ], | ||
"is_breached": true, | "is_breached": true, | ||
"disable_over": true, | "disable_over": true, | ||
"new_law": "over100_step50", | "new_law": "over100_step50", | ||
"chapter": 2001, | "chapter": 2001, | ||
"available_from": -1, | "available_from": -1, | ||
"available_to": -1, | "available_to": -1, | ||
"require_type": "chart_unlock", | "require_type": "chart_unlock", | ||
"require_id": "inkarusi2", | "require_id": "inkarusi2", | ||
"coordinate": "0,0", | "coordinate": "0,0", | ||
"step_count": 6, | "step_count": 6, | ||
"stamina_cost": 3, | "stamina_cost": 3, | ||
"curr_position": 0, | "curr_position": 0, | ||
"curr_capture": 0, | "curr_capture": 0, | ||
第735行: | 第772行: | ||
// for step in steps: | // for step in steps: | ||
// current_health += step['capture'] | // current_health += step['capture'] | ||
// print(f" | // print(f"Position {step['position']}: {current_health}%") | ||
{ | { | ||
"position": 0, | "position": 0, | ||
// | //一点 | ||
"capture": 50 | "capture": 50 | ||
//以 | //以 下一 点的百分比为 被 减数, 此 点的百分比 为减数, 相减 后的差则为capture 的值 | ||
// | // 因为此点为地图的起 始 点,所以此点百分比 固 定为0%, 已知 下一点的百分比为50% ,50 - 0 = 50 | ||
}, | }, | ||
{ | { | ||
"position": 1 | "position": 1 | ||
// | //二点 | ||
"capture": 50, | "capture": 50, | ||
//以此点的百分比为减数, | //以此点的百分比为减数,下一点的百分比 为被减数, 相减 后的差则为capture 的值 | ||
// | // 已知此 点的capture 为50% , 下 一点的百分比 为100% ,100 - 50 = 50 | ||
"items": [ | "items": [ | ||
第763行: | 第800行: | ||
{ | { | ||
"position": 2, | "position": 2, | ||
// | //三点 | ||
"capture": 50, | "capture": 50, | ||
//以此点的百分比为减数, | //以此点的百分比为减数,下一点的百分比 为被减数, 相减 后的差则为capture 的值 | ||
// | // 已知此 点的capture 为150% , 下一 点的百分比为100% ,150 - 100 = 50 | ||
"items": [ | "items": [ | ||
第801行: | 第838行: | ||
"restrict_type": "song_id", | "restrict_type": "song_id", | ||
"restrict_difficulty": 2 | "restrict_difficulty": 2 | ||
// | //限制 条件 会在到达下一点前一直有效 | ||
}, | }, | ||
{ | { | ||
"position": 4, | "position": 4, | ||
"capture": 50 | //四点 | ||
"capture": 50 | |||
//以此点的百分比为减数,下一点的百分比为被减数,相减后的差则为capture的值 | |||
//已知此点的capture为200%,下一点的百分比为150%,200 - 150 = 50 | |||
"items": [ | "items": [ | ||
{ | { | ||
第845行: | 第887行: | ||
"capture": 0, | "capture": 0, | ||
// | //capture必须 为0 | ||
"items": [ | "items": [ |
2024年12月5日 (四) 21:22的最新版本
此页面为技术型隐藏页面 |
- 本页保持孤立!
阅前提示
本页面记载的是Arcaea移动版服务器中存放的世界模式地图的格式。
每张地图均为JSON文档,建议在编写前学习基本的JSON文档语法。
代码解析
框架
一张地图的总体框架如下。
{
// map data
}
在地图中,也保存着地图台阶的信息,每个台阶的编写框架如下:
{
"steps": [
{
// step 1
},
{
// step 2
}, ...
]
}
细节解析
- 地图信息内可能会出现众多数据,可能会出现的数据格式如下:
- string -- 字符串 例:
"this is a string"
- int -- 整数 例:
616
- float -- 浮点数 例:
123.456
- boolean -- 布尔值 例:
true
(是),false
(否) - array -- 数组 例:
[4, 2, 2]
- object -- 对象 例:
{"info": "helloworld"}
- string -- 字符串 例:
一张地图内可以填写的所有信息如下。(地图信息可以乱序排放,无排序要求)
{ "map_id": string, "is_legacy": boolean, "is_repeatable": boolean, "is_beyond": boolean, "beyond_health": int, "character_affinity": [ int, ... ], "affinity_multiplier": [ float, ... ], "is_breached": boolean, "disable_over": boolean, "new_law": string, "chapter": int, "available_from": int, "available_to": int, "require_type": string, "require_id": string, "require_value": int, "requires": [ { "type": string, "id": string, "value": int }, ... ], "requires_any": [ { "type": string, "id": string, "value": int }, ... ], "require_localunlock_songid": string, "require_localunlock_challengeid": string, "coordinate": string (x,y), "step_count": int, "custom_bg": string, "stamina": int, "chain_info": { "id": string, "index": int }, "steps": [ { "position": int, "capture": int, "items": [ { "type": string, "id": string, "amount": int }, ... ], "restrict_id": string, "restrict_ids": [ string, ... ], "restrict_type": string, "restrict_difficulty": int, "step_type": [ string, ... ], "speed_limit_value": int, "plus_stamina_value": int }, ... ] }
地图信息
普通地图:
{
"map_id": "example",
//地图ID string 必需字段
//请确保输入的map_id与地图文件名相同
"is_legacy": false,
//是否启用Legacy地图的机制 boolean
//于1.7.0新增
"is_repeatable": true,
//是否启用无限地图的机制 boolean
"is_beyond": false,
//是否启用Beyond地图的机制 boolean
//于3.0.0新增
"beyond_health": 100,
//Beyond/Breach地图的总百分比 int
//于3.0.0新增
"character_affinity": [
],
//Beyond地图的相性契合搭档 array[int]
//填写格式: [CharacterID]
//于3.0.0新增
"affinity_multiplier": [
],
//Beyond地图的相性契合加成 array[float]
//于3.0.0新增
//character_affinity与affinity_multiplier的照应关系:
//设character_affinity为[0, 1],character_affinity为[1.0, 1.5]
//那么该地图的相性契合信息为: {0: 1.0, 1: 1.5}
"is_breached": false,
//是否启用Breach地图的机制 boolean
//于5.3.0新增
"disable_over": false,
//是否禁止搭档超量加成参与进度计算 boolean
//于5.3.0新增
"new_law": "",
//Breach地图的法则 string
//于5.3.0新增
//开启Breach地图的机制时,请注意Beyond地图的机制也要开启
//因为Breach地图中不存在相性契合,因此character_affinity与affinity_multiplier理应均为空数组
//法则类型(5.3.0):
// over100_step50: PROG = OVER + STEP/2
// frag50: PROG x= FRAG
// lowlevel: PROG x= max(1.0, 2.0 - 0.1 x LEVEL)
// antiheroism: PROG = OVER - ||OVER-FRAG|-|OVER-STEP||
"chapter": 0,
//地图章节 int 必需字段
//章节列表:
// 0: 活动 Event
// 1001: Beyond
// 普通章节:
// 1: 第一章
// 2: 第二章
// 往后的章节以此类推
// 陷落章节:
// 1: 陷落第一章
"available_from": -1,
//该地图从X时开始可用 int 必需字段
//填写10位/16位时间戳,-1表示地图永远可用
//于1.5.2新增
"available_to": -1,
//该地图从X时开始关闭 int 必需字段
//填写10位/16位时间戳,-1表示地图永不关闭
//于1.5.2新增
"require_type": "",
//解锁地图时所需物品的类型 string
//解锁类型(5.3.0):
// pack 曲包(配合require_id使用)
// character 角色(616没用过,配合require_id使用)
// single 单曲(配合require_id使用)
// fragment 残片(配合require_value使用)
// chart_unlock 解锁谱面(配合require_id使用,格式为SongID+ratingClass)
// chapter_step 章节内达到一定步数(配合require_value使用)
// chapter_maps 完成章节内数张地图(配合require_value使用,目前只出现在Beyond背景的地图中)
"require_id": "",
//解锁地图时需要解锁的物品ID string / array[string]
//格式 array[string, ...] 于3.10.0新增
"require_value": 0,
//解锁地图时需要花费的对应物品的数量 int
"requires": [
{
"type": "",
"id": "",
"value": 0
}
],
//解锁地图时需要解锁的多个物品 array[object]
//type, id, value三键效果与require_type, require_id, require_value效果相同
//于4.2.0新增
"requires_any": [
{
"type": "",
"id": "",
"value": 0
}
],
//解锁地图时需要解锁其中之一的多个物品 array[object]
//格式与requires相同
//于5.9.0新增
//require各键的优先级:
// require三键: 即require_type, require_id, require_value
// 存在requires时,优先使用requires中的条件
// 不存在requires,存在require三键时,使用require三键中的条件
// 不存在requires,也不存在require三键时,使用requires_any中的条件
// 如果requires,requires三键,requires_any均不存在,则不设置解锁条件
"require_localunlock_songid": "",
//解锁地图前需要解锁的曲目 string
//填写格式: SongID
//于1.5.0新增
"require_localunlock_challengeid": "",
//解锁地图前需要通过的曲目异象 string
//填写格式: SongID
//于1.6.0新增
//require_localunlock_challengeid的判断方式:
// 寻找本地"un"文件中SongID_challenge|0|102解锁条件,判断"complete"是否为通过值
// 如果"complete"被设定为0或条件不存在,默认锁定地图
"coordinate": "0,0",
//地图在对应章节应用的X/Y坐标 string 必需字段
//前者代表X,后者代表Y
// X: 负则左移,正则右移
// Y: 负则下移,正则上移
"step_count": 25,
//地图总步数 int 必需字段
"custom_bg": "",
//地图的自定义背景 string
//填写格式: FilePath
//填写后,游戏会使用img/world/FilePath来代替世界模式中显示的章节背景
// 如果不填写,则默认使用章节背景
// is_beyond为true时无效果
//于1.8.3新增
"stamina_cost": 2,
//在地图内游玩一次所需要的体力 int
"chain_info": {
"id": "",
"index": 0
},
//声明该地图所在的链式解锁 object{string: string / int}
//填写格式:
// id: ChainID
// index: UnlockIndex
//于3.10.0新增
"steps": [
//该地图的台阶设置 array[object] 必需字段
{
"position": 0,
//台阶的位置 int 必需字段
"capture": 5
//台阶的步数 int 必需字段
},
{
"position": 1,
"capture": 5,
"items": [
{
"type": "",
"id": "",
"amount": 0
}
],
//台阶的奖励 array[object]
//填写格式:
// type: string
// id: string
// amount: int
//奖励类型(6.0.0):
// character: 搭档,id格式为CharacterID
// world_song: 世界解锁类型的曲目/难度,id格式为SongID(曲目) / SongID+ratingClass(难度)
// single: 单曲,id格式为SongID
// fragment: 残片
// memory: 记忆源点
// core: 核心,id格式为CoreID
// pack: 曲包,id格式为PackID
// world_unlock: 世界解锁相关奖励,目前只有背景
"restrict_type": ""
//限制游玩的类型 string
//填写格式:
// song_id: 限制游玩曲目
// pack_id: 限制游玩曲包
"restrict_id": "",
//限制游玩指定的曲目/曲包 string
//填写格式:SongID/PackID
"restrict_ids": [
],
//限制游玩指定的多首曲目 array[string]
//填写格式:[SongID]
//restrict_type为pack_id时无效果
"restrict_difficulty": 0,
//限制游玩指定难度 int
//填写格式:ratingClass
"step_type": [
],
//台阶的类型 array[string]
//台阶类型(6.0.0):
// randomsong: 随机曲目台阶
// speedlimit: 限速台阶
// plusstamina: 体力奖励台阶
// wall_nell: 假哀寂地图的灰色台阶
// wall_impossible: 假哀寂地图的破裂灰色台阶
// special_lament_rain: 假哀寂地图的Lament Rain异象台阶
"speed_limit_value": 0,
//限速台阶限制的最大流速 int
//填写格式:对应流速x10后的数字
//仅当step_type中存在speedlimit时有效
"plus_stamina_value": 0,
//体力奖励台阶奖励的体力数量 int
//仅当step_type中存在plusstamina时有效
},
//下列台阶为奖励总览
{
"position": 2,
"capture": 5,
"items": [
{
"type": "character"
"id": "0"
//搭档奖励
//id: CharacterID
}
]
},
{
"position": 3,
"capture": 5,
"items": [
{
"type": "world_song",
"id": "shadesoflight"
//世界解锁类型的曲目/难度奖励
//id: SongID(曲目) / SongID+ratingClass(难度)
}
]
},
{
"position": 4,
"capture": 5,
"items": [
{
"type": "single",
"id": "auxesia"
//单曲奖励
//id: SongID
}
]
},
{
"position": 5,
"capture": 5,
"items": [
{
"type": "fragment",
"amount": 616
//残片
}
]
},
{
"position": 6,
"capture": 5,
"items": [
{
"type": "memory",
"amount": 616
//记忆源点
//616没用过,但存在
}
]
},
{
"position": 7,
"capture": 5,
"items": [
{
"type": "core",
"id": "core_generic",
"amount": 1
//核心奖励
//id: CoreID
//核心种类(5.2.6):
// core_generic: 以太之滴 Ether Drop
// core_hollow: 中空核心 Hollow Core
// core_desolate: 荒芜核心 Desolate Core
// core_chunithm: CHUNITHM 核心 CHUNITHM Core
// core_crimson: 深红核心 Crimson Core
// core_ambivalent: 悖异核心 Ambivalent Core
// core_scarlet: 绯红核心 Scarlet Core
// core_groove: 音炫核心 Groove Core
// core_binary: 双生核心 Binary Core
// core_colorful: 缤纷核心 Colorful Core
// core_course_skip_purchase: 次元结晶 Warped Shard
// core_umbral: 暗影核心 Umbral Core
// core_sunset: 暮色核心 Sunset Core
}
]
},
{
"position": 8,
"capture": 5,
"items": [
{
"type": "pack",
"id": "base"
//曲包奖励
//id: PackID
//NS端专属,在移动端也存在,但使用移动端显示时会崩溃
}
]
},
{
"position": 9,
"capture": 5,
"items": [
{
"type": "world_unlock",
"id": "scenery_chap1"
//世界解锁相关奖励
//于3.0.0新增
//章节背景(4.4.4):
// scenery_chap1: 失落的世界 Lost World
// scenery_chap2: 谜域的界外 Outer Reaches
// scenery_chap3: 聚合的塔尖 Spire of Convergence
// scenery_chap4: 沉眠的回声 Dormant Echoes
// scenery_chap5: 无央的决裂 Boundless Divide
// scenery_chap6: 遗忘的构念 Forgotten Construct
// scenery_chap7: 回首的天际 Horizon of Anamnesis
// scenery_beyond: Beyond
}
]
},
{
"position": 10,
"capture": 5,
"items": [
{
"type": "anni5tix",
"amount": 1
//五周年兑换券奖励
//于3.12.2新增
}
]
},
//下列台阶为限制条件总览
{
"position": 11,
"capture": 5,
"restrict_id": "shadesoflight",
"restrict_type": "song_id"
//限制游玩指定曲目
//restrict_id: SongID
},
{
"position": 12,
"capture": 5,
"restrict_ids": [
"shadesoflight",
"sayonarahatsukoi"
],
"restrict_type": "song_id"
//限制游玩指定的多首曲目
//restrict_ids: [SongID]
},
{
"position": 13,
"capture": 5,
"restrict_id": "base",
"restrict_type": "pack_id"
//限制游玩指定曲包
//restrict_id: PackID
},
{
"position": 14,
"capture": 5,
"restrict_difficulty": 2
//限制游玩指定难度
//restrict_difficulty: ratingClass
//于3.10.0新增
},
//下列台阶为各台阶类型总览
{
"position": 15,
"capture": 5,
"step_type": [
"randomsong"
]
//随机曲目
},
{
"position": 16,
"capture": 5,
"step_type": [
"speedlimit"
],
"speed_limit_value": 65
//流速限制
//speed_limit_value: 对应流速x10
},
{
"position": 17,
"capture": 5,
"step_type": [
"plusstamina"
],
"plus_stamina_value": 12
//体力奖励
//plus_stamina_value: 体力数量
},
{
"position": 18,
"capture": 5,
"step_type": [
"wall_nell"
]
//假哀寂地图的灰色台阶
},
{
"position": 19,
"capture": 5,
"step_type": [
"wall_impossible"
]
//假哀寂地图的破裂灰色台阶
},
{
"position": 20,
"capture": 5,
"step_type": [
"special_lament_rain"
]
//假哀寂地图的Lament Rain异象台阶
},
//下列台阶为一些特殊的台阶示例
{
"position": 21,
"capture": 5,
"items": [
{
"type": "fragment",
"amount": 616
},
{
"type": "memory",
"amount": 616
}
]
//设置多个奖励
//在游戏内显示时,只会显示第一个奖励
},
{
"position": 22,
"capture": 5,
"restrict_id": "base",
"restrict_type": "pack_id",
"step_type": [
"randomsong"
]
//限制曲包 + 随机曲目
},
{
"position": 23,
"capture": 5,
"restrict_ids": [
"tempestissimo",
"testify"
],
"restrict_type": "song_id",
"step_type": [
"randomsong",
"plusstamina",
"speedlimit"
],
"restrict_difficulty": 3,
"plus_stamina_value": 2,
"speed_limit_value": 25,
"items": [
{
"type": "fragment",
"amount": 2000
}
]
//限制曲目 + 限制难度 + 随机曲目 + 体力奖励 + 流速限制 + 残片奖励
},
{
"position": 24,
"capture": 0,
"items": [
{
"type": "core",
"id": "core_generic",
"amount": 5
//最后一格必须设置至少一个奖励
}
]
}
]
}
Beyond地图的台阶排列与普通地图不同:
{
"map_id": "example",
"is_beyond": true,
"beyond_health": 150,
"character_affinity": [
0,
1
],
"affinity_multiplier": [
1.0,
1.5
],
"chapter": 1001,
"available_from": -1,
"available_to": -1,
"require_id": "shadesoflight2",
"require_type": "chart_unlock",
"coordinate": "0,0",
"step_count": 5,
"stamina_cost": 3,
"curr_position": 0,
"curr_capture": 0,
"is_locked": false,
"steps": [
{
//配置台阶时,请从下至上进行配置
"position": 0,
//台阶最低点,用于标记开头
"capture": 50
//确保全部capture的值相加起来等于beyond_health的值
},
{
"position": 1,
"capture": 25,
"items": [
{
"type": "fragment",
"amount": 616
}
]
//剩余点的计算原理与二点相同
},
{
"position": 2,
//二点
"capture": 25,
//以一点得出的百分比为被减数,capture的值为减数,相减后的差为本点百分比
//一点从100%开始,与capture的值相减后得到结果75,则本点从75%开始
"items": [
{
"type": "core",
"id": "core_generic",
"amount": 1
}
]
//奖励只会在到达本点时领取
},
{
"position": 3,
//一点
"capture": 50,
//以beyond_health的值为被减数,capture的值为减数,相减后的差为本点百分比
//此地图的beyond_health为150,与capture的值相减后得到结果100,则本点从100%开始
"restrict_id": "shadesoflight",
"restrict_type": "song_id"
//限制条件会在到达下一点前一直有效
},
{
"position": 4,
//地图最高点,用于标记奖励
"capture": 0,
//确保capture为0
"items": [
{
"type": "world_song",
"id": "shadesoflight3"
}
]
}
]
}
Breached地图的台阶排列与普通地图不同:
{
"map_id": "example",
"is_beyond": true,
"beyond_health": 200,
"character_affinity": [
],
"affinity_multiplier": [
],
"is_breached": true,
"disable_over": true,
"new_law": "over100_step50",
"chapter": 2001,
"available_from": -1,
"available_to": -1,
"require_type": "chart_unlock",
"require_id": "inkarusi2",
"coordinate": "0,0",
"step_count": 6,
"stamina_cost": 3,
"curr_position": 0,
"curr_capture": 0,
"is_locked": false,
"steps": [
// 打印出每个点百分比的Python代码示例:
// current_health = 0
// steps = [dict, ...] # 即为地图的steps
// for step in steps:
// current_health += step['capture']
// print(f"Position {step['position']}: {current_health}%")
{
"position": 0,
//一点
"capture": 50
//以下一点的百分比为被减数,此点的百分比为减数,相减后的差则为capture的值
//因为此点为地图的起始点,所以此点百分比固定为0%,已知下一点的百分比为50%,50 - 0 = 50
},
{
"position": 1
//二点
"capture": 50,
//以此点的百分比为减数,下一点的百分比为被减数,相减后的差则为capture的值
//已知此点的capture为50%,下一点的百分比为100%,100 - 50 = 50
"items": [
{
"type": "core",
"id": "core_generic",
"amount": 2
}
]
//奖励只会在本点开始时领取
},
{
"position": 2,
//三点
"capture": 50,
//以此点的百分比为减数,下一点的百分比为被减数,相减后的差则为capture的值
//已知此点的capture为150%,下一点的百分比为100%,150 - 100 = 50
"items": [
{
"type": "fragment",
"amount": 500
}
],
"restrict_ids": [
"memoryfactory",
"lumia",
"pragmatism",
"paradise",
"flashback",
"flyburg",
"partyvinyl",
"nirvluce",
"blossoms",
"romancewars",
"moonheart",
"syro",
"nexttoyou",
"memoryforest",
"guardina",
"inkarusi",
"mazenine",
"themessage",
"sulfur",
"etherstrike",
"fractureray",
"solitarydream"
],
"restrict_type": "song_id",
"restrict_difficulty": 2
//限制条件会在到达下一点前一直有效
},
{
"position": 4,
//四点
"capture": 50
//以此点的百分比为减数,下一点的百分比为被减数,相减后的差则为capture的值
//已知此点的capture为200%,下一点的百分比为150%,200 - 150 = 50
"items": [
{
"type": "core",
"id": "core_generic",
"amount": 2
}
],
"restrict_ids": [
"memoryfactory",
"lumia",
"pragmatism",
"paradise",
"flashback",
"flyburg",
"partyvinyl",
"nirvluce",
"blossoms",
"romancewars",
"moonheart",
"syro",
"nexttoyou",
"memoryforest",
"guardina",
"inkarusi",
"mazenine",
"themessage",
"sulfur",
"etherstrike",
"fractureray",
"solitarydream"
],
"restrict_type": "song_id",
"restrict_difficulty": 2
},
{
"position": 5,
//终点,用于标记奖励
"capture": 0,
//capture必须为0
"items": [
{
"type": "world_song",
"id": "inkarusi3"
}
]
}
]
}