オーラバフをつけたり外したりする原理 - aharalabMeiji/fireplaceAharaLab GitHub Wiki

設定の仕方

カード実装のクラスに

    update = Refresh(該当するカードの条件, バフしたいタグもしくはエンチャントメント)

のように書く。例としては

    update = Refresh(ALL_CHARACTERS, {GameTag.IGNORE_TAUNT: True})#
    update = Refresh(FRIENDLY_MINIONS + BEAST, buff="DS1_178e")#

のように書けばよい。

オーラバフをつけたり外したりするタイミング

ゲーム(game)直下にrefresh_buff()というメソッドがあり(引数は不要)、これを呼び出せばよい。ゲームの流れの中で適宜追加してもよいと思う。ランク戦の場合には、すでに十分なだけの設置がなされている。

オーラバフを記録する原理

sourceを「バフを提供するカード」、targetを「バフをもらうカード」、buffを「受け渡しされるバフ」であるとして話を進める。まずsourceには上記のupdate文があることが前提であるが、この文章が書いてあってゲームからrefresh_aurasを実行すれば、その作業の中でオーラバフとして記録される。

バフとしては、普通のバフとおなじように、target.buffsというリストに追加される。普通のバフと異なるところはゲーム直下のgame.active_aura_buffsというリストにも同時に登録される。そのうえで、ゲームチックgame.tickをbuff.tickにコピーする作業が行われる。

チックtickの役割としては、ゲームが進行するときにtickが1ずつ増やされることにより「buff目線で、ゲームが進行したかどうか」を判定するのに用いられる。

オーラバフが消去される原理

上記の状況でオーラバフbuffが記録されているものとする。

ふたたびgame.refresh_aurasが呼び出されると、gameは自分が持っているカード(entity)にupdate文があるかどうかを探し、リストアップする(変数名=refresh_queue)。(オーラバフの優先度を調整する、と言うようなことも行われる。)

リストアップしたものを「バフとして現存しないもの→バフとして新規登録」「現存してチックが同じもの→無処理」「現存してチックが異なるもの→削除」に振り分けて作業が行われる。