[关闭]
@feihuaduo 2022-11-20T09:17:40.000000Z 字数 3747 阅读 1137

YGO决斗助手协议(YGO-DA协议)

该文章的pdf版本链接:点击下载pdf

YGO决斗助手协议(以下简称DA协议)旨在帮助用户更便捷的进行ygo相关操作,包括但不限于卡组、加房等操作。

协议版本:1.0

创建日期:2021年9月30日

最后修改日期:2021年9月30日

协议主要分为以下两个部分:

  1. 卡组协议
  2. 加房协议

DA协议对文本的检测顺序也应按照上述顺序进行

1.卡组协议

卡组协议用以将卡组文件与卡组文本相互转换,使卡组更容易在社交软件中传播。
卡组协议识别的文本有两种:卡组代码文本、卡组URL文本。
进行判断时应先判断文本为多行文本还是单行文本,若为多行文本,将其作为卡组代码文本判断;若为单行文本,将其作为卡组URL文本判断。

① 卡组代码文本

卡组文件的实质为文本文件,里面的文本内容即为卡组代码文本。
卡组代码文本由三部分组成:主卡组、额外卡组、副卡组。
卡组代码文本的语法格式为(带方括号[]的为可选项):

[#main
卡密1
……
卡密n]
[#extra
卡密1
……
卡密n]
[!side
卡密1
……
卡密n]

示例:

#main
63941210
#extra
87116928
87116928
!side
63941210

"#main"、"#extra"、"!side"为 卡组代码标识 ,分别声明主卡组、额外卡组、副卡组。
卡片以卡密表示,一行一个卡密,一个卡密表示一张卡。

卡组代码文本转换卡组文件:

判断方法: 判断文本中是否含有任意卡组代码标识,只要含有其中一个卡组代码标识,即视为该文本包含卡组代码文本。
处理: 从第一个卡组代码标识开始,取文本到原文本末尾,将取出来的文本以文本文件的方式保存为.ydk结尾的文件。

卡组文件转换卡组代码文本:

处理: 将本地卡组文件以文本文件方式读取,将其文本内容直接分享。

② 卡组URI文本

卡组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表中将"/"和"+"替换为"-"和"_"的表

卡组URI示例:
http://deck.ourygo.top?ygotype=deck&v=1&d=FNhefVLXC2RMpY_w-43iOvy2SnXARcGDa4Gf-WWVKlHxmGQN9gbi5Y-FDdvkNIpufUXGkPmlV3n70HzV3OV58le_LRnThgSJlIImmKZAMuPJSqBUEax8yF1rIQy7GidRET65azdhGIVy2w4rI9b5cwTxrZ5JsWGN-uRnxrXZ0jdujdvkOJ9zVDCtMtezkT-6CuKtQso-yA

卡组URL转换为卡组文件:

判断方法: 判断文本中是否含有"ygotype=deck"这个参数,如果含有,则从该参数开始往文本前面查找,依次查找是否含有"ygo://deck"、"http"、"https",如果有其中任意一个,则停止判断,视为该文本中含有卡组URI,其他情况视为文本中不包含卡组URI。

处理: 从查找到的协议文本开始,取文本到原文本末尾,将取出的文本作为卡组URI;判断URI中参数"v"的值(即协议版本),如果为1执行以下步骤:

卡组文件转换为卡组URI:

处理:

③ 客户端支持:

客户端应支持ygo://deck协议,以确保可以点击卡组URL直接使用客户端打开。


2.加房协议

卡组协议用以记录决斗房间信息,使用户可以更方便的进行约战。
加房协议识别的文本有两种:加房URI、加房密码。
判断时应优先判断加房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执行以下步骤:

  1. 分别取出房间ip、房间端口、房间密码三个参数,进行url解码,将解码后的值作为房间信息,加入该房间。

② 加房密码

加房密码即为日常约战使用的密码,如"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直接使用客户端打开。

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注