Source of /kol/skills.php
<?
if ($_SERVER['SCRIPT_FILENAME'] == __FILE__)
$allowviewsource=1;
include ("../common.php");
/*
Liver of Steel
The Smile of Mr. A.
Seal Clubbing Frenzy
Thrust-Smack (P)
Tongue of the Otter (P)
Hide of the Otter
Claws of the Otter
Eye of the Stoat (HP)
Summon Snowcone (HP)
Summon Hilarious Objects (HP)
*/
page_header('KoL Skills Tool');
# from http://kol.coldfront.net/thekolwiki/index.php/Skills_by_number
$classes = array("<error>", "Seal Clubber", "Turtle Tamer", "Pastamancer", "Sauceror", "Disco Bandit", "Accordion Thief", "Gnomish", "Miscellaneous");
$havestr = array("Skills Missing", "Available for this run", "Permanent", "Hardcore Permanent");
$skilllist = array(
1 => array('name'=>'Liver of Steel', 'permable'=>FALSE, 'have'=>0, 'class'=>8, 'level'=>0),
2 => array('name'=>'Chronic Indigestion', 'permable'=>TRUE, 'have'=>0, 'class'=>8, 'level'=>3),
3 => array('name'=>'The Smile of Mr. A.', 'permable'=>FALSE, 'have'=>0, 'class'=>8, 'level'=>4),
4 => array('name'=>'Arse Shoot', 'permable'=>FALSE, 'have'=>0, 'class'=>8, 'level'=>5),
5 => array('name'=>'Stomach of Steel', 'permable'=>FALSE, 'have'=>0, 'class'=>8, 'level'=>1),
6 => array('name'=>'Spleen of Steel', 'permable'=>FALSE, 'have'=>0, 'class'=>8, 'level'=>2),
10 => array('name'=>'Powers of Observatiogn', 'permable'=>TRUE, 'have'=>0, 'class'=>7, 'level'=>0),
11 => array('name'=>'Gnefarious Pickpocketing', 'permable'=>TRUE, 'have'=>0, 'class'=>7, 'level'=>1),
12 => array('name'=>'Torso Awaregness', 'permable'=>TRUE, 'have'=>0, 'class'=>7, 'level'=>2),
13 => array('name'=>'Gnomish Hardigness', 'permable'=>TRUE, 'have'=>0, 'class'=>7, 'level'=>3),
14 => array('name'=>'Cosmic Ugnderstanding', 'permable'=>TRUE, 'have'=>0, 'class'=>7, 'level'=>4),
15 => array('name'=>'CLEESH', 'permable'=>TRUE, 'have'=>0, 'class'=>8, 'level'=>6),
16 => array('name'=>'Summon Snowcone', 'permable'=>TRUE, 'have'=>0, 'class'=>8, 'level'=>7),
17 => array('name'=>'Summon Hilarious Objects', 'permable'=>TRUE, 'have'=>0, 'class'=>8, 'level'=>8),
1000 => array('name'=>'Seal Clubbing Frenzy', 'permable'=>TRUE, 'have'=>0, 'class'=>1, 'level'=>0),
1004 => array('name'=>'Lunge-Smack', 'permable'=>FALSE, 'have'=>0, 'class'=>1, 'level'=>17),
1005 => array('name'=>'Lunging Thrust-Smack', 'permable'=>TRUE, 'have'=>0, 'class'=>1, 'level'=>10),
// Thrust-Smack is after Lunging Thrust-Smack in the list
// so that the substring matcher doesn't see the "Thrust-Smack" at the end of "Lunging Thrust-Smack"
// and misidentify the skill
1003 => array('name'=>'Thrust-Smack', 'permable'=>TRUE, 'have'=>0, 'class'=>1, 'level'=>4),
1006 => array('name'=>'Super-Advanced Meatsmithing', 'permable'=>TRUE, 'have'=>0, 'class'=>1, 'level'=>5),
1007 => array('name'=>'Tongue of the Otter', 'permable'=>TRUE, 'have'=>0, 'class'=>1, 'level'=>3),
1008 => array('name'=>'Hide of the Otter', 'permable'=>TRUE, 'have'=>0, 'class'=>1, 'level'=>1),
1009 => array('name'=>'Claws of the Otter', 'permable'=>TRUE, 'have'=>0, 'class'=>1, 'level'=>2),
1010 => array('name'=>'Tongue of the Walrus', 'permable'=>TRUE, 'have'=>0, 'class'=>1, 'level'=>9),
1011 => array('name'=>'Hide of the Walrus', 'permable'=>TRUE, 'have'=>0, 'class'=>1, 'level'=>7),
1012 => array('name'=>'Claws of the Walrus', 'permable'=>TRUE, 'have'=>0, 'class'=>1, 'level'=>8),
1014 => array('name'=>'Eye of the Stoat', 'permable'=>TRUE, 'have'=>0, 'class'=>1, 'level'=>6),
1015 => array('name'=>'Rage of the Reindeer', 'permable'=>TRUE, 'have'=>0, 'class'=>1, 'level'=>11),
1016 => array('name'=>'Pulverize', 'permable'=>TRUE, 'have'=>0, 'class'=>1, 'level'=>15),
1017 => array('name'=>'Double-Fisted Skull Smashing', 'permable'=>TRUE, 'have'=>0, 'class'=>1, 'level'=>12),
1018 => array('name'=>'Northern Exposure', 'permable'=>TRUE, 'have'=>0, 'class'=>1, 'level'=>13),
1019 => array('name'=>'Musk of the Moose', 'permable'=>TRUE, 'have'=>0, 'class'=>1, 'level'=>14),
1020 => array('name'=>'Snarl of the Timberwolf', 'permable'=>TRUE, 'have'=>0, 'class'=>1, 'level'=>16),
2000 => array('name'=>'Patience of the Tortoise', 'permable'=>TRUE, 'have'=>0, 'class'=>2, 'level'=>0),
2003 => array('name'=>'Headbutt', 'permable'=>TRUE, 'have'=>0, 'class'=>2, 'level'=>1),
2004 => array('name'=>'Skin of the Leatherback', 'permable'=>TRUE, 'have'=>0, 'class'=>2, 'level'=>2),
2005 => array('name'=>'Shieldbutt', 'permable'=>TRUE, 'have'=>0, 'class'=>2, 'level'=>10),
2006 => array('name'=>'Armorcraftiness', 'permable'=>TRUE, 'have'=>0, 'class'=>2, 'level'=>5),
2007 => array('name'=>'Ghostly Shell', 'permable'=>TRUE, 'have'=>0, 'class'=>2, 'level'=>4),
2008 => array('name'=>'Reptilian Fortitude', 'permable'=>TRUE, 'have'=>0, 'class'=>2, 'level'=>9),
2009 => array('name'=>'Empathy of the Newt', 'permable'=>TRUE, 'have'=>0, 'class'=>2, 'level'=>8),
2010 => array('name'=>'Tenacity of the Snapper', 'permable'=>TRUE, 'have'=>0, 'class'=>2, 'level'=>6),
2011 => array('name'=>'Wisdom of the Elder Tortoises', 'permable'=>TRUE, 'have'=>0, 'class'=>2, 'level'=>11),
2012 => array('name'=>'Astral Shell', 'permable'=>TRUE, 'have'=>0, 'class'=>2, 'level'=>12),
2014 => array('name'=>'Amphibian Sympathy', 'permable'=>TRUE, 'have'=>0, 'class'=>2, 'level'=>3),
2015 => array('name'=>'Kneebutt', 'permable'=>TRUE, 'have'=>0, 'class'=>2, 'level'=>7),
2016 => array('name'=>'Cold-Blooded Fearlessness', 'permable'=>TRUE, 'have'=>0, 'class'=>2, 'level'=>13),
2020 => array('name'=>'Hero of the Half-Shell', 'permable'=>TRUE, 'have'=>0, 'class'=>2, 'level'=>14),
2021 => array('name'=>'Tao of the Terrapin', 'permable'=>TRUE, 'have'=>0, 'class'=>2, 'level'=>15),
2022 => array('name'=>'Spectral Snapper', 'permable'=>TRUE, 'have'=>0, 'class'=>2, 'level'=>16),
2107 => array('name'=>'Head + Knee + Shield Combo', 'permable'=>FALSE, 'have'=>0, 'class'=>2, 'level'=>20),
2103 => array('name'=>'Head + Knee Combo', 'permable'=>FALSE, 'have'=>0, 'class'=>2, 'level'=>17),
2105 => array('name'=>'Head + Shield Combo', 'permable'=>FALSE, 'have'=>0, 'class'=>2, 'level'=>18),
2106 => array('name'=>'Knee + Shield Combo', 'permable'=>FALSE, 'have'=>0, 'class'=>2, 'level'=>19),
3000 => array('name'=>'Manicotti Meditation', 'permable'=>TRUE, 'have'=>0, 'class'=>3, 'level'=>0),
3003 => array('name'=>'Minor Ray of Something', 'permable'=>TRUE, 'have'=>0, 'class'=>3, 'level'=>1),
3004 => array('name'=>'Entangling Noodles', 'permable'=>TRUE, 'have'=>0, 'class'=>3, 'level'=>2),
3005 => array('name'=>'eXtreme Ray of Something', 'permable'=>TRUE, 'have'=>0, 'class'=>3, 'level'=>4),
3006 => array('name'=>'Pastamastery', 'permable'=>TRUE, 'have'=>0, 'class'=>3, 'level'=>5),
3007 => array('name'=>'Cone of Whatever', 'permable'=>TRUE, 'have'=>0, 'class'=>3, 'level'=>8),
3008 => array('name'=>'Weapon of the Pastalord', 'permable'=>TRUE, 'have'=>0, 'class'=>3, 'level'=>10),
3009 => array('name'=>'Lasagna Bandages', 'permable'=>TRUE, 'have'=>0, 'class'=>3, 'level'=>3),
3010 => array('name'=>'Leash of Linguini', 'permable'=>TRUE, 'have'=>0, 'class'=>3, 'level'=>11),
3011 => array('name'=>'Spirit of Rigatoni', 'permable'=>TRUE, 'have'=>0, 'class'=>3, 'level'=>7),
3012 => array('name'=>'Cannelloni Cocoon', 'permable'=>TRUE, 'have'=>0, 'class'=>3, 'level'=>12),
3014 => array('name'=>'Spirit of Ravioli', 'permable'=>TRUE, 'have'=>0, 'class'=>3, 'level'=>9),
3015 => array('name'=>'Springy Fusilli', 'permable'=>TRUE, 'have'=>0, 'class'=>3, 'level'=>6),
3016 => array('name'=>'Tolerance of the Kitchen', 'permable'=>TRUE, 'have'=>0, 'class'=>3, 'level'=>13),
3017 => array('name'=>'Flavour of Magic', 'permable'=>TRUE, 'have'=>0, 'class'=>3, 'level'=>14),
3018 => array('name'=>'Transcendental Noodlecraft', 'permable'=>TRUE, 'have'=>0, 'class'=>3, 'level'=>15),
3019 => array('name'=>'Fearful Fettucini', 'permable'=>TRUE, 'have'=>0, 'class'=>3, 'level'=>16),
3101 => array('name'=>'Spirit of Cayenne', 'permable'=>FALSE, 'have'=>0, 'class'=>3, 'level'=>17),
3102 => array('name'=>'Spirit of Peppermint', 'permable'=>FALSE, 'have'=>0, 'class'=>3, 'level'=>18),
3103 => array('name'=>'Spirit of Garlic', 'permable'=>FALSE, 'have'=>0, 'class'=>3, 'level'=>19),
3104 => array('name'=>'Spirit of Wormwood', 'permable'=>FALSE, 'have'=>0, 'class'=>3, 'level'=>20),
3105 => array('name'=>'Spirit of Bacon Grease', 'permable'=>FALSE, 'have'=>0, 'class'=>3, 'level'=>21),
4000 => array('name'=>'Sauce Contemplation', 'permable'=>TRUE, 'have'=>0, 'class'=>4, 'level'=>0),
4003 => array('name'=>'Stream of Sauce', 'permable'=>TRUE, 'have'=>0, 'class'=>4, 'level'=>1),
4004 => array('name'=>'Expert Panhandling', 'permable'=>TRUE, 'have'=>0, 'class'=>4, 'level'=>3),
4005 => array('name'=>'Saucestorm', 'permable'=>TRUE, 'have'=>0, 'class'=>4, 'level'=>6),
4006 => array('name'=>'Advanced Saucecrafting', 'permable'=>TRUE, 'have'=>0, 'class'=>4, 'level'=>5),
4007 => array('name'=>'Elemental Saucesphere', 'permable'=>TRUE, 'have'=>0, 'class'=>4, 'level'=>4),
4008 => array('name'=>'Jalapeño Saucesphere', 'permable'=>TRUE, 'have'=>0, 'class'=>4, 'level'=>7),
4009 => array('name'=>'Wave of Sauce', 'permable'=>TRUE, 'have'=>0, 'class'=>4, 'level'=>8),
4010 => array('name'=>'Intrinsic Spiciness', 'permable'=>TRUE, 'have'=>0, 'class'=>4, 'level'=>9),
4011 => array('name'=>'Jabañero Saucesphere', 'permable'=>TRUE, 'have'=>0, 'class'=>4, 'level'=>10),
4012 => array('name'=>'Saucegeyser', 'permable'=>TRUE, 'have'=>0, 'class'=>4, 'level'=>11),
4014 => array('name'=>'Saucy Salve', 'permable'=>TRUE, 'have'=>0, 'class'=>4, 'level'=>2),
4015 => array('name'=>'Impetuous Sauciness', 'permable'=>TRUE, 'have'=>0, 'class'=>4, 'level'=>12),
4016 => array('name'=>'Diminished Gag Reflex', 'permable'=>TRUE, 'have'=>0, 'class'=>4, 'level'=>13),
4017 => array('name'=>'Immaculate Seasoning', 'permable'=>TRUE, 'have'=>0, 'class'=>4, 'level'=>14),
4018 => array('name'=>'The Way of Sauce', 'permable'=>TRUE, 'have'=>0, 'class'=>4, 'level'=>15),
4019 => array('name'=>'Scarysauce', 'permable'=>TRUE, 'have'=>0, 'class'=>4, 'level'=>16),
5000 => array('name'=>'Disco Aerobics', 'permable'=>TRUE, 'have'=>0, 'class'=>5, 'level'=>0),
5003 => array('name'=>'Disco Eye-Poke', 'permable'=>TRUE, 'have'=>0, 'class'=>5, 'level'=>1),
5004 => array('name'=>'Nimble Fingers', 'permable'=>TRUE, 'have'=>0, 'class'=>5, 'level'=>6),
5005 => array('name'=>'Disco Dance of Doom', 'permable'=>TRUE, 'have'=>0, 'class'=>5, 'level'=>4),
5006 => array('name'=>'Mad Looting Skillz', 'permable'=>TRUE, 'have'=>0, 'class'=>5, 'level'=>8),
5007 => array('name'=>'Disco Nap', 'permable'=>TRUE, 'have'=>0, 'class'=>5, 'level'=>3),
5008 => array('name'=>'Disco Dance II: Electric Boogaloo', 'permable'=>TRUE, 'have'=>0, 'class'=>5, 'level'=>7),
5009 => array('name'=>'Crossbow Fever', 'permable'=>TRUE, 'have'=>0, 'class'=>5, 'level'=>11),
5010 => array('name'=>'Overdeveloped Sense of Self Preservation', 'permable'=>TRUE, 'have'=>0, 'class'=>5, 'level'=>2),
5011 => array('name'=>'Disco Power Nap', 'permable'=>TRUE, 'have'=>0, 'class'=>5, 'level'=>9),
5012 => array('name'=>'Disco Face Stab', 'permable'=>TRUE, 'have'=>0, 'class'=>5, 'level'=>10),
5014 => array('name'=>'Advanced Cocktailcrafting', 'permable'=>TRUE, 'have'=>0, 'class'=>5, 'level'=>5),
5015 => array('name'=>'Ambidextrous Funkslinging', 'permable'=>TRUE, 'have'=>0, 'class'=>5, 'level'=>12),
5016 => array('name'=>'Heart of Polyester', 'permable'=>TRUE, 'have'=>0, 'class'=>5, 'level'=>13),
5017 => array('name'=>'Smooth Movement', 'permable'=>TRUE, 'have'=>0, 'class'=>5, 'level'=>14),
5018 => array('name'=>'Superhuman Cocktailcrafting', 'permable'=>TRUE, 'have'=>0, 'class'=>5, 'level'=>15),
5019 => array('name'=>'Tango of Terror', 'permable'=>TRUE, 'have'=>0, 'class'=>5, 'level'=>16),
6000 => array('name'=>'Moxie of the Mariachi', 'permable'=>TRUE, 'have'=>0, 'class'=>6, 'level'=>0),
6003 => array('name'=>'Aloysius\' Antiphon of Aptitude', 'permable'=>TRUE, 'have'=>0, 'class'=>6, 'level'=>11),
6004 => array('name'=>'The Moxious Madrigal', 'permable'=>TRUE, 'have'=>0, 'class'=>6, 'level'=>1),
6005 => array('name'=>'Cletus\'s Canticle of Celerity', 'permable'=>TRUE, 'have'=>0, 'class'=>6, 'level'=>3),
6006 => array('name'=>'The Polka of Plenty', 'permable'=>TRUE, 'have'=>0, 'class'=>6, 'level'=>5),
6007 => array('name'=>'The Magical Mojomuscular Melody', 'permable'=>TRUE, 'have'=>0, 'class'=>6, 'level'=>2),
6008 => array('name'=>'The Power Ballad of the Arrowsmith', 'permable'=>TRUE, 'have'=>0, 'class'=>6, 'level'=>4),
6009 => array('name'=>'Brawnee\'s Anthem of Absorption', 'permable'=>TRUE, 'have'=>0, 'class'=>6, 'level'=>8),
6010 => array('name'=>'Fat Leon\'s Phat Loot Lyric', 'permable'=>TRUE, 'have'=>0, 'class'=>6, 'level'=>7),
6011 => array('name'=>'The Psalm of Pointiness', 'permable'=>TRUE, 'have'=>0, 'class'=>6, 'level'=>9),
6012 => array('name'=>'Jackasses\' Symphony of Destruction', 'permable'=>TRUE, 'have'=>0, 'class'=>6, 'level'=>6),
6013 => array('name'=>'Stevedave\'s Shanty of Superiority', 'permable'=>TRUE, 'have'=>0, 'class'=>6, 'level'=>10),
6014 => array('name'=>'The Ode to Booze', 'permable'=>TRUE, 'have'=>0, 'class'=>6, 'level'=>12),
6015 => array('name'=>'The Sonata of Sneakiness', 'permable'=>TRUE, 'have'=>0, 'class'=>6, 'level'=>13),
6016 => array('name'=>'Carlweather\'s Cantata of Confrontation', 'permable'=>TRUE, 'have'=>0, 'class'=>6, 'level'=>14),
6017 => array('name'=>'Ur-Kel\'s Aria of Annoyance', 'permable'=>TRUE, 'have'=>0, 'class'=>6, 'level'=>15),
6018 => array('name'=>'Dirge of Dreadfulness', 'permable'=>TRUE, 'have'=>0, 'class'=>6, 'level'=>16),
7002 => array('name'=>'Shake Hands', 'permable'=>FALSE, 'have'=>0, 'class'=>8, 'level'=>9),
7003 => array('name'=>'Hot Breath', 'permable'=>FALSE, 'have'=>0, 'class'=>8, 'level'=>10),
7004 => array('name'=>'Cold Breath', 'permable'=>FALSE, 'have'=>0, 'class'=>8, 'level'=>11),
7005 => array('name'=>'Spooky Breath', 'permable'=>FALSE, 'have'=>0, 'class'=>8, 'level'=>12),
7006 => array('name'=>'Stinky Breath', 'permable'=>FALSE, 'have'=>0, 'class'=>8, 'level'=>13),
7007 => array('name'=>'Sleazy Breath', 'permable'=>FALSE, 'have'=>0, 'class'=>8, 'level'=>14),
7008 => array('name'=>'Moxious Maneuver', 'permable'=>FALSE, 'have'=>0, 'class'=>8, 'level'=>15),
7009 => array('name'=>'Magic Missile', 'permable'=>FALSE, 'have'=>0, 'class'=>8, 'level'=>16),
);
function comparison($a, $b)
{
$i = $a['have'] - $b['have'];
if ($i == 0)
{
$i = $a['class'] - $b['class'];
if ($i == 0)
{
$i = $a['level'] - $b['level'];
}
}
return $i;
}
if (isset($_REQUEST['skills']))
{
$ntilde = array(
//"\xD1"=>'ñ',
"\xC3\x91"=>'ñ',
//"\xF1"=>'ñ',
"\xC3\xB1"=>'ñ'
);
$skills = strtr($_REQUEST['skills'], $ntilde);
if (get_magic_quotes_gpc())
$skills = stripslashes($skills);
$skills = explode("\n", $skills);
foreach($skills as $i)
{
foreach($skilllist as $k=>$v)
{
if (stripos($i, $v['name']) !== FALSE)
{
if (stripos($i, '(HP)') !== FALSE)
$skilllist[$k]['have'] = 3;
else if (stripos($i, '(P)') !== FALSE)
$skilllist[$k]['have'] = 2;
else
$skilllist[$k]['have'] = 1;
break;
}
}
}
usort($skilllist, "comparison");
$lastclass = -1;
$lasthave = -1;
foreach ($skilllist as $i)
{
if ($i['have'] == 0 && !$i['permable'])
continue;
if ($i['have'] != $lasthave)
{
if ($lastclass != -1)
print "</ul>";
$lastclass = -1;
print "<h2>" . $havestr[$i['have']] . "</h2>";
$lasthave = $i['have'];
}
if ($i['class'] != $lastclass)
{
if ($lastclass != -1)
print "</ul>";
print "<h3>" . $classes[$i['class']] . " skills</h3>";
$lastclass = $i['class'];
print "<ul>";
}
print "<li>$i[name]</li>";
}
if ($lastclass != -1)
print "</ul>";
?>
<form action="<?=$_SERVER['PHP_SELF']?>" method="POST">
<p>Paste your list of skills from the character sheet here:<br><textarea rows="10" cols="40" name="skills"><?=htmlspecialchars($_REQUEST['skills'],ENT_NOQUOTES);?></textarea></p>
<p><input type="submit" value="What am I missing?"></p>
</form>
<?
}
else
{
?>
<form action="<?=$_SERVER['PHP_SELF']?>" method="POST">
<p>Paste your list of skills here:<br><textarea rows="10" cols="40" name="skills"></textarea></p>
<p><input type="submit" value="What am I missing?"></p>
</form>
<?
}
page_footer();
?>
![[Logo]](/images/logo.png)
