@feihuaduo
2022-11-20T09:17:40.000000Z
字数 3747
阅读 1038
该文章的pdf版本链接:点击下载pdf
YGO决斗助手协议(以下简称DA协议)旨在帮助用户更便捷的进行ygo相关操作,包括但不限于卡组、加房等操作。
协议版本:1.0
创建日期:2021年9月30日
最后修改日期:2021年9月30日
协议主要分为以下两个部分:
DA协议对文本的检测顺序也应按照上述顺序进行
卡组协议用以将卡组文件与卡组文本相互转换,使卡组更容易在社交软件中传播。
卡组协议识别的文本有两种:卡组代码文本、卡组URL文本。
进行判断时应先判断文本为多行文本还是单行文本,若为多行文本,将其作为卡组代码文本判断;若为单行文本,将其作为卡组URL文本判断。
卡组文件的实质为文本文件,里面的文本内容即为卡组代码文本。
卡组代码文本由三部分组成:主卡组、额外卡组、副卡组。
卡组代码文本的语法格式为(带方括号[]的为可选项):
[#main
卡密1
……
卡密n]
[#extra
卡密1
……
卡密n]
[!side
卡密1
……
卡密n]
示例:
#main
63941210
#extra
87116928
87116928
!side
63941210
"#main"、"#extra"、"!side"为 卡组代码标识 ,分别声明主卡组、额外卡组、副卡组。
卡片以卡密表示,一行一个卡密,一个卡密表示一张卡。
判断方法: 判断文本中是否含有任意卡组代码标识,只要含有其中一个卡组代码标识,即视为该文本包含卡组代码文本。
处理: 从第一个卡组代码标识开始,取文本到原文本末尾,将取出来的文本以文本文件的方式保存为.ydk结尾的文件。
处理: 将本地卡组文件以文本文件方式读取,将其文本内容直接分享。
卡组URI主要以参数是否含有"decktype=deck"来判断是否为卡组URI,协议和主机没有限制,即各开发者可以将协议和主机改为自己的服务器,用户可以直接点击卡组URI打开到自己网站展示或是跳转到应用。
卡组URI由三部分组成: 协议、主机、参数
语法格式:
协议://主机&参数1?参数2?参数n
协议列表:
协议 | 说明 |
---|---|
ygo | ygo自有协议 |
http | http网络协议 |
https | https网络协议 |
主机列表:
主机 | 说明 |
---|---|
deck | ygo卡组 |
其他 | 任意主机,不限 |
参数列表:
参数名 | 说明 | 参数类型 | 可选值 | 是否必填 |
---|---|---|---|---|
ygotype | uri类型 | String | deck | 是 |
v | 协议版本 | int | 1 | 是 |
d | 卡组 | String | 无 | 否 |
在协议版本1中,卡组参数值为Base64Url,转换规则如下:
单种类卡: 由29位二进制位组成,前两位为数量位,后27位为卡密位。格式如下(小括号为格式类别区分,实际值不需要写):
(卡片数量位*2)(卡片数量位*27)
主/额外/副卡组: 由多个单种类卡文本直接拼接而成,最后将主卡组、额外、副卡组所有卡片文本依次直接拼接,作为卡组信息文本。格式如下:
(单种类卡1)(单种类卡2)(单种类卡n)
最终卡组文本参数: 由16位二进制卡组数量位和卡组信息文本拼接后二进制数进行Base64Url转换得到的文本。卡组数量位中其中前8位为主卡组卡片种类数量位,9-12位为4位卡片种类额外卡组位,13-16位为4位副卡组卡片种类数量位。二进制数格式如下:
(8位主卡组卡片种类数量位)(4位额外卡组卡片种类数量位)(4位副卡组卡片种类数量位)(卡组信息文本)
Base64Url: 为Base64表中将"/"和"+"替换为"-"和"_"的表
判断方法: 判断文本中是否含有"ygotype=deck"这个参数,如果含有,则从该参数开始往文本前面查找,依次查找是否含有"ygo://deck"、"http"、"https",如果有其中任意一个,则停止判断,视为该文本中含有卡组URI,其他情况视为文本中不包含卡组URI。
处理: 从查找到的协议文本开始,取文本到原文本末尾,将取出的文本作为卡组URI;判断URI中参数"v"的值(即协议版本),如果为1执行以下步骤:
处理:
客户端应支持ygo://deck协议,以确保可以点击卡组URL直接使用客户端打开。
卡组协议用以记录决斗房间信息,使用户可以更方便的进行约战。
加房协议识别的文本有两种:加房URI、加房密码。
判断时应优先判断加房URI,如果没有再去判断加房密码。
加房URI主要以参数是否含有"decktype=room"来判断是否为加房URI,协议和主机没有限制,即各开发者可以将协议和主机改为自己的服务器,用户可以直接点击加房URI跳转客户端提示用户进行决斗。
加房URI由三部分组成: 协议、主机、参数
语法格式:
协议://主机&参数1?参数2?参数n
协议列表:
协议 | 说明 |
---|---|
ygo | ygo自有协议 |
http | http网络协议 |
https | https网络协议 |
主机列表:
主机 | 说明 |
---|---|
room | ygo房间 |
其他 | 任意主机,不限 |
参数列表:
参数名 | 说明 | 参数类型 | 可选值 | 是否必填 |
---|---|---|---|---|
ygotype | uri类型 | String | Room | 是 |
v | 协议版本 | int | 1 | 是 |
h | 房间ip | String | 无 | 否 |
po | 房间端口 | int | 无 | 否 |
pw | 房间密码 | String | 无 | 是 |
判断方法: 判断文本中是否含有"ygotype=room"这个参数,如果含有,则从该参数开始往文本前面查找,依次查找是否含有"ygo:// room"、"http"、"https",如果有其中任意一个,则停止判断,视为该文本中含有加房URI,其他情况视为文本中不包含加房URI。
处理: 从查找到的协议文本开始,取文本到原文本末尾,将取出的文本作为加房URI;判断URI中参数"v"的值(即协议版本),如果为1执行以下步骤:
加房密码即为日常约战使用的密码,如"M#废话","T#废话"等。通过查找是否含有加房密码标识来判断是否含有加房密码。
加房密码标识列表(|为或者的意思,分割同类多个标识,自己本身不作为标识):
标识 | 说明 |
---|---|
M,|m,|M#|m# | MATCH模式 |
T,|t,|T#|t# | 2V2双打模式,默认16000血 |
AI,|ai,|AI#|ai# | 本地AI |
LF2,|lf2,|LF2#|lf2# | 使用服务器上第2个禁限卡表(可改成服务器上的禁限卡表编号) |
NS#|ns# | 不洗切卡组(任何情况都不洗,卡片效果要求的洗切也不洗) |
S#|s# | 单局 |
判断方法: 判断文本中是否含有任意加房密码标识,只要含有其中一个加房密码标识,即视为该文本包含加房密码。
处理: 从第一个加房密码标识开始,取文本到原文本末尾,将取出来的文本作为房间密码,ip和端口使用客户端默认的信息,加入该房间。
客户端应支持ygo://room协议,以确保可以点击加房URL直接使用客户端打开。