最準確,最完整的多代神奇寶貝損壞計算器包裝。
@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
dmg是數據級別的astostic-由於其對@pkmn/data
依賴性,它只需要提供pokémonShowdowncompatiable Dex
-type實現,以便將其提供給@pkmn/data
's Generations
constructor( @pkmn/dex
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許可證的條款分發。