Description
概要
ユーザーからの問い合わせの対応
海域イベント49階でフェンリル攻撃後フリーズするとの報告があり
実際にユーザーのデッキをコピーしたら再現
演出周りなのでRazestさんに対応を相談以下は森田さんからご返信いただいた内容の転載
こちら確認いたしました。
スキルの組み合わせにおいて、同時演出のウェイトタイムの整合性が取れなくなり次の行動に進める「battle_status」が「38」に更新されていないのかと存じます。
・カウンターによる敵のダメージ演出と死亡演出のウェイト
・攻撃側のダメージ演出のウェイト
・範囲同時攻撃なので攻撃対象全員へのそれぞれのダメージ演出のウェイト
・範囲攻撃後の回復演出のウェイト
この場合プログラム上でのエラーは発生しません。
battle.jsにおいて「生を喰らう」の攻撃演出のbattle_statusと、各演出のウェイトを計るためのnext_flg、skill_plurallyなどのカウント状況を出力して、最終的にbattle_statusの更新に齟齬が生まれている箇所を確認していただくのが良いかと存じます。
またバトルの再生スピードによっても発生する/しないの違いが発生する場合がございますので、再現しない場合は演出速度の変更もお試しください。
範囲攻撃と防御演出による演出停止不具合は過去にも何度か修正していますので、下記のプルリクなども参考にされてください。
主に同時攻撃の演出終了監視用に使用しているskill_plurallyのカウントアップ・ダウンの扱いが原因になることが多かったかと存じます。
https://github.com/rzstaffgit/jrce2_github/pull/5410
https://github.com/rzstaffgit/jrce2_github/pull/5417
また攻略に際してご不便をおかけしますが、こちら演出のみの問題ですので、演出停止後のバトルの流れやバトル結果などには影響はございませんのでその点はご安心いただけるようお伝えすると良いかと存じます。修正後のご指摘
こちらの修正方法ですとskill_plurallyの使用方法が他と異なります。
各スキルの演出処理の中にあるtimer3、timer4などのsetIntervalは、S_page_battle_player_battle_attack_effectなどで行っている各カードのダメージや死亡演出処理の中でskill_plurallyが0以下に減算されるまでのウェイトを取っています。
「skill_plurally--;(--の前はスペース無し)」などで検索していただくと分かる通り、スキルごとの処理ではなく各カードの「死亡演出」「カウンターによるダメージ演出」「回復演出」などの関数内での処理終了を検知するための変数となっております。
ウェイトを取っている場所で直接減算するとS_page_battle_player_battle_attack_effect以降で行っている処理状況を見ずに次の演出に進もうとしてしまうため、「ダメージを受けた後の体力を表示する」などの処理がスキップされる可能性があります。参考までに先ほどのtimer3、timer4とskill_plurallyについての解説コメントをつけたものです。
var timer3 = setInterval(function () {
//攻撃に伴う各演出の処理でのskill_plurally減算待ち
if(skill_plurally <= 0){
skill_plurally = 0;
clearInterval(timer3);
skill_plurally++; //1体分の回復演出を行うので1加算
S_page_battle_player_battle_attack_effect(atk_team,atk_card_pos,atk_team,atk_card_pos%10,8,recovery_point,27,order,recovery_count);
//上記関数内で1体分の「回復演出の表示」「回復量の表示とHPの修正(S_page_battle_player_battle_recovery_dmg)」などを行っている。それらが終了次第skill_plurallyを減算して演出終了を通知
var timer4 = setInterval(function () {
//S_page_battle_player_battle_attack_effect→S_page_battle_player_battle_recovery_dmgでのskill_plurally減算待ち
if(skill_plurally <= 0){
clearInterval(timer4);
if(disp_move == 1){
S_page_battle_player_diffence_move2(disp_team,0,38);
disp_move = 0;
}else{
battle_status = 38;
}
}
},battle_spd);
}
},battle_spd);