抜刀バグ1
抜刀バグ
ロードスでは通常、敵を倒し終わるとすぐに抜刀状態が解除される。ところが、敵を倒しても10秒間抜刀状態続くようになってしまうというバグがあって、抜刀バグと呼ばれている。三角のように、敵を倒す→部屋移動→敵を倒す→部屋移動と繰り返すマップでこのバグに掛かると、周りがサーと走っていく中、一人だけ足が遅くて取り残されることになる。辛い。この症状から鈍足バグと呼ばれることもある。
原因
このバグは、敵のタゲを持った状態で別のマップ(or 別のch、別の難易度)に移動することで起きる。
マップの移動は普通に移動しても、コール、秘宝でもだめ。逆に、同じマップ内であれば、コールや秘宝で近くの聖女に移動しても抜刀バグは起きない。
また、移動前に敵のタゲを持っているというのがバグ発生の条件で、抜刀状態になっているかどうかは無関係。なので、ダメ0装備にして被弾しない状態だったとしても、タゲが来ればこのバグは起きてしまう。
治し方 (原理編)
このバグに掛かってしまった場合、リログをするか、遠くのマップに秘宝で移動するかで治る。
「遠くのマップ」というのは少しあいまいな言い方だけど、例えば三角から太陽の聖堂くらいの距離を秘宝で飛ぶと抜刀バグは治る。
「リログで治る」と言っても、実際の所、単にリログだけすればいいという話ではない。というのも、ロードスではリログした場合「同じマップのch.1 難易度0に戻る」というバグ(or 仕様?)がある。なので、例えば三角の難2で狩り中に抜刀バグに掛かった場合、リログで直そうとしても、
抜刀バグ発生→リログ→戻ってきてすぐ殴られる→難2に移動→抜刀バグ発生
といった感じになってしまえば無限ループで、結局解決にならない。
治し方 (実践編)
なので、リログで治すとすれば、実際の所
(1) 安全な場所に移動→リログ→難2に移動
(2) リログ→安全な場所に移動してタゲを切る→難2に移動
のどちらかをする必要がある。
モンク フィニッシュブロー実験
前回作ったDPS予想プログラムはおおまかには正しい予想値を出せるレベルになった。このプログラムでは、各スキルの所要時間を計算に使うことになる。ただ、各スキルの所要時間は実際に叩いてみてその時間を測るという最も原始的な方法でしか調べることが出来ない。今日はモンクのブロー系のチェイン3、フィニッシュブロー(以下、FnB)の所要時間を調べてみる。
実験1
チェインにFnBのみをセットし、発動する様子を録画し、所要時間を測定してみる。
攻撃速度は0%
実験結果
14.253 N
14.720 FnB
15.554 N
52.251 N
52.835 FnB
53.752 N
時間間隔を測ってみるとこんな感じ。
1回目
N->FnB 0.467秒
FnB->N 0.834秒
2回目
N->FnB 0.584秒
FnB->N 0.917秒
ずいぶん揺らぎが大きい
実験2
チェインに、ファーストブロー(FB)、ブラスティングブロー(BB)とFnBをセットする。
実験結果
こんな感じ
9.281 BB
9.781 FnB
10.816 N
17.721 N
18.088 FnB
18.772 FB
27.379 BB
28.097 FnB
29.014 N
33.384 BB
34.085 FnB
34.769 FB
41.758 FB
42.308 FnB
42.859 FB
時間間隔を調べてみるとこんな感じ
N->FnB 0.367
BB->FnB 0.500, 0.718, 0.701
FB->FnB 0.550
FnB->N 1.035, 0.917
FnB->FB 0.684, 0.684, 0.551
感想
やっぱり、揺らぎが大きい。通信遅延とかの影響を受けているのだと思う。
課金装備 (2019/1/30 - 3/6)
最近、新しい課金装備がどんどん出て、全く把握できていない。
とりあえず直近のデータだけ集めてみた。
ファーンの光芒の箱 (2/20 - 3/6)
https://lodoss.pmang.jp/notices/2223
盟約の証 (U2 装身具)
レベル60制限
OP1[固定] 最終ダメ+33%
OP2[固定] クリ率 33%
OP3[固定] チェインIII ダメ+33%
OP4[ランダムで1種] 筋力+3 or 知力+3
無形シリーズの[頭防具]・ユニーク★1腰装備
障壁を突破する者 (U1 腰装備)
レベル50制限
OP1[固定] 攻撃力+15%
OP2[固定] クリ率+20%
OP3[固定] 最終ダメ(グロ) +15%
OP4[固定] スタ攻+3
U2化時
レベル60制限
OP1[固定] 攻撃力+20%
OP2[固定] クリ率+30%
OP3[固定] 最終ダメ(グロ) +20%
OP4[固定] スタ攻+5
無形のヘルム (R6 頭)
OP1[ランダムで1種] 被ダメ(物理) -5% or -10% or -15% or -25%
OP2[ランダムで1種] CT減 5% or 10% or 15% or 20%
OP3[ランダムで1種] クリ率 5% or 10% or 15% or 30%
OP4[ランダムで1種] 攻撃力 5% or 10% or 15% or 20%
カシューの光芒の箱 (2/13 - 2/20)
https://lodoss.pmang.jp/notices/2190
血塗られた指輪 (U1 指輪)
レベル50制限 (装備制限1個)
OP1[固定] クリダメ制限 +20%
OP2[固定] クリダメ +55% - 60%
OP3[固定] 攻撃力 +25% - 30%
U2化時
レベル50制限 (装備制限1個)
OP1[固定] クリダメ制限 +25%
OP2[固定] クリダメ +65%
OP3[固定] 攻撃力 +35%
OP4[固定] クリ率 +10%
ホーリー・ネックレス (U1 首飾り)
レベル50制限
OP1[固定] 被ダメ(物理) -23%
OP2[固定] 被ダメ(魔法) -23%
OP3[固定] CT減 23%
OP4[固定] 消費MP減 20%
U2化時
レベル60制限
OP1[固定] 被ダメ(物理) -28%
OP2[固定] 被ダメ(魔法) -28%
OP3[固定] CT減 28%
OP4[固定] 消費MP減 25%
OP5[固定] クリ率+10%
ディスティニーシャツ (U1 下衣)
レベル50制限 (U2化不可)
OP1[固定] アイテム +10%
OP2[固定] 上位ドロ率 +10%
OP3[固定] ゴールド +25%
OP4[固定] 金出現率 +10%
セシルの可憐な箱 (1/30 - 2/13)
https://lodoss.pmang.jp/notices/2166
騎士隊長の印章 (U2 指輪)
レベル60制限
OP1[固定] クリダメ +25%
OP2[固定] クリ率 +20%
OP3[固定] 筋力 +4
虹の涙 (U2 首飾り)
レベル60制限
OP1[固定] 攻撃力+30%
OP2[固定] クリ率+35%
OP3[固定] CT減 25%
OP4[ランダムで1種] リアダメ +15% or 消費MP減 15% or 命中率 +25%
灼熱の大地 (U2 装身具)
レベル60制限
OP1[固定] クリダメ +30%
OP2[ランダムで1種] 被ダメ(物理 or 魔法) 15%
OP3[ランダムで1種] チェインI or II or III ダメ +80%
魅惑の陽炎 (U2 腰装備)
レベル60制限
OP1[固定] クリ率 +25%
OP2[固定] 被ダメ(物理) -25%
OP3[ランダムで1種] 命中率 20% or 基本最大LP +35%
グレートソルジャー (U2 肩)
レベル60制限
OP1[固定] 物攻 +30%
OP2[固定] 魔功 +30%
OP3[固定] クリ率 +10%
DPS予想プログラムの検証
この前総与ダメを予想するプログラムを作った。
モンクが訓練用の武器を持ちチェインにファーストブローとブラスティングブローのみをセットし通常放置でかかしを叩いたときの総与ダメを計算するもので、2分間の総与ダメを計算させてみた結果がこちら。
横軸が総与ダメで縦軸が頻度。与ダメは大体 320,000 - 420,000 くらいに収まる、というのがこのプログラムの出した予想。
前回の実験
それで前回、実際に測ってみた結果がこの3つの値。
310,873
338,954
303.108
予想とは大分外れてしまっている。ただ、この実験は夜遅い時間(鯖が混む時間)にやったので、そのせいで悪い数値が出たのかもしれない。
再実験
そこで、今日は鯖の空いている時間帯に再度実験をしてみた。4回測定してみた結果がこれ。
428,694
414,840
414,229
397,755
今度は逆に、予想値より若干高い値になった感じもするけれど、グラフと見比べてみると割と肉厚な辺りに収まっている。なのでおおまかには予想の範囲内と言って良さそう。このプログラム結構信頼できるかもだ。
というか、条件は全く同じなのに鯖が混んでいる時と空いている時とでこんなにも違うもんなんだと改めて実感。2割は落ちると思っておいた方がよさそう。
攻撃力計算機
この日記の右側の「リンク」のところに「〇〇計算機」というのがある。
これは、装備からスキルの攻撃力を求める計算機。
まだ、一部作りかけだったりするのを放置してしまっている。
一応、今でも使えるはずなんだけれど、人によっては、(以前使えたのに)使えなくなってるって事があるかもしれない。
そんな時は、クッキーを消すと直る可能性がある。本当は消したりせずに正しく動くように書くべきなんだけれど、上手くできなかったので対処療法として、クッキーを消してみてください。
消す手順は、ブラウザによって違ってくるのだけれど、例えばfirefoxの場合は
Cookie を削除してコンピューターに保存されたウェブサイトの情報を削除する | Firefox ヘルプ
例えばこことかに載ってる。これを参考にochanikki.web.fc2.comのサイトのクッキーを消す。
あるいは、ブラウザを変更するとうまく動くかもしれない。今日聞いた方の話だとIEだとうまく動かなかったのにクロームだと動いたらしい。
モンクDPS予想2
DPS予想プログラム
前回の日記で書きかけだったDPS予想プログラムを完成させた。
こんな感じ
N=10000 # 実験回数 FB=0.45*(1.21+0.05) # FB発動率 BB1=0.05*(1.21+0.05) # BB発動率 BB2=BB1+0.45 # BB発動率(FBからの発動) DM_N = 371 # 通常攻撃与ダメ DM_FB = 824 # FB与ダメ DM_BB = 1396 # BB与ダメ ST_N = (2+1)*1.3*1.3 # 通常攻撃スタミナ ST_FB = (4+1)*1.3 # FBスタミナ ST_BB = (6+1)*1.3 # BBスタミナ TM_N = 1.04 # 通常攻撃の時間 TM_FB = 0.53 # FBの時間 TM_BB = 0.53 # BBの時間 CRI=0.8 # クリ率 CRI_DM=1.5+1.0+0.07 # クリダメ増 GRO_DM=1.0+1.2 # グロダメ増 MaxStamina = 280 # かかしの最大スタミナ DM_Hash={:normal => DM_N, :fb => DM_FB, :bb => DM_BB} ST_Hash={:normal => ST_N, :fb => ST_FB, :bb => ST_BB} TM_Hash={:normal => TM_N, :fb => TM_FB, :bb => TM_BB} $frand=Random.new() def occ(q) $frand.rand(1.0) < q end # 攻撃の種類を決める def at_type(prev) case prev when :start return :normal when :normal return :bb if occ(BB1) return :fb if occ(FB) return :normal when :fb return :bb if occ(BB2) return :fb if occ(FB) return :normal when :bb return :fb if occ(FB) return :normal end end def sim (max_time) type=:start stamina=MaxStamina gro_time=0 time=0 total=0 while time < max_time type=at_type(type) dm = DM_Hash[type] dm *= CRI_DM if occ(CRI) if time <= gro_time then # グロ中 dm *= GRO_DM else # グロ中でない stamina -= ST_Hash[type] end total+=dm.to_i time +=TM_Hash[type] if stamina < 0 then stamina = MaxStamina gro_time = time + 5 # 5秒間グロ end end total end N.times do p sim(2*60) end
てかプログラム長い><
これまでは、シミュレート回数を10万回でやっていたけれど、処理が重いので1万回に減らした。そして、このプログラムを使って2分間かかしを通常放置で叩くシミュレートをした結果がこちら。
横軸が総与ダメで縦軸が頻度。与ダメは大体 320,000 - 420,000 くらいに収まる感じ。
実測
そしたら、実際に叩いてみたらどうなるかが気になるところだけれど、やってみた結果がこちら。
310,873
338,954
303.108
んー。正直外れていると言えば外れてる。ただ、この実験をしたのは結構夜遅い時間で、実験中も通信遅延でキャラが結構止まっていたりした。なので、そのせいで1割ぐらい下がったんだと考えれば、一応つじつまは合っている。
やはり、鯖の空いている時間帯に実験しないとだめみたい。
モンク DPS予想
これまでの実験で分かったことを総合し、モンクのDPSを予想するプログラムを作っている。
今のところ、チェインはファストブローとブラスティングブローのみで、通常放置でかかしを叩いた場合のみを想定している。
それでも、グロで与ダメが変わったりするので、案外作るのに苦労している。
まだ未完成で、動かすこともできていない><。けれど、「りあえず今こんな感じ」というのを載せてみる。完成までもう少しかかりそう。
FB=0.45*(1.21+0.05) # FB発動率 BB1=0.05*(1.21+0.05) # BB発動率 BB2=BB1+0.45 # BB発動率(FBからの発動) DM_N = 371 DM_FB = 824 DM_BB = 1396 CRI=0.8 # クリ率 CRI_DM=1.5+1.0+0.07 # クリダメ増 GRO_DM= 1.0+1.2 # グロダメ増 MaxStamina = 280 # かかしの最大スタミナ $frand=Random.new() def occ(q) $frand.rand(1.0) < q end # 攻撃の種類を決める def at_type(prev) case prev when :start return :normal when :normal return :bb if occ(BB1) return :fb if occ(FB) return :normal when :fb return :bb if occ(BB2) return :fb if occ(FB) return :normal when :bb return :fb if occ(FB) return :normal end end DM_Hash={:normal => DM_N, :fb => DM_FB, :bb => DM_BB} ST_Hash={:normal => ST_N, :fb => ST_FB, :bb => ST_BB} TM_Hash={:normal => TM_N, :fb => TM_FB, :bb => TM_BB} def sim (max_time) type=:start stamina=MaxStamina gro_time=0 time=0 while time < max_time type=at_type(type) dm = DM_Hash[type] dm *= CRI_DM if occ(CRI) if time <= gro_time then # グロ中 dm *= GRO_DM if gro else # グロ中でない stamina -= ST_Hash[type] end total+=dm time +=TM_Hash[type] if stamina < 0 then stamina = MaxStamina gro_time = time + 5 # 5秒間グロ end end end sim(60)