牌譜を読むにゃ

Last-modified: 2022-06-29 (水) 23:33:28
更新履歴
2022/03ページ作成
2022/06/12対局のメタデータ」に「room_id」と「contest_uid」を追記
対局者」にプレイヤーの使用言語判定を追記
2022/06/16牌譜 - .lq.RecordNewRound」の「doras」に追記
牌譜 - .lq.RecordDealTile」を大幅に更新
2022/06/20牌譜 - .lq.RecordDiscardTile」を記述
2022/06/25対局者」の表の「item_id」行に、アイテム一覧へのリンクを追記
2022/06/27牌譜 - .lq.RecordChiPengGang」を記述
牌譜 - user_input - operation」の「type: 1 のサンプル」の表の「tile_state」行を更新
2022/06/28牌譜 - .lq.RecordAnGangAddGang」を記述
牌譜 - .lq.RecordBaBei」を記述
牌譜 - result」の「別表:resultのname」に「.lq.RecordNewCard」を追記
2022/06/29牌譜 - .lq.RecordHule」を記述
 
 

概要

牌譜をファイルに保存するにゃ」でダウンロードした牌譜ファイルの読み方を解説するにゃ!
主に、段位戦の牌譜を解説するにゃ!
段位戦以外の牌譜についても、少しだけ触れるにゃ!
なお、サンプルとして使用している牌譜データには、解説の都合上、編集を加えているにゃ!

 

牌譜の形式

牌譜データには複数の形式が確認されているにゃ!
将来のアップデートで、新しい形式が登場するかもしれないにゃ!

番号時期かんたんな説明
1~2019/12/31対局の情報と、牌譜データが、分離されているにゃ!
22020/01/01 ~ 2021/07/28対局の情報と、牌譜データが、一体になったにゃ!
32021/07/28~牌譜データに、煽りスタンプ情報や、操作情報などが加わったにゃ!

牌譜をファイルに保存するにゃ」でダウンロードした牌譜は、1番と2番が同じ形式になるように整形しているにゃ!
牌譜ダウンロードを自前のプログラムで行おうとする猫以外は、1番と2番を区別しなくていいにゃ!
3番は、1~2番に、いろいろな情報を付け加えたものにゃ!
3番の牌譜が読めるようになれば、1~2番の牌譜も読めるにゃ!
なので、このページでは、3番の牌譜の解説をするにゃ!
牌譜解析を自前のプログラムで行おうとする猫は、1~3それぞれの形式に対応する必要があるにゃ!
1~3の違いについては、「牌譜 - バージョン差異」の項でも解説するにゃ!

 

対局のメタデータ

牌譜ファイルを先頭から読んでいくにゃ!

"head": {
  "uuid": "220317-********-****-****-****-************",
  "start_time": 164745****,
  "end_time": 164745****,
  "config": {
    "category": 2,
    "mode": {
      "mode": 2,
      "detail_rule": {}
    },
    "meta": {
      "mode_id": 16
    }
  },
  "accounts": [
    いったん省略にゃ!
  ],
  "result": {
    いったん省略にゃ!
  }
},
キー説明参照
head対局に関する情報が記されているにゃ!ResGameRecord
uuid対局に割り振られた、固有のIDにゃ!先頭6桁は対局を開始した日付にゃ!ただし日本時間ではなく中国時間にゃ!RecordGame
start_time対局の開始日時にゃ!地球の共通時刻の1970年1月1日0時からの経過秒数にゃ!UNIX時間というものにゃ!RecordGame
end_time対局の終了日時にゃ!地球の共通時刻の1970年1月1日0時からの経過秒数にゃ!UNIX時間というものにゃ!RecordGame
config対局の種類やルールにゃ!GameConfig
categoryマッチング対戦かどうかが記されているにゃ!「2」は、段位戦などのようなマッチング対戦を意味するにゃ!GameConfig
mode東風戦か半荘戦か、詳細ルールが設定されているか、などが記されているにゃ!GameMode
mode「mode」の次にも「mode」が存在するにゃ!「2」は、半荘戦を意味するにゃ!東風戦だと「1」にゃ!GameMode
detail_rule友人戦などの場合、「喰い断アリ/ナシ」などの対局ルールの情報がここに並ぶにゃ!段位戦の場合は、何も書かれていないにゃ!GameDetailRule
meta友人戦の部屋番号、段位戦の部屋、などが記されているにゃ!GameMetaData
room_id友人戦の部屋番号にゃ!GameMetaData
mode_id段位戦の部屋、東風戦/半荘戦、などを意味する番号にゃ!「ゲームメタモード」のページを見るにゃ!GameMetaData
contest_uid大会戦の内部IDにゃ!大会ロビーに表示される大会IDとは異なるにゃ!GameMetaData
accounts対局者についての情報にゃ!「対局者」の項で説明するにゃ!RecordGame.AccountInfo
result対局結果スコア、段位戦ポイント増減、コイン収支、などの情報にゃ!「対局結果」の項で説明するにゃ!GameEndResult
 

対局者

対局のメタデータ」で省略した「accounts」について説明するにゃ!

"accounts": [
  {
    "account_id": ********,
    "seat": 0,
    "nickname": "★★★★",
    "avatar_id": 403602,
    "character": {
      "charid": 200036,
      "level": 5,
      "exp": 0,
      "skin": 403602,
      "is_upgraded": true,
      "extra_emoji": [
        990,
        10,
        11,
        12
      ]
    },
    "title": 600032,
    "level": {
      "id": 10501,
      "score": 1982
    },
    "level3": {
      "id": 20202,
      "score": 453
    },
    "avatar_frame": 0,
    "verified": 0,
    "views": [
      {
        "slot": 0,
        "item_id": ******
      },
      省略にゃ!
    ]
  },
  省略にゃ!
],
キー説明参照
accounts対局者についての情報にゃ!四麻ならば4人分、三麻ならば3人分の情報が並ぶにゃ!CPUが参加していても、CPUの情報は記されないにゃ!RecordGame.AccountInfo
account_id対局者の固有のIDにゃ!名前を変更しても、このIDは変わらないにゃ!RecordGame.AccountInfo
seatどの席かを示しているにゃ!「0」は起家にゃ!「」のページを見るにゃ!RecordGame.AccountInfo
nickname対局者の名前にゃ!将来名前を変更したとしても、ここには対局時の名前が記録されているにゃ!RecordGame.AccountInfo
avatar_id使用キャラクタと着せ替えのIDにゃ!「403602」は契約済みの天江衣にゃ!「着せ替え」のページを見るにゃ!RecordGame.AccountInfo
character使用キャラクタについての情報にゃ!Character
charid使用キャラクタのIDにゃ!「200036」は天江衣にゃ!「キャラクタ」のページを見るにゃ!Character
levelキャラクタとの絆レベルにゃ!「5」はレベルMAXにゃ!Character
exp現在の絆ポイントにゃ!Character
skin使用キャラクタと着せ替えのIDにゃ!「avatar_id」と同じ値にゃ!「着せ替え」のページを見るにゃ!Character
is_upgradedキャラクタと契約済みかどうかにゃ!「true」は契約済み、「false」は未契約にゃ!Character
extra_emoji使用可能な追加スタンプの情報にゃ!「スタンプ」のページを見るにゃ!Character
title称号にゃ!「600032」は「連勝の道」にゃ!強そうな称号で相手を威圧するにゃ!「称号」のページを見るにゃ!RecordGame.AccountInfo
level四麻の段位情報にゃ!AccountLevel
id四麻の段位にゃ!「10501」は「雀聖1」様にゃ!「段位」のページを見るにゃ!AccountLevel
score四麻の段位ポイントにゃ!昇段戦かどうか、降段戦かどうか、がわかるにゃ!AccountLevel
level3三麻の段位情報にゃ!AccountLevel
id三麻の段位にゃ!「20202」は「雀士2」にゃ!「段位」のページを見るにゃ!AccountLevel
score三麻の段位ポイントにゃ!昇段戦かどうか、降段戦かどうか、がわかるにゃ!AccountLevel
avatar_frame使用しているアイコンフレームにゃ!「アイコンフレーム」のページを見るにゃ!RecordGame.AccountInfo
verified公認プレイヤーかどうかにゃ!「0」は一般人にゃ!「1」は「にくきゅうま~く」付きにゃ!「2」はプロ雀士認定マーク付きにゃ!RecordGame.AccountInfo
views装備している装飾品の情報にゃ!ViewSlot
slot装飾品の種類にゃ!「0」は立直棒にゃ!「1」は和了演出、「2」は立直演出、…と続くにゃ!ViewSlot
item_id装備している装飾品のIDにゃ!「アイテム」のページを見るにゃ!ViewSlot
 

「account_id」から、プレイヤーがどの言語で雀魂をプレイしているかがわかるにゃ!
計算式は次のとおりにゃ!

account_id ÷ 8388608

上記計算結果が7未満ならば中国語にゃ!
7以上13未満ならば日本語にゃ!
13以上15未満ならば英語にゃ!

 

対局結果

対局のメタデータ」で省略した「result」について説明するにゃ!

