いじくるソースはlibディレクトリのconst.pl、setrole.pl、あとはrsディレクトリのtrs_*.pl(ただし、trs_basic.plは除く)です。
@order_roletableに適当な文字列(半角で他のものと重複しないもの)を要素に追加してください。注釈をつけておくと忘れません。
GetSetRoleTable関数にifとかelsifとかずらずら並んでいる部分がありますね。そこに次のような文章を付け加えてください。
} elsif ($roletable eq 'さっき設定した文字列') {
# 〜配分表の取得
&GetSetRoleTable〜($sow, $vil, \@roles);
}
(ただし〜には適切な文字列を挿入する、関数名はこのソースにある関数名と重複してはいけない。かつ、〜の部分は半角英数字でなければならない)
例えば、次のような感じです。
} elsif ($roletable eq 'wbbs_e') {
# E国配分表の取得
&GetSetRoleTableWBBS_E($sow, $plcnt, \@roles);
これからはこの例を用いて説明していきます。
では、この関数を定義しましょう。まず、GetSetRoleTableDefault関数を丸ごとコピーアンドペーストしちゃいましょう。
その後、この関数の名前をGetSetRoleTableWBBS_Eに変えちゃいましょう。(オリジナルのほうは元のまま)
その後、ぐだぐだ調整していくわけなんですが、ROLEID_HAMSTERというのがハムスター人間の配役番号です。
で、出来上がったソースは次のとおりです。
sub GetSetRoleTableWBBS_E {
my ($sow, $plcnt, $roles) = @_;
# 人狼
$roles->[$sow->{'ROLEID_WOLF'}]++;
$roles->[$sow->{'ROLEID_WOLF'}]++ if ($plcnt >= 8);
$roles->[$sow->{'ROLEID_WOLF'}]++ if ($plcnt >= 15);
$roles->[$sow->{'ROLEID_WOLF'}]++ if ($plcnt >= 24);
# 占い師
$roles->[$sow->{'ROLEID_SEER'}]++;
# 霊能者
$roles->[$sow->{'ROLEID_MEDIUM'}]++ if ($plcnt >= 9);
# 狂人
$roles->[$sow->{'ROLEID_POSSESS'}]++ if ($plcnt >= 10);
# 狩人
$roles->[$sow->{'ROLEID_GUARD'}]++ if ($plcnt >= 11);
# 共有者
$roles->[$sow->{'ROLEID_FM'}] += 2 if ($plcnt >= 16);
# ハムスター人間
$roles->[$sow->{'ROLEID_HAMSTER'}]++ if ($plcnt >= 17);
# 村人
my $total = 0;
my $i;
for ($i = 0; $i < $sow->{'COUNT_ROLE'}; $i++) {
$total += $roles->[$i];
}
$roles->[$sow->{'ROLEID_VILLAGER'}] = $plcnt - $total - 1;
return;
}
この配役パターンでは
となります。注意すべきなのは配役を作るときに少なくともダミーの村人を1人は入れることです。
なお上の〜人以上でとかいうのはダミーの人数も含んでいます。審問に慣れている方は注意。
%caption_roletableにsetrole.plで設定した文字列とパターン名を加えます。
ただし、全部のtrs_*.plで名前を統一する必要はありません。今回の場合は、
wbbs_e => 'E国',
とでも設定しておけばいいでしょう。