League Of LegendsのLiveClientDataAPI

LoL LiveClientDataAPIのアイキャッチ LeagueOfLegends
LoL LiveClientDataAPIのアイキャッチ

はじめに

 League Of Legendsのツール作成から避けては通れないLive Client Data APIについて、備忘も含めまとめておきます。

 公式サイトにも記載はありますがサンプルなど情報が足りないため、実際にゲーム後のデータから情報をまとめていきます。

Riot Developer Portal

Live Client Data APIとは

 Live Client Data APIは、League of Legendsのゲームクライアントからプレイヤー情報や試合状況を取得できるAPIです。League Of Legendsの配信ツールを作るのにとても役に立ちます。

概要

 LiveClientDataAPIで情報は大まかに分けて以下です。

activePlayer操作プレイヤーの情報(ステータスやゴールド)
allPlayersゲームに参加しているプレイヤーの情報(アイテムやスコア)
eventsゲーム内で発生したイベント(キルやオブジェクト獲得など)
gameDataゲームモードやマップ情報(サモリフやARAM、観戦など)

 公式サイトにサンプル(「You can find a sample response here.」の箇所)がありますが、「プラクティスを一人で始めた直後」のデータに見えるのでサンプルだけではツールは作れません。
 上記のactivePlaerからgameDataまでを解説していきます。

Live Client Data APIで取得できる情報

 公式でエンドポイントとして分けられている情報ごとに解説します。

activePlayer

 現在操作しているプレイヤー情報が格納されています。
 activePlayerのサンプル(Lv6時点のフィオラ)は以下になります。