"result": {
  "players": [
    {
      "seat": 3,
      "total_point": 63600,
      "part_point_1": 73600,
      "part_point_2": 0,
      "grading_score": 184,
      "gold": 17472
    },
    {
      "seat": 0,
      "total_point": -4200,
      "part_point_1": 15800,
      "part_point_2": 0,
      "grading_score": 56,
      "gold": -1176
    },
    {
      "seat": 2,
      "total_point": -18200,
      "part_point_1": 11800,
      "part_point_2": 0,
      "grading_score": -20,
      "gold": -5096
    },
    {
      "seat": 1,
      "total_point": -41200,
      "part_point_1": -1200,
      "part_point_2": 0,
      "grading_score": -50,
      "gold": -11200
    }
  ]
}
キー説明参照
result対局結果スコア、段位戦ポイント増減、コイン収支、などの情報にゃ!GameEndResult
players対局者のスコアなどの情報にゃ!四麻ならば4人分、三麻ならば3人分の情報が並ぶにゃ!並び順は順位を表しているにゃ!段位戦で同点の場合は、席順で順位が決まるにゃ!GameEndResult.PlayerItem
seat席にゃ!「」のページを見るにゃ!GameEndResult.PlayerItem
total_pointウマとオカを加算した点数にゃ!段位戦四麻のウマは「5-15」にゃ!オカは無しにゃ!1位は+15,000点、2位は+5,000点、3位は-5,000点、4位は-15,000点にゃ!最初から持っていた25,000点は返してしまうのでマイナスするにゃ!GameEndResult.PlayerItem
part_point_1対局で点棒をやり取りした結果の点数にゃ!GameEndResult.PlayerItem
part_point_2不明にゃ!GameEndResult.PlayerItem
grading_score段位ポイントや魂珠の増減にゃ!魂珠の場合は100で割った数字が画面に表示されるにゃ!胃が痛くなる数字にゃ!GameEndResult.PlayerItem
goldコイン収支にゃ!GameEndResult.PlayerItem
 

牌譜 - バージョン差異

牌譜の形式」に書いたように、牌譜にはバージョン差異があるにゃ!
説明するにゃ!

{
  省略
  "data": {
    "name": ".lq.GameDetailRecords",
    "data": {
      "records": [
        省略
      ]
      "version": 210715,
      "actions": [
        省略
      ]
    }
  },
  "data_url": ""
}
キー説明参照
data2020年以降の対局については、ここに牌譜が記録されているにゃ!2019年以前の対局については、本来ここは空っぽにゃ!でも、「牌譜をファイルに保存するにゃ」のページで紹介した方法でダウンロードした2019年以前の牌譜ファイルの場合は、ここに牌譜データを埋め込んでいるにゃ!ResGameRecord
name牌譜のデータ形式の名前にゃ!「".lq.GameDetailRecords"」で固定にゃ!Wrapper
data「".lq.GameDetailRecords"」のデータがここに記されているにゃ!Wrapper
records2021年7月28日アップデート以前の対局については、ここに牌譜が記録されているにゃ!2021年7月28日アップデート以降の対局については、ここは空っぽにゃ!GameDetailRecords
version2021年7月28日アップデート以前の対局については、ここは空っぽにゃ!2021年7月28日アップデート以降の対局については、「210715」で固定にゃ!GameDetailRecords
actions2021年7月28日アップデート以前の対局については、ここは空っぽにゃ!2021年7月28日アップデート以降の対局については、ここに牌譜が記録されているにゃ!GameDetailRecords
data_url2019年以前の対局については、牌譜データの場所を示すURLが書かれているにゃ!2020年以降の対局については、ここは空っぽにゃ!ResGameRecord
 

牌譜 - 基本

2021年7月28日アップデート以降の牌譜にだけ出てくるデータ形式を説明するにゃ!
とても大切なデータ形式なので、よく読んで、丸暗記するにゃ!

{
  "passed": ******,
  "type": *,
  "result": {
    省略にゃ!
  }
  "user_input": {
    省略にゃ!
  }
  "user_event": {
    省略にゃ!
  }
  "game_event": *
},
キー説明参照
passed牌譜記録開始からの経過時間にゃ!単位はミリ秒にゃ!-
typeどんなデータがこの次に記されているかを示す値にゃ!1~4のどれかにゃ!-
result牌山、配牌、自摸、打牌、鳴き、和了、流局、などなどのデータ記されているにゃ!ここが読めるようになれば、雀魂の牌譜読みはマスターにゃ!「牌譜 - result」の項で詳しく説明するにゃ!-
user_inputプレイヤーの操作に関する情報が記されているにゃ!「牌譜 - user_input」の項で詳しく説明するにゃ!-
user_eventプレイヤーの回線接続/回線切断について記されているにゃ!「牌譜 - user_event」の項で詳しく説明するにゃ!-
game_event対局の開始/終了について記されているにゃ!「牌譜 - game_event」の項で詳しく説明するにゃ!-
 

牌譜 - game_event

牌譜 - 基本」の項で説明した「type」が「4」の場合、「game_event」というキーが値を持っているにゃ!
「game_event」は、対局開始か対局終了をあらわしているにゃ!
それぞれのサンプルを紹介するにゃ!

{
  "passed": 11116,
  "type": 4,
  "game_event": 1
},
{
  "passed": 2021632,
  "type": 4,
  "game_event": 2
}
キー説明参照
passed牌譜記録開始からの経過時間にゃ!単位はミリ秒にゃ!-
type「4」の場合、「game_event」が値を持っているにゃ!-
game_event「1」は対局開始を意味しているにゃ!「2」は対局終了を意味しているにゃ!-
 

牌譜 - user_event

牌譜 - 基本」の項で説明した「type」が「3」の場合、「user_event 」というキーが値を持っているにゃ!
「user_event」は、プレイヤーの回線接続か回線切断をあらわしているにゃ!
それぞれのサンプルを紹介するにゃ!

{
  "passed": 4857,
  "type": 3,
  "user_event": {
    "seat": 0,
    "type": 1
  }
},
{
  "passed": 659302,
  "type": 3,
  "user_event": {
    "seat": 2,
    "type": 2
  }
},
キー説明参照
passed牌譜記録開始からの経過時間にゃ!単位はミリ秒にゃ!-
type「3」の場合、「user_event」が値を持っているにゃ!-
user_event回線接続/回線切断の際にあらわれるデータにゃ!-
seat席にゃ!「」のページを見るにゃ!-
type「1」はプレイヤーの回線が接続したことを意味しているにゃ!「2」はプレイヤーの回線が切断したことを意味しているにゃ!-
 

牌譜 - user_input

牌譜 - 基本」の項で説明した「type」が「2」の場合、「user_input」というキーが値を持っているにゃ!
「user_input」は、プレイヤーの操作をあらわしているにゃ!

{
  "passed": ******,
  "type": 2,
  "user_input": {
    "seat": *,
    "type": *,
    省略にゃ!
  }
},
キー説明参照
passed牌譜記録開始からの経過時間にゃ!単位はミリ秒にゃ!-
type「2」の場合、「user_input」が値を持っているにゃ!-
user_inputプレイヤーの操作をあらわすデータにゃ!-
seat席にゃ!「」のページを見るにゃ!-
type別表で説明するにゃ!-
 

[別表:user_inputのtype]

type説明
1対局中のスタンプ表示にゃ!「スタンプ」のページを見るにゃ!
2自分の順番での操作にゃ!打牌、暗槓、加槓、立直、自摸和了、九種九牌、などにゃ!「牌譜 - user_input - operation」の項で詳しく説明するにゃ!
3他家の順番での操作にゃ!チー、ポン、大明槓、ロン、などにゃ!「牌譜 - user_input - cpg」の項で詳しく説明するにゃ!
4N/A
51局が終了し、次局の準備ができたときにゃ!
6離席から戻り、操作再開したときにゃ!
7対局を開始するときにゃ!
8回線切断したプレイヤーが復帰したときにゃ!type「9」とセットであらわれるにゃ!
9回線切断したプレイヤーが復帰したときにゃ!type「8」とセットであらわれるにゃ!
 

[type: 1 のサンプル]

{
  "passed": 112740,
  "type": 2,
  "user_input": {
    "seat": 1,
    "type": 1,
    "emo": 0
  }
},
キー説明参照
passed牌譜記録開始からの経過時間にゃ!単位はミリ秒にゃ!-
type「2」の場合、「user_input」が値を持っているにゃ!-
user_inputプレイヤーの操作をあらわすデータにゃ!-
seat席にゃ!「」のページを見るにゃ!-
type「1」の場合、「emo」が値を持っているにゃ!-
emo表示されたスタンプにゃ!「スタンプ」のページを見るにゃ!-
 

[type: 7 のサンプル(type: 5 と 6 と 8 と 9 も同形式)]

{
  "passed": 8414,
  "type": 2,
  "user_input": {
    "seat": 2,
    "type": 7
  }
},
キー説明参照
passed牌譜記録開始からの経過時間にゃ!単位はミリ秒にゃ!-
type「2」の場合、「user_input」が値を持っているにゃ!-
user_inputプレイヤーの操作をあらわすデータにゃ!-
seat席にゃ!「」のページを見るにゃ!-
type「7」は、ローディング画面と「勝負」画面(対局開始画面)が完了して操作可能になったことを意味するにゃ!「5」は、和了や流局の画面で「確認」ボタンを押して、次局の操作が可能になったことを意味するにゃ!「6」は離席から戻った場合、「8」と「9」は回線切断から復帰した場合にゃ!-
 

