世界地图格式
此页面本页面为技术型隐藏页面 |
- 本页保持孤立!
阅前提示
- 此处详细解析的是在服务端处存储的地图中的各语句。
- 地图使用的是较为严格的json格式,请注意是否有没有漏符号或多出符号
- 地图文件理应当被存放在对应服务器的地图文件夹内
详细解析
此处的是普通地图:
{
"map_id": "example",
//地图ID string 必需字段
//如果需正确使用该地图配置,请确保文件名和map_id相同
"is_legacy": false,
//是否启用Legacy地图机制 boolean
//于1.7.0新增
"is_beyond": false,
//是否启用Beyond地图机制 boolean
//于3.0.0新增
"beyond_health": 100,
//Beyond地图的总百分比 int is_beyond为true时的必需字段
//与is_beyond语句相连,只有前置语句启用时才能发挥作用
//于3.0.0新增
"character_affinity": [
],
//Beyond地图的相性契合搭档 list [int] is_beyond为true时的必需字段
//与is_beyond语句和affinity_multiplier语句相连,只有前置语句启用或填写完数据才能完整使用
//与affinity_multiplier的应用关系为前后照应(如果此处第一个填写为0,那么affinity_multiplier的第一个浮点数就应用到0上)
//例:[0, 1] [0]
//于3.0.0新增
"affinity_multiplier": [
],
//Beyond地图的相性契合加成 list [float] is_beyond为true时的必需字段
//与is_beyond语句和character_affinity语句相连,只有前置语句启用或填写完数据才能完整使用
//与character_affinity的应用关系是前后照应
//例:[1.0, 1.5] [1.0]
//于3.0.0新增
"chapter": 0,
//地图章节 int 必需字段
//可以填写客户端内无对应章节的数(同等于不显示)
//地图章节(4.4.4):
//0 活动 Event
//1 失落的世界 Lost World
//2 谜域的界外 Outer Reaches
//3 聚合的塔尖 Spire of Convergence
//4 沉眠的回声 Dormant Echoes
//5 无央的决裂 Boundless Divide
//6 遗忘的构念 Forgotten Construct
//7 回首的天际 Horizon of Anamnesis
//1001 Beyond
"available_from": -1,
//从X时开始可用 int 必需字段
//与available_to语句相连,只有前置语句填写完数据才能完整使用
//填写十位/十六位时间戳,-1表示一直可用
//游戏内实际显示于Event限时时间内,未到指定可用时间会显示"准备中(Preparing)"
//于1.5.2新增
"available_to": -1,
//从X时持续到X时后关闭 int 必需字段
//与available_from语句相连,只有前置语句填写完数据才能完整使用
//填写10位/16位时间戳,-1表示一直不关闭
//游戏内实际显示于Event限时时间内,到达指定关闭时间会显示"已结束(Ended)"
//于1.5.2新增
"is_repeatable": true,
//是否启用无限地图机制 boolean 必需字段
"require_type": "",
//解锁时所需物品的类型 string
//与require_id语句或require_value语句相连,只有本语句填写到指定数据后,填写对应前置语句后才能完整使用
//也与requires语句相连,只有前置语句关闭时才能发挥作用
//解锁类型(4.4.4):
//pack 曲包(配合require_id使用)
//character 角色(616没用过,配合require_id使用)
//single 单曲(配合require_id使用)
//fragment 残片(配合require_value使用)
//chart_unlock 解锁谱面(配合require_id使用,格式为[SongID]+[ratingClass])
//chapter_step 章节步数(配合require_value使用)
"require_id": "",
//解锁时需要开启的对应物品ID string/list [string]
//与require_type语句相连,只有前置语句填写到指定数据后才能发挥作用
//也与requires语句相连,只有前置语句关闭时才能发挥作用
//list [string]形式于3.10.0新增,后续在4.2.0添加普通地图的显示
"require_value": 0,
//解锁时需要花费的对应物品的数量 int
//与require_type语句相连,只有前置语句填写到指定数据后才能发挥作用
//也与requires语句相连,只有前置语句关闭时才能发挥作用
"requires": [
{
}
],
//解锁时所需的多个物品 list [{string: string/int}]
//可填写type/id/value,分别对应上述三条语句
//如果返回的地图数据存在本语句,客户端会优先使用,其单独的三条语句不使用
//于4.2.0新增
//例:
//"requires": [
// {
// "type": "pack",
// "id": "base",
// "value": 0
// }
//]
"require_localunlock_songid": "",
//需要本地解锁XXX歌曲的任意难度 string
//填写指定歌曲ID,用来判断本地是否解锁了指定歌曲的任意难度
//判断解锁方式:寻找本地"un"文件中[SongID]|[ratingClass]|[UnlockType]所有的解锁条件,如果其中一条"complete"被设为成功值,则解锁
//于1.5.0新增
"require_localunlock_challengeid": "",
//需要本地通过XXX异象 string
//填写指定异象ID,用来判断本地是否通过了指定歌曲的异象
//判断解锁方式:寻找本地"un"文件中[AnomalyID]_challenge|0|102解锁条件,如果"complete"被设定为0或不存在,默认不解锁
//对于616而言,AnomalyID通常会被设定为对应的SongID
//于1.6.0新增
"coordinate": "0,0",
//地图在对应章节应用的X/Y坐标 string 必需字段
//前者代表X,后者代表Y
//X为正数时向右,为负数时向左
//Y为正数时向上,为负数时向下
"step_count": 22,
//地图总步数 int 必需字段
//如要正确填写,按照0~X的方式排列每个position,将最后的position中的int+1
"custom_bg": "",
//地图所使用的背景 string
//与is_beyond语句相连,只有在前置语句关闭时才能发挥作用
//如果不填写,则默认使用章节背景
//填写后,游戏会自动查找位于img/world中的[对应string].jpg
//于1.8.3新增
"stamina_cost": 2,
//在该地图内游玩一次所需要的体力 int
//也会影响Play+的体力消耗
"chain_info": "",
//??? dictionary?
//未知,客户端处理时疑似可处理"id"与"index"
"curr_position": 0,
"curr_capture": 0,
"is_locked": false,
//此三个语句无论如何填写都不会影响地图,但需要保留
"steps": [
//该地图的台阶设置 list 必需字段
{
"position": 0,
//台阶的点位 int
//可随意填写,设定为相同的值都可以正常读取
"capture": 5
//台阶的步数 int
},
{
"position": 1,
"capture": 5,
"items": [{}]
//奖励 list [{string: string/int}]
//此处为空,直接删除也可达成同效果
},
{
"position": 2,
"capture": 5,
"items": [
{
"type": "character"
"id": "0"
//角色
//type-string id-string
//id对应CharacterID
//于1.5.0新增
}
]
},
{
"position": 3,
"capture": 5,
"items": [
{
"type": "world_song",
"id": "shadesoflight"
//世界解锁类型的歌曲/难度
//type-string id-string
//id对应SongID
//如需解锁难度,在SongID末尾添加对应ratingClass数字即可
//于1.5.0新增
}
]
},
{
"position": 4,
"capture": 5,
"items": [
{
"type": "single",
"id": "auxesia"
//单曲
//type-string id-string
//id对应SongID
}
]
},
{
"position": 5,
"capture": 5,
"items": [
{
"type": "fragment",
"amount": 616
//残片
//type-string amount-int
//于1.5.0新增(也许)
}
]
},
{
"position": 6,
"capture": 5,
"items": [
{
"type": "memory",
"amount": 616
//记忆源点
//type-string amount-int
//616没用过,但存在
}
]
},
{
"position": 7,
"capture": 5,
"items": [
{
"type": "core",
"id": "core_generic",
"amount": 1
//核心
//type-string id-string amount-int
//id对应CoreID
//于2.0.0新增
//核心种类(4.4.4):
//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_umbral 暗影核心 Umbral Core
//core_course_skip_purchase 次元结晶 Warped Shard
}
]
},
{
"position": 8,
"capture": 5,
"items": [
{
"type": "pack",
"id": "base"
//曲包
//type-string id-string
//id对应PackID
//NS端专属,在移动端也存在,但使用移动端显示时会崩溃
}
]
},
{
"position": 9,
"capture": 5,
"items": [
{
"type": "world_unlock",
"id": "scenery_chap1"
//世界解锁相关
//type-string id-string
//目前只能添加背景
//于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
}
]
},
{
"position": 10,
"capture": 5,
"items": [
{
"type": "anni5tix",
"amount": 1
//五周年兑换券
//type-string amount-int
//有点猜的成分,没有测试,但应该正确
//于3.12.2新增
}
]
},
{
"position": 11,
"capture": 5,
"restrict_id": "shadesoflight",
"restrict_type": "song_id"
//限制游玩指定曲目
//restrict_id-string restrict_type-string
//restrict_id对应SongID
},
{
"position": 12,
"capture": 5,
"restrict_ids": [
"shadesoflight",
"sayonarahatsukoi"
],
"restrict_type": "song_id"
//限制游玩指定的多首曲目
//restrict_ids-list [string] restrict_type-string
//restrict_ids对应SongID
},
{
"position": 13,
"capture": 5,
"restrict_id": "base",
"restrict_type": "pack_id"
//限制游玩指定曲包
//restrict_id-string restrict_type-string
//restrict_id对应PackID
},
{
"position": 14,
"capture": 5,
"restrict_difficulty": 2
//限制游玩指定难度
//restrict_difficulty-int
//restrict_difficulty对应ratingClass
//与restrict_id/ids语句和restrict_type语句相连,只有前置语句存在才能发挥作用
//于3.10.0新增
},
{
"position": 15,
"capture": 5,
"step_type": [
"randomsong"
]
//随机曲目
//step_type-list [string]
//曲目列表会显示特殊曲目(ID:random),并且只有ratingClass:0/1/2
//如果同restrict_difficulty使用,并且该语句的值大于2,锁定难度时默认为2
//于1.7.0新增
},
{
"position": 16,
"capture": 5,
"step_type": [
"speedlimit"
],
"speed_limit_value": 65
//流速限制
//step_type-list [string] speed_limit_value-int
//speed_limit_value为对应流速x10后的数字
//于1.7.2新增
},
{
"position": 17,
"capture": 5,
"step_type": [
"plusstamina"
],
"plus_stamina_value": 12
//体力奖励
//step_type-list [string] plus_stamina_value-int
//plus_stamina_value对应增加体力
},
{
"position": 18,
"capture": 5,
"items": [
{
"type": "fragment",
"amount": 616
},
{
"type": "memory",
"amount": 616
}
]
//设置多个奖励
//游戏内实际只显示第一个奖励
},
{
"position": 19,
"capture": 5,
"restrict_id": "base",
"restrict_type": "pack_id",
"step_type": [
"randomsong"
]
//限制曲包+随机曲目混搭
},
{
"position": 20,
"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": 21,
"capture": 0,
"items": [
{
"type": "core",
"id": "core_generic",
"amount": 5
//最后一格请设置至少一个奖励
}
]
}
]
}
此处是Beyond地图:
{
"map_id": "example",
"is_legacy": false,
"is_beyond": true,
//是否启用Beyond地图机制 boolean
"beyond_health": 150,
//Beyond地图的总百分比 int
"character_affinity": [0, 1],
//Beyond地图的相性契合搭档 list [int]
"affinity_multiplier": [1.0, 1.5],
//Beyond地图的相性契合加成 list [float]
"chapter": 1001,
//地图章节 int
"available_from": -1,
"available_to": -1,
"is_repeatable": false,
"require_id": "shadesoflight2",
//解锁时需要开启的对应物品ID string/list [string]
"require_type": "chart_unlock",
//解锁时所需物品的类型 string/list [string]
"require_value": 0,
"coordinate": "0,0",
"step_count": 5,
//地图总步数 int
"custom_bg": "",
"stamina_cost": 3,
//在该地图内游玩一次所需要的体力 int
"curr_position": 0,
"curr_capture": 0,
"is_locked": false,
"steps": [{
//使用正常地图语句,如要正确配置请从结尾开始编辑
"position": 0,
//最低点,用于标记开头
"capture": 50
//以beyond_health的值为被减数,与所有capture相加后的和相减,结果为0则配置成功
//或者确保全部capture的值相加起来等于beyond_health的值
}, {
"position": 1,
"capture": 25,
"items": [{"type": "fragment", "amount": 616}]
//剩余点的计算原理与二点相同
}, {
"position": 2,
//标记二点
"capture": 25,
//以capture的值为减数,与一点得出的百分比相减,得出本点百分比
//一点从100%开始,相减后得到结果75,则本点从75%开始
"items": [{
"type": "core",
"id": "core_generic",
"amount": 1
}]
//奖励只会在本点开始时领取
}, {
"position": 3,
//标记一点
"capture": 50,
//以capture的值为减数,将其与beyond_health的值相减,得出本点百分比
//此地图的beyond_health为150,相减后得到结果100,则本点从100%开始
"restrict_id": "shadesoflight",
"restrict_type": "song_id"
//限制条件等会在到达下一点前一直有效
}, {
"position": 4,
//最高点,用于标记奖励
"capture": 0,
//确保capture为0
"items": [{
"type": "world_song",
"id": "shadesoflight3"
}]
}]
}