__E
}
## Print Document ##
sub print_document
{
print $response_header, <<__E;
$title - Document
Types
| Race | HP | MP | STR | DEX | VIT | AGI | INT | MND | CHR |
| HUM | D | D | D | D | D | D | D | D | D |
| ELV | C | E | B | E | C | F | F | B | D |
| TAR | G | A | F | D | E | C | A | E | D |
| MIT | D | D | E | A | E | B | D | E | F |
| GAL | A | G | C | D | A | E | E | D | F |
| Job | HP | MP | STR | DEX | VIT | AGI | INT | MND | CHR |
| WAR | B | x | A | C | D | C | F | F | E |
| MNK | A | x | C | B | A | F | G | D | E |
| WHM | E | C | D | F | D | E | E | A | C |
| BLM | F | B | F | C | F | C | A | E | D |
| RDM | D | D | D | D | E | E | C | C | D |
| THF | D | x | D | A | D | B | C | G | G |
| PLD | C | F | B | E | A | G | G | C | C |
| DRK | C | F | A | C | C | D | C | G | G |
| BST | C | x | D | C | D | F | E | E | A |
| BRD | D | x | D | D | D | F | D | D | B |
| RNG | E | x | E | D | D | A | E | D | E |
| SMN | G | A | F | E | F | D | B | B | B |
| SAM | B | x | C | C | C | E | D | D | D |
| NIN | D | x | C | B | C | B | D | G | F |
| DRG | C | x | B | D | C | D | F | E | C |
Scale/Base(/ScaleXXX)
| Type | HP | MP | Status |
| A | 9/19/1 | 6/16 | 0.5/5 |
| B | 8/17/1 | 5/14 | 0.45/4 |
| C | 7/16/1 | 4/12 | 0.4/4 |
| D | 6/14/0 | 3/10 | 0.35/3 |
| E | 5/13/0 | 2/8 | 0.3/3 |
| F | 4/11/0 | 1/6 | 0.25/2 |
| G | 3/10/0 | 0.5/4 | 0.2/2 |
MLv = Main job level
SLv = Support job level
MLvX = MLv-10 (least 0)
MLvXXX = MLv-30 (least 0)
SLvX = SLv-10 (least 0)
RaceHP = HPScale * (MLv-1) + HPBase + 2 * MLvX + HPScaleXXX * MLvXXX
JobHP = HPScale * (MLv-1) + HPBase + HPScaleXXX * MLvXXX (+30 if MNK>=15, +60 if MNK>=35, +90 if MNK>=55, +120 if MNK>=75)
SJobHP = ( HPScale * (SLv-1) + HPBase + SLvX ) / 2 (+30 if MNK>=15, +60 if MNK>=35, +90 if MNK>=55, +120 if MNK>=75)
HP = RaceHP + JobHP + SJobHP
RaceMP = MPScale * (MLv-1) + MPBase
RaceMP = ( MPScale * (SLv-1) + MPBase ) / 2 (if support only)
JobMP = MPScale * (MLv-1) + MPBase (+10 if SMN>=10, +20 if SMN>=30, +30 if SMN>=50, +40 if SMN>=70)
SJobMP = ( MPScale * (SLv-1) + MPBase ) / 2 (+10 if SMN>=10, +20 if SMN>=30, +30 if SMN>=50, +40 if SMN>=70)
MP = RaceMP + JobMP + SJobMP
RaceStatus = StatusScale * (MLv-1) + StatusBase
JobStatus = StatusScale * (MLv-1) + StatusBase
SJobStatus = ( StatusScale * (SLv-1) + StatusBase ) / 2
Status = RaceStatus + JobStatus + SJobStatus
$ad
__E
}
## Print Report ##
sub print_report
{
my @race_status = @{$race_status{$query{race}}};
my @job_status = @{$job_status{$query{job}}};
my @supjob_status = @{$job_status{$query{supjob}}};
my @race_mp = @{$race_mp{$query{race}}};
my @job_mp = @{$job_mp{$query{job}}};
my @supjob_mp = @{$job_mp{$query{supjob}}};
my $mp_available = 1; # MP Available
if ($query{job} ne "NoJob" and $job_mp[0] == 0) {
if ($supjob_mp[0] != 0) {
$mp_available = 2; # MP Available but Support Only
}
else {
$mp_available = 0; # MP Not Available
}
}
my @race_hp = @{$race_hp{$query{race}}};
my @job_hp = @{$job_hp{$query{job}}};
my @supjob_hp = @{$job_hp{$query{supjob}}};
my $maxsuplevel = $query{maxsuplevel} || int $level_cap/2;
my $caption = "$abbrev{$query{race}} / $abbrev{$query{job}}";
$caption .= " / $abbrev{$query{supjob}}(Lv.$maxsuplevel)" if $query{supjob} ne "NoJob";
print $response_header, <<__E;
$title - $caption
$caption
__E
my $head_row = "| Level | HP | MP | ";
foreach (@status_abbrev) {
$head_row .= "$_ | ";
}
$head_row .= "
";
LEVEL: foreach $level ( 1 .. $level_cap ) {
my $suplevel = int $level/2;
$suplevel = 1 if $suplevel < 1;
$suplevel = $maxsuplevel if $suplevel > $maxsuplevel;
print $head_row if $level % 10 == 1;
print qq|| $level | |;
my $race_hp = int ( $race_hp[0]*($level-1) ) + $race_hp[1];
$race_hp += 2 * ($level-10) if $level > 10;
$race_hp += $race_hp[2] * ($level-30) if $level > 30;
$race_hp = 0 if $query{race} eq "NoRace";
my $job_hp = int $job_hp[0]*($level-1) + $job_hp[1];
$job_hp += $job_hp[2] * ($level-30) if $level > 30;
$job_hp += 30 if $query{job} eq "MNK" and $level >= 15;
$job_hp += 30 if $query{job} eq "MNK" and $level >= 35;
$job_hp += 30 if $query{job} eq "MNK" and $level >= 55;
$job_hp += 30 if $query{job} eq "MNK" and $level >= 75;
$job_hp = 0 if $query{job} eq "NoJob";
my $supjob_hp = int $supjob_hp[0]*($suplevel-1) + $supjob_hp[1];
$supjob_hp += $suplevel-10 if $suplevel > 10;
$supjob_hp = int ( $supjob_hp / 2 );
$supjob_hp += 30 if $query{supjob} eq "MNK" and $suplevel >= 15;
$supjob_hp += 30 if $query{supjob} eq "MNK" and $suplevel >= 35;
$supjob_hp += 30 if $query{supjob} eq "MNK" and $suplevel >= 55;
$supjob_hp += 30 if $query{supjob} eq "MNK" and $suplevel >= 75;
$supjob_hp = 0 if $query{supjob} eq "NoJob";
my $hp = $race_hp + $job_hp + $supjob_hp;
print "$hp | ";
my $mp_level = ($mp_available != 2) ? $level : $suplevel;
my $race_mp = int $race_mp[0]*($mp_level-1)+$race_mp[1];
my $job_mp = int $job_mp[0]*($mp_level-1)+$job_mp[1];
$job_mp += 10 if $query{job} eq "SMN" and $level >= 10;
$job_mp += 10 if $query{job} eq "SMN" and $level >= 30;
$job_mp += 10 if $query{job} eq "SMN" and $level >= 50;
$job_mp += 10 if $query{job} eq "SMN" and $level >= 70;
my $supjob_mp = int $supjob_mp[0]*($suplevel-1)+$supjob_mp[1];
$supjob_mp = int ( $supjob_mp / 2 );
$supjob_mp += 10 if $query{supjob} eq "SMN" and $suplevel >= 10;
$supjob_mp += 10 if $query{supjob} eq "SMN" and $suplevel >= 30;
$supjob_mp += 10 if $query{supjob} eq "SMN" and $suplevel >= 50;
$supjob_mp += 10 if $query{supjob} eq "SMN" and $suplevel >= 70;
my $mp = 0;
$mp = $race_mp + $job_mp + $supjob_mp if $mp_available == 1;
$mp = int($race_mp/2) + $supjob_mp if $mp_available == 2;
print "$mp | ";
foreach ( 0 .. $#status_abbrev) {
my $race_status = int $scale{$race_status[$_]}*($level-1)+$base{$race_status[$_]};
my $job_status = int $scale{$job_status[$_]}*($level-1)+$base{$job_status[$_]};
my $supjob_status = int $scale{$supjob_status[$_]}*($suplevel-1)+$base{$supjob_status[$_]};
$supjob_status = int $supjob_status / 2;
my $status = $race_status + $job_status + $supjob_status;
print "$status | ";
}
print "
";
}
print <<__E;
$ad