牌譜 - user_input - operation

牌譜 - user_input」の項で説明した「type」が「2」の場合、「operation」というキーが値を持っているにゃ!
「operation」は、自分の順番での操作をあらわしているにゃ!

{
  "passed": ******,
  "type": 2,
  "user_input": {
    "seat": *,
    "type": 2,
    "operation": {
      "type": *,
      省略にゃ!
    }
  }
},
キー説明参照
passed牌譜記録開始からの経過時間にゃ!単位はミリ秒にゃ!-
type「2」の場合、「user_input」が値を持っているにゃ!-
user_inputプレイヤーの操作をあらわすデータにゃ!-
seat席にゃ!「」のページを見るにゃ!-
type「2」の場合、「operation」が値を持っているにゃ!-
operation自分の順番での操作をあらわすデータにゃ!-
type別表で説明するにゃ!-
 

[別表:operationのtype]

type説明
1打牌にゃ!
4暗槓にゃ!
6加槓にゃ!
7立直にゃ!
8自摸和了にゃ!
10九種九牌にゃ!
11三麻の北抜きにゃ!
12赤血の戦や修羅の戦における牌交換にゃ!
13赤血の戦における絶一門縛りにゃ!「gap_type」が0の場合は筒子、1の場合は萬子、2の場合は索子の絶一門にゃ!
14闇夜の戦における闇牌にゃ!
16闇夜の戦における闇維持にゃ!
17闇夜の戦における闇牌立直にゃ!
無しキャンセル操作にゃ!立直後の自摸和了キャンセル、立直後の暗槓キャンセル、立直後の闇牌キャンセル、闇維持キャンセル、などにゃ!
 

[type: 1 のサンプル (type: 7 も同形式)]

{
  "passed": 21161,
  "type": 2,
  "user_input": {
    "seat": 0,
    "type": 2,
    "operation": {
      "type": 1,
      "tile": "4z",
      "moqie": false,
      "timeuse": 3,
      "tile_state": 0
    }
  }
},
キー説明参照
passed牌譜記録開始からの経過時間にゃ!単位はミリ秒にゃ!-
type「2」の場合、「user_input」が値を持っているにゃ!-
user_inputプレイヤーの操作をあらわすデータにゃ!-
seat席にゃ!「」のページを見るにゃ!-
type「2」の場合、「operation」が値を持っているにゃ!-
operation自分の順番での操作をあらわすデータにゃ!-
type「1」は、プレイヤーが打牌操作をしたことを意味しているにゃ!「7」は,立直宣言直後の打牌操作を意味しているにゃ!なお、立直後は操作無しで自動打牌されるので、立直後の自動打牌については、「1」は牌譜に出現しないにゃ!-
tile河に捨てた牌にゃ!「4z」は北にゃ!萬子は1m~9m、筒子は1p~9p、索子は1s~9s、東南西北白発中は1z~7zと表記されるにゃ!赤牌は0m、0p、0sとなるにゃ!明鏡の戦の透け透け牌は、末尾にtを付けて、1mtというふうになるにゃ!-
moqie自摸切りかどうかをあらわしているにゃ!「true」は自摸切り、「false」は手出しにゃ!-
timeuse打牌するまでに使った思考時間にゃ!単位は秒にゃ!-
tile_state段位戦では数値は「0」で固定にゃ!友人戦などで「手牌表示」を「有効」にした場合、数値は「1」になるにゃ!ごく稀に、この値を持たない牌譜が存在するにゃ!詳しくは「イレギュラーな牌譜」の項で説明するにゃ!-
 

[type: 4 のサンプル(type: 6 も同形式)]

{
  "passed": 833726,
  "type": 2,
  "user_input": {
    "seat": 3,
    "type": 2,
    "operation": {
      "type": 4,
      "index": 1,
      "timeuse": 4
    }
  }
},
キー説明参照
passed牌譜記録開始からの経過時間にゃ!単位はミリ秒にゃ!-
type「2」の場合、「user_input」が値を持っているにゃ!-
user_inputプレイヤーの操作をあらわすデータにゃ!-
seat席にゃ!「」のページを見るにゃ!-
type「2」の場合、「operation」が値を持っているにゃ!-
operation自分の順番での操作をあらわすデータにゃ!-
type「4」は、暗槓にゃ!「6」は、加槓にゃ!-
index槓できるパターンが複数ある場合に、何番目のパターンを槓したかをあらわすにゃ!たとえば、「一二三東東東南南南西 一一一(ポン)」の状態で「東」を自摸ってきた場合、「一」を加槓すると「index」は「0」になるにゃ!「東」を暗槓すると「index」は「1」になるにゃ!-
timeuse槓するまでに使った思考時間にゃ!単位は秒にゃ!-
 

[type: 8 のサンプル]

{
  "passed": 1023759,
  "type": 2,
  "user_input": {
    "seat": 1,
    "type": 2,
    "operation": {
      "type": 8,
      "index": 0,
      "timeuse": 1
    }
  }
},
キー説明参照
passed牌譜記録開始からの経過時間にゃ!単位はミリ秒にゃ!-
type「2」の場合、「user_input」が値を持っているにゃ!-
user_inputプレイヤーの操作をあらわすデータにゃ!-
seat席にゃ!「」のページを見るにゃ!-
type「2」の場合、「operation」が値を持っているにゃ!-
operation自分の順番での操作をあらわすデータにゃ!-
type「8」は、自摸和了にゃ!-
index不明にゃ!ここが「0」以外の牌譜は見たことないにゃ!-
timeuse和了するまでに使った思考時間にゃ!単位は秒にゃ!「自動和了」をオンにしていた場合は、「timeuse」は記録されていないにゃ!-
 

[キャンセル操作のサンプル]

{
  "passed": 2706174,
  "type": 2,
  "user_input": {
    "seat": 2,
    "type": 2,
    "operation": {
      "cancel_operation": true,
      "timeuse": 1
    }
  }
},
キー説明参照
passed牌譜記録開始からの経過時間にゃ!単位はミリ秒にゃ!-
type「2」の場合、「user_input」が値を持っているにゃ!-
user_inputプレイヤーの操作をあらわすデータにゃ!-
seat席にゃ!「」のページを見るにゃ!-
type「2」の場合、「operation」が値を持っているにゃ!-
operation自分の順番での操作をあらわすデータにゃ!-
cancel_operationキャンセル操作をした場合は、「true」と記されているにゃ!立直後にド安めを自摸ったので和了拒否したなどという場合に記録されるにゃ!-
timeuseキャンセルするまでに使った思考時間にゃ!単位は秒にゃ!-
 

牌譜 - user_input - cpg

牌譜 - user_input」の項で説明した「type」が「3」の場合、「cpg」というキーが値を持っているにゃ!
「cpg」は、他家の順番での操作をあらわしているにゃ!
なお、「cpg」とは、「Chi Peng Gang」(チー、ポン、カン)の略にゃ!

{
  "passed": ******,
  "type": 2,
  "user_input": {
    "seat": *,
    "type": 3,
    "cpg": {
      "type": *,
      省略にゃ!
    }
  }
},
キー説明参照
passed牌譜記録開始からの経過時間にゃ!単位はミリ秒にゃ!-
type「2」の場合、「user_input」が値を持っているにゃ!-
user_inputプレイヤーの操作をあらわすデータにゃ!-
seat席にゃ!「」のページを見るにゃ!-
type「3」の場合、「cpg」が値を持っているにゃ!-
cpg他家の順番での操作をあらわすデータにゃ!-
type別表で説明するにゃ!-
 

[別表:cpgのtype]

type説明
2チーにゃ!
3ポンにゃ!
5大明槓にゃ!
9ロンにゃ!
15闇夜の戦における照射にゃ!なお、複数プレイヤーが照射を実行した場合は、実行の早さではなく、闇牌実行者から反時計回りで近いプレイヤーの照射が優先されるにゃ!
無しキャンセル操作にゃ!
 

[type: 2 のサンプル(type: 3 と 5 も同形式)]

{
  "passed": 116602,
  "type": 2,
  "user_input": {
    "seat": 1,
    "type": 3,
    "cpg": {
      "type": 2,
      "index": 0,
      "timeuse": 2
    }
  }
},
キー説明参照
passed牌譜記録開始からの経過時間にゃ!単位はミリ秒にゃ!-
type「2」の場合、「user_input」が値を持っているにゃ!-
user_inputプレイヤーの操作をあらわすデータにゃ!-
seat席にゃ!「」のページを見るにゃ!-
type「3」の場合、「cpg」が値を持っているにゃ!-
cpg他家の順番での操作をあらわすデータにゃ!-
type「2」は、チーにゃ!「3」は、ポンにゃ!「5」は、大明槓にゃ!-
index鳴きのパターンが複数ある場合に、何番目のパターンで鳴いたかをあらわすにゃ!-
timeuse鳴くまでに使った思考時間にゃ!単位は秒にゃ!-
 

[type: 9 のサンプル]

