buildwars / gw-skilldata
Guild Wars skill data
Fund package maintenance!
Ko-Fi
Requires
- php: ^8.1
- ext-mbstring: *
Requires (Dev)
- chillerlan/php-httpinterface: ^6.0
- monolog/monolog: ^3.6
- phan/phan: ^5.4
- phpmd/phpmd: ^2.15
- phpunit/phpunit: ^10.5
- squizlabs/php_codesniffer: ^3.10
Suggests
- buildwars/gw-templates: A en/decoder for Guild Wars templates
README
Guild Wars skill data and skill descriptions for use with template decoders, e.g. in BBCode, Wikis etc.
Overview
Features
- Guild Wars skill data
- Skill descriptions for English and German
- Toolset to add other translations (hopefully maybe)
Requirements
- PHP 8.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 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 ☕
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)
Disclaimer
Use at your own risk!