定制 buildwars/gw-skilldata 二次开发

按需修改功能、优化性能、对接业务系统,提供一站式技术支持

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

buildwars/gw-skilldata

Composer 安装命令:

composer require buildwars/gw-skilldata

包简介

Guild Wars skill data

关键字:

README 文档

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

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

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!

buildwars/gw-skilldata 适用场景与选型建议

buildwars/gw-skilldata 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 10 次下载、GitHub Stars 达 0, 最近一次更新时间为 2024 年 06 月 04 日, 在 PHP 生态内属于活跃度较高的组件。

它主要适用于以下技术方向: 「guild wars」 等业务场景。在实际项目中,围绕这些方向常见需要落地的问题包括:接口对接、性能调优、并发安全、与既有框架(Laravel / ThinkPHP / Yii / Webman 等)的兼容适配,以及生产环境的日志埋点与稳定性保障。

我们在过去多个企业项目中使用过 buildwars/gw-skilldata 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。

围绕 buildwars/gw-skilldata 我们能提供哪些服务?
定制开发 / 二次开发

基于 buildwars/gw-skilldata 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。

BUG 修复 & 性能优化

线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。

项目外包 & 长期维护

承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。

yvsm@zunyunkeji.com QQ:316430983 微信:yvsm316 西安尊云信息科技 · 专注 PHP / Go / 分布式系统研发

统计信息

  • 总下载量: 10
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 0
  • 点击次数: 24
  • 依赖项目数: 1
  • 推荐数: 0

GitHub 信息

  • Stars: 0
  • Watchers: 1
  • Forks: 0
  • 开发语言: PHP

其他信息

  • 授权协议: MIT
  • 更新时间: 2024-06-04