過去ログ

記事一覧

【.net VB】俺メモ:リソースファイル名を変数で指定したい場合

Q リソースの値を変数で取得
http://okwave.jp/qa/q7222565.html

リソースに追加したファイル名が例えば"a.png""b.png""c.png"だとして、
それぞれ

My.Resources.a
My.Resources.b
My.Resources.c

これをBitmap型に入れるのはいいとして、仮に画像が多数ある場合またファイル名をcsvなどから引いて表示したい場合にファイル名を配列iconに入れたとする。

Dim icon(2) as String
icon(0)="a"
icon(1)="b"
icon(2)="c"

for i=0 to 2
  Dim bmp as Bitmap = CType("My.Resources." + icon(i),Bitmap)
  Me.PictureBox1.Image = bmp
next

とすると文字列をBitmapに変換できないと怒られる。
いろいろ事例を探してみたけどなかなか見つからなくて3日悩んだ末に見つけた回答がこちら。


Function getImage( byVal ss as string ) as bitmap
  dim bmp as Bitmap
  bmp = my.Resources.ResourceManager.GetObject(ss)
  return bmp
end function

リソース名をなんとか型変換すればいいのかと思って検索してたんだけど、My.ResourcesのメンバーのResourceManagerを使えばいいだけの話だそうです。

for i=0 to 2
  Dim res As String = "My.Resources." + icon(i)
  Dim bmp As Bitmap = My.Resources.ResourceManager.GetObject(res)
  Me.PictureBox1.Image = bmp
next

簡潔で素敵な解決方法を見つけられてうれしい。

<追記>
"My.Resources." + icon(i)
は次の行で

My.Resources.ResourceManager.GetObject
とMy.Resourcesを指定しているので不用でした。

渡す値は

icon(i)

のみになります。

【Lineage1】実質DR計算シート

ファイルへのリンクはこちら
http://1drv.ms/1MLZQ74

「変動ダメ」に25とありますが、これは0~25ダメージという事です。
「固定ダメ」に0とありますが、これは変動ダメ0~25+固定ダメ0という事です。

0~100:「変動ダメ100」「固定ダメ0」
50~100:「変動ダメ50」「固定ダメ50」

としてください。
エクセル関数であるRANDの特性上、シートが再計算されるたびにダメージが更新されますので毎回同じダメージが表示されるわけではありません。
ただ、小数点以下の変動にしかなりませんのでそういうものだと思って使ってください。

【Lineage1】反逆者とCBが一部狩場で拮抗するのはなぜか

昨日反逆者の実質DRを仮に計算してみましたが、カタログ通りの値を発揮するのは大ダメージを受けるボス戦や対人なんだろうなという判断でした。
しかし以前の記事で「二の丸などでは幸運LS+反逆者とDIS+CBで狩り効率差ほぼ無し」という実測に基づいた結論を出したことがあります。

試しに昨日と同様の計算式で回避スキルの実質DRを計算してみると、

ファイル 3435-1.png

ご覧の様にCBの方が圧倒的に実質DRが高いという結果が出ました。
しかし運用上そこまでの差があるとは思えません。
では何故でしょうか?

ここからは仮説ですが、例えばHP吸収武器の計算式はどれも同じです。
幸運LSの場合は80変身で両手剣に比べ1.2倍速だとして総吸収値がDISよりも確実に大きくなります。まずこれが一点。
二点目はDIS+CBだと反射ダメージが発生するのでダメージを与えているのにHPを吸収できない部分があります。

ですから反逆者のDRでCBに劣る分は片手剣の攻撃速度でプラスされ、CBのDRで反逆者に勝る分は反射ダメージがHP吸収できない事でマイナスされているのではないでしょうか。

そうすると一撃の重くない狩場で反逆者とCBの狩り効率が拮抗する理由として矛盾ないかなと思うのですけれども。

【Lineage1】幸運のシールドと反逆者のシールド実質DR比較

ダメージ幅で指定されたランダムダメージを10,000回受けた時にリダクションできた数値をそれぞれ計算してみました。

ファイル 3434-1.png

あくまでも「ダメージ幅」で指定されたダメージを機械的に判断するだけですので参考程度にお願いします。

・ダメージ幅0-25
幸運盾はククル以上の期待値を出せますが、反逆者はしょぼーんな結果に。
激ぬる狩場に反逆者は不要。

・ダメージ幅0-50
ようやく反逆者もククル超えをしてきましたが、まだまだ幸運盾の方が有利。

・ダメージ幅0-75、0-100
最低ダメージが小さいほど両者の差は少なくなります。いわゆるDRのお釣りが出てしまう(DR後ダメージが0になる)状態では両者の差は非常に小さいといえるでしょう。
このレベルではどちらもまぁ誤差の範囲。
幸運盾が高い鯖でプリ/ナイトであれば反逆者の方がお得かな程度。

・ダメージ幅20-100
最低ダメージを20に設定すると幸運盾は性能発揮率100%です。両者の差はやはり誤差に近く、体感できるほどではないと思われます。

・ダメージ幅50-100
両者ともダメージリダクション性能を100%発揮する環境であればDR期待値通りの効果が得られます。そうであればスペックの高い方が有利。


ということで、

幸運のシールド:どんな狩場でも安定したパフォーマンスを発揮、ククルにはほぼ負けない

反逆者のシールド:ある程度以上痛い狩場でないと真価を発揮しない、ぬる狩場ではククルに負けるが、ポテンシャルは持ってる

