Guild Wars skill data and skill descriptions for use with template decoders, e.g. in BBCode, Wikis etc.
- Guild Wars skill data
- Skill descriptions for English and German
- Toolset to add other translations (hopefully maybe)
- PHP 8.1+
use Buildwars\GWSkillData\SkillDataAwareInterface;
use Buildwars\GWSkillData\SkillDataAwareTrait;
class MyClass implements SkillDataAwareInterface{
use SkillDataAwareTrait
public function __construct(string $lang){
// set the language and initialize $this->skillData
$this->setSkillDataLanguage($lang);
}
public function getSkill(int $skillID):mixed{
// $this->skillData is now available
$data = $this->skillData->get($skillID);
// do stuff with the $data array
// the available array keys are in $this->skillData->keys
}
}
The returned skill data array from SkillDataInterface::get(979)
looks as follows:
$data = [
'id' => 979,
'campaign' => 3,
'profession' => 5,
'attribute' => 2,
'type' => 24,
'is_elite' => false,
'is_rp' => false,
'is_pvp' => false,
'pvp_split' => true,
'split_id' => 3191,
'upkeep' => 0,
'energy' => 10,
'activation' => 2,
'recharge' => 12,
'adrenaline' => 0,
'sacrifice' => 0,
'overcast' => 0,
'name' => 'Mistrust',
'description' => 'For 6 seconds, the next spell that target foe casts on one of your allies fails and deals 10...100 damage to that foe and all nearby foes.',
'concise' => '(6 seconds.) The next spell that target foe casts on one of your allies fails and deals 10...100 damage to target and nearby foes.',
'campaign_name' => 'Nightfall',
'profession_name' => 'Mesmer',
'profession_abbr' => 'Me',
'attribute_name' => 'Domination Magic',
'type_name' => 'Hex Spell',
];
JavaScript doesn't have traits, so you will need to implement that part by yourself:
class MyClass{
_languages = {
de: SkillLangGerman,
en: SkillLangEnglish,
};
skillData;
constructor(lang){
this.setSkillDataLanguage(lang);
}
setSkillDataLanguage(lang){
if(!this._languages[lang]){
throw new Error('invalid language');
}
this.skillData = new this._languages[lang]();
return this;
}
getSkill(skillID){
// this.skillData is now available
let data = this.skillData.get(skillID);
// do stuff with the data array
}
}
which outputs:
let data = {
id: 979,
campaign: 3,
profession: 5,
attribute: 2,
type: 24,
is_elite: false,
is_rp: false,
is_pvp: false,
pvp_split: true,
split_id: 3191,
upkeep: 0,
energy: 10,
activation: 2,
recharge: 12,
adrenaline: 0,
sacrifice: 0,
overcast: 0,
name: 'Mistrust',
description: 'For 6 seconds, the next spell that target foe casts on one of your allies fails and deals 10...100 damage to that foe and all nearby foes.',
concise: '(6 seconds.) The next spell that target foe casts on one of your allies fails and deals 10...100 damage to target and nearby foes.',
campaign_name: 'Nightfall',
profession_name: 'Mesmer',
profession_abbr: 'Me',
attribute_name: 'Domination Magic',
type_name: 'Hex Spell'
}
When the $pvp
parameter is set to true
, SkillDataInterface::get(979, true)
will redirect to the PvP version of the given skill (if available, pvp_split
and split_id
):
$data = [
'id' => 3191,
'campaign' => 3,
'profession' => 5,
'attribute' => 2,
'type' => 24,
'is_elite' => false,
'is_rp' => false,
'is_pvp' => true,
'pvp_split' => false,
'split_id' => 0,
'upkeep' => 0,
'energy' => 10,
'activation' => 2,
'recharge' => 12,
'adrenaline' => 0,
'sacrifice' => 0,
'overcast' => 0,
'name' => 'Mistrust (PvP)',
'description' => 'For 6 seconds, the next spell that target foe casts on one of your allies fails and deals 10...75 damage to that foe and all nearby foes.',
'concise' => '(6 seconds.) The next spell that target foe casts on one of your allies fails and deals 10...75 damage to target and nearby foes.',
'campaign_name' => 'Nightfall',
'profession_name' => 'Mesmer',
'profession_abbr' => 'Me',
'attribute_name' => 'Domination Magic',
'type_name' => 'Hex Spell',
];
The skill descriptions may contain the custom HTML tags <gray>...</gray>
and <sic/>
that you can either replace or use to style, for example:
<gray>No effect unless hexed foe attacks.</gray>
Each attack that hits deals +13...30 Holy damage <sic/>
(The API is similar for the JavaScript version)
Method | Description |
---|---|
get(int $id, bool $pvp = false) |
Returns the data for the given skill ID, including descriptions for the current language |
getAll(array $IDs, bool $pvp = false) |
Returns an array with the skill data for each of the given skill IDs |
getByCampaign(int $campaign, bool $pvp = false) |
Returns all skills for the given campaign ID |
getByProfession(int $profession, bool $pvp = false) |
Returns all skills for the given profession ID |
getByAttribute(int $attribute, bool $pvp = false) |
Returns all skills for the given attribute ID |
getByType(int $type, bool $pvp = false) |
Returns all skills for the given skill type ID |
getElite(bool $pvp = false) |
Returns all elite skills |
getRoleplay() |
Returns all roleplay skills |
Use at your own risk!