解锁条件(unlocks)格式:修订间差异

无编辑摘要
 
(未显示15个用户的40个中间版本)
第1行: 第1行:
{{技术型}}
<!--如果你通过查看源代码发现了这里,那么恭喜你发现了查看内容的第二种方法。
-->{{技术型}}
__NOINDEX__
 
{{Usercheck}}
{{特殊页面导航}}
* '''本页面内容保持孤立!'''
* '''本页面内容保持孤立!'''
在本文件里并没有曲名,谱师之类的歌曲信息,请移步[[歌曲信息(songlist)格式]]
如果想更改谱面本身,请移步[[谱面格式]]
如果想更改曲包相关内容请移步[[曲包信息(packlist)格式]]


== 总论 ==
== 总论 ==
 文件在\assets\songs下
 文件在<code>\assets\songs</code>


 打开文件大概是这样的画风:
 打开文件大概是这样的画风:


{| class="wikitable"
<syntaxhighlight lang="json">
|-
{
| <nowiki>{
  "unlocks": [
"unlocks": [
    {
    {
     "songId": …,
     "songId": …,
     "ratingClass": …,
     "ratingClass": …,
     "conditions": [
     "conditions": [
 
    
],
     ],
    
},
   },
  
]
  ]
}
}
</nowiki>
</syntaxhighlight>
|}


  有点意思(笑)
  整个文件以一个大括号和一个<code>unlocks</code>字符串开头,大体结构如下


整个文件以一个大括号和一个”unlocks”字符串开头,大体结构如下
<syntaxhighlight lang="json">
 
{
{
  "unlocks":[
  "unlocks":[
//all contents…
  //all contents…
  ]
  ]
}
}
</syntaxhighlight>


===细节解析===
===细节解析===
 例子
 例子
{
 
<syntaxhighlight lang="json">
{
     "songId": "chronostasis",
     "songId": "chronostasis",
     "ratingClass": 1,
     "ratingClass": 1,
第58行: 第57行:
      }
      }
     ]
     ]
}
}
</syntaxhighlight>
 归纳
 归纳
{
<syntaxhighlight lang="json">
{
   "songId": this.songname,
   "songId": this.songname,
   "ratingClass": classNum,
   "ratingClass": classNum,
第71行: 第72行:
    }
    }
   ]  //end of condition(s)
   ]  //end of condition(s)
}
}
</syntaxhighlight>
 从上到下依次解析如下:
 从上到下依次解析如下:
*songId (String):双引号包含的字符串,代表了欲限定条件的歌曲名称。'''至关重要''',所引用歌曲对应谱面文件夹也必须是id名,不能出现非ASCII字符
*songId (String):双引号包含的字符串,代表了欲限定条件的歌曲名称。'''至关重要''',所引用歌曲对应谱面文件夹也必须是id名,不能出现非ASCII字符
*ratingClass (int):代表了欲限定条件的歌曲难度,取值只能为0,1,2。0为PST难度,1为PRS难度,2为FTR难度。
*ratingClass (int):代表了欲限定条件的歌曲难度,取值只能为0,1,2 ,3 。0为PST难度,1为PRS难度,2为FTR 难度,3为BYD 难度。
*conditions:unlocks文件中的核心,以一对英文方括号包裹,每一个condition语句组以一对大括号包含。一个歌曲的一个难度可以有很多个condition语句组,它们之间以英文逗号分开。
*conditions:unlocks文件中的核心,以一对英文方括号包裹,每一个condition语句组以一对大括号包含。一个歌曲的一个难度可以有很多个condition语句组,它们之间以英文逗号分开。<ref>一个conditions内可以有多条相同的解锁条件,并且每个解锁条件都会单独判断<small>(例如[[Memory Archive]]中的右侧警示解锁难度所需的歌曲,曲目选择页面中会实时渐变切换的解锁条件等等)</small></ref>
 每一个语句组中一定有一个type语句,根据type的取值不同,其中会有不同的呈现。
 每一个语句组中一定有一个type语句,根据type的取值不同,其中会有不同的呈现。


====残片型解锁====
====type 0: 残片型解锁====
 
