!!!{{category SOS2改造}}D2C風、レアアイテム生成システム !!概要 探索で拾得できるベースアイテムがランダムでレアアイテムに変わるプログラムです。 D2C(Diablo II Classic)のモロパクです……鰤様ありがとう *smile* レアアイテムの名前、能力ともにランダムで決定します。 「凡庸な剣」発見 → 一定の確率で「ブラッドサースト」(血渇の刃) 「偽物の鎧」発見 → 一定の確率で「コープスシュラウド」(屍装束) ――といった感じで、その系統のランダムレアアイテムに変わります。 簡単に言うとD2Cのモロパクです。 ええ、大事なことなので2回言いました。 ランダムで変わる能力、名前なども自由に変更できます。 *[[洋ゲー風、拾得アイテム強化プログラム|洋ゲー風、拾得アイテム強化プログラム]] の兄弟です:) !!改造 !1. ファイルをダウンロードします *{{ref add_randrare.pl}} :ファイルの内容: # 設定項目 $rare_rand = 100; # レアアイテムが作成される確立(1/n) $rare_fg = 'Li'; # 作成されたレアアイテムに付加される略字 $deny_fg = 'Li'; # レアアイテムの作成を禁止する略字 -> Liが入っていた場合、レア作成しない $liprice = '50'; # 作成されたレアアイテムの価格 # レアアイテムの作成を行う略字 @exec_fg = ('Sw','Kn','Ax','Wd','Bw','Gv','Ar','Sh','Jw','Mi'); @sw_a = (3,3,2,2,2); # Swの攻撃可変値(分率の分母数は適当でOKです)E.G. -> $sd_a = (3,2,1); @sw_d = (1,1,0,0,0); # Swの防御可変値(同上) @kn_a = (3,2,2,2,2); # Knの攻撃 @kn_d = (1,1,0,0,0); # Knの防御 @ax_a = (3,2,2,2,2); # Axの攻撃 @ax_d = (1,1,0,0,0); # Axの防御 @wd_a = (3,2,2,2,2); # Wdの攻撃 @wd_d = (1,1,0,0,0); # Wdの防御 @bw_a = (1,1,0,0,0); # Bwの攻撃 @bw_d = (3,3,2,2,2); # Bwの防御 @gv_a = (2,2,1,1,1); # Gvの攻撃 @gv_d = (2,2,1,1,1); # Gvの防御 @ar_a = (1,1,0,0,0); # Arの攻撃 @ar_d = (3,3,2,2,2); # Arの防御 @sh_a = (1,1,0,0,0); # Shの攻撃 @sh_d = (3,3,2,2,2); # Shの防御 @jw_a = (2,2,1,1,1); # Jwの攻撃 @jw_d = (2,2,1,1,1); # Jwの防御 @mi_a = (2,2,1,1,1); # Miの攻撃 @mi_d = (2,2,1,1,1); # Miの防御 $dh_a = 1; # Dh(両手武器)に付加する攻撃ボーナス $dh_d = 0; # Dh(両手武器)に付加する防御ボーナス sub randrare { my ($Linm,$Lidt) = @_; $prechk = int(rand($rare_rand)); if ($prechk) { return($Linm,$Lidt) } # 禁止略字/アイテムの種類をチェック $check = 0; foreach $exec_fg (@exec_fg) { if ($Lidt =~ /$exec_fg/) { $check ++; $item_fg = $exec_fg; # $item_fg -> 取得アイテム略字 } } if ($Lidt =~ /$deny_fg/ || !$check) { return($Linm,$Lidt) } &randrare_fix; # Pre/Su-fix read-in # アイテム別の処理 # $add_a = 攻撃値 # $add_d = 防御値 # @sufix = 接尾語 if ($item_fg eq 'Sw') { # 剣 @add_a = @sw_a; @add_d = @sw_d; @sufix = @K_sufix; } if ($item_fg eq 'Kn') { # 短剣 @add_a = @kn_a; @add_d = @kn_d; @sufix = @K_sufix; } if ($item_fg eq 'Ax') { # 斧 @add_a = @ax_a; @add_d = @ax_d; @sufix = @X_sufix; } if ($item_fg eq 'Wd') { # 杖 @add_a = @wd_a; @add_d = @wd_d; @sufix = @W_sufix; } if ($item_fg eq 'Bw') { # 弓 @add_a = @bw_a; @add_d = @bw_d; @sufix = @B_sufix; } if ($item_fg eq 'Gv') { # 小手 @add_a = @gv_a; @add_d = @gv_d; @sufix = @G_sufix; } if ($item_fg eq 'Ar') { # 鎧 @add_a = @ar_a; @add_d = @ar_d; @sufix = @A_sufix; } if ($item_fg eq 'Sh') { # 盾 @add_a = @sh_a; @add_d = @sh_d; @sufix = @S_sufix; } if ($item_fg eq 'Jw') { # 宝珠 @add_a = @jw_a; @add_d = @jw_d; @sufix = @J_sufix; } if ($item_fg eq 'Mi') { # 楽器 @add_a = @mi_a; @add_d = @mi_d; @sufix = @M_sufix; } $iak = $add_a[int(rand($#add_a))]; $idd = $add_d[int(rand($#add_d))]; $sts = substr($Lidt,8,length($Lidt)); $pre = $R_prefix[int(rand($#R_prefix))]; $suf = $sufix[int(rand($#sufix))]; $iak += $dh_a if $sts =~ /Dh/; # 両手武器ボーナス $idd += $dh_d if $sts =~ /Dh/; $sts .= $rare_fg if $rare_fg; # 付加略字 $pc = sprintf("%04d",$liprice); $iak = sprintf("%02d",$iak); $idd = sprintf("%02d",$idd); $new_inm = "$pre$suf"; $new_idt = "$pc$iak$idd$sts"; return($new_inm,$new_idt); } sub randrare_fix { ## Pre-fix(接頭語) @R_prefix = ('ビースト','スカル','グリム','レイス','ストーム','グリフ','ゲイル','コープス', 'ビター','イーグル','ロウス','ハヴォック','コラプション','レイヴン','ヴァイパー','ドゥーム', 'ブラッド','ボーン','ルーン','スピリット','ブランブル','インプ','ダイア','エントロピー', 'ドレッド','デス','プレイグ','デモン','ペイン','フィーンド','ホロコースト','ケイオス', 'シャドウ','ストーン','クルーエル','オーダー','エンパイリアン','リフト','キャリアン','ソウル', 'ヘイルストーン','ブリムストーン'); ## Suf-fix(接尾語) ## 刀剣(Sd,Kn) @K_sufix = ('バイト','ガッター','エッジ','スクラッチ','レイザー', 'ソウ','ファング','サイズ','サースト','スカルプル'); ## 斧(Ax) @X_sufix = ('スプリッター','レンド','スポーン','クリーヴァー','セーヴァー', 'スレイヤー','サンダー','リーヴァー','マングル','ナッシュ'); ## 杖(Wd) @W_sufix = ('スター','クラッシャー','マレット','ブロウ','ブレイカー', 'スマッシャー','グリンダー','ベイン','クラック','ネル'); ## 弓(Bw) @B_sufix = ('ニードル','フレッチ','スティンガー','ダート','フライト', 'ボルト','ホーン','クォーラル','ナック','クィル'); ## グラブ(Gv) @G_sufix = ('ハンド','グリップ','フィンガー','フィスト','グラスプ', 'ナックル','クロウ','ホールド','タッチ','クラッチ'); ## 鎧(Ar) @A_sufix = ('ハイド','ラップ','ジャック','ペルト','スーツ', 'マントル','クローク','コート','シュラウド','カラパス'); ## 盾(Sh) @S_sufix = ('ガード','ワード','マーク','バッヂ','タワー', 'エムブレム','ロック','シールド','イージス','ウィング'); ## 宝珠(Jw) @J_sufix = ('ノット','ターン','バンド','サークル','スパイラル', 'ループ','コイル','アイ','ジャイル','ワール'); ## 楽器(Mi)# Diablo には存在しないので適当…… @M_sufix = ('ハープ','リラ','フィドル','ホーン','フルート','リコーダー'); } 1; !2. # Sub Find Item # の修正 if ($idt !~ /Gl/) { push(@items,"$inm△$idt"); &joinitem('i') } の部分に一行追加します。 if ($idt !~ /Gl/) { require './add_randrare.pl'; ($inm,$idt) = &randrare("$inm","$idt") } # この行 if ($idt !~ /Gl/) { push(@items,"$inm△$idt"); &joinitem('i') } 以上で導入は終了です。 至極簡単ですが、リクワイアのファイルパスを間違えないよう注意が必要です。 *[[Script Of Saga II Worlds Apart|SOSIIを分割しよう]] でのみ動作確認を行いました !!!このページのコメント *なにかありましたらお気軽にどうぞ〜 - Pse