$title = "FFXI Status Calculator"; $level_cap_default = 59; $response_header = "Content-Type: text/html\n\n"; $tripod_ad = <<__E; __E *ad = \$tripod_ad; @race_abbrev = qw ( NoRace HUM ELV TAR MIT GAL ); @job_abbrev = qw ( NoJob WAR MNK WHM BLM RDM THF PLD DRK BST BRD RNG ); @status_abbrev = qw ( STR DEX VIT AGI INT MND CHR ); %abbrev = ( # Races # HUM => "Hume", ELV => "Elvaan", TAR => "Tarutaru", MIT => "Mithra", GAL => "Galka", # Jobs # WAR => "Warrior", MNK => "Monk", WHM => "White Mage", BLM => "Black Mage", RDM => "Red Mage", THF => "Thief", PLD => "Paladin", DRK => "Dark Knight", BST => "Beastmaster", BRD => "Bard", RNG => "Ranger", SMN => "Summoner", SAM => "Samurai", NIN => "Ninja", DRG => "Dragoon", # Extras # NoRace => "No Race", NoJob => "No Job", Stripe => "Stripe Pattern", AllA => "All A", AllB => "All B", AllC => "All C", AllD => "All D", AllE => "All E", AllF => "All F", AllG => "All G", ); $html_race_options = ''; foreach (@race_abbrev) { $html_race_options .= qq|
| 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;| Level | HP | MP | "; foreach (@status_abbrev) { $head_row .= "$_ | "; } $head_row .= "
|---|---|---|---|
| $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 "
$ad
__E } ## Main ## if ($query{mode} eq "document") { &print_document; } elsif ($query{mode} eq "report") { &print_report; } else { &print_form; }| Up Since 7/01/01 | ||||||||||||||||
| Will's | ||||||||||||||||
![]() |
||||||||||||||||
![]() |
||||||||||||||||
| Enter | ||||||||||||||||
| Check out my stats!This counter is new. | ||||||||||||||||