uproargg/destiny-php

游戏《命运》的PHP API

v1.4.9 2017-08-04 04:43 UTC

README

这是一个由Bungie提供的《命运》API的简单易用的PHP包装器。它包括角色的装备、进度以及其他各种信息。

基本用法

使用composer require uproargg/destiny-php安装最新稳定版本

<?php

// Include the autoloader
require 'vendor/autoload.php';

// Create a new instance of the client
$destiny = new \Destiny\Destiny('YOUR_API_KEY');

// Find a player
$player = $destiny->fetchXboxPlayer('aFreshMelon');

// Get the first character
$firstCharacter = $player->characters->first();

// Output the characters level
echo $firstCharacter->characterLevel;

文档

玩家

您可以在Xbox或PlayStation上找到任何《命运》玩家。这不会披露玩家是Xbox One、Xbox 360/PS4还是PS3,他们被平等对待。

要获取一个玩家,您需要创建API的基本类\Destiny\Destiny的新实例。此类具有用于处理玩家的多个函数。

要找到任何Xbox游戏机上的玩家,只需使用fetchXboxPlayer方法。如果您想找到来自任何PlayStation游戏机的玩家,该方法称为fetchPsnPlayer

$xboxPlayer = $destiny->fetchXboxPlayer('Player Name'); // Destiny\Game\Player

$psnPlayer = $destiny->fetchPsnPlayer('Player_Name'); // Destiny\Game\Player

如果您想有一个用户选择搜索系统,有一个允许您动态指定要搜索的系统的方法。此方法称为fetchPlayer,它的工作方式与前面相同,唯一的区别是它接受一个额外的参数作为系统数值。

平台使用数值标识。Xbox的数字为1,PlayStation的数字为2。整个系统中都是这样。

$anyPlayer = $destiny->fetchPlayer('PlayerName', 2); // Destiny\Game\Player

如果这些操作中有任何失败,将会抛出异常:\Destiny\Support\Exceptions\PlayerNotFoundException

如果您不是想要实际获取一个玩家,而是想查看一个玩家是否存在,您可以使用返回布尔值的playerExists方法。此方法也需要玩家的平台。

$playerExists = $destiny->playerExists('PlayerName', 1); // boolean

获取玩家后,您将有一个新的\Destiny\Game\Player实例,该实例也有许多函数并提供有关玩家的大量信息。

它有几个直接来自Bungie的属性,您可以将其作为常规公共属性访问,它们都是相当直观的。这些属性是iconPathmembershipTypemembershipIddisplayName

echo $player->iconPath; // string

echo $player->membershipType; // integer

echo $player->membershipId; // integer

echo $player->displayName; //string

玩家类还有一个名为characters的属性。一旦初始化,玩家类将自动从Bungie获取与其关联的所有角色,并将它们存储在characters属性中,作为\Destiny\Support\Collections\CharacterCollection。此功能的解释将在下一节中说明。

炼金术师数据

您可以使用角色上的grimoireScore属性轻松访问玩家的炼金术师评分,但有时您可能需要更多有关玩家炼金术数据的详细信息。

有一个方法可以轻松地让您检索一个玩家的炼金术分解数组,包括卡片描述和关于卡片的全部数据,包括到bungie.net的图形路径。

炼金术数据非常庞大且相当具体,因此默认情况下不会请求它,而是您可以自己使用fetchGrimoireData方法请求它,这将返回一个包含大量卡片和信息的巨大数组。

$grimoireData = $player->fetchGrimoireData(); // array

角色

玩家的角色可以通过角色集合(\Destiny\Support\Collections\CharacterCollection)访问,该集合会自动填充并在任何获取的玩家类中作为characters属性提供。

集合类似于超级数组,它具有多种功能,可以轻松处理许多字符,包括获取类等功能。

CharacterCollection可以包含任意数量的\Destiny\Game\Character实例,如果未对其进行修改,它将包含已获取玩家的角色数量。为了与特定角色一起工作,您需要从集合中获取它。

从CharacterCollection中获取角色的方法有很多。例如,要获取玩家上次玩过的角色,您将使用first方法。您还可以使用firstWarlockfirstTitanfirstHunter方法,这些方法都将返回一个明显类别的单个Character对象。如果您有不同类型的守护者,这特别有用。

$characters = $player->characters; // Destiny\Support\Collections\CharacterCollection

$lastPlayedCharacter = $characters->first(); // Destiny\Game\Character

$lastPlayedWarlock = $characters->firstWarlock(); // Destiny\Game\Character

当然,您可以用完全相同的方式一次性检索所有巫师、泰坦或猎人,甚至集合中的所有角色。这些方法非常简单,分别是getWarlocksgetTitansgetWarlocks。这些方法都将返回只包含特定类别角色的数组。如果您想获取集合中的所有角色,请使用all方法,它将返回一个包含集合中所有角色的数组。

$allWarlocks = $characters->getWarlocks(); // array

$allCharacters = $characters->all(); // array

您还可以使用last方法获取集合中的最后一个角色,或使用get方法通过其在集合中的索引获取任何角色。此外,您可以使用count方法计算玩家拥有的角色数量。

$lastCharacters = $characters->last(); // Destiny\Game\Character

$allCharacters = $characters->get(2); // Destiny\Game\Character

$numberOfCharacters = $characters->count(); // integer

一旦从集合中检索到角色,您将使用类型为\Destiny\Game\Character的对象进行工作,该对象实际上并没有任何主要方法。

然而,角色类允许访问所有角色的重要数据。它将在未来扩展,但目前包括所有一般数据以及Inventory

