数秒に一回だけ実行

Last-modified: 2024-02-09 (金) 18:01:43

数秒に1回だけ実行

これは、いわゆる周期スキルと言われるものである。殴りトリガーのスキルに比べて運に左右されない、バランス管理が比較的楽であるメリットがあり、逆にタイマーを使うとかなり楽に対策可能であるという特徴がある。
このような周期スキルには、いくつかの実装法がある。

基本的な実装法

・mobskillの発動条件 ○○秒に1回を使う方法
・timelockと砂スポクロックを使う方法
・delaycommandで再帰的処理をする方法

応用的な実装法

・randomcommandとあわせてランダム性を持たせる方法
・回路レベルで制御する方法

mobskillを用いた実装

1番後処理がなく簡単な実装
ボスがいる時、そのボスにmobskillをつけ、その発動条件を○○秒に1回にする。そこから任意のスキルを実行してもよし、どこかに赤石を置かせてそこから別の処理に繋げるもよし。

メリットとしては、回路としてリセット処理をほぼ用意しなくて良い点、ボスが湧いてる時にしか発動しないため発動の制御をしなくて良い点がある。
逆にデメリットとしては、10秒、30秒、60秒からしか選べないという柔軟性に欠ける点、そもそもボスがいないギミックでは使えない点がある。

timelockと砂スポを使う方法

砂スポの説明については割愛、わからない場合は開発2の質問chで適宜聞いてください。

基本的な方針は砂スポで赤石をクロック設置し、その設置先にtimelockをつけるというもの。
コマンドは例えば以下のようになる

timelock 13 setredsrone x y z

このコマンドブロックに赤石を連続で置くと、おおよそ13秒に一回x y zにsetredsroneされ、周期スキルを作ることが出来る。

メリットとしては、好きな時間でループできる、ボスがいなくてもループできる点であり、
デメリットとしては上手く回路もしくはコマンドの処理をしないとボスがいないのにスキルだけ発動する事態が発生する点である。

delaycommandで再帰的処理をする方法

あるコマブロから、おなじコマブロ(ないしはそのコマブロに繋がる回路)に遅延実行でsetredsroneすることでも周期スキルを作ることが出来る。

1連の動作の最後のコマブロに

delaycommand 25 setredsrone x y z

としておくことで(x y zは処理の最初のところに繋がる場所)、25秒後に再度最初の処理から実行するコマンドができる。

注意点として、最初に一回コマンドを発動してあげないとループしてくれないという仕様のため、ボス戦開始時などに赤石を置く処理を挟む必要がある。
また、必ずリセット処理を挟む必要(ボス戦終了時などにdelaycommand resetする)がある

メリットは
分岐がある場合、その先でループ時間を変更出来る点、好きなタイミングで実行開始できる点であり、
逆にデメリットは
リセット、チャンクのアンロードにまつわる処理が面倒な点である

randomcommandと合わせる方法

上のdelaycommandにおいて、ループさせるコマンドにrandomcommandを用いることでループ時間をランダムにできる。これを行うメリットとしては、プレーヤーに意図的にスキル研究、対策されたくない場合に発動条件を分かりづらくするというものがある。例

randomcommand delaycommand &[12~30] setredsrone x y z

これは12~30秒後に再度実行するコマンドとなる

回路レベルの制御による方法

これは赤石回路を用いて処理を制御する方法である。
例えば連続で赤石が置かれるとして、その先に石ブロックを置いておくと、いつもは回路が導通するが、ある条件下で石ブロックを空気に置換することで回路を遮断することができるようになる。これを回路が導通した瞬間に遮断し、その後delaycommandで石を一定秒数後に置き直すといった処理を作ることで周期スキルを作ることが出来る。

さらに、これを上手く組み合わせることで条件を満たした時にだけ周期発動するといった芸当も可能になる。

この手法のメリットとしては、視覚的に条件が表されるためデバックしやすいという点、複雑な条件を作りやすいという点である。
逆にデメリットは、回路に関する知識が必要である点、コマンド群の規模が大きくなりがちな点である。