オーラバフをつけたり外したりする原理 - 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)。(オーラバフの優先度を調整する、と言うようなことも行われる。)
リストアップしたものを「バフとして現存しないもの→バフとして新規登録」「現存してチックが同じもの→無処理」「現存してチックが異なるもの→削除」に振り分けて作業が行われる。