角色类有太多东西,所以我只会列出其中一些重要的。您始终可以var_dump一个角色类实例,看看它还准备了什么。

一些重要的角色属性包括characterLeveldateLastPlayedcharacterIdclassHashminutesPlayedThisSession。这些只是它拥有的许多属性中的一部分,所以,再次,去探索吧。

echo $character->characterLevel; // integer

echo $character->classHash; // integer

现在,您可能在上面的示例中遇到了classHash。实际上,这是一个无法读取的整数,表示角色的类别。您不能单独使用它,但幸运的是,这个包附带了一个可以将这些和更多散列转换为单词的HashTranslator。

简单地创建一个新的\Destiny\Support\Translators\HashTranslator实例,并对散列使用translate方法。您可能会找到更多散列,这个翻译器只适用于少数几个。许多Destiny的散列都是动态的,并且具有非常长的数组值。

$translator = new \Destiny\Support\Translators\HashTranslator;

echo $translator->translate($character->classHash); // string

echo $translator->reverse($character->classHash); // integer

角色类包含了大量信息,也许最重要的信息来自另一个可以通过Character类中的inventory属性访问的类。

进度/商人

与每个角色一起,也会获取进度数据。它包含各种有用的信息,其中最有用的可能是包含其中的供应商级别和进度。每种进度类型都存储为对象,并且它们都包含独特的信息。以下进度是可用的

您可以为上述任何密钥检索进度。

$progression = $character->progression; // Destiny\Support\Collections\ProgressionCollection

$crucibleProgression = $progression->get('crucible'); // Destiny\Game\Progression

$erisProgression = $progression->get('eris'); // Destiny\Game\Progression

Destiny\Game\Progression返回的对象包含大量数据。它们的数据作为属性提供,因此您可以通过请求以下内容简单地将其作为Destiny\Game\Progression对象的属性。

要获取这些属性之一,您只需像获取任何其他属性一样从 Destiny\Game\Progression 对象中检索它们。

$fwcProgression = $progression->get('fwc'); // Destiny\Game\Progression

$fwcLevel = $fwcProgression->level; // integer

$fwcProgressToNextLevel = $fwcProgression->progressToNextLevel; // integer

进度数据非常强大且丰富,它包含连公共接口(尚未?)都没有的内容,比如封禁进度和DLC派系。

活动数据

提供了一个用于检索活动数据的接口。由于每个角色都有大量的活动数据,因此这些数据不会自动获取。相反,有一个函数可以轻松检索各种活动数据。

活动数据类型繁多,因此这里列出了一个列表,供您在Character类的fetchActivityData方法中选择。

然后,您可以使用此方法直接从Bungie检索响应数组,并对其进行任何处理。这可以让您确定副本完成情况、故事完成情况、黄昏完成情况和所有 sorts of PvP数据。如果您想收集一些统计数据,这非常实用。这些方法接受第二个参数,允许您接收每个活动返回的定义(名称、类型、各种信息)。默认设置为true,建议保持为true。

$raidData = $character->fetchActivityData(4); // array

$controlData = $character->fetchActivityData(10); // array

$controlDataWithoutExtraInfo = $character->fetchActivityData(10, false); // array

游戏后混乱报告

您可以使用辅助方法接收 crucible 匹配和所有其他活动的游戏后破坏报告。您需要从上述fetchActivityData方法中获取活动ID。然后您可以在它上调用fetchPostGameCarnageReport来接收关于总击杀、死亡和其他统计数据的信息。这也有一个定义的开关,建议保持打开。

$rumbleData = $character->fetchActivityData(13); // array

$rumbleMatchId = $rumbleData['Response']['data']['activities'][0]['activityDetails']['instanceId']; // string

$pgcr = $character->fetchPostGameCarnageReport($rumbleMatchId); // array

$pgcrWithoutExtraInfo = $character->fetchPostGameCarnageReport($rumbleMatchId, false); // array

请注意,报告包括活动中每个玩家的关闭信息,因此您可以使用此报告获取与您一起玩过的任何人的信息。

库存

库存是《命运》角色最重要的方面之一。它可以从Character类的inventory属性中获取,并且是\Destiny\Game\Inventory类型的对象。它包含关于武器、盔甲以及您可能在某人的公共库存中找到的所有其他重要信息。

库存的所有方法都返回\Destiny\Game\Item实例,它们只是信息的“持有者”。您可以使用Inventory类的方 法访问项目。有许多名称清晰的方 法可以获取您请求的任何项目。命名非常简单,我将只列出几个,您可以根据需要自行解决或查看代码。

$inventory = $character->inventory; // Destiny\Game\Inventory

$primaryWeapon = $inventory->primary(); // Destiny\Game\Item

$subclass = $inventory->subclass(); // Destiny\Game\Item

$classItem = $inventory->classItem(); // Destiny\Game\Item

我将重申,如果您找不到您要找的内容,您总是可以查看代码。

Inventory类还有3个不同的函数。它们返回角色的Glimmer和传说徽章的整数值。令人惊讶的是,它们的名称是glimmerlegendaryMarks

$legendaryMarks = $inventory->legendaryMarks(); // integer

然后检索的\Destiny\Game\Item实例具有描述项目的属性。同样,这些属性太多,无法一一列出,我将只列出一些重要的属性,您可以根据需要自行解决。其中一些是itemHashitemNameitemDescriptioniconitemTypeName。当然,还有项目特定的属性等等,我强烈建议进一步查看所有这些类。

echo $item->itemName; // string

echo $item->itemTypeName; // string

版权和许可证

版权所有2015年Sebastian Barfurth。许可协议为MIT许可