<syntaxhighlight lang="json">
{
{
    "type": 0,
    "type": 0,
    "credit": frag_needed_to_unlock
    "credit": frag_needed_to_unlock
}
}
 当type取0时,为残片型解锁。玩家需要花 费fragment 来开启当前歌曲的游玩权限。credit的取值是一个整数,代表了解锁当前难度歌曲需要花费 的fragments 数量。
</syntaxhighlight>
 当type取0时,为残片型解锁。玩家需要花 费残片 来开启当前歌曲的游玩权限。credit的取值是一个整数,代表了解锁当前难度歌曲需要花费 的残片 数量。


====先行通过歌曲型 解锁====
在该 解锁 条件情况下,花费残片后可以永久解锁对应谱面,意味着解锁后其他条件不满足时对应谱面不会锁回去。


{
====type 1:先行通过歌曲型解锁====
    "type":1,   
<syntaxhighlight lang="json">
{
    "type": 1,   
    "song_id": songname,
    "song_id": songname,
    "song_difficulty": difficulty,
    "song_difficulty": difficulty,
    "grade": gradeNum
    "grade": gradeNum
}
}
</syntaxhighlight>
type取1时,为先行通过歌曲型解锁,玩家需要在其前置歌曲中达到相应要求。
type取1时,为先行通过歌曲型解锁,玩家需要在其前置歌曲中达到相应要求。
*song_id (String):指在游玩本难度的歌曲时,需要先行通过的歌曲名称,引用要求与songId相同。
*song_id (string):指在游玩本难度的歌曲时,需要先行通过的歌曲名称,引用要求与songId相同。
*song_difficulty (int):取值为0,1,2,与ratingClass含义相同。
*song_difficulty (int):取值为0,1,2,与ratingClass含义相同。
*grade (int):限定先行通过的歌曲 名称 需要达到的评级,0为不限定,1为达到C,2为达到B,3为达到A,4为达到AA,5为达到EX。
*grade (int):限定先行通过的歌曲需要达到的评级,0为不限定,1为达到C,2为达到B,3为达到A,4为达到AA,5为达到EX ,6为达到EX+
====先行游玩歌曲型解锁====
 
