#/usr/bin/perl ### http://www.ausystem.org/~aushacho/gbox/ff/skill.html のソースからの引用 ### コメントを全てカットして以下の部分にそのまま埋め込めば後は適当に処理を ### 行います。 @SKILLRANK_TEMP = ( ##### ここから ##### "D", "A+","E-","-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "E", "-", "B-","-", "A-","B", "-", "D", "C-","C", "B-","B-","C+","E", "E", "C+","E", "B", "-", "D", "B", "-", "-", "A+","B-","D", "C-","E", "C+","C-","C", "-", "B+","-", "-", "-", "-", "-", "B", "A-","-", "-", "-", "-", "-", "-", "-", "A-","-", "-", "-", "-", "-", "-", "C-","-", "-", "A-","-", "-", "-", "-", "A+","-", "-", "-", "-", "-", "-", "C+","-", "-", "-", "-", "-", "-", "-", "B+","-", "-", "-", "-", "-", "-", "A+","-", "-", "C", "-", "-", "-", "-", "B-","-", "-", "-", "-", "-", "E", "-", "-", "-", "-", "B-","A+","-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "A-","-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "A+","-", "C?","-", "B-","C+","E-","D", "B+","E", "A-","C-","E+","D", "D", "E+","E", "E", "E", "B", "B", "-", "-", "C+","C+","A-","-", "-", "-", "-", "-", "B-","-", "B-", "D", "-", "C-","D", "-", "-", "-", "-", "A-","-", "-", "C+","-", "E", "-", "D", "-", "C+","-", "-", "-", "-", "E", "A-","-", "-", "-", "-", "C?","-", "D", "E", "D", "F", "E", "D", "-", "-", "C-","E", "-", "C?","-", "A-","-", "-", "A?","-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "C", "B+","A+","D", "E", "E", "C", "C", "E+","D", "C", "B+","C-","A-","E", "C+","-", "F", "F", "D", "-", "A+","-", "-", "-", "E", "-", "-", "-", "-", "C-","E", "A?","E", "-", "-", "C", "E", "-", "E", "C?","A?","C?","A?","-", "-", "-", "-", "E", "A-","-", "B+","-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "C-","A+","-", "C?","-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "B+","C+","E", "D", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "A+","C", "C+","-", "C", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "C+","-", "A+","-", "B+","-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "E+","-", "A-","-", "A-","-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "C", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "C", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "C", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "A-","-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "A-" ##### ここまで ##### ); @JOB = ("WAR", "MNK", "WHM", "BLM", "RDM", "THF", "PLD", "DRK", "BST", "BRD", "RNG", "SAM", "SMN", "NIN", "DRG", ); @SKILL = ("格闘","短剣","片手剣","両手剣","片手斧","両手斧","両手鎌","両手槍","片手刀","両手刀","片手棍","両手棍","弓術","射撃","投擲","ガード","回避","盾","受け流し","神聖魔法","回復魔法","強化魔法","弱体魔法","精霊魔法","暗黒魔法","歌唱","弦楽器","管楽器","忍術","召喚魔法", ); ### メイン(テスト用) @job = (1,2,30,28,5,6,7,8,9,10,11,12,13,0,15); #テスト用ジョブレベル &init_skillrank; for ($i = 0; $i < @JOB; $i++) { $lv = $job[$i]; printf("%s Lv.%2d:", $JOB[$i], $lv); for ($s = 0; $s < @SKILL; $s++) { printf("%2d", &calc_skillcap($i, $lv, $s)); } print "\n"; } exit(); ### &init_skillrank() ### ジョブ毎の成長速度の初期化 ### $SKILLRANK[$job][$skill]はスキルランク(例:A+)用のグローバル配列 sub init_skillrank { my ($i, $j); my @job_order = (0,1,5,4,2,3,6,7,10,9,8,11,14,13,12); #ジョブ順整合用 return -1 if (@SKILLRANK_TEMP != (@JOB * @SKILL)); #要素数不足 foreach my $g (@SKILLRANK_TEMP) { return -1 if ($g !~ /^([A-F][\+\-\?]?|\-)/); #要素異常 } for ($i = 0; $i < @SKILL; $i++) { foreach $j (@job_order) { $SKILLRANK[$j][$i] = shift @SKILLRANK_TEMP; } } } ### &calc_skillcap($job, $level, $skill) ### スキルキャップの計算 ###  ※式の一部に変更を加えました sub calc_skillcap { my ($job, $lv, $skill) = @_; my $rank, $cap; $lv = int($lv); return 0 if ($lv < 1); #ExジョブがLv.0 $job = int($job); return -1 if (($job < 0) || ($#JOB < $job)); $skill = int($skill); return -1 if (($skill < 0) || ($#SKILL < $skill)); $rank = $SKILLRANK[$job][$skill]; return 0 if ($rank eq "-"); #スキル無し # 未確認スキルの暫定処置 (2003/09/23版) $rank =~ s/^([BC])\?$/$1/; # B?, C? → B, C $rank =~ s/^([AE])\??$/$1\+/; # A, A?, E+ → A+,A+,E+ if ($lv <= 50) { if (($rank eq "A+") or ($rank eq "A-")) { $cap = int (($lv - 1) * 30 / 10) + 6; } elsif (($rank eq "B+") or ($rank eq "B") or ($rank eq "B-")) { $cap = int (($lv - 1) * 29 / 10) + 6; } elsif (($rank eq "C+") or ($rank eq "C") or ($rank eq "C-")) { $cap = int (($lv - 1) * 28 / 10) + 6; } elsif (($rank eq "D")) { $cap = int (($lv - 1) * 27 / 10) + 6; } elsif (($rank eq "E+") or ($rank eq "E") or ($rank eq "E-")) { $cap = int (($lv - 1) * 25 / 10) + 6; } elsif (($rank eq "F")) { $cap = int (($lv - 1) * 23 / 10) + 6; } else { $cap = -1; #Error } } elsif ($lv <= 60) { if (($rank eq "A+") or ($rank eq "A-")) { $cap = int (($lv - 50) * 50 / 10) + 153; } elsif (($rank eq "B+") or ($rank eq "B") or ($rank eq "B-")) { $cap = int (($lv - 50) * 50 / 10) + 153; } elsif (($rank eq "C+") or ($rank eq "C") or ($rank eq "C-")) { $cap = int (($lv - 50) * 50 / 10) + 153; } elsif ($rank eq "D") { $cap = int (($lv - 50) * 50 / 10) + 153; } elsif (($rank eq "E+") or ($rank eq "E-")) { $cap = int (($lv - 50) * 50 / 10) + 153; } elsif ($rank eq "F") { $cap = int (($lv - 50) * 50 / 10) + 153; } else { $cap = -1; #Error } } else { if ($rank eq "A+") { $cap = int (($lv - 60) * 485 / 100) + 203; } elsif ($rank eq "A-") { $cap = int (($lv - 60) * 410 / 100) + 203; } elsif ($rank eq "B+") { $cap = int (($lv - 60) * 370 / 100) + 196; } elsif ($rank eq "B") { $cap = int (($lv - 60) * 323 / 100) + 196; } elsif ($rank eq "B-") { $cap = int (($lv - 60) * 270 / 100) + 196; } elsif ($rank eq "C+") { $cap = int (($lv - 60) * 250 / 100) + 190; } elsif ($rank eq "C") { $cap = int (($lv - 60) * 225 / 100) + 190; } elsif ($rank eq "C-") { $cap = int (($lv - 60) * 200 / 100) + 190; } elsif ($rank eq "D") { $cap = int (($lv - 60) * 185 / 100) + 190; } elsif ($rank eq "E+") { $cap = int (($lv - 60) * 190 / 100) + 171; } elsif ($rank eq "E-") { $cap = int (($lv - 60) * 187 / 100) + 171; } elsif ($rank eq "F") { $cap = int (($lv - 60) * 200 / 100) + 159; } else { $cap = -1; #Error } } return $cap; }