《风暴英雄》的PHP SDK

v0.9-beta.6 2021-01-01 20:49 UTC

README

《风暴英雄》的PHP SDK

Coverage Status

安装

  1. heroes-data 仓库添加到您的 composer.json 中,例如:
	"repositories": [
		{
			"type": "vcs",
			"url": "https://github.com/heroespatchnotes/heroes-data"
		}
	],
  1. 使用Composer安装: > composer require heroespatchnotes/sdk

描述

Heroes 是一个用PHP编写的SDK,用于方便访问暴雪MOBA游戏《风暴英雄》的社区资源。

游戏数据

游戏数据由 koliva8245 提取和维护,并在 heroes-dataHeroes Tool Chest 下发布。SDK提供了在不同级别上方便地发现和封装原始JSON文件的便利:提供者和实体。

提供者

提供者 定位并加载JSON编码的数据到便利的共享实例中。你可以将 提供者 视为游戏数据的“数据库连接”。因为它们将整个文件加载到内存中,所以 提供者 只能通过其静态的 get() 方法实例化,以确保只有一个共享实例。 提供者 是文件和补丁特定的,有两种类型。可以通过其JSON键或使用 getContent() 方法以整体方式访问 提供者 的内容。

DataProvider

DataProvider 从补丁的 data 子目录访问游戏数据。每个 DataProvider 需要一个与数据文件对应的 $group,以及一个用于使用的数据版本的 $patch

注意:省略 $patch 将默认为最新版本。你可以通过其 getPatch() 方法检查 提供者 的补丁。

可用的组在 DataProvider 类上定义为类常量

const ANNOUNCER         = 'announcer';
const BANNER            = 'banner';
const BEHAVIORVETERANCY = 'behaviorveterancy';
const EMOTICON          = 'emoticon';
const EMOTICONPACK      = 'emoticonpack';
const HERO              = 'hero';
const HEROSKIN          = 'heroskin';
const MATCHAWARD        = 'matchaward';
const MOUNT             = 'mount';
const PORTRAIT          = 'portrait';
const PORTRAITPACK      = 'portraitpack';
const REWARDPORTRAIT    = 'rewardportrait';
const SPRAY             = 'spray';
const UNIT              = 'unit';
const VOICELINE         = 'voiceline';

StringProvider

StringProvider 从补丁的 gamestrings 子目录访问游戏字符串。每个 StringProvider 需要一个与地区对应的 $group,以及一个用于使用的数据版本的 $patch

注意:省略 $patch 将默认为最新版本。你可以通过其 getPatch() 方法检查 提供者 的补丁。

可用的组在 StringProvider 类上定义为类常量

const LOCALE = [
	'Germany' => 'dede',
	'USA'     => 'enus',
	'Spain'   => 'eses',
	'Mexico'  => 'esmx',
	'France'  => 'frfr',
	'Italy'   => 'itit',
	'Korea'   => 'kokr',
	'Poland'  => 'plpl',
	'Brazil'  => 'ptbr',
	'Russia'  => 'ruru',
	'China'   => 'zhcn',
	'Taiwan'  => 'zhtw',
 ];

示例

// Hero data, latest patch
$heroes = DataProvider::get('hero');
echo $heroes->Abathur->life->amount; // "685.0"

// Skin data from a previous patch
$skins = DataProvider::get('heroskin', '2.48.4.77406');
var_dump($skins->DemonHunterWinter);
array(
    "hyperlinkId": "WintersHelperValla",
    "attributeId": "Dhu5",
    "rarity": "Legendary",
    "releaseDate": "2017-12-12",
    "features": [
      "ThemedAbilities",
      "ThemedAnimations"
    ],
)

// English game strings, latest patch
$strings = StringProvider::get('enus');
echo $strings->gamestrings->unit->descriptino->Abathur; // "A unique Hero that can manipulate the battle from anywhere on the map."

// French game strings, previous patch
$older = StringProvider::get(StringProvider::FRANCE, '2.49.2.77981');
echo $older->gamestrings->abiltalent->$tassadarTalentId->name; // "Phase dimensionnelle"
// 

实体

实体 建立在 提供者 之上,以简化对常用数据组件的访问。与 提供者 类似,实体 包括对底层JSON内容的访问,但它们还提供了针对许多端点的特定组件的方法。

实体 是通过相应的 Factory 创建的,该工厂是补丁和地区特定的

// Tassadar, pre-rework, in French
$heroes   = new HeroFactory(StringProvider::LOCALE['France'], '2.49.2.77981');
$tassadar = $heroes->get('Tassadar');
foreach ($tassadar->abilities() as $ability)
{
	echo $ability->name; // e.g. "Phase dimensionnelle"
}

注意:有关每个 实体 的详细信息,请参阅 API文档