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