buildwars/gw-skilldata

Guild Wars skill data

Maintainers

👁 codemasher

Package info

github.com/build-wars/gw-skilldata

pkg:composer/buildwars/gw-skilldata

Fund package maintenance!

Ko-Fi

Statistics

Installs: 10

Dependents: 1

Suggesters: 0

Stars: 0

Open Issues: 0

1.1.0 2026-06-08 18:30 UTC

Requires

Suggests

Provides

None

Conflicts

None

Replaces

None

MIT d543429a807e6696c36f724959aeca5ac458267e

guild wars

This package is auto-updated.

Last update: 2026-06-29 00:33:26 UTC


README

Guild Wars skill data and skill descriptions for use with template decoders, e.g. in BBCode, Wikis etc.

👁 PHP Version Support
👁 Packagist version
👁 NPM version
👁 License
👁 Continuous Integration
👁 Coverage
👁 Packagist downloads

Overview

Features

  • Guild Wars skill data
    • Skill descriptions for English and German
  • Toolset to add other translations (hopefully maybe)

Requirements

  • PHP 8.1+

alternatively:

  • Javascript
    • node.js >= 24
    • a web browser

Documentation

PHP: Installation with composer

Terminal

composer require buildwars/gw-skilldata

composer.json

{
	"require": {
		"php": "^8.1",
		"buildwars/gw-skilldata": "^1.1"
	}
}

Note: check the releases for valid versions.

JS: Installation with npm

Terminal

npm install @buildwars/gw-skilldata

package.json

{
	"dependencies": {
		"@buildwars/gw-skilldata": "^1.1"
	}
}

Quickstart

PHP

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 similar to the following:

$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 ☕

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'
}

PvP skill redirect

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',
];

HTML tags in descriptions

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/>

API

SkillDataInterface

(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
getByTypeWithSubtypes(int $type, bool $pvp = false) Returns all skills for the given skill type ID and its subtypes (if any)
getElite(bool $pvp = false) Returns all elite skills
getRoleplay() Returns all roleplay skills

Files hosted on GH-Pages

Library

The Library includes several helper methods for handling and combining the data from the different sources (see above).

JSON Skilldata

JSON Schemas

Disclaimer

Use at your own risk!