{
  "passed": 213274,
  "type": 2,
  "user_input": {
    "seat": 3,
    "type": 3,
    "cpg": {
      "type": 9,
      "index": 0,
      "timeuse": 2
    }
  }
},
キー説明参照
passed牌譜記録開始からの経過時間にゃ!単位はミリ秒にゃ!-
type「2」の場合、「user_input」が値を持っているにゃ!-
user_inputプレイヤーの操作をあらわすデータにゃ!-
seat席にゃ!「」のページを見るにゃ!-
type「3」の場合、「cpg」が値を持っているにゃ!-
cpg他家の順番での操作をあらわすデータにゃ!-
type「9」は、ロンにゃ!-
index不明にゃ!ここが「0」以外の牌譜は見たことないにゃ!-
timeuseロンするまでに使った思考時間にゃ!単位は秒にゃ!溜めロンはしっかり記録されているにゃ!「自動和了」をオンにしていた場合は、「timeuse」は記録されていないにゃ!-
 

[キャンセル操作のサンプル]

{
  "passed": 242019,
  "type": 2,
  "user_input": {
    "seat": 3,
    "type": 3,
    "cpg": {
      "cancel_operation": true,
      "timeuse": 0
    }
  }
},
キー説明参照
passed牌譜記録開始からの経過時間にゃ!単位はミリ秒にゃ!-
type「2」の場合、「user_input」が値を持っているにゃ!-
user_inputプレイヤーの操作をあらわすデータにゃ!-
seat席にゃ!「」のページを見るにゃ!-
type「3」の場合、「cpg」が値を持っているにゃ!-
cpg他家の順番での操作をあらわすデータにゃ!-
cancel_operationキャンセル操作をした場合は、「true」と記されているにゃ!-
timeuseキャンセルするまでに使った思考時間にゃ!単位は秒にゃ!-
 

牌譜 - result

牌譜 - 基本」の項で説明した「type」が「1」の場合、「result」というキーが値を持っているにゃ!
「result」は、牌山、配牌、自摸、打牌、鳴き、和了、流局、などなどをあらわしているにゃ!
いちばん牌譜らしいデータにゃ!

{
  "passed": ******,
  "type": 1,
  "result": {
    "name": ".lq.RecordXXXXXXXX",
    "data": {
    省略にゃ!
    }
  }
},
キー説明参照
passed牌譜記録開始からの経過時間にゃ!単位はミリ秒にゃ!-
type「1」の場合、「result」が値を持っているにゃ!-
result牌山、配牌、自摸、打牌、鳴き、和了、流局、などなどをあらわすデータにゃ!-
name下行のdataの種類をあらわす名称にゃ!別表で説明するにゃ!-
dataデータ本体にゃ!-
 

[別表:resultのname]

name説明参照
.lq.RecordNewRound対局開始にゃ!「牌譜 - .lq.RecordNewRound」の項で詳しく説明するにゃ!RecordNewRound
.lq.RecordDealTile自摸にゃ!「牌譜 - .lq.RecordDealTile」の項で詳しく説明するにゃ!RecordDealTile
.lq.RecordDiscardTile打牌にゃ!「牌譜 - .lq.RecordDiscardTile」の項で詳しく説明するにゃ!RecordDiscardTile
.lq.RecordChiPengGangチー、ポン、大明槓にゃ!「牌譜 - .lq.RecordChiPengGang」の項で詳しく説明するにゃ!RecordChiPengGang
.lq.RecordAnGangAddGang暗槓、加槓にゃ!「牌譜 - .lq.RecordAnGangAddGang」の項で詳しく説明するにゃ!RecordAnGangAddGang
.lq.RecordBaBei三麻の北抜きにゃ!「牌譜 - .lq.RecordBaBei」の項で詳しく説明するにゃ!RecordBaBei
.lq.RecordHule和了にゃ!「牌譜 - .lq.RecordHule」の項で詳しく説明するにゃ!RecordHule
.lq.RecordHuleXueZhanMid「XueZhan」を漢字で書くと「血戦」にゃ!赤血の戦や修羅の戦における途中和了にゃ!RecordHuleXueZhanMid
.lq.RecordHuleXueZhanEnd「XueZhan」を漢字で書くと「血戦」にゃ!赤血の戦や修羅の戦における最終和了にゃ!RecordHuleXueZhanEnd
.lq.RecordNoTile荒牌平局にゃ!「牌譜 - .lq.RecordNoTile」の項で詳しく説明するにゃ!RecordNoTile
.lq.RecordLiuJu途中流局にゃ!「牌譜 - .lq.RecordLiuJu」の項で詳しく説明するにゃ!RecordLiuJu
.lq.RecordChangeTile赤血の戦や修羅の戦における手牌交換にゃ!RecordChangeTile
.lq.RecordRevealTile闇夜の戦における闇牌にゃ!-
.lq.RecordUnveilTile闇夜の戦における照射にゃ!-
.lq.RecordLockTile闇夜の戦における、闇牌/照射/闇維持の結果確定にゃ!-
.lq.RecordSelectGap赤血の戦における絶一門縛りにゃ!-
.lq.RecordGangResult赤血の戦における、カンによる点数移動にゃ!-
.lq.RecordGangResultEnd不明にゃ!データ型は定義されているけれど、実際に出現する牌譜は見たことないにゃ!名前から推測すると、赤血の戦において、カンをした結果の点数移動でトビが発生してゲーム終了した場合かにゃ?誰か検証してほしいにゃ!-
.lq.RecordNewCard幻界の戦におけるカードにゃ!-
 

牌譜 - .lq.RecordNewRound

牌譜 - result」の項で説明した「name」が「.lq.RecordNewRound」の場合について説明するにゃ!
各局の開始時に一度だけ出現するデータ形式にゃ!
配牌や牌山の情報が記されているにゃ!

"name": ".lq.RecordNewRound",
"data": {
  "chang": 0,
  "ju": 0,
  "ben": 0,
  "scores": [
    25000,
    25000,
    25000,
    25000
  ],
  "liqibang": 0,
  "tiles0": [
    "1m",
    "2m",
    "5m",
    "7m",
    "8m",
    "9m",
    "2p",
    "4p",
    "6p",
    "7p",
    "5s",
    "6s",
    "9s",
    "3z"
  ],
  "tiles1": [
    省略にゃ!
  ],
  "tiles2": [
    省略にゃ!
  ],
  "tiles3": [
    省略にゃ!
  ],
  "tingpai": [
    省略にゃ!
  ],
  "operation": {
    "seat": 0,
    "operation_list": [
      {
        "type": 1
      }
    ],
    "time_add": 20000,
    "time_fixed": 8000
  },
  "md5": "945cee39977910189752dbf58117a4b0",
  "paishan": "1m2m8p3m6s6z7s7z4s2p1p8p3p7s1z7p3s0s4z9p7s7z3z3s6p9m8s7z2s6s9s4m6s5p1z3z2m9m2z5z1s2s6m7p2s3p7z8s1z7m7m1m1p5s1s6p2p6z3z9p0p8s1p1s4z4s4m9m8p6m1s0m3m8p4p6m4s4p5z9s6z9s2z",
  "left_tile_count": 69,
  "doras": [
    "5z"
  ],
  "opens": [
    {
      "seat": 0
    },
    {
      "seat": 1
    },
    {
      "seat": 2
    },
    {
      "seat": 3
    }
  ]
}
キー説明参照
nameデータ形式の名前にゃ!この表では「".lq.RecordNewRound"」のデータについて説明するにゃ!Wrapper
dataここから下に、データが書かれているにゃ!Wrapper
chang「0」は東場にゃ!「1」は南場にゃ!「2」は西場にゃ!RecordNewRound
ju各場において何局目かをあらわしているにゃ!「0」から数え始めるにゃ!「0」は各場の1局、「1」は各場の2局、「2」は各場の3局、「3」は各場の4局、となるにゃ!RecordNewRound
ben何本場かをあらわしているにゃ!「0」は0本場にゃ!RecordNewRound
scores各局開始時の各家の持ち点にゃ!1番上が起家の持ち点にゃ!2番目以下は、起家から見て反時計回りに各家の持ち点をあらわしているにゃ!RecordNewRound
liqibang供託の本数にゃ!立直後に流局すると、供託が貯まっていくにゃ!RecordNewRound
tiles0起家の配牌にゃ!親だと14枚、子だと13枚にゃ!萬子は1m~9m、筒子は1p~9p、索子は1s~9s、東南西北白発中は1z~7zと表記されるにゃ!赤牌は0m、0p、0sとなるにゃ!明鏡の戦の透け透け牌は、末尾にtを付けて、1mtというふうになるにゃ!RecordNewRound
tiles1起家の下家の配牌にゃ!親だと14枚、子だと13枚にゃ!RecordNewRound
tiles2起家の対面の配牌にゃ!親だと14枚、子だと13枚にゃ!RecordNewRound
tiles3起家の上家の配牌にゃ!親だと14枚、子だと13枚にゃ!RecordNewRound
tingpai配牌時のテンパイ情報にゃ!誰もテンパイしていない場合はこのキーは出てこないにゃ!親が14枚の配牌ですでに和了形(すなわち天和)となっていても、理牌した手牌の一番右端の牌を待ち牌とするテンパイとみなされるにゃ!配牌時テンパイとは、親ならば、天和確定か、またはダブル立直確定ということにゃ!子ならば、地和チャンスか、またはダブル立直チャンスということにゃ!RecordNewRound.TingPai
operation配牌時に可能な操作一覧が、ここから下に書かれているにゃ!多くの場合は、可能な操作は打牌選択だけにゃ!天和、親のダブル立直、配牌直後の親の暗槓、配牌直後の親の北抜き、九種九牌、などが可能な場合は、ここに記述されるにゃ!OptionalOperationList
seat席にゃ!「」のページを見るにゃ!OptionalOperationList
operation_list配牌時に可能な操作一覧がここに記されているにゃ!OptionalOperation
type配牌時に可能な操作一覧にゃ!別表で説明するにゃ!OptionalOperation
time_add操作をするために与えられた長考時間にゃ!単位はミリ秒にゃ!段位戦での長考時間は20秒にゃ!時間を消費すると減ってゆくにゃ!OptionalOperationList
time_fixed操作をするために与えられた思考時間にゃ!単位はミリ秒にゃ!段位戦では通常は1手あたり5秒が与えられるけれど、親の初手だけは8秒与えられるにゃ!OptionalOperationList
md5牌山コードにゃ!対局中に、画面左上のドラ表示欄をクリックすると表示されるにゃ!牌山から生成されたハッシュ値にゃ!RecordNewRound
paishan牌山にゃ!左から順に自摸ってゆくにゃ!右から14枚は王牌にゃ!萬子は1m~9m、筒子は1p~9p、索子は1s~9s、東南西北白発中は1z~7zと表記されるにゃ!赤牌は0m、0p、0sとなるにゃ!明鏡の戦の透け透け牌は、末尾にtを付けて、1mtというふうになるにゃ!RecordNewRound
left_tile_count牌山の残り枚数にゃ!王牌は含まないにゃ!RecordNewRound
dorasドラ表示牌にゃ!ドラそのものではないにゃ!なお、2019年9月以前の牌譜では、キー名は「doras」ではなく「dora」となっているにゃ!データ形式も異なっていて、配列ではないにゃ!牌譜解析プログラムを組む際には注意が必要にゃ!RecordNewRound
opens明鏡の戦における、手牌のうちで透けている牌の情報にゃ!通常ルールの対局では、気にする必要はない情報にゃ!NewRoundOpenedTiles
 

