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

添加7,367字节 、​ 2025年3月23日 (星期日)
→‎总论:​ 添加type 9及type 10
(建议移除本条编辑记录)
→‎总论:​ 添加type 9及type 10
 
(未显示15个用户的34个中间版本)
第1行: 第1行:
{{技术型}}
<!--如果你通过查看源代码发现了这里,那么恭喜你发现了查看内容的第二种方法。
-->{{技术型}}
__NOINDEX__
__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>
|}
 
有点意思(笑)


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


{
<syntaxhighlight lang="json">
{
  "unlocks":[
  "unlocks":[
//all contents…
  //all contents…
  ]
  ]
}
}
</syntaxhighlight>


===细节解析===
===细节解析===
 例子
 例子
{
 
<syntaxhighlight lang="json">
{
     "songId": "chronostasis",
     "songId": "chronostasis",
     "ratingClass": 1,
     "ratingClass": 1,
第60行: 第57行:
      }
      }
     ]
     ]
}
}
</syntaxhighlight>
 归纳
 归纳
{
<syntaxhighlight lang="json">
{
   "songId": this.songname,
   "songId": this.songname,
   "ratingClass": classNum,
   "ratingClass": classNum,
第73行: 第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, 4 。0为PST难度,1为PRS难度,2为FTR 难度,3为BYD难度,4为ETR 难度。
*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时,为残片型解锁。玩家需要花费残片来开启当前歌曲的游玩权限 。credit的取值是一个整数,代表了 解锁当前难度歌曲需要花费的残片数量。
</syntaxhighlight>
 当type取0时,为残片型解锁。玩家需要花费残片来开启当前歌曲的游玩权限
*credit (int):指 解锁当前难度歌曲需要花费的残片数量。


====先行通过歌曲型解锁====
在该解锁条件情况下,花费残片后可以永久解锁对应谱面,意味着解锁该难度后,即使其他条件不满足,也不会将难度回锁。
{
 
    "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/3/4 ,与ratingClass含义相同。
*grade (int):限定先行通过的歌曲需要达到的评级 ,0为 不限定 ,1为达到C,2为达到B,3为达到A,4为达到AA,5为达到EX。
*grade (int):限定先行通过的歌曲需要达到的评级 ,数字对应条件见下表。
{| class="wikitable" style="text-align:center"
! 条件
! 评级
|-
| 0
不限定
|-
| 1
| C
|-
| 2
| B
|-
| 3
| A
|-
| 4
| AA
|-
| 5
| EX
|-
| 6
| EX+
|}


====先行游玩歌曲型解锁====
====type 2: 先行游玩歌曲型解锁====
{
<syntaxhighlight lang="json">
    "type":2,   
{
    "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,
    "type": 3,   
    "song_id": "songname",
    "song_difficulty": difficulty,
    "song_difficulty": difficulty,
    "grade": gradeNum,
    "grade": gradeNum,
    "times": timesNum
    "times": timesNum
}
}
</syntaxhighlight>
type取3时,为多次通过歌曲型解锁,与[[#先行通过歌曲型解锁|先行通过歌曲型解锁]]类似,不过需要多次通过相应曲目并达到给定评级。
type取3时,为多次通过歌曲型解锁,与[[#先行通过歌曲型解锁|先行通过歌曲型解锁]]类似,不过需要多次通过相应曲目并达到给定评级。
*times (int):指先行通过的歌曲需要达到限定评级的次数。
*times (int):指先行通过的歌曲需要达到限定评级的次数。
其他变量不再赘述。


====选择任务型解锁====
====type 4: 选择任务型解锁====
{
<syntaxhighlight lang="json">
    "type":4,
{
    "type": 4,
    "conditions": [
    "conditions": [
    {
    {
第131行: 第166行:
    }
    }
   ]  //end of condition(s)
   ]  //end of condition(s)
}
}
</syntaxhighlight>
type取4时,为选择任务型解锁。其中conditions类似最外侧的conditions,可填入不同的condition语句组。玩家只需挑选其中任意一个任务完成即可解锁。<s>套娃警告</s>
type取4时,为选择任务型解锁。其中conditions类似最外侧的conditions,可填入不同的condition语句组。玩家只需挑选其中任意一个任务完成即可解锁。<s>套娃警告</s>


====个人游玩潜力值型解锁====
====type 5: 个人游玩潜力值型解锁====
{
<syntaxhighlight lang="json">
    "type":5,   
{
    "rating": potentialNum
    "type": 5,   
}
    "rating": PotentialNum
type取5时,为个人游玩潜力值型解锁,玩家需要取得或超过限定的潜力值即可解锁。
}
*rating (int):指限定的个人游玩潜力值乘以100后的整数。<s>可以随便填,负数都行</s>
</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 7:先行解锁对应曲目难度型解锁===
<syntaxhighlight lang="json">
{
   "type": 7,
   "song_id": "songname",
   "song_difficulty": difficulty
}
</syntaxhighlight>
type取7时,为先行解锁对应曲目难度型解锁,与[[#先行游玩歌曲型解锁|先行游玩歌曲型解锁]]相似,不过只需要解锁曲目的对应难度,不需要游玩曲目。
 
===type 8:以特定通关类型通过对应曲目解锁===
<syntaxhighlight lang="json">
{
   "type": 8,
   "song_id": "songname",
   "song_difficulty": "difficulty",
   "lamp":"number",
}
</syntaxhighlight>
 
type取8时,需要以特定的通关条件通过对应的曲目。(此条件在V5.10随着[[Inverted World]][ETR]出现)
{| class="wikitable"
! lamp !! 条件
|-
| 0 || Track Lost
|-
| 1 || Track Complete(Normal Clear)
|-
| 2 || Full Recall
|-
| 3 || Pure Memory
|-
| 4 || Track Complete(Easy/绿C)
|-
| 5 || Track Complete(Hard/红C)
|-
|}
 
===type 9:以特定评级通过对应难度解锁===
<syntaxhighlight lang="json">
{
   "type": 9,
   "count": "count",
   "difficulty": difficulty,
   "grade": grade,
}
</syntaxhighlight>


==== 殊解锁类型====
type取9时,需要以 定的评级通过数张某个特定的难度的谱面。(目前仅在Renegade和Rays of Remnant的Beyond谱面出现)


{
===type 10:阅读对应故事解锁===
<syntaxhighlight lang="json">
{
   "type": 10,
   "major": major,
   "minor": minor,
}
</syntaxhighlight>
 
type取10时,需要阅读对应的故事解锁歌曲,阅读的故事为major-minor。(目前仅在Lament Rain出现)
 
===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]]和[[Arghena]]外,在普通曲目上使用该解锁类型会导致使用对应搭档游玩结束并返回到选曲界面后'''切换为其他搭档后对应曲目不显示曲绘和曲目信息'''(但可正常选择该曲目进入游戏)。 <ref group="参考资料">[https://gist.github.com/Misaka12456/1f815a81e4b2794f6c9af9dfdc29794a GitHub Gist:Misaka12456/Arcaea 曲目解锁条件 - 非异象曲目的搭档解锁条件测试]</ref><br>
*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}}
<references />
13

个编辑