abilitiesスキル名称やレベルを管理
championStatsチャンピオンのステータスを管理
currentGold現在のゴールド
fullRunesメイン・サブ・シャードを管理
level現在のレベル
riotIdプレイヤーのRiotID
riotIdGameNameプレイヤーのゲーム名
riotIdTagLineプレイヤーのタグ名
summonerNameプレイヤーのRiotIDと同じ
※今後RiotIDに統一され廃止される
teamRelativeColorstrueの場合、プレイヤーは青色固定
    "activePlayer": {
        "abilities": {
        ・・・
        },
        "championStats": {
        ・・・
        },
        "currentGold": 6519.361328125,
        "fullRunes": {
        ・・・
        },
        "level": 6,
        "riotId": "SUMMONER_NAME#TAG",
        "riotIdGameName": "SUMMONER_NAME",
        "riotIdTagLine": "TAG",
        "summonerName": "SUMMONER_NAME#TAG",
        "teamRelativeColors": true

abilities

 チャンピオンのスキルレベルやスキル名が管理されています。
 ゲーム画面では以下の情報です。

 rawDescription/rawDisplayNameはツールチップ(スキル説明)用のキー名/スキルの “表示名” を指す内部キーです。
 別のjson形式でまとめられていて、その情報と紐づけるキーになります。

            "E": {
                "abilityLevel": 2,
                "displayName": "ブレードワーク",
                "id": "FioraE",
                "rawDescription": "GeneratedTip_Spell_FioraE_Description",
                "rawDisplayName": "GeneratedTip_Spell_FioraE_DisplayName"
            },
            "Passive": {
                "displayName": "デュエリスト・ダンス",
                "id": "FioraPassive",
                "rawDescription": "GeneratedTip_Passive_FioraPassive_Description",
                "rawDisplayName": "GeneratedTip_Passive_FioraPassive_DisplayName"
            },
            "Q": {
                "abilityLevel": 2,
                "displayName": "ファント",
                "id": "FioraQ",
                "rawDescription": "GeneratedTip_Spell_FioraQ_Description",
                "rawDisplayName": "GeneratedTip_Spell_FioraQ_DisplayName"
            },
            "R": {
                "abilityLevel": 1,
                "displayName": "グランドチャレンジ",
                "id": "FioraR",
                "rawDescription": "GeneratedTip_Spell_FioraR_Description",
                "rawDisplayName": "GeneratedTip_Spell_FioraR_DisplayName"
            },
            "W": {
                "abilityLevel": 1,
                "displayName": "リポスト",
                "id": "FioraW",
                "rawDescription": "GeneratedTip_Spell_FioraW_Description",
                "rawDisplayName": "GeneratedTip_Spell_FioraW_DisplayName"
            }

championStats

 チャンピオンのステータスが管理されています。
 増加分やバフも含まれた数値になっています。

 ゲーム画面では以下の情報です。

        "championStats": {
            "abilityHaste": 21.0,
            "abilityPower": 0.0,
            "armor": 51.56500244140625,
            "armorPenetrationFlat": 0.0,
            "armorPenetrationPercent": 1.0,
            "attackDamage": 170.8350067138672,
            "attackRange": 150.0,
            "attackSpeed": 0.7979159951210022,
            "bonusArmorPenetrationPercent": 1.0,
            "bonusMagicPenetrationPercent": 1.0,
            "critChance": 0.0,
            "critDamage": 200.0,
            "currentHealth": 1156.050048828125,
            "healShieldPower": 0.0,
            "healthRegenRate": 2.134500026702881,
            "lifeSteal": 0.11999999731779099,
            "magicLethality": 0.0,
            "magicPenetrationFlat": 0.0,
            "magicPenetrationPercent": 1.0,
            "magicResist": 40.09749984741211,
            "maxHealth": 1156.050048828125,
            "moveSpeed": 785.0,
            "omnivamp": 0.02500000037252903,
            "physicalLethality": 0.0,
            "physicalVamp": 0.0,
            "resourceMax": 537.0,
            "resourceRegenRate": 2.1530001163482666,
            "resourceType": "MANA",
            "resourceValue": 537.0,
            "spellVamp": 0.0,
            "tenacity": 5.0
        },

fullRunes

 あまり使ってないのでざっくりですが、以下の通りです。

generalRunes選択したルーン全量(メイン・サブ)
keystone選択したキーストーン
primaryRuneTree選択したメインルーン
secondaryRuneTree選択したサブルーン
statRunes選択したシャード
        "fullRunes": {
            "generalRunes": [
                {
                    "displayName": "プレスアタック",
                    "id": 8005,
                    "rawDescription": "perk_tooltip_PressTheAttack",
                    "rawDisplayName": "perk_displayname_PressTheAttack"
                },
                {
                    "displayName": "凱旋",
                    "id": 9111,
                    "rawDescription": "perk_tooltip_9111",
                    "rawDisplayName": "perk_displayname_9111"
                },
                {
                    "displayName": "レジェンド: 迅速",
                    "id": 9104,
                    "rawDescription": "perk_tooltip_9104",
                    "rawDisplayName": "perk_displayname_9104"
                },
                {
                    "displayName": "背水の陣",
                    "id": 8299,
                    "rawDescription": "perk_tooltip_8234",
                    "rawDisplayName": "perk_displayname_8234"
                },
                {
                    "displayName": "なんでも屋",
                    "id": 8316,
                    "rawDescription": "perk_tooltip_MinionDematerializer",
                    "rawDisplayName": "perk_displayname_MinionDematerializer"
                },
                {
                    "displayName": "ビスケットデリバリー",
                    "id": 8345,
                    "rawDescription": "perk_tooltip_BiscuitDelivery",
                    "rawDisplayName": "perk_displayname_BiscuitDelivery"
                }
            ],
            "keystone": {
                "displayName": "プレスアタック",
                "id": 8005,
                "rawDescription": "perk_tooltip_PressTheAttack",
                "rawDisplayName": "perk_displayname_PressTheAttack"
            },
            "primaryRuneTree": {
                "displayName": "栄華",
                "id": 8000,
                "rawDescription": "perkstyle_tooltip_7201",
                "rawDisplayName": "perkstyle_displayname_7201"
            },
            "secondaryRuneTree": {
                "displayName": "天啓",
                "id": 8300,
                "rawDescription": "perkstyle_tooltip_7203",
                "rawDisplayName": "perkstyle_displayname_7203"
            },
            "statRunes": [
                {
                    "id": 5008,
                    "rawDescription": "perk_tooltip_StatModAdaptive"
                },
                {
                    "id": 5008,
                    "rawDescription": "perk_tooltip_StatModAdaptive"
                },
                {
                    "id": 5011,
                    "rawDescription": "perk_tooltip_StatModHealth"
                }
            ]

allPlayers

 allPlayersにはゲームに参加しているプレイヤー全員分の情報が含まれています。
 そのため、チャンピオンを特定する場合は、RiotIDや役割(ロール)+チームで特定する必要があります。

championNameチャンピオン名
isBotボットであればTrue
isDeadデス中であればTrue
items持っているアイテム
level現在レベル
positionポジション(TOP, JUNGLE,MIDDLE,BOTTOM,UTILITY)が設定される
ポジション選択がないモードの場合、NONEが設定される
rawChampionNameLoLの内部処理用チャンピオン識別子
rawSkinNameLoLのスキン内部名
respawnTimerリスポーンまでの時間
runes選択したルーン
※キーストーン・メイン/サブツリーのみ
scoresキル・デス・アシスト・CS・ワードスコア
★一番使う!!
skinIDLoL内部用のスキンID
skinName使っているスキン名
summonerSpells選択したサモナースペル
team青側ならORDER/赤側ならCHAOS
    {
        "championName": "フィオラ",
        "isBot": false,
        "isDead": false,
        "items": [
            ・・・            ],
        "level": 6,
        "position": "TOP",
        "rawChampionName": "game_character_displayname_Fiora",
        "rawSkinName": "game_character_skin_displayname_Fiora_89",
        "respawnTimer": 0.0,
        "riotId": "フェンシングωおぢさん#でまちあ",
        "riotIdGameName": "フェンシングωおぢさん",
        "riotIdTagLine": "でまちあ",
        "runes": {
            ・・・
        },
        "scores": {
            ・・・            },
        "skinID": 89,
        "skinName": "バトルクイーン フィオラ",
        "summonerName": "フェンシングωおぢさん#でまちあ",
        "summonerSpells": {
            ・・・            },
        "team": "ORDER"
    }

items

 チャンピオンが持っているアイテムが含まれます。
 私の場合は配信画面にスコアボードを表示させるときに使っています。

canUseアクティブアイテムだったらTrue
consumable消費アイテムだったらTrue
countスタック数。ポーションやコントロールワードが2つになる
displayNameアイテム名
itemID内部用のアイテムID。画像データと紐づける時に使う
priceアイテムの金額
rawDescriptionアイテムの内部用キー
rawDisplayNameアイテムの表示用内部キー
slotどのスロットにあるか
                {
                    "canUse": false,
                    "consumable": false,
                    "count": 1,
                    "displayName": "ブーツ",
                    "itemID": 1001,
                    "price": 300,
                    "rawDescription": "GeneratedTip_Item_1001_Description",
                    "rawDisplayName": "Item_1001_Name",
                    "slot": 1
                },
                {
                    "canUse": false,
                    "consumable": false,
                    "count": 1,
                    "displayName": "ドラン ブレード",
                    "itemID": 1055,
                    "price": 450,
                    "rawDescription": "GeneratedTip_Item_1055_Description",
                    "rawDisplayName": "Item_1055_Name",
                    "slot": 2
                },
                {
                    "canUse": true,
                    "consumable": false,
                    "count": 1,
                    "displayName": "ラヴァナス ハイドラ",
                    "itemID": 3074,
                    "price": 150,
                    "rawDescription": "GeneratedTip_Item_3074_Description",
                    "rawDisplayName": "Item_3074_Name",
                    "slot": 4
                }
            ],

scores

 一番使うスコアです。

 キル・デス・アシストとCS・ワードスコアが含まれます。

            "scores": {
                "assists": 9,
                "creepScore": 50,
                "deaths": 1,
                "kills": 6,
                "wardScore": 29.494892120361328
            },

events

 ゲーム内の発生したイベントが含まれます。
 ただし、「あれ?これってないの・・・?」というイベントもあるため、万能ではないです。

    "events": {
        "Events": [
            {
                "EventID": 0,
                "EventName": "GameStart",
                "EventTime": 0.011351699940860271
            },
            {
                "Assisters": [
                    "SUMMONER_NAME_X",
                    "SUMMONER_NAME_Y",
                    "SUMMONER_NAME_Z",
                ],
                "EventID": 1,
                "EventName": "ChampionKill",
                "EventTime": 57.96607208251953,
                "KillerName": "SUMMONER_NAME_A",
                "VictimName": "SUMMONER_NAME_A"
            },
項目

 eventsに現れる項目の種類です。
 私がプレイしたゲームから収集したので全量ではないとは思いますが、基本的なところは抑えられていると思います。

EventIDゲーム内で1から連番
EventName各イベントの名称
EventTimeイベント発生時刻
AssistersアシストしたriotIdGameName
KillerNameキル・破壊したriotIdGameName
VictimNameデスしたriotIdGameName
TurretKilled破壊されたタワー名
例)Turret_TOrder_L2_P3_1509986696
 Order:青側
 L2:第2レーン(ミッド)
 P3:第3タワー(インヒビタータワー)
Stolenスティールした場合True
KillStreak連続キル数。2キルから現れる
DragonTypeキルしたドラゴンタイプ
Air/Chemtech/Earth/Fire/Hextech/Water/Elder
RecipientFirstBloodなどを受け取ったriotIdGameName
InhibKilled破壊されたインヒビター名
例)Inhib_TOrder_L0_P1_2971077479
Acerエースを獲得したriotIdGameName
AcingTeamエースを獲得したチーム
Resultゲーム結果(Win/Lose)
InhibRespawned復活したインヒビター名
InhibRespawningSoon復活予定のインヒビター名
イベントの種類

 同様に発生するイベントです。

GameStartゲーム開始時のイベント
MinionsSpawning最初のミニオン発生
FirstBloodファーストブラッド発生
ChampionKillチャピオンキル
TurretKilledタワー破壊
Multikillマルチキル
DragonKillドラゴンキル
HordeKillヴォイドクラブキル
InhibKilledインヒビター破壊
FirstBrickファーストタワー破壊
HeraldKillヘラルドキル
Aceエース発生
BaronKillバロンキル
AtakhanKillアタカンキル
※シーズン2025まで
InhibRespawningSoonインヒビター復活予告
InhibRespawnedインヒビター復活
GameEndゲーム終了

gameData

 ゲームの情報が含まれます。

 特に、gameModeでTUTORIALやARAMなどで動作しないツールはスキップする作りこみが必要になります。

gameModeゲームモード
CLASSIC/ARAM/TUTORIAL/URF/・・・
公式サイトのgameModes.jsonに全量あり
gameTimeゲーム時間
mapNameMap11はSummoner’s RiftのCurrent Version
公式サイトのmaps.jsonに全量あり
mapNumbermapNameと同じ
mapTerrain用途不明
    "gameData": {
        "gameMode": "CLASSIC",
        "gameTime": 2706.243408203125,
        "mapName": "Map11",
        "mapNumber": 11,
        "mapTerrain": "Default"
    }

コメント