[別表:operation_listのtype]

type説明
1打牌にゃ!
2N/A(チー)
3N/A(ポン)
4暗槓にゃ!
5N/A(大明槓)
6N/A(加槓)
7ダブル立直にゃ!
8天和にゃ!
9N/A(ロン)
10九種九牌にゃ!
11三麻の北抜きにゃ!
12N/A(赤血の戦や修羅の戦における牌交換)
13N/A(赤血の戦における絶一門縛り)
14闇夜の戦における闇牌にゃ!
15N/A(闇夜の戦における照射)
16N/A(闇夜の戦における闇維持)
17闇夜の戦における闇牌ダブル立直にゃ!

牌譜 - result - data - operation」の項で詳しく説明するにゃ!
なお、表の説明欄が「N/A」となっているものは、配牌直後の親には選択できない操作か、または特殊ルールのため特殊な記述がされる操作ということにゃ!

 

[type: 8(天和)のサンプル]

"tingpai": [
  {
    "seat": 0,
    "tingpais1": [
      {
        "tile": "7z",
        "haveyi": false,
        "yiman": false,
        "count": 0,
        "fu": 40,
        "biao_dora_count": 0,
        "yiman_zimo": false,
        "count_zimo": 1,
        "fu_zimo": 30
      }
    ]
  }
],
"operation": {
  "seat": 0,
  "operation_list": [
    {
      "type": 1
    },
    {
      "type": 7,
      "combination": [
        "1m",
        "2m",
        "3m",
        "5m",
        "6m",
        "7m",
        "1p",
        "2p",
        "3p",
        "6s",
        "7s",
        "8s",
        "7z",
        "7z"
      ]
    },
    {
      "type": 8
    }
  ],
  "time_add": 20000,
  "time_fixed": 8000
},
キー説明参照
tingpaiテンパイ情報にゃ!親が14枚の配牌ですでに和了形(すなわち天和)となっていても、理牌した手牌の一番右端の牌を待ち牌とするテンパイとみなされるにゃ!複数人がテンパイしている場合は、テンパイしている人数分の情報が記されているにゃ!RecordNewRound.TingPai
seat席にゃ!「」のページを見るにゃ!RecordNewRound.TingPai
tingpais1テンパイの詳細情報にゃ!和了牌が複数ある場合は、それぞれの牌について情報が記されているにゃ!TingPaiInfo
tile待ち牌にゃ!TingPaiInfo
haveyiロンが可能かどうかにゃ!すなわち、役が有るかどうかにゃ!役が有るならば「true」、無いならば「false」にゃ!TingPaiInfo
yimanロンの場合に、役満となるかどうかにゃ!役満ならば「true」、そうでないならば「false」にゃ!TingPaiInfo
countロンの場合の翻数にゃ!ドラは含めないにゃ!場ゾロも含めないにゃ!TingPaiInfo
fuロンの場合の符数にゃ!サンプルでは、20+10+2+2で40符にゃ!TingPaiInfo
biao_dora_count表ドラの枚数にゃ!TingPaiInfo
yiman_zimo自摸和了の場合に、役満となるかどうかにゃ!役満ならば「true」、そうでないならば「false」にゃ!このサンプルは配牌時点で和了形なので、役満(天和)が成立するけれど、天和は巡目で成立する特殊な役満であり、牌姿だけを見ると役満形ではないので、ここでは「false」となるにゃ!TingPaiInfo
count_zimo自摸和了の場合の翻数にゃ!ドラは含めないにゃ!場ゾロも含めないにゃ!サンプルでは、天和は考慮せずに、門前清自摸和の一翻にゃ!TingPaiInfo
fu_zimo自摸和了の場合の符数にゃ!サンプルでは、20+2+2+2で30符にゃ!TingPaiInfo
operation選択可能な操作の情報にゃ!OptionalOperationList
seat席にゃ!「」のページを見るにゃ!OptionalOperationList
operation_list選択可能な操作の一覧にゃ!サンプルでは、打牌、ダブル立直、自摸和了(天和)、の3つの選択肢が記されているにゃ!OptionalOperation
type「1」は打牌にゃ!「7」はダブル立直にゃ!「8」は自摸和了(天和)にゃ!上掲の[別表:operation_listのtype]を見るにゃ!OptionalOperation
combination「type」「7」の場合は、立直するための打牌候補がここに記されているにゃ!サンプルではすでに和了形ができあがっており、14枚どれを切ってもフリテンダブル立直が可能なので、14枚全部が立直の打牌候補として記されているにゃ!OptionalOperation
time_add操作をするために与えられた長考時間にゃ!単位はミリ秒にゃ!OptionalOperationList
time_fixed操作をするために与えられた思考時間にゃ!単位はミリ秒にゃ!OptionalOperationList
 

牌譜 - .lq.RecordDealTile

牌譜 - result」の項で説明した「name」が「.lq.RecordDealTile」の場合について説明するにゃ!
牌を自摸ってきたときに出現するデータ形式にゃ!

"name": ".lq.RecordDealTile",
"data": {
  "seat": 0,
  "tile": "4s",
  "left_tile_count": 22,
  "liqi": {
    "seat": 1,
    "score": 32900,
    "liqibang": 1
  },
  "doras": [
    "7m",
    "4p"
  ],
  "zhenting": [
    false,
    false,
    false,
    true
  ],
  "operation": {
    "seat": 0,
    "operation_list": [
      {
        "type": 1
      }
    ],
    "time_add": 20000,
    "time_fixed": 5000
  }
}
キー説明参照
nameデータ形式の名前にゃ!この表では「".lq.RecordDealTile"」のデータについて説明するにゃ!Wrapper
dataここから下に、データが書かれているにゃ!Wrapper
seat席にゃ!「」のページを見るにゃ!誰が牌を自摸ってきたかをあらわしているにゃ!RecordDealTile
tile自摸ってきた牌にゃ!萬子は1m~9m、筒子は1p~9p、索子は1s~9s、東南西北白発中は1z~7zと表記されるにゃ!赤牌は0m、0p、0sとなるにゃ!RecordDealTile
left_tile_count牌山の残り枚数にゃ!王牌は含まないにゃ!RecordDealTile
liqi誰かの立直が成立したことを示すデータにゃ!立直宣言牌で放銃すると立直は不成立にゃ!なので、立直成立の判断は、立直者の立直宣言時ではなく、立直後の他家の操作時に行われるにゃ!LiQiSuccess
seat席にゃ!「」のページを見るにゃ!誰が立直をしたかをあらわしているにゃ!LiQiSuccess
score立直者の立直後の持ち点にゃ!立直の1,000点棒を出したあとの点数ということにゃ!LiQiSuccess
liqibang供託の本数にゃ!立直後に流局すると、供託が貯まっていくにゃ!LiQiSuccess
doras嶺上牌を自摸った際の、ドラ表示牌の一覧にゃ!大明槓や加槓の場合は、槓ドラは後めくりなので、槓ドラ抜きのドラ表示牌一覧になるにゃ!暗槓の場合は、槓ドラは即めくりなので、槓ドラを含むドラ表示牌一覧になるにゃ!RecordDealTile
zhentingフリテンに関する情報にゃ!フリテンで出和了り不可の場合は「true」になるにゃ!出和了り可能な場合は「false」になるにゃ!1行目は起家、2行目は起家の下家、3行目は起家の対面、4行目は起家の上家にゃ!RecordDealTile
operation自摸時に可能な操作一覧が、ここから下に書かれているにゃ!打牌、暗槓、加槓、立直、自摸和了、九種九牌、北抜き、闇牌、闇牌立直、のどれかにゃ!OptionalOperationList
seat席にゃ!「」のページを見るにゃ!OptionalOperationList
operation_list自摸時に可能な操作一覧がここに記されているにゃ!OptionalOperation
type自摸時に可能な操作一覧にゃ!別表で説明するにゃ!OptionalOperation
time_add操作をするために与えられた長考時間にゃ!単位はミリ秒にゃ!段位戦での長考時間は20秒にゃ!時間を消費すると減ってゆくにゃ!OptionalOperationList
time_fixed操作をするために与えられた思考時間にゃ!単位はミリ秒にゃ!段位戦では1手あたり5秒が与えられるにゃ!OptionalOperationList
 

