最准确,最完整的多代神奇宝贝损坏计算器包装。
@pkmn/dmg
是@smogon/calc
库的精神继任者,从头开始设计,与@pkmn
生态系统兼容,并基于对神奇宝贝摊牌开发人员的可扩展体系结构。除了对体系结构和正确性的改进, @pkmn/dmg
功能:
$ npm install @pkmn/dmg
另外,如下所述,如果您在浏览器中使用@pkmn/dmg
并想要一种便利的方法,请仅取决于通过unpkg transper的和缩小版本( @pkmn/dex
和@pkmn/data
是必需的依赖关系@pkmn/dmg
):
< script src =" https://unpkg.com/@pkmn/dex " > </ script >
< script src =" https://unpkg.com/@pkmn/data " > </ script >
< script src =" https://unpkg.com/@pkmn/dmg " > </ script >
@pkmn/dmg
的主要API是calculate
功能,该功能在State
下恢复并返回Result
。
@pkmn/dmg
是数据级别的astostic-由于其对@pkmn/data
依赖性,它只需要提供pokémonShowdowncompatiable Dex
-type实现,以便将其提供给@pkmn/data
's Generations
constructor( @pkmn/dex
是推荐的在这里选择,尽管请注意,由于它充分出现,它的大小是@smogon/calc/data
的大小,并且某些应用程序可能希望将JSON文件预处理到修剪不必要的字段)。
State
的辅助功能, State#createPokemon
和State#createMove
是初始化calculate
所需的输入数据结构的推荐方法 - 这些功能提供了一种方便的方法,可以避免必须指定所有字段,同时还执行基本的完整性检查。可以提供与State
接口兼容的对象,尽管这主要与已经具有自己的战斗状态表示的应用程序相关(例如@pkmn/client
)。
import { Dex } from '@pkmn/dex'
import { Generations } from '@pkmn/data' ;
import * as dmg from '@pkmn/dmg' ;
const gens = new Generations ( Dex ) ;
const gen = gens . get ( 4 ) ;
const result = dmg . calculate (
gen ,
dmg . State . createPokemon ( gen , 'Gengar' , { item : 'Choice Specs' , nature : 'Modest' , evs : { spa : 252 } } ) ,
{
pokemon : dmg . State . createPokemon ( gen , 'Blissey' , { evs : { hp : 252 , spd : 252 } } ) ,
sideConditions : { spikes : { level : 2 } , stealthrock : { } } ,
}
dmg . State . createMove ( gen , 'Focus Blast' ) ,
{ weather : 'Sandstorm' , pseudoWeather : { } }
) ;
可以使用示波器的inGen
辅助机进一步简化这一点:
const result = dmg . inGen ( gens . get ( 4 ) , ( { calculate , Pokemon , Move } ) =>
calculate (
Pokemon ( 'Gengar' , { item : 'Choice Specs' , nature : 'Modest' , evs : { spa : 252 } } ) ,
{
pokemon : Pokemon ( 'Blissey' , { evs : { hp : 252 , spd : 252 } } ) ,
sideConditions : { spikes : { level : 2 } , stealthrock : { } } ,
}
Move ( 'Focus Blast' ) ,
{ weather : 'Sandstorm' , pseudoWeather : { } }
) ;
) ;
以上是一个更高级的示例,证明了如何指定Side
条件或Field
状况,常见情况看起来与以下情况更相似:
const result = dmg . inGen ( gens . get ( 4 ) , ( { calculate , Pokemon , Move } ) =>
calculate (
Pokemon ( 'Gengar' , { item : 'Choice Specs' , nature : 'Modest' , evs : { spa : 252 } } ) ,
Pokemon ( 'Blissey' , { evs : { hp : 252 , spd : 252 } } )
Move ( 'Focus Blast' )
) ;
) ;
通过calculate
返回的Result
包含有关损坏掷骰,后坐力或排水/恢复信息的信息,转弯的剩余数据结束以及详细的KO Chance崩溃,所有这些都以机器友好的格式用于程序化使用(与@smogon/calc
相比,较少的情况提供了深入的人类友好文本)。熟悉的人类友好输出也可以通过将Result
编码为所需的格式来获得。
dmg
二进制可用于通过命令行执行损伤计算。
// FIXME improve these to match actual output and encoding
dmg +1 252 SpA Gengar @ Choice Specs [Focus Blast] vs. 0 HP / 172+ SpD Blissey --gen=4
+1 252 SpA Choice Specs Gengar Focus Blast vs. 0 HP / 172+ SpD Blissey: 362-428 (55.6 - 65.7%) -- guaranteed 2HKO after Leftovers recovery
$ dmg gengar [focus blast] vs. blissey gen:6
252 SpA Life Orb Gengar Focus Blast vs. 252 HP / 4 SpD Blissey: 263-309 (36.8 - 43.2%) -- 98.7% chance to 3HKO after Leftovers recovery
$ dmg gen=3 mence @ CB [EQ] vs. cune @ lefties
252+ Atk Choice Band Salamence Earthquake vs. 252 HP / 252+ Def Suicune: 121-143 (29.9 - 35.3%) -- guaranteed 4HKO after Leftovers recovery
与Calc.pokemonshowdown.com一样,CLI依赖于预定义的集合和启发式方法来最大程度地减少需要指定的信息量以执行计算。解析文档涵盖了更多详细信息。必须安装可选的@pkmn/smogon
依赖性以运行dmg
。
虽然不需要,但dmg
的第一个位置论点可以是格式ID(例如gen7ou
或gen8anythinggoes
),它将从该特定格式绘制@pkmn/smogon
的集合(这对于VGC或Little Cup计算特别有用) )。
在Web浏览器中使用@pkmn/dmg
的推荐方法是配置您的Bundler (WebPack,Rollup,Parcel等)将其最小化并在其余的应用程序中包装。如果您不使用Bundler,则包含在包装中的便利性index.umd.js
。您只需要依靠./node_modules/@pkmn/dmg/build/index.umd.js
在script
标签中(这是上面的unpkg快捷方式所做的),然后calc
可以作为全局访问。您还必须提供Generations
实现,并且必须在加载计算之前加载它:
< script src =" ./node_modules/@pkmn/dex/build/production.min.js " > </ script >
< script src =" ./node_modules/@pkmn/data/build/production.min.js " > </ script >
< script src =" ./node_modules/@pkmn/dmg/build/index.umd.js " > </ script >
@pkmn/dmg
对状态的处理以及“应用程序”的概念及其apply
功能也许是最大的创新@pkmn/dmg
提供了先前的损害计算器。 @pkmn/dmg
的应用程序是现有计算器提供的临时便利功能的综合性,其中包含诸如toggles之类的东西以“打开“'gemancy'或of of of of of'gemancy'或'extreme evoboost'的动作统计数据”。
具有效果的能力/条件/项目/移动可以apply
其效果-ED来修改状态,该State
随后用于执行损坏计算。这对UI很有用,因为具有“剑舞”之类的动作的集合可以将其转换为便利按钮,以提供+2攻击时,或者可以在单击时提供+2的攻击,或者可以apply
敲门效果来删除Pokémon的物品。未来的计算等。需要apply
一些限制- @pkmn/dmg
不打算在内部嵌入完整的模拟器 /战斗引擎,以便能够完美更新其状态。 apply
旨在为方便起见- @pkmn/dmg
目的是相对于所提供的State
准确而全面,但不保证apply
将始终导致战斗中发生的确切State
。
@pkmn/dmg
处理命中率与以前的计算器不同 - 每个命中均通过整个损坏公式(尽管可以检测到某些优化),并且在命中之间,计算更新的上下文基于效果的效果,这些效果可以在每次之后apply
应用-ED打。这种设计自然会处理父母的纽带或多希特的动作(包括互动,例如在命中率之间提高防守或父母债券的第二次命中,从Power up up up punch的攻击提升中受益),但也允许将临时移动链接在一起以计算其结果一系列攻击。
链接处理想要查看重复过热或流星的结果的常见案例,但也涵盖了诸如Scizor u -Turn ot Gengar Focus Blast之类的东西 - 任何具有相同目标的结果都可以将与EG的连续命中完全相同的方式处理联合Result
的机会。处理了Breloom的子弹种子。在极端情况下,这种设计缩放以处理像Guttony Sitrus Berry这样的场景,在击球几次命中或失败者将攻击者置于必要的HP系列后激活后启动。链式动作仅处理保证的方案 - 即。仅在保证发生的情况下,仅在移动之间apply
效果,要么是因为它们有100%激活的机会,要么涉及范围保证会发生某个事件。
== todo ==
@pkmn
软件包无意为mod(非规范数据或机械师)提供一流的支持,但是, @pkmn/dmg
经过精心设计,以使其比@smogon/calc
更可扩展。可以通过以下方式完成对@pkmn/dmg
的数据的更改。
override
方法允许修改或添加字段到现有数据(这实际上与overrides
参数相同, @smogon/calc
的构造函数的某些参数)exists
的函数实现(对国家DEX或CAP有用),从@pkmn/data
的Generations
类中暴露其他非传统数据@pkmn/dex
并添加其他数据(参见@pkmn/mods
)根据您的修改所需的内容,您可能无法利用State
的便利性工厂方法,因为它们对基本神奇宝贝力学进行了一些验证。但是,请注意,您总是可以在不使用这些方法的情况下构建State
对象。
@pkmn/dmg
仅使用它知道的@pkmn/dex-types
字段,因此其他数据字段不应引起问题。但是,如果您想利用任何新字段,或者只是想更改各种机制的行为, calculate
采用可选的handlers
参数,该参数使您可以扩展或覆盖现有的处理程序机制。您很可能希望利用现有的出口Handlers
对象作为基础。
如果您的用例需要更广泛的修改功能(例如,能够在核心损伤流周围更改),请打开一个问题以描述您的用例。如果有足够的理由,则算法的核心部分可能会被分解,并以相同的Handlers
方式进行调整。
@pkmn/engine
-PKMN贡献者@smogon/calc
-honko,奥斯汀和贡献者该软件包根据MIT许可证的条款分发。