{
====type 2: 先行游玩歌曲型解锁====
    "type":2,   
<syntaxhighlight lang="json">
{
    "type": 2,   
    "song_id": songname,
    "song_id": songname,
    "song_difficulty": difficulty
    "song_difficulty": difficulty
}
}
type取2时,为先行游玩歌曲型解锁,与[[#先行通过歌曲型解锁]]类似,不过对应结果为游玩相应曲目即可。变量不再赘述。
</syntaxhighlight>
type取2时,为先行游玩歌曲型解锁,与[[# 先行通过歌曲型解锁| 先行通过歌曲型解锁]]类似,不过对应结果为游玩相应曲目即可。变量不再赘述。
 
====type 3:多次通过歌曲型解锁====
<syntaxhighlight lang="json">
{
   "type": 3,  
   "song_id": "songname",
   "song_difficulty": difficulty,
   "grade": gradeNum,
   "times": timesNum
}
</syntaxhighlight>
type取3时,为多次通过歌曲型解锁,与[[#先行通过歌曲型解锁|先行通过歌曲型解锁]]类似,不过需要多次通过相应曲目并达到给定评级。
*times (int):指先行通过的歌曲需要达到限定评级的次数。
其他变量不再赘述。
 
====type 4:选择任务型解锁====
<syntaxhighlight lang="json">
{
   "type": 4,
   "conditions": [
   {
    //condition 1
   },
   {
    //condition 2
   }
  ]  //end of condition(s)
}
</syntaxhighlight>
type取4时,为选择任务型解锁。其中conditions类似最外侧的conditions,可填入不同的condition语句组。玩家只需挑选其中任意一个任务完成即可解锁。<s>套娃警告</s>
 
====type 5:个人游玩潜力值型解锁====
<syntaxhighlight lang="json">
{
   "type": 5,  
   "rating": PotentialNum
}
</syntaxhighlight>
type取5时,为个人游玩潜力值型解锁,玩家需要取得或超过限定的潜力值即可解锁。
*rating (int):指限定的个人游玩潜力值乘以100后的整数。<s>可以随便填,负数都行,但即使填负数在未登录状态下本条件仍然算未达成</s>


==== 特殊 解锁 类型====
====type 6:多次通过对应等级歌曲型 解锁====
<syntaxhighlight lang="json">
{
   "type": 6,  
   "count": countNum,
   "rating": ratingNum,
   "ratingPlus": boolean
}
</syntaxhighlight>
type取6时,为多次通过对应等级歌曲型解锁,与[[#多次通过歌曲型解锁|多次通过歌曲型解锁]]相似,不过需要多次通过相应等级的歌曲。
*count (int):跟上文的[[#多次通过歌曲型解锁|多次通过歌曲型解锁]]中的times同理。
*rating (int):指限定的游玩等级。
*ratingPlus (boolean):可以不存在于条件内,用来设定等级的“+”,true为设定,false为不设定,该语句不存在于条件内时默认为false。


{
====type 101:特殊解锁类型====
<syntaxhighlight lang="json">
{
    "type": 101,
    "type": 101,
    "min": minNum,
    "min": minNum,
    "max": maxNum
    "max": maxNum
}
}
type取101时,为特殊解锁类型,通常用于解锁 神秘<s>魔王</s>歌 曲。
</syntaxhighlight>
*min (int):解 锁anomaly 失败时获得的最小进度数。
type取101时,为特殊解锁类型,通常用于解锁 异象曲/ 终末 曲。
*max (int):解 锁anomaly 失败时获得的最大进度数。
*min (int):解 锁异象曲或终末曲 失败时获得的最小进度数。
*max (int):解 锁异象曲或终末曲 失败时获得的最大进度数。
 
====type 102:特殊挑战类型====
本类型不会在unlocks文件中出现,但是在本地记录解锁状态的文件中可以发现本类型。<br>
目前使用本类型解锁条件的曲目有[[Aegleseeker]]、[[Testify]]与[[Tempestissimo]](包含解锁前的四个挑战与曲目本身的pst难度)
 
 
====type 103:搭档解锁类型====
<syntaxhighlight lang="json">
{
   "type": 103,
   "id": int
}
</syntaxhighlight>
type取103时,为搭档解锁类型。目前仅有[[Aegleseeker]]和[[Arghena]]出现此种解锁方式。
 
除演出曲目[[Aegleseeker]]外,在普通曲目上使用该解锁类型会导致使用对应搭档游玩结束并返回到选曲界面后'''切换为其他搭档后对应曲目不显示曲绘和曲目信息'''(但可正常选择该曲目进入游戏)。 <ref group="参考资料">[https://gist.github.com/Misaka12456/1f815a81e4b2794f6c9af9dfdc29794a GitHub Gist:Misaka12456/Arcaea 曲目解锁条件 - 非异象曲目的搭档解锁条件测试]</ref><br>
解锁[[Arghena]]时,需要使用搭档[[摩耶]]才能继续进行挑战
*id (int): 该曲解锁时所需的[[搭档]]('''此处值不可为-1'''),数字对应[[搭档]]见下
{{搭档编号列表}}
 
====type 104:剧情解锁类型====
<syntaxhighlight lang="json">
{
   "type": 104
}
</syntaxhighlight>
type取104时,通常不会有其他语句一起存在,但type 104出现且仅出现于[[Final Verdict]]及其附加内容[[Silent Answer]]的所有曲目中(开门曲[[Defection]]除外)
 
====type 105:搭档技能解锁类型====
<syntaxhighlight lang="json">
{
   "type": 105,
   "char_id": int,
   "awakened": boolean,
   "inverted": boolean
}
</syntaxhighlight>
type取105时,为搭档剧情解锁类型(存疑),目前仅有Last|Eternity<ref>不是Last或Last|Moment,从unlocks和songlist文件可以看出其实lasteternity是有别于last的另一个id,而Last|Moment只是和PRAGMATISM -RESURRECTION-一样的Beyond难度特殊名称</ref>的byd难度存在该解锁条件。
*char_id (int): 和type103的id作用相同,此处不再赘述。
*awakened (boolean)、inverted (boolean): 当搭档技能为觉醒技能/未觉醒技能时是否显示该难度,true为显示,false为不显示。
 
====type 106:绑定谱面解锁类型====
<syntaxhighlight lang="json">
{
   "type": 106,
   "song_id": string,
   "song_difficulty": int,
   "inverted": boolean
}
</syntaxhighlight>
type取106时,为绑定谱面解锁类型(存疑),目前仅有Last的byd难度(即Last|Moment)存在该解锁条件。
*song_id (string): 曲目的songid。
*song_difficulty (int): 捆绑曲目的难度。
*inverted (boolean): 当搭档技能为未觉醒技能时是否显示该难度,true为显示,false为不显示。
 
====type 107:解谜解锁类型====
<syntaxhighlight lang="json">
{
   "type": 107
}
</syntaxhighlight>
type取107时,为[[Magnolia]]的解谜挑战,当且仅当玩家购买了所在曲包时挑战才会生效。在完成本挑战前,歌曲将不展示曲封、不播放预览音乐,具体挑战内容请查看单曲页面。
 
====type 108:故事解锁类型====
<syntaxhighlight lang="json">
{
   "type": 108
}
</syntaxhighlight>
type取108时,为故事解锁类型。目前仅有[[Arghena]]使用了本解锁条件,在未完成挑战前,余下的解锁挑战将不会显示。
 
====type 109:特殊解谜挑战类型====
<syntaxhighlight lang="json">
{
   "type": 109,
   "index": int,
   "difficulty": int
},
</syntaxhighlight>
type取109时,为特殊解谜挑战类型。目前仅有[[Arghena]]使用了本解锁条件。
*index (int): 解谜项目的索引(存疑)。
*difficulty (int): 曲目难度。
 
====type 110:伪段位挑战类型====
<syntaxhighlight lang="json">
{
   "type": 110
},
</syntaxhighlight>
type取110时,为伪段位挑战类型。目前仅有[[Arghena]]使用了本解锁条件。与常规的段位挑战类似但是允许暂停。
 
==参考资料==
{{Reflist|group=参考资料}}
 
==注释==
{{Reflist|group=注释}}
{{Usercheck-end}}

2024年3月10日 (日) 00:26的最新版本


在您查看以下内容之前,我们需要您回答我们提供的问题。
ABA型的三字符songid是?
已确认。

  • 本页面内容保持孤立!

总论

文件在\assets\songs

打开文件大概是这样的画风:

{
  "unlocks": [
    {
      "songId": ,
      "ratingClass": ,
      "conditions": [
        
        ],
        
    },
    
  ]
}

整个文件以一个大括号和一个unlocks字符串开头,大体结构如下

{
 "unlocks":[
   //all contents
 ]
}

细节解析

例子

{
      "songId": "chronostasis",
      "ratingClass": 1,
      "conditions": [
        {
          "type": 1,
          "song_id": "infinityheaven",
          "song_difficulty": 1,
          "grade": 0
        },
        {
          "type": 0,
          "credit": 80
        }
      ]
}

归纳

{
   "songId": this.songname,
   "ratingClass": classNum,
   "conditions": [
     {
      //condition 1
     },
     {
      //condition 2
     }
  ]  //end of condition(s)
}

从上到下依次解析如下:

  • songId (String):双引号包含的字符串,代表了欲限定条件的歌曲名称。至关重要,所引用歌曲对应谱面文件夹也必须是id名,不能出现非ASCII字符
  • ratingClass (int):代表了欲限定条件的歌曲难度,取值只能为0,1,2,3。0为PST难度,1为PRS难度,2为FTR难度,3为BYD难度。
  • conditions:unlocks文件中的核心,以一对英文方括号包裹,每一个condition语句组以一对大括号包含。一个歌曲的一个难度可以有很多个condition语句组,它们之间以英文逗号分开。[1]

每一个语句组中一定有一个type语句,根据type的取值不同,其中会有不同的呈现。

type 0:残片型解锁

{
    "type": 0,
    "credit": frag_needed_to_unlock
}

当type取0时,为残片型解锁。玩家需要花费残片来开启当前歌曲的游玩权限。credit的取值是一个整数,代表了解锁当前难度歌曲需要花费的残片数量。

在该解锁条件情况下,花费残片后可以永久解锁对应谱面,意味着解锁后其他条件不满足时对应谱面不会锁回去。

type 1:先行通过歌曲型解锁

{
     "type": 1,    
     "song_id": songname,
     "song_difficulty": difficulty,
     "grade": gradeNum
}

type取1时,为先行通过歌曲型解锁,玩家需要在其前置歌曲中达到相应要求。

  • song_id (string):指在游玩本难度的歌曲时,需要先行通过的歌曲名称,引用要求与songId相同。
  • song_difficulty (int):取值为0,1,2,与ratingClass含义相同。
  • grade (int):限定先行通过的歌曲需要达到的评级,0为不限定,1为达到C,2为达到B,3为达到A,4为达到AA,5为达到EX,6为达到EX+。

type 2:先行游玩歌曲型解锁

{
     "type": 2,    
     "song_id": songname,
     "song_difficulty": difficulty
}

type取2时,为先行游玩歌曲型解锁,与先行通过歌曲型解锁类似,不过对应结果为游玩相应曲目即可。变量不再赘述。

type 3:多次通过歌曲型解锁

{
     "type": 3,    
     "song_id": "songname",
     "song_difficulty": difficulty,
     "grade": gradeNum,
     "times": timesNum
}

type取3时,为多次通过歌曲型解锁,与先行通过歌曲型解锁类似,不过需要多次通过相应曲目并达到给定评级。

  • times (int):指先行通过的歌曲需要达到限定评级的次数。

其他变量不再赘述。

type 4:选择任务型解锁

{
     "type": 4,
     "conditions": [
     {
      //condition 1
     },
     {
      //condition 2
     }
  ]  //end of condition(s)
}

type取4时,为选择任务型解锁。其中conditions类似最外侧的conditions,可填入不同的condition语句组。玩家只需挑选其中任意一个任务完成即可解锁。套娃警告

type 5:个人游玩潜力值型解锁

{
     "type": 5,    
     "rating": PotentialNum
}

type取5时,为个人游玩潜力值型解锁,玩家需要取得或超过限定的潜力值即可解锁。

  • rating (int):指限定的个人游玩潜力值乘以100后的整数。可以随便填,负数都行,但即使填负数在未登录状态下本条件仍然算未达成

type 6:多次通过对应等级歌曲型解锁

{
     "type": 6,    
     "count": countNum,
     "rating": ratingNum,
     "ratingPlus": boolean
}

type取6时,为多次通过对应等级歌曲型解锁,与多次通过歌曲型解锁相似,不过需要多次通过相应等级的歌曲。

  • count (int):跟上文的多次通过歌曲型解锁中的times同理。
  • rating (int):指限定的游玩等级。
  • ratingPlus (boolean):可以不存在于条件内,用来设定等级的“+”,true为设定,false为不设定,该语句不存在于条件内时默认为false。

type 101:特殊解锁类型

{
    "type": 101,
    "min": minNum,
    "max": maxNum
}

type取101时,为特殊解锁类型,通常用于解锁异象曲/终末曲。

  • min (int):解锁异象曲或终末曲失败时获得的最小进度数。
  • max (int):解锁异象曲或终末曲失败时获得的最大进度数。

type 102:特殊挑战类型

本类型不会在unlocks文件中出现,但是在本地记录解锁状态的文件中可以发现本类型。
目前使用本类型解锁条件的曲目有AegleseekerTestifyTempestissimo(包含解锁前的四个挑战与曲目本身的pst难度)


type 103:搭档解锁类型

{
    "type": 103,
    "id": int
}

type取103时,为搭档解锁类型。目前仅有AegleseekerArghena出现此种解锁方式。

除演出曲目Aegleseeker外,在普通曲目上使用该解锁类型会导致使用对应搭档游玩结束并返回到选曲界面后切换为其他搭档后对应曲目不显示曲绘和曲目信息(但可正常选择该曲目进入游戏)。 [参考资料 1]
解锁Arghena时,需要使用搭档摩耶才能继续进行挑战

  • id (int): 该曲解锁时所需的搭档(此处值不可为-1),数字对应搭档见下
ID 对应搭档
-1 不加
0
1 对立
2
3 萨菲亚
4 忘却
5 光 & 对立(Reunion)
6 对立(Axium)
7 对立(Grievous Lady)
8
9 光 & 菲希卡
10 依莉丝
11 爱托
12 露娜
13
14 光(Zero)
15 光(Fracture)
16 光(夏日)
17 对立(夏日)
18 对立 & 托凛
19 彩梦
20 爱托 & 露娜(冬日)
21
22 光 & 赛依娜
23 咲弥
24 对立 & 中二企鹅(Grievous Lady)
25 中二企鹅
26 榛名
27 诺诺
28 潘多拉涅墨西斯(MTA-XXX)
29 轩辕十四(MDA-21)
30 群愿
31 光(Fantasia)
32 对立(Sonata)
33 兮娅
34 DORO*C
35 对立(Tempest)
36 布丽兰特
37 依莉丝(夏日)
38 咲弥(Etude)
39 爱丽丝 & 坦尼尔
40 露娜 & 美亚
41 阿莱乌斯
42 希尔
43 伊莎贝尔
44 迷尔
45 拉格兰Icon Smartphone.png白姬Icon Nintendo switch.png
46 凛可
47 奈美
48 咲弥 & 伊莉莎白
49 莉莉
50 群愿(盛夏)
51 爱丽丝 & 坦尼尔(Minuet)
52 对立(Elegy)
53 玛莉嘉
54 维塔
99 白姬Icon Smartphone.png拉格兰Icon Nintendo switch.png

type 104:剧情解锁类型

{
    "type": 104
}

type取104时,通常不会有其他语句一起存在,但type 104出现且仅出现于Final Verdict及其附加内容Silent Answer的所有曲目中(开门曲Defection除外)

type 105:搭档技能解锁类型

{
    "type": 105,
    "char_id": int,
    "awakened": boolean,
    "inverted": boolean
}

type取105时,为搭档剧情解锁类型(存疑),目前仅有Last|Eternity[2]的byd难度存在该解锁条件。

  • char_id (int): 和type103的id作用相同,此处不再赘述。
  • awakened (boolean)、inverted (boolean): 当搭档技能为觉醒技能/未觉醒技能时是否显示该难度,true为显示,false为不显示。

type 106:绑定谱面解锁类型

{
    "type": 106,
    "song_id": string,
    "song_difficulty": int,
    "inverted": boolean
}

type取106时,为绑定谱面解锁类型(存疑),目前仅有Last的byd难度(即Last|Moment)存在该解锁条件。

  • song_id (string): 曲目的songid。
  • song_difficulty (int): 捆绑曲目的难度。
  • inverted (boolean): 当搭档技能为未觉醒技能时是否显示该难度,true为显示,false为不显示。

type 107:解谜解锁类型

{
    "type": 107
}

type取107时,为Magnolia的解谜挑战,当且仅当玩家购买了所在曲包时挑战才会生效。在完成本挑战前,歌曲将不展示曲封、不播放预览音乐,具体挑战内容请查看单曲页面。

type 108:故事解锁类型

{
    "type": 108
}

type取108时,为故事解锁类型。目前仅有Arghena使用了本解锁条件,在未完成挑战前,余下的解锁挑战将不会显示。

type 109:特殊解谜挑战类型

{
     "type": 109,
     "index": int,
     "difficulty": int
},

type取109时,为特殊解谜挑战类型。目前仅有Arghena使用了本解锁条件。

  • index (int): 解谜项目的索引(存疑)。
  • difficulty (int): 曲目难度。

type 110:伪段位挑战类型

{
     "type": 110
},

type取110时,为伪段位挑战类型。目前仅有Arghena使用了本解锁条件。与常规的段位挑战类似但是允许暂停。

参考资料

注释

  1. 一个conditions内可以有多条相同的解锁条件,并且每个解锁条件都会单独判断(例如Memory Archive中的右侧警示解锁难度所需的歌曲,曲目选择页面中会实时渐变切换的解锁条件等等)
  2. 不是Last或Last|Moment,从unlocks和songlist文件可以看出其实lasteternity是有别于last的另一个id,而Last|Moment只是和PRAGMATISM -RESURRECTION-一样的Beyond难度特殊名称