[別表:operation_listのtype]

type説明
1打牌にゃ!
2N/A(チー)
3N/A(ポン)
4暗槓にゃ!
5N/A(大明槓)
6加槓にゃ!
7立直にゃ!
8自摸和了にゃ!
9N/A(ロン)
10九種九牌にゃ!
11三麻の北抜きにゃ!
12N/A(赤血の戦や修羅の戦における牌交換)
13N/A(赤血の戦における絶一門縛り)
14闇夜の戦における闇牌にゃ!
15N/A(闇夜の戦における照射)
16N/A(闇夜の戦における闇維持)
17闇夜の戦における闇牌立直にゃ!

牌譜 - result - data - operation」の項で詳しく説明するにゃ!
なお、表の説明欄が「N/A」となっているものは、自摸時には選択できない操作ということにゃ!

 

牌譜 - .lq.RecordDiscardTile

牌譜 - result」の項で説明した「name」が「.lq.RecordDiscardTile」の場合について説明するにゃ!
打牌したときに出現するデータ形式にゃ!

"name": ".lq.RecordDiscardTile",
"data": {
  "seat": 3,
  "tile": "7m",
  "is_liqi": false,
  "moqie": false,
  "zhenting": [
    false,
    false,
    false,
    true
  ],
  "tingpais": [
    {
      "tile": "6m",
      "haveyi": true,
      "yiman": false,
      "count": 1,
      "fu": 30,
      "biao_dora_count": 1,
      "yiman_zimo": false,
      "count_zimo": 1,
      "fu_zimo": 30
    },
    {
      "tile": "9m",
      "haveyi": false,
      "yiman": false,
      "count": 0,
      "fu": 30,
      "biao_dora_count": 1,
      "yiman_zimo": false,
      "count_zimo": 0,
      "fu_zimo": 30
    }
  ],
  "doras": [
    "8m",
    "9s"
  ],
  "is_wliqi": false
  "operations": [
    {
      "seat": 0,
      "operation_list": [
        {
          "type": 2,
          省略にゃ!
        }
      ],
      "time_add": 20000,
      "time_fixed": 5000
    }
  ]
}
キー説明参照
nameデータ形式の名前にゃ!この表では「".lq.RecordDiscardTile"」のデータについて説明するにゃ!Wrapper
dataここから下に、データが書かれているにゃ!Wrapper
seat席にゃ!「」のページを見るにゃ!誰が打牌したかをあらわしているにゃ!RecordDiscardTile
tile河に捨てた牌にゃ!萬子は1m~9m、筒子は1p~9p、索子は1s~9s、東南西北白発中は1z~7zと表記されるにゃ!赤牌は0m、0p、0sとなるにゃ!RecordDiscardTile
is_liqiこの打牌時に立直が宣言されたかどうかを示しているにゃ!立直宣言牌で放銃すると立直は不成立なので、この段階では立直はまだ成立していないにゃ!立直は、他家が和了以外の操作をした段階で成立するにゃ!「true」は立直宣言あり、「false」は立直宣言無しにゃ!なお、立直成立後の自動自摸切りのときは、ここの値は「false」にゃ!RecordDiscardTile
moqie自摸切りかどうかにゃ!牌譜再生をしたときにグレーで表示されるのが自摸切りにゃ!「true」は自摸切り、「false」は手出しにゃ!RecordDiscardTile
zhentingフリテンに関する情報にゃ!フリテンで出和了り不可の場合は「true」になるにゃ!出和了り可能な場合は「false」になるにゃ!(ただし、後述するように、出和了り可能なのに「true」となる例外があるにゃ!)1行目は起家、2行目は起家の下家、3行目は起家の対面、4行目は起家の上家にゃ!なお、「.lq.RecordDealTile」(自摸の記録)のときとは異なり、「.lq.RecordDiscardTile」(打牌の記録)では、「zhenting」の内容の読み取りに注意が必要にゃ!「.lq.RecordDealTile」では、単純にフリテン情報と考えていいにゃ!一方、「.lq.RecordDiscardTile」では、捨てられた牌が他家の和了り牌だった場合は、出和了りの可否に関係なく、「true」となるにゃ!つまり、この打牌時には出和了りできるけれど、仮に見逃した場合はフリテンとなる、という情報も示しているにゃ!分かりづらいので要注意にゃ!RecordDiscardTile
tingpais打牌者が聴牌している場合は、聴牌情報がここに記されているにゃ!両面待ちなどのように待ちが複数ある場合は、待ちの牌それぞれ個別に聴牌情報が記されているにゃ!2019年12月以前の牌譜と12月以降の牌譜では、「tingpais」の内容が異なっているので、注意が必要にゃ!TingPaiInfo
tile待ちの牌にゃ!萬子は1m~9m、筒子は1p~9p、索子は1s~9s、東南西北白発中は1z~7zと表記されるにゃ!TingPaiInfo
haveyi2019年12月以降の牌譜では、役有りかどうかを示しているにゃ!「true」は役有り、「false」は役無しにゃ!出和了りが可能かどうかということにゃ!例に示したデータでは、六萬では役有り、九萬では役無しにゃ!一方、2019年12月以前の牌譜では、次行に記す「yiman」と同じデータになっているにゃ!つまり、役満かどうかを示しているにゃ!たぶんバグにゃ!TingPaiInfo
yiman出和了りの場合に役満かどうかを示しているにゃ!「true」は役満、「false」は非役満にゃ!自摸四暗刻の場合、出和了りでは役満ではないので「false」にゃ!TingPaiInfo
count出和了りの場合の翻数にゃ!ドラは含まないにゃ!TingPaiInfo
fu出和了りの場合の符数にゃ!TingPaiInfo
biao_dora_count手牌に持っているドラの枚数にゃ!赤ドラや、三麻の抜きドラも含むにゃ!ただし、裏ドラは除くにゃ!TingPaiInfo
yiman_zimo2019年12月以降の牌譜にだけ存在するデータにゃ!自摸和了りの場合に役満かどうかを示しているにゃ!「true」は役満、「false」は非役満にゃ!TingPaiInfo
count_zimo2019年12月以降の牌譜にだけ存在するデータにゃ!自摸和了りの場合の翻数にゃ!ドラは含まないにゃ!TingPaiInfo
fu_zimo2019年12月以降の牌譜にだけ存在するデータにゃ!自摸和了りの場合の符数にゃ!TingPaiInfo
doras大明槓または加槓をした後の、ドラ表示牌の一覧にゃ!大明槓や加槓の場合は、槓ドラは後めくりなので、打牌のときに槓ドラのデータが記録されるにゃ!暗槓の場合は、槓ドラは即めくりなので、嶺上牌を自摸ったときに槓ドラのデータが記録されるにゃ!RecordDiscardTile
is_wliqiこの打牌時にダブル立直が宣言されたかどうかを示しているにゃ!ダブル立直宣言牌で放銃するとダブル立直は不成立なので、この段階ではダブル立直はまだ成立していないにゃ!ダブル立直は、他家が和了以外の操作をした段階で成立するにゃ!「true」はダブル立直宣言あり、「false」はダブル立直宣言無しにゃ!なお、ダブル立直成立後の自動自摸切りのときは、ここの値は「false」にゃ!RecordDiscardTile
operations打牌時に可能な操作一覧が、ここから下に書かれているにゃ!チー、ポン、大明槓、ロン、のどれかにゃ!OptionalOperationList
seat席にゃ!「」のページを見るにゃ!OptionalOperationList
operation_list打牌時に可能な操作一覧がここに記されているにゃ!OptionalOperation
type打牌時に可能な操作一覧にゃ!別表で説明するにゃ!OptionalOperation
time_add操作をするために与えられた長考時間にゃ!単位はミリ秒にゃ!段位戦での長考時間は20秒にゃ!時間を消費すると減ってゆくにゃ!OptionalOperationList
time_fixed操作をするために与えられた思考時間にゃ!単位はミリ秒にゃ!段位戦では1手あたり5秒が与えられるにゃ!OptionalOperationList
 

[別表:operation_listのtype]

type説明
1N/A(打牌)
2チーにゃ!
3ポンにゃ!
4N/A(暗槓)
5大明槓にゃ!
6N/A(加槓)
7N/A(立直)
8N/A(自摸和了)
9ロンにゃ!
10N/A(九種九牌)
11N/A(三麻の北抜き)
12N/A(赤血の戦や修羅の戦における牌交換)
13N/A(赤血の戦における絶一門縛り)
14N/A(闇夜の戦における闇牌)
15N/A(闇夜の戦における照射)
16N/A(闇夜の戦における闇維持)
17N/A(闇夜の戦における闇牌立直)

