いうマッチング文字列を指定した場合。バトルリタニーを使用したタイミングだけでなく、ターゲットがバトルリタニーの効果を受けたログもマッチングします。ついでに、「バトルリタニー」の効果が切れた、というログもマッチングします。効果終了時にもマッチングしてしまう、というのは位置関係の定義ひとつで解決できます。終わる行のみにマッチし、以降に文字列が続く場合にはマッチングしません。先にエノキアン使用時のサンプルログを。hoge:3C:DD8000:0:0:0:0:0:0:0:0:0:0:0:0:0:0:93616:93616:9200:10000:0:1000:100.5784:112.706:0:-3.112917:93616:93616:9200:10000:0:1000:100.5784:112.706:0:-3.112917:00006738戦闘中はこういうログがガンガン出力されます。いう書き方がよく使われます。「直前の文字の0回以上の繰り返し」です。出現するまでの任意の文字列にマッチします。これらは最長一致です。検索対象文字列(ログ一行)のうち、もっとも長く当てはまる部分にマッチします。書き足すと最短一致になります。正規表現を使用したトリガーが多数アクティブになっているとCPUに大きな負荷がかかります。ACTのバトルログなんかをチラっと見てみると分かるんですが、とてもじゃないけれど人類には早すぎると言わざるを得ないほどに多くのログが出力されています。戦闘中などは顕著で、秒間数十行~数百行にも及びます。これらのログ一行ずつ、トリガーの数だけ、それぞれマッチング文字列に一致するかどうかを確認していくわけです。正規表現のマッチング処理には負荷が掛かる、ということと同時に、最も処理コストが掛かるのは文字列に「マッチングしないこと」を確認する点であることに留意すると良いかと思います。100万行のログから1行のお目当てのログを探し出す、ということは、残り99万9999行のログに対して「マッチングしないこと」を確認する処理を行っているということです。詳しい仕組み等を話し始めたら果てしないのですが、こちらのエントリが非常に詳しいので、興味がある人は読んでみてください。postd.cc実際にあった話を引用これまた極端な例ですが、ある時フォーラムで、トリガーを追加したあと、ACTが非常に重くなり遅延が発生するようになった、という相談がありました。その人は「Sモブの情報がチャットログに流れてきたら通知する」という仕組みを作ろうとしていたようで、そのトリガーを消したら遅延は解消したとのことでした。そのトリガーのマッチング文字列がこんな感じでした。.+:.+(S|Sランク|クロック・ミテーヌ|ケロゲロス|ガーロック|ボナコン|ナンディ|チェルノボーグ|レドロネット|ウルガル|マインドフレア|サウザンドキャスト・セダ|ゾーナ・シーカー|ブロンテス|バルウール|ヌニュヌウィ|ミニョーカオン|サファト|アグリッパ|ガンダルヴァ|セーンムルウ|ペイルライダー|レウクロッタ|極楽鳥|カイザーベヒーモス|ソルト・アンド・ライト|ガンマ|オルガナ|オキナ|ウドンゲ|ボーンクローラー|アグラオペ|イシュタム|グニット|フォーギヴン・ペダントリー|ティガー|タルキア|フォーギヴン・リベリオン)ぱっと見て、「Sモブの通知をしようとしている」というのが分かります。ここには大きな罠が隠れていました。前述の通り、ログ文字列の中で:が出現するまでの最も長い部分にマッチングしようとします。続けて一文字以上空けた場所に、Sモブ名のグループの中に一致する文字列があるかを探します。可能な限り長くマッチングしようとします。結果的に行末に行き着きます。探し、再度行末から一文字ずつ走査していくことになります。こんな感じで処理のステップ数がどんどん増えていきます。サンプルとして、唐突ですがブリザガを使います。ステップかかりました。ステップ、6秒かかりました。WebシミュレータとACTがログ処理に使うCPUコアの処理速度を同列に語ることはできませんが、とにかく処理のステップ数が多く時間がかかる、というのが伝われば良いです。秒間数十行も数百行も出力されるバトルログの全ての行に対して、膨大なコストをかけて「マッチングしないこと」の確認が行われるわけですから、遅延が発生するのはとても自然なことです。位置関係を書き加えることで、アプリケーション側が「マッチングしないこと」を早々に判断できるようにしてやれば、一気に処理コストは下がります。この件に関して、私が代替案として書き換えたマッチング文字列が以下です。第3フィールドでキャラクター名のキャプチャを試行します。「リンクシェルで誰かが発言したとき」にだけ、その後のチャット文字列がグループ内に含まれる文字列群と一致するかどうかの評価を行います。始まっていないので、最初の1文字を評価した時点でマッチングしていないことが分かります。ステップから2ステップまで短縮できました。私は実際にこの条件式のトリガーを使っていないので実際にどうかは分かりませんが、マッチングしないことが早々に分かる上に、通常のLSチャットメッセージのように途中まで一致するような文字列であってもおよそ数百~~数千ステップ程度の評価で済むので、処理の遅延は大幅に低減するはずです。絶アレキサンダー討滅戦における未来観測のギミックをACTのネッ...2019-12-06カスタマイズ版:絶アレキサンダー討滅戦タイムラインこれまでキャスターでしかエンドコンテンツ攻略をやっていない...2019-11-15絶アレキサンダー討滅戦タイムライン絶アレキサンダー討滅戦のタイムラインです。»プロフィール根無し草なIT系エンジニアです。ゲームしたり本読んだりしています。月別アーカイブ記載されている会社名・製品名・システム名などは、各社の商標、または登録商標です。Reserved.はてなブログをはじめよう!hackermindさんは、はてなブログを使っています。あなたもはてなブログをはじめてみませんか?はてなブログをはじめる(無料)はてなブログとは論理と、幻想と。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。