トップ 新規 一覧 Farm 検索 ヘルプ RSS ログイン

D2C風、レアアイテム生成システムの変更点

  • 追加された行はこのように表示されます。
  • 削除された行はこのように表示されます。
!!!{{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