牌譜 - result - data - operation」の項で詳しく説明するにゃ!
なお、表の説明欄が「N/A」となっているものは、打牌時には選択できない操作ということにゃ!

 

牌譜 - .lq.RecordChiPengGang

牌譜 - result」の項で説明した「name」が「.lq.RecordChiPengGang」の場合について説明するにゃ!
チー、ポン、大明槓のどれかをしたときに出現するデータ形式にゃ!

"name": ".lq.RecordChiPengGang",
"data": {
  "seat": 3,
  "type": 0,
  "tiles": [
    "4p",
    "6p",
    "0p"
  ],
  "froms": [
    3,
    3,
    0
  ],
  "liqi": {
    "seat": 0,
    "score": 24000,
    "liqibang": 1
  },
  "zhenting": [
    false,
    false,
    false,
    false
  ],
  "operation": {
    "seat": 3,
    "operation_list": [
      {
        "type": 1,
        "combination": [
          "5p"
        ]
      }
    ],
    "time_add": 20000,
    "time_fixed": 5000
  },
  "tile_states": [
    0,
    0
  ]
}
キー説明参照
nameデータ形式の名前にゃ!この表では「".lq.RecordChiPengGang"」のデータについて説明するにゃ!Wrapper
dataここから下に、データが書かれているにゃ!Wrapper
seat席にゃ!「」のページを見るにゃ!誰が鳴いたかをあらわしているにゃ!RecordChiPengGang
type「0」はチーにゃ!「1」はポンにゃ!「2」は大明槓にゃ!RecordChiPengGang
tiles副露した牌の組にゃ!チー、ポンの場合は、1~2行目が自分の手牌の中にあった牌、3行目が他家から取ってきた牌にゃ!大明槓の場合は、1~3行目が自分の手牌の中にあった牌、4行目が他家から取ってきた牌にゃ!(赤牌があるため、ポンや大明槓の場合でも、全部同じ牌になるとは限らないにゃ!)サンプルにある「"4p", "6p", "0p"」とは、赤5筒でチーしたということにゃ!RecordChiPengGang
froms副露した牌の出どころにゃ!数値の意味については「」のページを見るにゃ!サンプルにある「3, 3, 0」とは、まず自分は起家の上家(3)であり、副露した4筒と6筒が自分の手牌の中にあった牌であり、鳴いた赤5筒は起家(0)が捨てた牌であるということにゃ!RecordChiPengGang
liqi誰かの立直が成立したことを示すデータにゃ!立直宣言牌で放銃すると立直は不成立にゃ!なので、立直成立の判断は、立直者の立直宣言時ではなく、立直後の他家の操作時に行われるにゃ!サンプルでは、起家が赤5筒を捨てて立直宣言をし、その宣言牌に対して起家の上家がチーをし、この段階で起家の立直が成立したということにゃ!LiQiSuccess
seat席にゃ!「」のページを見るにゃ!誰が立直をしたかをあらわしているにゃ!LiQiSuccess
score立直者の立直後の持ち点にゃ!立直の1,000点棒を出したあとの点数ということにゃ!LiQiSuccess
liqibang供託の本数にゃ!立直後に流局すると、供託が貯まっていくにゃ!LiQiSuccess
zhentingフリテンに関する情報にゃ!フリテンで出和了り不可の場合は「true」になるにゃ!出和了り可能な場合は「false」になるにゃ!1行目は起家、2行目は起家の下家、3行目は起家の対面、4行目は起家の上家にゃ!RecordChiPengGang
operationチー、またはポンの場合は、鳴いた後の打牌時の喰い替えについての情報が、ここから下に書かれているにゃ!大明槓の場合は、喰い替えは存在しないため、このキーは存在しないにゃ!OptionalOperationList
seat席にゃ!「」のページを見るにゃ!OptionalOperationList
operation_list喰い替えについての情報がここに記されているにゃ!OptionalOperation
type「1」で固定にゃ!「1」は打牌を意味するにゃ!OptionalOperation
combination喰い替えできない牌の一覧にゃ!リャンメンターツからのチーの場合は、ターツ両側の数牌2種は捨てられないにゃ!カンチャンターツからのチーの場合は、鳴いた牌と同じ数の数牌は捨てられないにゃ!ポンの場合は、鳴いた牌と同じ牌は捨てられないにゃ!サンプルでは、他家が捨てた赤5筒をカンチャンからチーをしたが、その直後は、仮に不要だとしても黒5筒は捨てられないことを意味するにゃ!OptionalOperation
time_add操作をするために与えられた長考時間にゃ!単位はミリ秒にゃ!段位戦での長考時間は20秒にゃ!時間を消費すると減ってゆくにゃ!OptionalOperationList
time_fixed操作をするために与えられた思考時間にゃ!単位はミリ秒にゃ!段位戦では1手あたり5秒が与えられるにゃ!OptionalOperationList
tile_states2019年12月以降の牌譜にだけ存在するデータにゃ!チーやポンの場合は、数値2個の配列にゃ!大明槓の場合は、数値3個の配列にゃ!段位戦では数値は「0」で固定にゃ!友人戦などで「手牌表示」を「有効」にした場合、数値は「1」になるにゃ!RecordChiPengGang
 

牌譜 - .lq.RecordAnGangAddGang

牌譜 - result」の項で説明した「name」が「.lq.RecordAnGangAddGang」の場合について説明するにゃ!
加槓、暗槓のどちらかをしたときに出現するデータ形式にゃ!

"name": ".lq.RecordAnGangAddGang",
"data": {
  "seat": 2,
  "type": 2,
  "tiles": "2s",
  "doras": [
    "8p",
    "5z"
  ],
  "operations": [
    {
      "seat": 1,
      "operation_list": [
        {
          "type": 9
        }
      ],
      "time_add": 20000,
      "time_fixed": 5000
    }
  ]
}
キー説明参照
nameデータ形式の名前にゃ!この表では「".lq.RecordAnGangAddGang"」のデータについて説明するにゃ!Wrapper
dataここから下に、データが書かれているにゃ!Wrapper
seat席にゃ!「」のページを見るにゃ!誰が加槓/暗槓したかをあらわしているにゃ!RecordAnGangAddGang
type「2」は加槓にゃ!「3」は暗槓にゃ!RecordAnGangAddGang
tiles加槓/暗槓した牌にゃ!RecordAnGangAddGang
doras加槓/暗槓する直前に、大明槓/加槓がされていた場合、直前の槓の後めくりの槓ドラはこのタイミングでめくられるにゃ!この場合、ここに、ドラ表示牌一覧が記されるにゃ!暗槓の即めくりの槓ドラについては、嶺上牌を自摸った時にドラがデータに記されるにゃ!RecordAnGangAddGang
operations加槓の場合は、他家が槍槓でロン可能ならば、ここにその情報が書かれているにゃ!暗槓の場合は、他家が国士無双でロン可能ならば、ここにその情報が書かれているにゃ!(雀魂では、暗槓からの国士無双ロンが可能)OptionalOperationList
seat席にゃ!「」のページを見るにゃ!OptionalOperationList
operation_list槍槓または暗槓からのロンについての情報がここに記されているにゃ!OptionalOperation
type「9」で固定にゃ!「9」はロンを意味するにゃ!OptionalOperation
time_add操作をするために与えられた長考時間にゃ!単位はミリ秒にゃ!段位戦での長考時間は20秒にゃ!時間を消費すると減ってゆくにゃ!OptionalOperationList
time_fixed操作をするために与えられた思考時間にゃ!単位はミリ秒にゃ!段位戦では1手あたり5秒が与えられるにゃ!OptionalOperationList
 

段位戦の牌譜において、サンプルに示したような、「doras」キーと「operations」キーが両方存在するのは、次のどちらかのケースにゃ!どちらもレアにゃ!

大明槓または加槓をする
  ↓
自摸ってきた嶺上牌で加槓をする
  ↓
その加槓で他家が槍槓ロン可能
大明槓または加槓をする
  ↓
自摸ってきた嶺上牌で暗槓をする
  ↓
その暗槓で他家が国士無双ロン可能
 

牌譜 - .lq.RecordBaBei

牌譜 - result」の項で説明した「name」が「.lq.RecordBaBei」の場合について説明するにゃ!
三麻で北抜きをしたときに出現するデータ形式にゃ!