【Lineage1】そういえば幸運のシールド

確率DR発動盾として登場しました幸運のシールド。
反逆者のシールドと似たような性能ですが一番の違いは発動率。

反逆者
+5 10% DR 5.0
+6 12% DR 6.0
+7 14% DR 7.0
+8 16% DR 8.0
+9 18% DR 9.0

幸運盾
+5 20% DR 4.0
+6 24% DR 4.8
+7 28% DR 5.6
+8 32% DR 6.4
+9 36% DR 7.2

あくまでもテストした方の数値を採用したものではありますが、実際かなり発動するとの事ですので間違いないのでしょう。
DR正味を比べてみると+5でDR5の反逆者が55~60Mほど、+5でDR4の幸運盾が80~100M近くなので価格差に違和感を覚えますが、例えば二の丸のような基礎DRだけで完全無効化できるろくろなどがいる狩場の場合ですと発動回数の高いほうがよりいざという時の大ダメージをリダクションできます。

試しに1~100の乱数ダメージを100回受けたとして、+5で20%DR20の幸運盾と+5で10%DR50の反逆者にどれほど差があるのか簡単に計算してみると、

 1~100回:幸運4218ダメージ / 反逆4218ダメージ
101~200回:幸運4390ダメージ / 反逆4299ダメージ
201~300回:幸運3999ダメージ / 反逆4008ダメージ
301~400回:幸運4915ダメージ / 反逆4883ダメージ
401~500回:幸運4366ダメージ / 反逆4340ダメージ
501~600回:幸運4233ダメージ / 反逆4234ダメージ
601~700回:幸運4933ダメージ / 反逆4900ダメージ
701~800回:幸運5347ダメージ / 反逆5265ダメージ
801~900回:幸運4306ダメージ / 反逆4316ダメージ
----------------------------------------------
 合計   :幸運40707ダメージ / 反逆40463ダメージ

になり、平均DRでは1.0の差があるにも関わらず1~100ダメをどれだけ減衰するか競った場合、900回で244ダメージ(1回あたり0.27)の差しかありませんでした。

もう計算しなくても分かりますが、では+7幸運盾と+5反逆者を比べたらどうなるのでしょう。

 1~100回:幸運4323ダメージ / 反逆4583ダメージ
101~200回:幸運4269ダメージ / 反逆4390ダメージ
201~300回:幸運4283ダメージ / 反逆4459ダメージ
301~400回:幸運4493ダメージ / 反逆4580ダメージ
401~500回:幸運4796ダメージ / 反逆4877ダメージ
501~600回:幸運4610ダメージ / 反逆4576ダメージ
601~700回:幸運4374ダメージ / 反逆4455ダメージ
701~800回:幸運4524ダメージ / 反逆4589ダメージ
801~900回:幸運5242ダメージ / 反逆5405ダメージ
----------------------------------------------
 合計   :幸運40914ダメージ / 反逆41914ダメージ

となり、丁度1000ダメージ差でてしまいました。これを1回あたりの攻撃に換算すると1.11。期待値上はDR0.6しか差がないはずなのに、機械的に1~100ダメを900回リダクションしてみるとDR1.1の差がついてしまうんですね。


お次は+7同士で比較。


 1~100回:幸運5010ダメージ / 反逆4926ダメージ
101~200回:幸運4321ダメージ / 反逆4357ダメージ
201~300回:幸運4591ダメージ / 反逆4680ダメージ
301~400回:幸運4576ダメージ / 反逆4561ダメージ
401~500回:幸運3892ダメージ / 反逆3882ダメージ
501~600回:幸運5316ダメージ / 反逆5214ダメージ
601~700回:幸運4433ダメージ / 反逆4383ダメージ
701~800回:幸運4593ダメージ / 反逆4629ダメージ
801~900回:幸運4228ダメージ / 反逆4262ダメージ
----------------------------------------------
 合計   :幸運40960ダメージ / 反逆40894ダメージ

辛うじて+7反逆者がDR0.073分だけ勝利しました。
+7同士なら幸運盾の方がDR0.6有利なはずなのでもう1セット計算してみます。

 1~100回:幸運4641ダメージ / 反逆4642ダメージ
101~200回:幸運4456ダメージ / 反逆4425ダメージ
201~300回:幸運4602ダメージ / 反逆4588ダメージ
301~400回:幸運5361ダメージ / 反逆5329ダメージ
401~500回:幸運4669ダメージ / 反逆4727ダメージ
501~600回:幸運4085ダメージ / 反逆4128ダメージ
601~700回:幸運4649ダメージ / 反逆4642ダメージ
701~800回:幸運4384ダメージ / 反逆4496ダメージ
801~900回:幸運4988ダメージ / 反逆4966ダメージ
----------------------------------------------
 合計   :幸運41835ダメージ / 反逆41943ダメージ

幸運盾がDR0.12だけ勝ちましたが、この辺は誤差ですね。
ほぼ同率と見做してよいと思います。

つまり、1~100ダメ受ける狩場でのリダクションを想定した場合下記の様になります。

+7幸運盾near+7反逆者
+7幸運盾>+5反逆者
+5幸運盾≦+5反逆者

プリとナイトはどちらも装備できるので安い方を。
幸運盾が下がってきたら+7狙いで幸運。

じゃあ+6とかハンパなあれはどうすんだよ!という声が聞こえてきそうです。
もうちょっと見やすく纏められないか検討してみます。