@akashic-extension/resolve-player-info

ユーザー用のプレイヤー名取得ライブラリ

Usage no npm install needed!

<script type="module">
  import akashicExtensionResolvePlayerInfo from 'https://cdn.skypack.dev/@akashic-extension/resolve-player-info';
</script>

README

resolve-player-info

ニコニコ生放送 (ニコ生ゲーム) や ゲームアツマールにおいて、 プレイヤーのユーザ情報を取得するための Akashic Engine 向けライブラリです。

利用には Akashic Engine v3 以降が必要です。

インストール

akashic install コマンドでインストールしてください。

akashic install @akashic-extension/resolve-player-info

インストール後にテキストエディタで game.json を開いて、次のような environment.external.coeLimited, environment.external.atsumaru プロパティがなければ作成してください。 値は "0" としてください。(v2.1.2 以降の akashic-cli では、 akashic install 時に自動的に作成されます。)

{
  ...,
  "environment": {
    "external": {
      "coeLimited": "0",
      "atsumaru": "0"
    }
  }
}

利用方法

スクリプトアセット内で、 require() で関数 resolvePlayerInfo() を取得します。

var resolvePlayerInfo = require("@akashic-extension/resolve-player-info").resolvePlayerInfo;

TypeScript の場合は import を利用してください。

import { resolvePlayerInfo } from "@akashic-extension/resolve-player-info");

取得した resolvePlayerInfo() を呼び出すと、各プレイヤーのユーザ名などの情報が g.game.onPlayerInfo で通知されます。 また以降そのプレイヤーが生成したイベント (画面押下の g.PointDownEvent など) には、 player.name プロパティにユーザ名が含まれるようになります。

var nameTable = {};
g.game.onPlayerInfo(function (ev) {
  // ev.player.id にプレイヤーIDが、ev.player.name にそのプレイヤーの名前が含まれます。
  // ここで取得しなくても、以降そのプレイヤーが生成したイベントはすべて .player.name で名前を参照できます。
  nameTable[ev.player.id] = ev.player.name;
});

resolvePlayerInfo({ raises: true });

ゲームアツマールでは、ユーザ情報取得 API が呼び出され、その結果が通知されます。 ニコニコ生放送 (ニコ生ゲーム) では、ユーザ名の利用許諾を求めるダイアログが表示されます。 許諾された場合にはユーザ名が、されなかった場合はランダムに生成されたダミーの名前 (「ゲスト123」など) が通知されます。

詳細な利用方法は 「ユーザ名を使う」 を参照してください。

仕様

resolvePlayerInfo(opts, callback);

第一引数 opts はオプションです。次のプロパティを指定できます。

プロパティ名 デフォルト値 内容
raises false true の時、取得完了時に g.PlayerInfoEvent を送信します。
送信されたg.PlayerInfoEventg.game.onPlayerInfo で全員に通知されます。
limitSeconds 15 名前の利用許諾ダイアログを表示する場合に、自動的に拒否とみなしてダイアログを閉じるまでの時間。単位は秒です。

第二引数 callback には、関数を指定できます。指定した場合、名前取得の完了時に callback(err, playerInfo) の形で引数 2 つで呼び出されます。

引数 内容
err 第一引数。成功した場合、 null 。なんらかのエラーが発生した場合、それが渡されます。
playerInfo 第二引数。取得したプレイヤー情報。
errnull の時のみ与えられます。

プレイヤー情報 playerInfo は、次のプロパティを含みます。

プロパティ名 内容
name string ユーザ名。
userData.accepted boolean 名前利用を許諾したか。 false の場合、 name はランダムに生成された名前です (e.g. 「ゲスト123」)。
userData.premium boolean ユーザーがニコニコプレミアム会員かどうか。
userData.unnamed boolean またはなし 名前のない (非プレイヤー) インスタンスの時、 true
サーバサイドなどの特殊なインスタンスの場合にのみ true になります。
このプレイヤーは自発的に操作を行うことはありません。
raises オプションが真の場合でも、このプレイヤーが g.PlayerInfoEvent で通知されることはありません。

制限

  • このライブラリはダイアログを表示することがあります。UI 表示の都合上、ゲーム画面の高さは幅の 0.4 倍以上でなければなりません。 (ニコ生ゲームの推奨解像度は 16:9 (高さが幅の 0.56 倍) で、これを満たします)
  • resolvePlayerInfo() の呼び出し後、 limitSeconds 秒経過するまで (または呼び出した全員分の game.onPlayerInfo が通知されるまで) はシーン切り替えを行わないでください。
  • ゲームアツマール環境で利用される ユーザー情報取得API は、呼び出し頻度に制限があります。 ゲーム中に resolvePlayerInfo() を複数回呼び出すことはあまりないはずですが、必要な場合でも 5 秒に 1 回以上の頻度では呼び出さないでください。 詳細は API の呼び出し回数制限 を参照してください。

開発

ビルド方法

TypeScript で書かれています。ビルドには Node.js が必要です。以下のコマンドでビルドしてください。

npm install
npm run build

ライセンス

本リポジトリは MIT License の元で公開されています。 詳しくは LICENSE をご覧ください。

ただし、画像ファイルおよび音声ファイルは CC BY 2.1 JP の元で公開されています。