"name": ".lq.RecordBaBei",
"data": {
  "seat": 2,
   "doras": [
     "9m",
     "2s"
   ],
  "operations": [
    {
      "seat": 0,
      "operation_list": [
        {
          "type": 9
        }
      ],
      "time_add": 20000,
      "time_fixed": 5000
    }
  ],
  "moqie": true
}
キー説明参照
nameデータ形式の名前にゃ!この表では「".lq.RecordBaBei"」のデータについて説明するにゃ!Wrapper
dataここから下に、データが書かれているにゃ!Wrapper
seat席にゃ!「」のページを見るにゃ!誰が北抜きしたかをあらわしているにゃ!RecordBaBei
dorasまず大明槓/加槓をして、自摸った嶺上牌が北だったので北抜きをした場合、直前の槓の後めくりの槓ドラはこのタイミングでめくられるにゃ!この場合、ここに、ドラ表示牌一覧が記されるにゃ!暗槓の即めくりの槓ドラについては、嶺上牌を自摸った時にドラがデータに記されるにゃ!RecordBaBei
operations抜いた北で他家がロン可能ならば、ここにその情報が書かれているにゃ!OptionalOperationList
seat席にゃ!「」のページを見るにゃ!OptionalOperationList
operation_list抜いた北でのロンについての情報がここに記されているにゃ!OptionalOperation
type「9」で固定にゃ!「9」はロンを意味するにゃ!OptionalOperation
time_add操作をするために与えられた長考時間にゃ!単位はミリ秒にゃ!段位戦での長考時間は20秒にゃ!時間を消費すると減ってゆくにゃ!OptionalOperationList
time_fixed操作をするために与えられた思考時間にゃ!単位はミリ秒にゃ!段位戦では1手あたり5秒が与えられるにゃ!OptionalOperationList
moqie自摸った北の即抜きかどうかにゃ!即抜きだと、牌譜再生をしたときにグレーで表示されるにゃ!「true」は自摸からの即抜き、「false」は手牌からの北抜きにゃ!RecordBaBei
 

段位戦の牌譜において、サンプルに示したような、「doras」キーと「operations」キーが両方存在するのは、次のケースにゃ!

大明槓または加槓をする
  ↓
自摸ってきた嶺上牌の北で北抜きをする
  ↓
その北で他家がロン可能
 

牌譜 - .lq.RecordHule

牌譜 - result」の項で説明した「name」が「.lq.RecordHule」の場合について説明するにゃ!
和了したときに出現するデータ形式にゃ!

"name": ".lq.RecordHule",
"data": {
  "hules": [
    {
      "hand": [
        "2p",
        "2p",
        "3s",
        "2s",
        "1s",
        "7p",
        "8p"
      ],
      "ming": [
        "kezi(6z,6z,6z)",
        "angang(0m,5m,5m,5m)"
      ],
      "hu_tile": "6p",
      "seat": 3,
      "zimo": true,
      "qinjia": true,
      "liqi": false,
      "doras": [
        "1z",
        "7s"
      ],
      "yiman": false,
      "count": 3,
      "fans": [
        {
          "val": 1,
          "id": 8
        },
        {
          "val": 1,
          "id": 4
        },
        {
          "val": 1,
          "id": 32
        }
      ],
      "fu": 50,
      "point_rong": 9600,
      "point_zimo_xian": 3200,
      "title_id": 0,
      "point_sum": 9600,
      "dadian": 9600,
      "baopai": 0
    }
  ],
  "old_scores": [
    29200,
    22000,
    25800,
    23000
  ],
  "delta_scores": [
    -3200,
    -3200,
    -3200,
    9600
  ],
  "wait_timeout": 0,
  "scores": [
    26000,
    18800,
    22600,
    32600
  ],
  "gameend": {},
  "baopai": 0
}
キー説明参照
nameデータ形式の名前にゃ!この表では「".lq.RecordHule"」のデータについて説明するにゃ!Wrapper
dataここから下に、データが書かれているにゃ!Wrapper
hules和了の情報にゃ!ダブルロンならば2件分、トリプルロンならば3件分のデータが並ぶにゃ!HuleInfo
hand手牌の情報にゃ!HuleInfo
ming副露の情報にゃ!「shunzi」は順子(チー)、「kezi」は刻子(ポン)、「minggang」は明槓(大明槓または加槓)、「angang」は暗槓にゃ!牌の並びの最後のものが、他家から取ってきた牌にゃ!HuleInfo
hu_tile和了牌にゃ!HuleInfo
seat席にゃ!「」のページを見るにゃ!誰が和了ったかをあらわしているにゃ!HuleInfo
zimo「true」ならば自摸和了、「false」ならばロン和了にゃ!HuleInfo
qinjia「true」ならば和了者は親、「false」ならば和了者は子にゃ!HuleInfo
liqi「true」ならば立直またはダブル立直した上での和了、「false」ならば立直またはダブル立直無しでの和了にゃ!HuleInfo
doras表ドラ表示牌にゃ!HuleInfo
li_doras裏ドラ表示牌にゃ!立直かダブル立直をしていない場合は、このデータは存在しないにゃ!HuleInfo
yiman「true」ならば役満、「false」ならば非役満にゃ!ただし数え役満の場合は「false」にゃ!HuleInfo
count役満でなければ翻数にゃ!役満ならば役満の合計数にゃ!HuleInfo
fans和了役の詳細情報にゃ!FanInfo
val非役満ならば、役それぞれの翻数にゃ!役満ならば「1」にゃ!ダブル役満ならば「2」、トリプル役満ならば「3」、……と増えるにゃ!表ドラ、裏ドラ、赤ドラ、抜きドラならば、ドラの枚数にゃ!立直をしたけれど裏ドラが乗らなかった場合は、「0」になるにゃ!FanInfo
id役それぞれのIDにゃ!「」のページを見るにゃ!FanInfo
fu符数にゃ!HuleInfo
point_rong確定した翻数と符数における、ロン和了の場合の、放銃者の支払い点数にゃ!積み棒と供託による加点は含まないにゃ!HuleInfo
point_zimo_qin確定した翻数と符数における、自摸和了の場合の、親の支払い点数にゃ!積み棒と供託による加点は含まないにゃ!HuleInfo
point_zimo_xian確定した翻数と符数における、自摸和了の場合の、子の支払い点数にゃ!積み棒と供託による加点は含まないにゃ!HuleInfo
title_id「0」は満貫未満、「1」は満貫、「2」は跳満、「3」は倍満、「4」は三倍満、「5」は役満、「6」はダブル役満、「7」はトリプル役満、「8」は四倍役満、「9」は五倍役満、「10」は六倍役満、「11」は数え役満にゃ!HuleInfo
point_sum今回の和了者が、この対局においてここまでで獲得した点数の合計値にゃ!ここまでで支払った点数は含まないにゃ!積み棒と供託による加点も含まないにゃ!HuleInfo
dadian2021年8月26日アップデート以降の対局にだけ存在するデータにゃ!今回の和了の確定獲得点数にゃ!積み棒と供託による加点は含まないにゃ!HuleInfo
baopai2022年4月27日アップデート以降の対局については、ここに包(パオ)の情報が書かれているにゃ!包の情報は下の方にも書かれているにゃ!「0」は包無し、「1」は起家が包、「2」は起家の下家が包、「3」は起家の対面が包、「4」は起家の上家が包、を意味するにゃ!雀魂の牌譜の大部分の箇所では0が起家を意味するのに、ここでは表現が異なるにゃ!注意するにゃ!HuleInfo
old_scores今回の和了前の対局者全員の点数にゃ!立直が成立していた場合は、リーチ棒分の点数を引いた値にゃ!1行目は起家、2行目は起家の下家、3行目は起家の対面、4行目は起家の上家にゃ!RecordHule
delta_scores今回の和了による対局者全員の収支にゃ!積み棒や供託による加点減点も含むにゃ!1行目は起家、2行目は起家の下家、3行目は起家の対面、4行目は起家の上家にゃ!RecordHule
scores今回の和了後の対局者全員の点数にゃ!1行目は起家、2行目は起家の下家、3行目は起家の対面、4行目は起家の上家にゃ!RecordHule
gameend不明にゃ!このキーが値を持っている牌譜は見たことないにゃ!RecordHule
baopai2021年5月26日アップデート以降の対局については、ここに包(パオ)の情報が書かれているにゃ!2022年4月27日アップデート以降の対局については、包の情報は上の方にも書かれているにゃ!「0」は包無し、「1」は起家が包、「2」は起家の下家が包、「3」は起家の対面が包、「4」は起家の上家が包、を意味するにゃ!雀魂の牌譜の大部分の箇所では「0」が起家を意味するのに、ここでは表現が異なるにゃ!注意するにゃ!RecordHule
 

包の情報が2箇所に存在する理由を推測してみるにゃ!1局で包が2件発生し、更にダブルロンで、両方の包が適用されたケースを想定するにゃ!この場合、「data」直下には包の情報は1件分しか記録できないため、2件の包に対応できないにゃ!一方、「hules」の中に包の情報を記録しておけば、「hules」はダブルロンならば2個、トリプルロンならば3個存在するので、2件の包に対応できるにゃ!おそらく、2022年4月27日アップデートにおいて、2件の包の同時成立に対応したのだと思うにゃ!

 

牌譜 - .lq.RecordNoTile

牌譜 - .lq.RecordLiuJu

牌譜 - result - data - operation

[operation_listのtype]

type説明
1打牌にゃ!
2チーにゃ!
3ポンにゃ!
4暗槓にゃ!
5大明槓にゃ!
6加槓にゃ!
7立直にゃ!
8自摸和了にゃ!
9ロンにゃ!
10九種九牌にゃ!
11三麻の北抜きにゃ!
12赤血の戦や修羅の戦における牌交換にゃ!
13赤血の戦における絶一門縛りにゃ!
14闇夜の戦における闇牌にゃ!
15闇夜の戦における照射にゃ!
16闇夜の戦における闇維持にゃ!
17闇夜の戦における闇牌立直にゃ!
 

[type: 1 のサンプル]
[type: 2 のサンプル]

イレギュラーな牌譜

続きは少し休んでから書くにゃ!