トップ 新規 編集 差分 一覧 Farm ソース 検索 ヘルプ PDF RSS ログイン

D2C風、レアアイテム生成システム

[SOS2改造]D2C風、レアアイテム生成システム

概要

探索で拾得できるベースアイテムがランダムでレアアイテムに変わるプログラムです。
D2C(Diablo II Classic)のモロパクです……鰤様ありがとう *smile*

レアアイテムの名前、能力ともにランダムで決定します。
「凡庸な剣」発見 → 一定の確率で「ブラッドサースト」(血渇の刃)
「偽物の鎧」発見 → 一定の確率で「コープスシュラウド」(屍装束)
――といった感じで、その系統のランダムレアアイテムに変わります。
簡単に言うとD2Cのモロパクです。
ええ、大事なことなので2回言いました。

ランダムで変わる能力、名前なども自由に変更できます。

改造

1. ファイルをダウンロードします

ファイルの内容
# 設定項目
$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') }

以上で導入は終了です。
至極簡単ですが、リクワイアのファイルパスを間違えないよう注意が必要です。

このページのコメント

  • なにかありましたらお気軽にどうぞ〜 - Pse
add_randrare.pl
お名前: コメント: