kol.js 0.1.5 → 0.1.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "kol.js",
3
- "version": "0.1.5",
3
+ "version": "0.1.7",
4
4
  "main": "src/index.ts",
5
5
  "type": "module",
6
6
  "files": [
@@ -13,23 +13,24 @@
13
13
  "format": "prettier --write ."
14
14
  },
15
15
  "devDependencies": {
16
- "prettier": "^3.3.2",
17
- "typescript": "^5.5.3",
18
- "vitest": "^1.6.0"
16
+ "prettier": "^3.3.3",
17
+ "typescript": "^5.6.2",
18
+ "vitest": "^2.1.0"
19
19
  },
20
20
  "dependencies": {
21
- "@xmldom/xmldom": "^0.8.10",
22
21
  "async-mutex": "^0.5.0",
22
+ "css-select": "^5.1.0",
23
23
  "date-fns": "^3.6.0",
24
+ "domhandler": "^5.0.3",
25
+ "domutils": "^3.1.0",
24
26
  "got": "^14.4.2",
25
27
  "html-entities": "^2.5.2",
28
+ "htmlparser2": "^9.1.0",
26
29
  "image-size": "^1.1.1",
27
30
  "node-html-parser": "^6.1.13",
28
31
  "querystring": "^0.2.1",
29
32
  "tough-cookie": "^5.0.0",
30
33
  "ts-dedent": "^2.2.0",
31
- "typed-emitter": "^2.1.0",
32
- "typescript-memoize": "^1.1.1",
33
- "xpath": "^0.0.34"
34
+ "typed-emitter": "^2.1.0"
34
35
  }
35
36
  }
@@ -212,6 +212,8 @@ describe("Raffle", () => {
212
212
  text.mockResolvedValueOnce("<!-- itemid: 2 -->");
213
213
  text.mockResolvedValueOnce("<!-- itemid: 3 -->");
214
214
  text.mockResolvedValueOnce("<!-- itemid: 4 -->");
215
+ text.mockResolvedValueOnce("<!-- itemid: 4 -->");
216
+ text.mockResolvedValueOnce("<!-- itemid: 4 -->");
215
217
 
216
218
  const raffle = await client.getRaffle();
217
219
 
package/src/Client.ts CHANGED
@@ -16,7 +16,6 @@ import {
16
16
  import { PlayerCache } from "./Cache.js";
17
17
  import { CookieJar } from "tough-cookie";
18
18
  import got, { OptionsOfJSONResponseBody, OptionsOfTextResponseBody } from "got";
19
- import { Memoize } from "typescript-memoize";
20
19
 
21
20
  type TypedEmitter<T extends EventMap> = TypedEventEmitter.default<T>;
22
21
 
@@ -116,19 +115,20 @@ export class Client extends (EventEmitter as unknown as new () => TypedEmitter<E
116
115
  ): Promise<Result | null> {
117
116
  if (!(await this.login())) return fallback ?? null;
118
117
 
119
- // Make the request
120
- const response = await this.session(path, {
121
- ...options,
122
- responseType: "json",
123
- });
118
+ let failed = false;
124
119
 
125
- // If we've been redirected to the login page, clear the pwd and try again
126
- if (response.url.includes("/login.php")) {
127
- this.#pwd = "";
128
- return this.fetchJson(path, options);
129
- }
120
+ // Make the request
121
+ try {
122
+ const response = await this.session(path, {
123
+ ...options,
124
+ responseType: "json",
125
+ });
126
+ if (!response.url.includes("/login.php")) return response.body as Result;
127
+ } catch (error) {}
130
128
 
131
- return response.body as Result;
129
+ // If we've not been successful, clear the pwd and try again
130
+ this.#pwd = "";
131
+ return this.fetchJson(path, options);
132
132
  }
133
133
 
134
134
  async login(): Promise<boolean> {
@@ -356,9 +356,9 @@ export class Client extends (EventEmitter as unknown as new () => TypedEmitter<E
356
356
  : minPrice
357
357
  : minPrice;
358
358
  const formattedMinPrice = minPrice
359
- ? (minPrice === unlimitedPrice
359
+ ? ((minPrice === unlimitedPrice
360
360
  ? unlimitedMatch?.[1]
361
- : limitedMatch?.[1]) ?? ""
361
+ : limitedMatch?.[1]) ?? "")
362
362
  : "";
363
363
  return {
364
364
  mallPrice: unlimitedPrice,
@@ -512,14 +512,19 @@ export class Client extends (EventEmitter as unknown as new () => TypedEmitter<E
512
512
  return familiars;
513
513
  }
514
514
 
515
- @Memoize()
515
+ static #descIdToIdCache: Map<number, number> = new Map();
516
+
516
517
  async descIdToId(descId: number): Promise<number> {
518
+ if (Client.#descIdToIdCache.has(descId))
519
+ return Client.#descIdToIdCache.get(descId)!;
517
520
  const page = await this.fetchText("desc_item.php", {
518
521
  searchParams: {
519
522
  whichitem: descId,
520
523
  },
521
524
  });
522
- return Number(page.match(/<!-- itemid: (\d+) -->/)?.[1] ?? -1);
525
+ const id = Number(page.match(/<!-- itemid: (\d+) -->/)?.[1] ?? -1);
526
+ Client.#descIdToIdCache.set(descId, id);
527
+ return id;
523
528
  }
524
529
 
525
530
  async getRaffle() {
package/src/Player.ts CHANGED
@@ -66,11 +66,11 @@ export class Player<IsFull extends boolean = boolean> {
66
66
  id: number,
67
67
  ): Promise<string | null> {
68
68
  try {
69
- const profile = await client.fetchText("showplayer.php", {
70
- searchParams: { who: id },
69
+ const profile = await client.fetchText("submitnewchat.php", {
70
+ searchParams: { graf: `/whois ${id}` },
71
71
  });
72
- const name = profile.match(/<b>([^>]*?)<\/b> \(#(\d+)\)<br>/)?.[1];
73
- return name || null;
72
+ const name = profile.match(/<a.*?><b.*?>(.*?) \(#(\d+)\)<\/b><\/a>/)?.[1];
73
+ return name ?? null;
74
74
  } catch {
75
75
  return null;
76
76
  }
@@ -82,7 +82,7 @@ export class Player<IsFull extends boolean = boolean> {
82
82
  ): Promise<Player<false> | null> {
83
83
  try {
84
84
  const matcher =
85
- /<tr><td class=small><b><a target=mainpane href="showplayer\.php\?who=(?<playerId>\d+)">(?<playerName>[^<]+)<\/a><\/b>.*?<\/td><td valign=top class=small>\d*<\/td><td valign=top class=small>(?:<img src=".*?">|(?<level>\d+))<\/td><td class=small valign=top>(?<class>[^<]+)<\/td><\/tr>/i;
85
+ /<tr><td class=small><b><a target=mainpane href="showplayer\.php\?who=(?<playerId>\d+)">(?<playerName>[^<]+)<\/a><\/b>.*?<\/td><td valign=top class=small>\d*<\/td><td valign=top class=small>(?:<img src=".*?">|(?<level>\d+))<\/td><td class=small valign=top>(?<class>[^<]*)<\/td><\/tr>/i;
86
86
  const search = await client.fetchText("searchplayer.php", {
87
87
  searchParams: {
88
88
  searchstring: name.replace(/_/g, "\\_"),
@@ -0,0 +1,26 @@
1
+ <html><head>
2
+ <script language=Javascript>
3
+ <!--
4
+ if (parent.frames.length == -1) location.href="game.php";
5
+ top.charpane.location.href="charpane.php";
6
+ //-->
7
+ </script>
8
+ <script language=Javascript src="/images/scripts/keybinds.min.2.js"></script>
9
+ <script language=Javascript src="/images/scripts/window.20111231.js"></script>
10
+ <script language="javascript">function chatFocus(){if(top.chatpane.document.chatform.graf) top.chatpane.document.chatform.graf.focus();}
11
+ if (typeof defaultBind != 'undefined') { defaultBind(47, 2, chatFocus); defaultBind(190, 2, chatFocus);defaultBind(191, 2, chatFocus); defaultBind(47, 8, chatFocus);defaultBind(190, 8, chatFocus); defaultBind(191, 8, chatFocus); }</script><script language=Javascript src="/images/scripts/jquery-1.3.1.min.js"></script>
12
+ <link rel="stylesheet" type="text/css" href="/images/styles.20230117d.css">
13
+ <style type='text/css'>
14
+ .faded {
15
+ zoom: 1;
16
+ filter: alpha(opacity=35);
17
+ opacity: 0.35;
18
+ -khtml-opacity: 0.35;
19
+ -moz-opacity: 0.35;
20
+ }
21
+ </style>
22
+
23
+ <script language="Javascript" src="/basics.js"></script><link rel="stylesheet" href="/basics.1.css" /></head>
24
+
25
+ <body>
26
+ <centeR><map name=elemap><area shape="rect" coords="29,23,48,41" href="museum.php?floor=2" alt="Up Button" title="Up Button"><area shape="rect" coords="29,41,48,59" href="museum.php?floor=0" alt="Down Button" title="Down Button"></map><table width=95% cellspacing=0 cellpadding=0><tr><td style="color: white;" align=center bgcolor=blue><b>Way of the Surprising Fist (Frozen) Leaderboards</b></td></tr><tr><td style="padding: 5px; border: 1px solid blue;"><center><table><tr><td><centeR><table><tr><td valign=top><table width=400 cellspacing=0 cellpadding=0><tr><td style="color: white;" align=center bgcolor=blue><b>Fastest Hardcore Way of the Surprising Fist Ascensions</b></td></tr><tr><td style="padding: 5px; border: 1px solid blue;"><center><table><tr><td><table><tr><td class=small align=center><b>Player&nbsp;&nbsp;&nbsp;&nbsp;</b></td><td class=small align=center><b>Days</b></td><td class=small align=center>&nbsp;&nbsp;&nbsp;&nbsp;<b>Adventures</b></td></tr><tr><td class=small><a class=nounder href="showplayer.php?who=592920"><b>Iron Bob</b></a> (AT)&nbsp;&nbsp;&nbsp;&nbsp;</td><td class=small align=right>3</td><td class=small align=right>712</td></tr><tr><td class=small><a class=nounder href="showplayer.php?who=420453"><b>Alexfrog</b></a> (AT)&nbsp;&nbsp;&nbsp;&nbsp;</td><td class=small align=right>3</td><td class=small align=right>731</td></tr><tr><td class=small><a class=nounder href="showplayer.php?who=172816"><b>Strangerer</b></a> (AT)&nbsp;&nbsp;&nbsp;&nbsp;</td><td class=small align=right>3</td><td class=small align=right>743</td></tr><tr><td class=small><a class=nounder href="showplayer.php?who=1065882"><b>bobthebobber</b></a> (AT)&nbsp;&nbsp;&nbsp;&nbsp;</td><td class=small align=right>3</td><td class=small align=right>749</td></tr><tr><td class=small><a class=nounder href="showplayer.php?who=1839985"><b>NightBird</b></a> (AT)&nbsp;&nbsp;&nbsp;&nbsp;</td><td class=small align=right>3</td><td class=small align=right>752</td></tr><tr><td class=small><a class=nounder href="showplayer.php?who=325967"><b>ema_nymton</b></a> (AT)&nbsp;&nbsp;&nbsp;&nbsp;</td><td class=small align=right>3</td><td class=small align=right>755</td></tr><tr><td class=small><a class=nounder href="showplayer.php?who=727810"><b>Nodens</b></a> (AT)&nbsp;&nbsp;&nbsp;&nbsp;</td><td class=small align=right>3</td><td class=small align=right>757</td></tr><tr><td class=small><a class=nounder href="showplayer.php?who=177122"><b>the Tristero</b></a> (AT)&nbsp;&nbsp;&nbsp;&nbsp;</td><td class=small align=right>3</td><td class=small align=right>765</td></tr><tr><td class=small><a class=nounder href="showplayer.php?who=1233150"><b>Extirpator</b></a> (AT)&nbsp;&nbsp;&nbsp;&nbsp;</td><td class=small align=right>3</td><td class=small align=right>771</td></tr><tr><td class=small><a class=nounder href="showplayer.php?who=1695084"><b>Twillo</b></a> (AT)&nbsp;&nbsp;&nbsp;&nbsp;</td><td class=small align=right>3</td><td class=small align=right>776</td></tr><tr><td class=small><a class=nounder href="showplayer.php?who=960793"><b>tdrawler</b></a> (AT)&nbsp;&nbsp;&nbsp;&nbsp;</td><td class=small align=right>3</td><td class=small align=right>781</td></tr><tr><td class=small><a class=nounder href="showplayer.php?who=1647371"><b>bazo0ka</b></a> (AT)&nbsp;&nbsp;&nbsp;&nbsp;</td><td class=small align=right>3</td><td class=small align=right>782</td></tr><tr><td class=small><a class=nounder href="showplayer.php?who=1610439"><b>YoMama1</b></a> (AT)&nbsp;&nbsp;&nbsp;&nbsp;</td><td class=small align=right>3</td><td class=small align=right>791</td></tr><tr><td class=small><a class=nounder href="showplayer.php?who=674339"><b>salticid</b></a> (AT)&nbsp;&nbsp;&nbsp;&nbsp;</td><td class=small align=right>3</td><td class=small align=right>799</td></tr><tr><td class=small><a class=nounder href="showplayer.php?who=460706"><b>IvanGS</b></a> (AT)&nbsp;&nbsp;&nbsp;&nbsp;</td><td class=small align=right>3</td><td class=small align=right>799</td></tr><tr><td class=small><a class=nounder href="showplayer.php?who=775093"><b>Jack D Ripper</b></a> (AT)&nbsp;&nbsp;&nbsp;&nbsp;</td><td class=small align=right>3</td><td class=small align=right>801</td></tr><tr><td class=small><a class=nounder href="showplayer.php?who=106460"><b>blisterguy</b></a> (AT)&nbsp;&nbsp;&nbsp;&nbsp;</td><td class=small align=right>3</td><td class=small align=right>805</td></tr><tr><td class=small><a class=nounder href="showplayer.php?who=61661"><b>Lightwolf</b></a> (AT)&nbsp;&nbsp;&nbsp;&nbsp;</td><td class=small align=right>3</td><td class=small align=right>806</td></tr><tr><td class=small><a class=nounder href="showplayer.php?who=1491208"><b>Rabid Alpaca</b></a> (AT)&nbsp;&nbsp;&nbsp;&nbsp;</td><td class=small align=right>3</td><td class=small align=right>806</td></tr><tr><td class=small><a class=nounder href="showplayer.php?who=262104"><b>Archham</b></a> (AT)&nbsp;&nbsp;&nbsp;&nbsp;</td><td class=small align=right>3</td><td class=small align=right>809</td></tr><tr><td class=small><a class=nounder href="showplayer.php?who=2007263"><b>Soirana</b></a> (AT)&nbsp;&nbsp;&nbsp;&nbsp;</td><td class=small align=right>3</td><td class=small align=right>815</td></tr><tr><td class=small><a class=nounder href="showplayer.php?who=1694949"><b>EiriasValar</b></a> (AT)&nbsp;&nbsp;&nbsp;&nbsp;</td><td class=small align=right>3</td><td class=small align=right>816</td></tr><tr><td class=small><a class=nounder href="showplayer.php?who=610092"><b>Flolle</b></a> (AT)&nbsp;&nbsp;&nbsp;&nbsp;</td><td class=small align=right>3</td><td class=small align=right>824</td></tr><tr><td class=small><a class=nounder href="showplayer.php?who=33679"><b>Orbrisa</b></a> (AT)&nbsp;&nbsp;&nbsp;&nbsp;</td><td class=small align=right>3</td><td class=small align=right>832</td></tr><tr><td class=small><a class=nounder href="showplayer.php?who=675689"><b>HMSRobotman</b></a> (AT)&nbsp;&nbsp;&nbsp;&nbsp;</td><td class=small align=right>3</td><td class=small align=right>837</td></tr><tr><td class=small><a class=nounder href="showplayer.php?who=1026924"><b>Ultranibbles</b></a> (AT)&nbsp;&nbsp;&nbsp;&nbsp;</td><td class=small align=right>3</td><td class=small align=right>918</td></tr><tr><td class=small><a class=nounder href="showplayer.php?who=1634307"><b>KaInDraGOOn</b></a> (AT)&nbsp;&nbsp;&nbsp;&nbsp;</td><td class=small align=right>4</td><td class=small align=right>757</td></tr><tr><td class=small><a class=nounder href="showplayer.php?who=1159338"><b>Instalite</b></a> (AT)&nbsp;&nbsp;&nbsp;&nbsp;</td><td class=small align=right>4</td><td class=small align=right>758</td></tr><tr><td class=small><a class=nounder href="showplayer.php?who=2023803"><b>LotsOfPhil</b></a> (AT)&nbsp;&nbsp;&nbsp;&nbsp;</td><td class=small align=right>4</td><td class=small align=right>758</td></tr><tr><td class=small><a class=nounder href="showplayer.php?who=605699"><b>Rulle</b></a> (AT)&nbsp;&nbsp;&nbsp;&nbsp;</td><td class=small align=right>4</td><td class=small align=right>760</td></tr><tr><td class=small><a class=nounder href="showplayer.php?who=1415792"><b>welt</b></a> (AT)&nbsp;&nbsp;&nbsp;&nbsp;</td><td class=small align=right>4</td><td class=small align=right>764</td></tr><tr><td class=small><a class=nounder href="showplayer.php?who=2102003"><b>Tawt Strat</b></a> (AT)&nbsp;&nbsp;&nbsp;&nbsp;</td><td class=small align=right>4</td><td class=small align=right>765</td></tr><tr><td class=small><a class=nounder href="showplayer.php?who=1610850"><b>lord bitchalot</b></a> (AT)&nbsp;&nbsp;&nbsp;&nbsp;</td><td class=small align=right>4</td><td class=small align=right>765</td></tr><tr><td class=small><a class=nounder href="showplayer.php?who=42618"><b>gamma_RAy</b></a> (AT)&nbsp;&nbsp;&nbsp;&nbsp;</td><td class=small align=right>4</td><td class=small align=right>766</td></tr><tr><td class=small><a class=nounder href="showplayer.php?who=1729198"><b>slyz</b></a> (AT)&nbsp;&nbsp;&nbsp;&nbsp;</td><td class=small align=right>4</td><td class=small align=right>766</td></tr></table></td></tr></table></center></td></tr><tr><td height=4></td></tr></table><!-- updated 2024-11-21T02:34:30-07:00 --><table width=400 cellspacing=0 cellpadding=0><tr><td style="color: white;" align=center bgcolor=blue><b>Fastest Normal Way of the Surprising Fist Ascensions</b></td></tr><tr><td style="padding: 5px; border: 1px solid blue;"><center><table><tr><td><table><tr><td class=small align=center><b>Player&nbsp;&nbsp;&nbsp;&nbsp;</b></td><td class=small align=center><b>Days</b></td><td class=small align=center>&nbsp;&nbsp;&nbsp;&nbsp;<b>Adventures</b></td></tr><tr><td class=small><a class=nounder href="showplayer.php?who=871378"><b>Liizu</b></a> (AT)&nbsp;&nbsp;&nbsp;&nbsp;</td><td class=small align=right>2</td><td class=small align=right>539</td></tr><tr><td class=small><a class=nounder href="showplayer.php?who=1026924"><b>Ultranibbles</b></a> (DB)&nbsp;&nbsp;&nbsp;&nbsp;</td><td class=small align=right>2</td><td class=small align=right>563</td></tr><tr><td class=small><a class=nounder href="showplayer.php?who=1052080"><b>bmaher</b></a> (AT)&nbsp;&nbsp;&nbsp;&nbsp;</td><td class=small align=right>2</td><td class=small align=right>569</td></tr><tr><td class=small><a class=nounder href="showplayer.php?who=2023803"><b>LotsOfPhil</b></a> (AT)&nbsp;&nbsp;&nbsp;&nbsp;</td><td class=small align=right>2</td><td class=small align=right>569</td></tr><tr><td class=small><a class=nounder href="showplayer.php?who=722414"><b>DarthDud</b></a> (P)&nbsp;&nbsp;&nbsp;&nbsp;</td><td class=small align=right>2</td><td class=small align=right>578</td></tr><tr><td class=small><a class=nounder href="showplayer.php?who=1761780"><b>Saracen</b></a> (AT)&nbsp;&nbsp;&nbsp;&nbsp;</td><td class=small align=right>2</td><td class=small align=right>593</td></tr><tr><td class=small><a class=nounder href="showplayer.php?who=1159338"><b>Instalite</b></a> (AT)&nbsp;&nbsp;&nbsp;&nbsp;</td><td class=small align=right>2</td><td class=small align=right>594</td></tr><tr><td class=small><a class=nounder href="showplayer.php?who=508362"><b>bennieloohoo</b></a> (AT)&nbsp;&nbsp;&nbsp;&nbsp;</td><td class=small align=right>2</td><td class=small align=right>595</td></tr><tr><td class=small><a class=nounder href="showplayer.php?who=693025"><b>darkgreycat</b></a> (AT)&nbsp;&nbsp;&nbsp;&nbsp;</td><td class=small align=right>2</td><td class=small align=right>597</td></tr><tr><td class=small><a class=nounder href="showplayer.php?who=777714"><b>Snaelda</b></a> (AT)&nbsp;&nbsp;&nbsp;&nbsp;</td><td class=small align=right>2</td><td class=small align=right>598</td></tr><tr><td class=small><a class=nounder href="showplayer.php?who=61661"><b>Lightwolf</b></a> (P)&nbsp;&nbsp;&nbsp;&nbsp;</td><td class=small align=right>2</td><td class=small align=right>600</td></tr><tr><td class=small><a class=nounder href="showplayer.php?who=985943"><b>efot</b></a> (AT)&nbsp;&nbsp;&nbsp;&nbsp;</td><td class=small align=right>2</td><td class=small align=right>603</td></tr><tr><td class=small><a class=nounder href="showplayer.php?who=2031699"><b>Zots</b></a> (AT)&nbsp;&nbsp;&nbsp;&nbsp;</td><td class=small align=right>2</td><td class=small align=right>605</td></tr><tr><td class=small><a class=nounder href="showplayer.php?who=2020400"><b>EpicMoose</b></a> (DB)&nbsp;&nbsp;&nbsp;&nbsp;</td><td class=small align=right>2</td><td class=small align=right>618</td></tr><tr><td class=small><a class=nounder href="showplayer.php?who=2123853"><b>anitert</b></a> (AT)&nbsp;&nbsp;&nbsp;&nbsp;</td><td class=small align=right>2</td><td class=small align=right>620</td></tr><tr><td class=small><a class=nounder href="showplayer.php?who=1808176"><b>dorian78</b></a> (AT)&nbsp;&nbsp;&nbsp;&nbsp;</td><td class=small align=right>2</td><td class=small align=right>623</td></tr><tr><td class=small><a class=nounder href="showplayer.php?who=916479"><b>ubernuke</b></a> (TT)&nbsp;&nbsp;&nbsp;&nbsp;</td><td class=small align=right>2</td><td class=small align=right>627</td></tr><tr><td class=small><a class=nounder href="showplayer.php?who=106460"><b>blisterguy</b></a> (AT)&nbsp;&nbsp;&nbsp;&nbsp;</td><td class=small align=right>2</td><td class=small align=right>629</td></tr><tr><td class=small><a class=nounder href="showplayer.php?who=1710460"><b>Corill</b></a> (DB)&nbsp;&nbsp;&nbsp;&nbsp;</td><td class=small align=right>2</td><td class=small align=right>634</td></tr><tr><td class=small><a class=nounder href="showplayer.php?who=838679"><b>BlueWasabi</b></a> (S)&nbsp;&nbsp;&nbsp;&nbsp;</td><td class=small align=right>2</td><td class=small align=right>653</td></tr><tr><td class=small><a class=nounder href="showplayer.php?who=177122"><b>the Tristero</b></a> (AT)&nbsp;&nbsp;&nbsp;&nbsp;</td><td class=small align=right>2</td><td class=small align=right>663</td></tr><tr><td class=small><a class=nounder href="showplayer.php?who=1245590"><b>Schik</b></a> (AT)&nbsp;&nbsp;&nbsp;&nbsp;</td><td class=small align=right>2</td><td class=small align=right>676</td></tr><tr><td class=small><a class=nounder href="showplayer.php?who=441708"><b>Emanon176</b></a> (AT)&nbsp;&nbsp;&nbsp;&nbsp;</td><td class=small align=right>2</td><td class=small align=right>682</td></tr><tr><td class=small><a class=nounder href="showplayer.php?who=1314057"><b>Melinhed</b></a> (AT)&nbsp;&nbsp;&nbsp;&nbsp;</td><td class=small align=right>3</td><td class=small align=right>524</td></tr><tr><td class=small><a class=nounder href="showplayer.php?who=1450097"><b>Pantsless</b></a> (DB)&nbsp;&nbsp;&nbsp;&nbsp;</td><td class=small align=right>3</td><td class=small align=right>531</td></tr><tr><td class=small><a class=nounder href="showplayer.php?who=2065951"><b>Rotund</b></a> (DB)&nbsp;&nbsp;&nbsp;&nbsp;</td><td class=small align=right>3</td><td class=small align=right>542</td></tr><tr><td class=small><a class=nounder href="showplayer.php?who=1642260"><b>Turtle Juice</b></a> (DB)&nbsp;&nbsp;&nbsp;&nbsp;</td><td class=small align=right>3</td><td class=small align=right>548</td></tr><tr><td class=small><a class=nounder href="showplayer.php?who=1326228"><b>dirac</b></a> (P)&nbsp;&nbsp;&nbsp;&nbsp;</td><td class=small align=right>3</td><td class=small align=right>549</td></tr><tr><td class=small><a class=nounder href="showplayer.php?who=1855602"><b>shummie</b></a> (AT)&nbsp;&nbsp;&nbsp;&nbsp;</td><td class=small align=right>3</td><td class=small align=right>549</td></tr><tr><td class=small><a class=nounder href="showplayer.php?who=2053510"><b>Gygax</b></a> (AT)&nbsp;&nbsp;&nbsp;&nbsp;</td><td class=small align=right>3</td><td class=small align=right>560</td></tr><tr><td class=small><a class=nounder href="showplayer.php?who=1813824"><b>Bodhazapha</b></a> (AT)&nbsp;&nbsp;&nbsp;&nbsp;</td><td class=small align=right>3</td><td class=small align=right>563</td></tr><tr><td class=small><a class=nounder href="showplayer.php?who=636019"><b>Ceirdwyn</b></a> (P)&nbsp;&nbsp;&nbsp;&nbsp;</td><td class=small align=right>3</td><td class=small align=right>566</td></tr><tr><td class=small><a class=nounder href="showplayer.php?who=862857"><b>Jaelith</b></a> (AT)&nbsp;&nbsp;&nbsp;&nbsp;</td><td class=small align=right>3</td><td class=small align=right>566</td></tr><tr><td class=small><a class=nounder href="showplayer.php?who=1108143"><b>AntiPasta</b></a> (TT)&nbsp;&nbsp;&nbsp;&nbsp;</td><td class=small align=right>3</td><td class=small align=right>570</td></tr><tr><td class=small><a class=nounder href="showplayer.php?who=1992917"><b>Jesusisagurl</b></a> (SC)&nbsp;&nbsp;&nbsp;&nbsp;</td><td class=small align=right>3</td><td class=small align=right>583</td></tr></table></td></tr></table></center></td></tr><tr><td height=4></td></tr></table><!-- updated 2024-11-21T02:34:31-07:00 --></td></tr></table><table width=500 cellspacing=0 cellpadding=0><tr><td style="color: white;" align=center bgcolor=blue><b>Most Recent Way of the Surprising Fist Ascensions (updated live):</b></td></tr><tr><td style="padding: 5px; border: 1px solid blue;"><center><table><tr><td><table><tr><td class=small><b>Player</b></td><td class=small><b>Lifestyle</b></td><td class=small align=center><b>Class</b></td><td class=small><b>Days</b></td><td class=small><b>Adventures</b></td></tr><td class=small><b><a class=nounder href="showplayer.php?who=3584933">Pinge</a></b>&nbsp;&nbsp;&nbsp;&nbsp;</td><td class=small>Normal &nbsp;&nbsp;&nbsp;&nbsp;</td><td class=small>Pastamancer&nbsp;&nbsp;&nbsp;&nbsp;</td><td class=small>14</td><td class=small>1,708</td></tr><td class=small><b><a class=nounder href="showplayer.php?who=709550">CafeBabe</a></b>&nbsp;&nbsp;&nbsp;&nbsp;</td><td class=small>Normal &nbsp;&nbsp;&nbsp;&nbsp;</td><td class=small>Accordion Thief&nbsp;&nbsp;&nbsp;&nbsp;</td><td class=small>3</td><td class=small>822</td></tr><td class=small><b><a class=nounder href="showplayer.php?who=3691853">GARRY TURDMOUTH</a></b>&nbsp;&nbsp;&nbsp;&nbsp;</td><td class=small>Normal &nbsp;&nbsp;&nbsp;&nbsp;</td><td class=small>Disco Bandit&nbsp;&nbsp;&nbsp;&nbsp;</td><td class=small>41</td><td class=small>3,087</td></tr><td class=small><b><a class=nounder href="showplayer.php?who=3727898">UnholyReaper</a></b>&nbsp;&nbsp;&nbsp;&nbsp;</td><td class=small>Hardcore &nbsp;&nbsp;&nbsp;&nbsp;</td><td class=small>Disco Bandit&nbsp;&nbsp;&nbsp;&nbsp;</td><td class=small>23</td><td class=small>3,811</td></tr><td class=small><b><a class=nounder href="showplayer.php?who=709550">CafeBabe</a></b>&nbsp;&nbsp;&nbsp;&nbsp;</td><td class=small>Normal &nbsp;&nbsp;&nbsp;&nbsp;</td><td class=small>Accordion Thief&nbsp;&nbsp;&nbsp;&nbsp;</td><td class=small>4</td><td class=small>854</td></tr><td class=small><b><a class=nounder href="showplayer.php?who=2417984">Chris Hand</a></b>&nbsp;&nbsp;&nbsp;&nbsp;</td><td class=small>Normal &nbsp;&nbsp;&nbsp;&nbsp;</td><td class=small>Disco Bandit&nbsp;&nbsp;&nbsp;&nbsp;</td><td class=small>16</td><td class=small>2,003</td></tr><td class=small><b><a class=nounder href="showplayer.php?who=709550">CafeBabe</a></b>&nbsp;&nbsp;&nbsp;&nbsp;</td><td class=small>Normal &nbsp;&nbsp;&nbsp;&nbsp;</td><td class=small>Accordion Thief&nbsp;&nbsp;&nbsp;&nbsp;</td><td class=small>4</td><td class=small>925</td></tr><td class=small><b><a class=nounder href="showplayer.php?who=3743267">Stickmunt</a></b>&nbsp;&nbsp;&nbsp;&nbsp;</td><td class=small>Hardcore &nbsp;&nbsp;&nbsp;&nbsp;</td><td class=small>Seal Clubber&nbsp;&nbsp;&nbsp;&nbsp;</td><td class=small>33</td><td class=small>2,334</td></tr><td class=small><b><a class=nounder href="showplayer.php?who=2110323">Gruck Ta</a></b>&nbsp;&nbsp;&nbsp;&nbsp;</td><td class=small>Normal &nbsp;&nbsp;&nbsp;&nbsp;</td><td class=small>Turtle Tamer&nbsp;&nbsp;&nbsp;&nbsp;</td><td class=small>6</td><td class=small>1,041</td></tr><td class=small><b><a class=nounder href="showplayer.php?who=604409">TamGarTrinKiJoiDar</a></b>&nbsp;&nbsp;&nbsp;&nbsp;</td><td class=small>Hardcore &nbsp;&nbsp;&nbsp;&nbsp;</td><td class=small>Sauceror&nbsp;&nbsp;&nbsp;&nbsp;</td><td class=small>7</td><td class=small>933</td></tr><td class=small><b><a class=nounder href="showplayer.php?who=584803">erct657</a></b>&nbsp;&nbsp;&nbsp;&nbsp;</td><td class=small>Normal &nbsp;&nbsp;&nbsp;&nbsp;</td><td class=small>Seal Clubber&nbsp;&nbsp;&nbsp;&nbsp;</td><td class=small>2</td><td class=small>489</td></tr><td class=small><b><a class=nounder href="showplayer.php?who=2199372">Comrade_Petrof</a></b>&nbsp;&nbsp;&nbsp;&nbsp;</td><td class=small>Normal &nbsp;&nbsp;&nbsp;&nbsp;</td><td class=small>Turtle Tamer&nbsp;&nbsp;&nbsp;&nbsp;</td><td class=small>3</td><td class=small>669</td></tr><td class=small><b><a class=nounder href="showplayer.php?who=2199372">Comrade_Petrof</a></b>&nbsp;&nbsp;&nbsp;&nbsp;</td><td class=small>Normal &nbsp;&nbsp;&nbsp;&nbsp;</td><td class=small>Seal Clubber&nbsp;&nbsp;&nbsp;&nbsp;</td><td class=small>3</td><td class=small>757</td></tr><td class=small><b><a class=nounder href="showplayer.php?who=2347381">Dewey Metalgears</a></b>&nbsp;&nbsp;&nbsp;&nbsp;</td><td class=small>Hardcore &nbsp;&nbsp;&nbsp;&nbsp;</td><td class=small>Turtle Tamer&nbsp;&nbsp;&nbsp;&nbsp;</td><td class=small>3</td><td class=small>594</td></tr><td class=small><b><a class=nounder href="showplayer.php?who=2806552">Ed the Unnamable</a></b>&nbsp;&nbsp;&nbsp;&nbsp;</td><td class=small>Normal &nbsp;&nbsp;&nbsp;&nbsp;</td><td class=small>Seal Clubber&nbsp;&nbsp;&nbsp;&nbsp;</td><td class=small>29</td><td class=small>2,250</td></tr><td class=small><b><a class=nounder href="showplayer.php?who=1153072">Princess Anathema</a></b>&nbsp;&nbsp;&nbsp;&nbsp;</td><td class=small>Hardcore &nbsp;&nbsp;&nbsp;&nbsp;</td><td class=small>Pastamancer&nbsp;&nbsp;&nbsp;&nbsp;</td><td class=small>7</td><td class=small>819</td></tr><td class=small><b><a class=nounder href="showplayer.php?who=2199372">Comrade_Petrof</a></b>&nbsp;&nbsp;&nbsp;&nbsp;</td><td class=small>Normal &nbsp;&nbsp;&nbsp;&nbsp;</td><td class=small>Accordion Thief&nbsp;&nbsp;&nbsp;&nbsp;</td><td class=small>5</td><td class=small>868</td></tr><td class=small><b><a class=nounder href="showplayer.php?who=221261">Tanivan</a></b>&nbsp;&nbsp;&nbsp;&nbsp;</td><td class=small>Hardcore &nbsp;&nbsp;&nbsp;&nbsp;</td><td class=small>Accordion Thief&nbsp;&nbsp;&nbsp;&nbsp;</td><td class=small>18</td><td class=small>2,299</td></tr><td class=small><b><a class=nounder href="showplayer.php?who=1153072">Princess Anathema</a></b>&nbsp;&nbsp;&nbsp;&nbsp;</td><td class=small>Hardcore &nbsp;&nbsp;&nbsp;&nbsp;</td><td class=small>Seal Clubber&nbsp;&nbsp;&nbsp;&nbsp;</td><td class=small>4</td><td class=small>865</td></tr><td class=small><b><a class=nounder href="showplayer.php?who=1153072">Princess Anathema</a></b>&nbsp;&nbsp;&nbsp;&nbsp;</td><td class=small>Hardcore &nbsp;&nbsp;&nbsp;&nbsp;</td><td class=small>Disco Bandit&nbsp;&nbsp;&nbsp;&nbsp;</td><td class=small>4</td><td class=small>1,034</td></tr><td class=small><b><a class=nounder href="showplayer.php?who=1258638">GodsLittleHeathen</a></b>&nbsp;&nbsp;&nbsp;&nbsp;</td><td class=small>Normal &nbsp;&nbsp;&nbsp;&nbsp;</td><td class=small>Disco Bandit&nbsp;&nbsp;&nbsp;&nbsp;</td><td class=small>5</td><td class=small>1,139</td></tr><td class=small><b><a class=nounder href="showplayer.php?who=641726">Gunthar the Huge</a></b>&nbsp;&nbsp;&nbsp;&nbsp;</td><td class=small>Hardcore &nbsp;&nbsp;&nbsp;&nbsp;</td><td class=small>Seal Clubber&nbsp;&nbsp;&nbsp;&nbsp;</td><td class=small>7</td><td class=small>2,249</td></tr><td class=small><b><a class=nounder href="showplayer.php?who=1298882">fewyn</a></b>&nbsp;&nbsp;&nbsp;&nbsp;</td><td class=small>Normal &nbsp;&nbsp;&nbsp;&nbsp;</td><td class=small>Disco Bandit&nbsp;&nbsp;&nbsp;&nbsp;</td><td class=small>2</td><td class=small>552</td></tr><td class=small><b><a class=nounder href="showplayer.php?who=3281337">Nostus</a></b>&nbsp;&nbsp;&nbsp;&nbsp;</td><td class=small>Hardcore &nbsp;&nbsp;&nbsp;&nbsp;</td><td class=small>Sauceror&nbsp;&nbsp;&nbsp;&nbsp;</td><td class=small>2</td><td class=small>558</td></tr><td class=small><b><a class=nounder href="showplayer.php?who=3323767">SaulTheBoss</a></b>&nbsp;&nbsp;&nbsp;&nbsp;</td><td class=small>Normal &nbsp;&nbsp;&nbsp;&nbsp;</td><td class=small>Pastamancer&nbsp;&nbsp;&nbsp;&nbsp;</td><td class=small>10</td><td class=small>1,817</td></tr><td class=small><b><a class=nounder href="showplayer.php?who=3691215">chris yanthemup</a></b>&nbsp;&nbsp;&nbsp;&nbsp;</td><td class=small>Normal &nbsp;&nbsp;&nbsp;&nbsp;</td><td class=small>Accordion Thief&nbsp;&nbsp;&nbsp;&nbsp;</td><td class=small>5</td><td class=small>963</td></tr><td class=small><b><a class=nounder href="showplayer.php?who=394715">The Garfather</a></b>&nbsp;&nbsp;&nbsp;&nbsp;</td><td class=small>Normal &nbsp;&nbsp;&nbsp;&nbsp;</td><td class=small>Sauceror&nbsp;&nbsp;&nbsp;&nbsp;</td><td class=small>1</td><td class=small>333</td></tr><td class=small><b><a class=nounder href="showplayer.php?who=1119758">LordOpus</a></b>&nbsp;&nbsp;&nbsp;&nbsp;</td><td class=small>Normal &nbsp;&nbsp;&nbsp;&nbsp;</td><td class=small>Accordion Thief&nbsp;&nbsp;&nbsp;&nbsp;</td><td class=small>7</td><td class=small>1,483</td></tr><td class=small><b><a class=nounder href="showplayer.php?who=3127376">Smokeweedeverydayy</a></b>&nbsp;&nbsp;&nbsp;&nbsp;</td><td class=small>Normal &nbsp;&nbsp;&nbsp;&nbsp;</td><td class=small>Seal Clubber&nbsp;&nbsp;&nbsp;&nbsp;</td><td class=small>6</td><td class=small>1,473</td></tr><td class=small><b><a class=nounder href="showplayer.php?who=651778">tcjellis</a></b>&nbsp;&nbsp;&nbsp;&nbsp;</td><td class=small>Normal &nbsp;&nbsp;&nbsp;&nbsp;</td><td class=small>Turtle Tamer&nbsp;&nbsp;&nbsp;&nbsp;</td><td class=small>2</td><td class=small>541</td></tr><td class=small><b><a class=nounder href="showplayer.php?who=1856704">BonJaglo</a></b>&nbsp;&nbsp;&nbsp;&nbsp;</td><td class=small>Normal &nbsp;&nbsp;&nbsp;&nbsp;</td><td class=small>Sauceror&nbsp;&nbsp;&nbsp;&nbsp;</td><td class=small>3</td><td class=small>682</td></tr><td class=small><b><a class=nounder href="showplayer.php?who=651778">tcjellis</a></b>&nbsp;&nbsp;&nbsp;&nbsp;</td><td class=small>Normal &nbsp;&nbsp;&nbsp;&nbsp;</td><td class=small>Turtle Tamer&nbsp;&nbsp;&nbsp;&nbsp;</td><td class=small>2</td><td class=small>523</td></tr><td class=small><b><a class=nounder href="showplayer.php?who=3390309">skipnovak</a></b>&nbsp;&nbsp;&nbsp;&nbsp;</td><td class=small>Normal &nbsp;&nbsp;&nbsp;&nbsp;</td><td class=small>Seal Clubber&nbsp;&nbsp;&nbsp;&nbsp;</td><td class=small>12</td><td class=small>2,098</td></tr><td class=small><b><a class=nounder href="showplayer.php?who=1385639">Josim</a></b>&nbsp;&nbsp;&nbsp;&nbsp;</td><td class=small>Hardcore &nbsp;&nbsp;&nbsp;&nbsp;</td><td class=small>Seal Clubber&nbsp;&nbsp;&nbsp;&nbsp;</td><td class=small>3</td><td class=small>766</td></tr><td class=small><b><a class=nounder href="showplayer.php?who=651778">tcjellis</a></b>&nbsp;&nbsp;&nbsp;&nbsp;</td><td class=small>Normal &nbsp;&nbsp;&nbsp;&nbsp;</td><td class=small>Seal Clubber&nbsp;&nbsp;&nbsp;&nbsp;</td><td class=small>2</td><td class=small>565</td></tr><td class=small><b><a class=nounder href="showplayer.php?who=2109704">Infopowerbroker</a></b>&nbsp;&nbsp;&nbsp;&nbsp;</td><td class=small>Hardcore &nbsp;&nbsp;&nbsp;&nbsp;</td><td class=small>Accordion Thief&nbsp;&nbsp;&nbsp;&nbsp;</td><td class=small>2</td><td class=small>566</td></tr><td class=small><b><a class=nounder href="showplayer.php?who=1850933">Kulthozuer</a></b>&nbsp;&nbsp;&nbsp;&nbsp;</td><td class=small>Hardcore &nbsp;&nbsp;&nbsp;&nbsp;</td><td class=small>Turtle Tamer&nbsp;&nbsp;&nbsp;&nbsp;</td><td class=small>2</td><td class=small>399</td></tr><td class=small><b><a class=nounder href="showplayer.php?who=3672115">Rishi Sunak</a></b>&nbsp;&nbsp;&nbsp;&nbsp;</td><td class=small>Hardcore &nbsp;&nbsp;&nbsp;&nbsp;</td><td class=small>Accordion Thief&nbsp;&nbsp;&nbsp;&nbsp;</td><td class=small>6</td><td class=small>1,251</td></tr><td class=small><b><a class=nounder href="showplayer.php?who=3381718">SamhaineTsuke</a></b>&nbsp;&nbsp;&nbsp;&nbsp;</td><td class=small>Normal &nbsp;&nbsp;&nbsp;&nbsp;</td><td class=small>Turtle Tamer&nbsp;&nbsp;&nbsp;&nbsp;</td><td class=small>14</td><td class=small>3,221</td></tr><td class=small><b><a class=nounder href="showplayer.php?who=3674775">cosmic_food</a></b>&nbsp;&nbsp;&nbsp;&nbsp;</td><td class=small>Hardcore &nbsp;&nbsp;&nbsp;&nbsp;</td><td class=small>Turtle Tamer&nbsp;&nbsp;&nbsp;&nbsp;</td><td class=small>7</td><td class=small>1,531</td></tr><td class=small><b><a class=nounder href="showplayer.php?who=2109704">Infopowerbroker</a></b>&nbsp;&nbsp;&nbsp;&nbsp;</td><td class=small>Hardcore &nbsp;&nbsp;&nbsp;&nbsp;</td><td class=small>Seal Clubber&nbsp;&nbsp;&nbsp;&nbsp;</td><td class=small>2</td><td class=small>589</td></tr><td class=small><b><a class=nounder href="showplayer.php?who=2912155">Pestero</a></b>&nbsp;&nbsp;&nbsp;&nbsp;</td><td class=small>Hardcore &nbsp;&nbsp;&nbsp;&nbsp;</td><td class=small>Turtle Tamer&nbsp;&nbsp;&nbsp;&nbsp;</td><td class=small>2</td><td class=small>585</td></tr><td class=small><b><a class=nounder href="showplayer.php?who=2158154">Viszarn</a></b>&nbsp;&nbsp;&nbsp;&nbsp;</td><td class=small>Normal &nbsp;&nbsp;&nbsp;&nbsp;</td><td class=small>Accordion Thief&nbsp;&nbsp;&nbsp;&nbsp;</td><td class=small>12</td><td class=small>1,743</td></tr><td class=small><b><a class=nounder href="showplayer.php?who=2270868">Hedgemonster</a></b>&nbsp;&nbsp;&nbsp;&nbsp;</td><td class=small>Normal &nbsp;&nbsp;&nbsp;&nbsp;</td><td class=small>Turtle Tamer&nbsp;&nbsp;&nbsp;&nbsp;</td><td class=small>3</td><td class=small>1,000</td></tr><td class=small><b><a class=nounder href="showplayer.php?who=584803">erct657</a></b>&nbsp;&nbsp;&nbsp;&nbsp;</td><td class=small>Normal &nbsp;&nbsp;&nbsp;&nbsp;</td><td class=small>Sauceror&nbsp;&nbsp;&nbsp;&nbsp;</td><td class=small>2</td><td class=small>646</td></tr><td class=small><b><a class=nounder href="showplayer.php?who=584803">erct657</a></b>&nbsp;&nbsp;&nbsp;&nbsp;</td><td class=small>Normal &nbsp;&nbsp;&nbsp;&nbsp;</td><td class=small>Seal Clubber&nbsp;&nbsp;&nbsp;&nbsp;</td><td class=small>2</td><td class=small>512</td></tr><td class=small><b><a class=nounder href="showplayer.php?who=1931195">herocaim</a></b>&nbsp;&nbsp;&nbsp;&nbsp;</td><td class=small>Normal &nbsp;&nbsp;&nbsp;&nbsp;</td><td class=small>Disco Bandit&nbsp;&nbsp;&nbsp;&nbsp;</td><td class=small>3</td><td class=small>1,003</td></tr><td class=small><b><a class=nounder href="showplayer.php?who=1614456">Muscle Mctuffing Puff</a></b>&nbsp;&nbsp;&nbsp;&nbsp;</td><td class=small>Normal &nbsp;&nbsp;&nbsp;&nbsp;</td><td class=small>Disco Bandit&nbsp;&nbsp;&nbsp;&nbsp;</td><td class=small>3</td><td class=small>966</td></tr><td class=small><b><a class=nounder href="showplayer.php?who=3607963">Jillstopher</a></b>&nbsp;&nbsp;&nbsp;&nbsp;</td><td class=small>Hardcore &nbsp;&nbsp;&nbsp;&nbsp;</td><td class=small>Turtle Tamer&nbsp;&nbsp;&nbsp;&nbsp;</td><td class=small>3</td><td class=small>651</td></tr><td class=small><b><a class=nounder href="showplayer.php?who=1741165">Grushvak</a></b>&nbsp;&nbsp;&nbsp;&nbsp;</td><td class=small>Normal &nbsp;&nbsp;&nbsp;&nbsp;</td><td class=small>Seal Clubber&nbsp;&nbsp;&nbsp;&nbsp;</td><td class=small>2</td><td class=small>654</td></tr></table></td></tr></table></center></td></tr><tr><td height=4></td></tr></table><p></center></td></tr></table></center></td></tr><tr><td height=4></td></tr></table><table width=95% cellspacing=0 cellpadding=0><tr><td style="color: white;" align=center bgcolor=blue><b>The Museum, First Floor</b></td></tr><tr><td style="padding: 5px; border: 1px solid blue;"><center><table><tr><td><center><table cellpadding=0 cellspacing=0><tr><td colspan=6 width=500 height=100><img src=/images/otherimages/museum/museum_top.gif width=500 height=100 border=0></td></tr><tr><td width=50 height=400 rowspan=4><img src=/images/otherimages/museum/museum_left.gif width=50 height=400></td><td width=100 height=100><a href=museum.php?action=icehouse><img src=/images/otherimages/museum/musicehouse.gif width=100 height=100></a></td><td width=100 height=100><a href=museum.php?floor=1&place=leaderboards&whichboard=0><img src=/images/otherimages/museum/lbweird.gif width=100 height=100 border=0 alt="Weird Leaderboards" title="Weird Leaderboards"></a></td><td width=100 height=100><a href=museum.php?floor=1&place=leaderboards&whichboard=8><img src=/images/otherimages/museum/lbclandungeon.gif width=100 height=100 border=0 alt="Clan Dungeon Leaderboards" title="Clan Dungeon Leaderboards"></a></td><td width=100 height=100><img src=/images/otherimages/museum/museum_elevator.gif width=100 height=100 border=0 usemap="#elemap"></td><td width=50 height=400 rowspan=4><img src=/images/otherimages/museum/museum_right.gif width=50 height=400></td></tr><tr><td width=100 height=100><a href='museum.php?place=leaderboards&whichboard=900&floor=1' style='text-align:center;display: block; height: 100px; width: 100px'><div style='height:15px'></div><div style='margin-bottom: 2px'><div class="pp"><div><img alt="Elf Gratitude" title="Elf Gratitude" src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/E.gif" height="10" border="0" /><img alt='' src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/l.gif" height="10" border="0" /><img alt='' src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/f.gif" height="10" border="0" style="margin-right: 4px"/></div><div><img alt='' src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/G.gif" height="10" border="0" /><img alt='' src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/r.gif" height="10" border="0" /><img alt='' src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/a.gif" height="10" border="0" /><img alt='' src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/t.gif" height="10" border="0" /><img alt='' src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/i.gif" height="10" border="0" /><img alt='' src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/t.gif" height="10" border="0" /><img alt='' src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/u.gif" height="10" border="0" /><img alt='' src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/d.gif" height="10" border="0" /><img alt='' src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/e.gif" height="10" border="0" /></div></div></div><div class="pp"><div><img alt="Leaderboards" title="Leaderboards" src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/L.gif" height="10" border="0" /><img alt='' src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/e.gif" height="10" border="0" /><img alt='' src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/a.gif" height="10" border="0" /><img alt='' src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/d.gif" height="10" border="0" /><img alt='' src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/e.gif" height="10" border="0" /><img alt='' src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/r.gif" height="10" border="0" /><img alt='' src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/b.gif" height="10" border="0" /><img alt='' src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/o.gif" height="10" border="0" /><img alt='' src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/a.gif" height="10" border="0" /><img alt='' src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/r.gif" height="10" border="0" /><img alt='' src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/d.gif" height="10" border="0" /><img alt='' src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/s.gif" height="10" border="0" /></div></div><img src="/images/otherimages/museum/lb.gif" alt="Elf Gratitude Leaderboards" /></a></td><td width=100 height=100><a href="machineart.php?browse=1"><img src=/images/otherimages/museum/aagsign.gif width=100 height=100 border=0 alt="Abstract Art Gallery" title="Abstract Art Gallery"></a></td><td width=100 height=100><a href="museum.php?place=collections"><img src="/images/otherimages/museum/collection.gif" width=100 height=100 border=0 alt="The Collection Collection" title="The Collection Collection"></a></td><td width=100 height=100><a href='museum.php?place=leaderboards&whichboard=51&floor=1' style='text-align:center;display: block; height: 100px; width: 100px'><div style='height:15px'></div><div style='margin-bottom: 2px'><div class="pp"><div><img alt="Shrunken Adventurer" title="Shrunken Adventurer" src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/S.gif" height="10" border="0" /><img alt='' src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/h.gif" height="10" border="0" /><img alt='' src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/r.gif" height="10" border="0" /><img alt='' src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/u.gif" height="10" border="0" /><img alt='' src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/n.gif" height="10" border="0" /><img alt='' src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/k.gif" height="10" border="0" /><img alt='' src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/e.gif" height="10" border="0" /><img alt='' src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/n.gif" height="10" border="0" style="margin-right: 4px"/></div><div><img alt='' src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/A.gif" height="10" border="0" /><img alt='' src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/d.gif" height="10" border="0" /><img alt='' src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/v.gif" height="10" border="0" /><img alt='' src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/e.gif" height="10" border="0" /><img alt='' src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/n.gif" height="10" border="0" /><img alt='' src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/t.gif" height="10" border="0" /><img alt='' src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/u.gif" height="10" border="0" /><img alt='' src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/r.gif" height="10" border="0" /><img alt='' src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/e.gif" height="10" border="0" /><img alt='' src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/r.gif" height="10" border="0" /></div></div></div><div class="pp"><div><img alt="Leaderboards" title="Leaderboards" src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/L.gif" height="10" border="0" /><img alt='' src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/e.gif" height="10" border="0" /><img alt='' src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/a.gif" height="10" border="0" /><img alt='' src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/d.gif" height="10" border="0" /><img alt='' src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/e.gif" height="10" border="0" /><img alt='' src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/r.gif" height="10" border="0" /><img alt='' src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/b.gif" height="10" border="0" /><img alt='' src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/o.gif" height="10" border="0" /><img alt='' src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/a.gif" height="10" border="0" /><img alt='' src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/r.gif" height="10" border="0" /><img alt='' src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/d.gif" height="10" border="0" /><img alt='' src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/s.gif" height="10" border="0" /></div></div><img src="/images/otherimages/museum/lb.gif" alt="Shrunken Adventurer Leaderboards" /></a></td></tr><tr><td width=100 height=100><a href='museum.php?place=leaderboards&whichboard=47&floor=1' style='text-align:center;display: block; height: 100px; width: 100px'><div style='height:15px'></div><div style='margin-bottom: 2px'><div class="pp"><div><img alt="Journeyman" title="Journeyman" src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/J.gif" height="10" border="0" /><img alt='' src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/o.gif" height="10" border="0" /><img alt='' src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/u.gif" height="10" border="0" /><img alt='' src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/r.gif" height="10" border="0" /><img alt='' src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/n.gif" height="10" border="0" /><img alt='' src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/e.gif" height="10" border="0" /><img alt='' src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/y.gif" height="10" border="0" /><img alt='' src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/m.gif" height="10" border="0" /><img alt='' src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/a.gif" height="10" border="0" /><img alt='' src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/n.gif" height="10" border="0" /></div></div></div><div class="pp"><div><img alt="Leaderboards" title="Leaderboards" src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/L.gif" height="10" border="0" /><img alt='' src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/e.gif" height="10" border="0" /><img alt='' src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/a.gif" height="10" border="0" /><img alt='' src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/d.gif" height="10" border="0" /><img alt='' src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/e.gif" height="10" border="0" /><img alt='' src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/r.gif" height="10" border="0" /><img alt='' src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/b.gif" height="10" border="0" /><img alt='' src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/o.gif" height="10" border="0" /><img alt='' src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/a.gif" height="10" border="0" /><img alt='' src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/r.gif" height="10" border="0" /><img alt='' src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/d.gif" height="10" border="0" /><img alt='' src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/s.gif" height="10" border="0" /></div></div><img src="/images/otherimages/museum/lb.gif" alt="You Robot, Leaderboards" /></a></td><td width=100 height=100><a href='museum.php?place=leaderboards&whichboard=48&floor=1' style='text-align:center;display: block; height: 100px; width: 100px'><div style='height:15px'></div><div style='margin-bottom: 2px'><div class="pp"><div><img alt="Fall of the Dinos" title="Fall of the Dinos" src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/F.gif" height="10" border="0" /><img alt='' src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/a.gif" height="10" border="0" /><img alt='' src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/l.gif" height="10" border="0" /><img alt='' src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/l.gif" height="10" border="0" style="margin-right: 4px"/></div><div><img alt='' src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/o.gif" height="10" border="0" /><img alt='' src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/f.gif" height="10" border="0" style="margin-right: 4px"/></div><div><img alt='' src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/t.gif" height="10" border="0" /><img alt='' src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/h.gif" height="10" border="0" /><img alt='' src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/e.gif" height="10" border="0" style="margin-right: 4px"/></div><div><img alt='' src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/D.gif" height="10" border="0" /><img alt='' src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/i.gif" height="10" border="0" /><img alt='' src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/n.gif" height="10" border="0" /><img alt='' src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/o.gif" height="10" border="0" /><img alt='' src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/s.gif" height="10" border="0" /></div></div></div><div class="pp"><div><img alt="Leaderboards" title="Leaderboards" src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/L.gif" height="10" border="0" /><img alt='' src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/e.gif" height="10" border="0" /><img alt='' src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/a.gif" height="10" border="0" /><img alt='' src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/d.gif" height="10" border="0" /><img alt='' src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/e.gif" height="10" border="0" /><img alt='' src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/r.gif" height="10" border="0" /><img alt='' src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/b.gif" height="10" border="0" /><img alt='' src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/o.gif" height="10" border="0" /><img alt='' src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/a.gif" height="10" border="0" /><img alt='' src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/r.gif" height="10" border="0" /><img alt='' src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/d.gif" height="10" border="0" /><img alt='' src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/s.gif" height="10" border="0" /></div></div><img src="/images/otherimages/museum/lb.gif" alt="You Robot, Leaderboards" /></a></td><td width=100 height=100><a href='museum.php?place=leaderboards&whichboard=49&floor=1' style='text-align:center;display: block; height: 100px; width: 100px'><div style='height:15px'></div><div style='margin-bottom: 2px'><div class="pp"><div><img alt="Shadows Over Loathing Leaderboards" title="Shadows Over Loathing Leaderboards" src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/S.gif" height="10" border="0" /><img alt='' src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/h.gif" height="10" border="0" /><img alt='' src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/a.gif" height="10" border="0" /><img alt='' src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/d.gif" height="10" border="0" /><img alt='' src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/o.gif" height="10" border="0" /><img alt='' src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/w.gif" height="10" border="0" /><img alt='' src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/s.gif" height="10" border="0" style="margin-right: 4px"/></div><div><img alt='' src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/O.gif" height="10" border="0" /><img alt='' src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/v.gif" height="10" border="0" /><img alt='' src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/e.gif" height="10" border="0" /><img alt='' src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/r.gif" height="10" border="0" style="margin-right: 4px"/></div><div><img alt='' src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/L.gif" height="10" border="0" /><img alt='' src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/o.gif" height="10" border="0" /><img alt='' src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/a.gif" height="10" border="0" /><img alt='' src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/t.gif" height="10" border="0" /><img alt='' src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/h.gif" height="10" border="0" /><img alt='' src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/i.gif" height="10" border="0" /><img alt='' src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/n.gif" height="10" border="0" /><img alt='' src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/g.gif" height="10" border="0" style="margin-right: 4px"/></div><div><img alt='' src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/L.gif" height="10" border="0" /><img alt='' src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/e.gif" height="10" border="0" /><img alt='' src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/a.gif" height="10" border="0" /><img alt='' src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/d.gif" height="10" border="0" /><img alt='' src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/e.gif" height="10" border="0" /><img alt='' src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/r.gif" height="10" border="0" /><img alt='' src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/b.gif" height="10" border="0" /><img alt='' src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/o.gif" height="10" border="0" /><img alt='' src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/a.gif" height="10" border="0" /><img alt='' src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/r.gif" height="10" border="0" /><img alt='' src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/d.gif" height="10" border="0" /><img alt='' src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/s.gif" height="10" border="0" /></div></div></div><img src="/images/otherimages/museum/lb.gif" alt="Avatar of Shadows Over Loathing Leaderboards" /></a></td><td width=100 height=100><a href='museum.php?place=leaderboards&whichboard=50&floor=1' style='text-align:center;display: block; height: 100px; width: 100px'><div style='height:15px'></div><div style='margin-bottom: 2px'><div class="pp"><div><img alt="Legacy of Loathing" title="Legacy of Loathing" src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/L.gif" height="10" border="0" /><img alt='' src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/e.gif" height="10" border="0" /><img alt='' src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/g.gif" height="10" border="0" /><img alt='' src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/a.gif" height="10" border="0" /><img alt='' src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/c.gif" height="10" border="0" /><img alt='' src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/y.gif" height="10" border="0" style="margin-right: 4px"/></div><div><img alt='' src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/o.gif" height="10" border="0" /><img alt='' src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/f.gif" height="10" border="0" style="margin-right: 4px"/></div><div><img alt='' src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/L.gif" height="10" border="0" /><img alt='' src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/o.gif" height="10" border="0" /><img alt='' src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/a.gif" height="10" border="0" /><img alt='' src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/t.gif" height="10" border="0" /><img alt='' src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/h.gif" height="10" border="0" /><img alt='' src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/i.gif" height="10" border="0" /><img alt='' src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/n.gif" height="10" border="0" /><img alt='' src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/g.gif" height="10" border="0" /></div></div></div><div class="pp"><div><img alt="Leaderboards" title="Leaderboards" src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/L.gif" height="10" border="0" /><img alt='' src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/e.gif" height="10" border="0" /><img alt='' src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/a.gif" height="10" border="0" /><img alt='' src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/d.gif" height="10" border="0" /><img alt='' src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/e.gif" height="10" border="0" /><img alt='' src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/r.gif" height="10" border="0" /><img alt='' src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/b.gif" height="10" border="0" /><img alt='' src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/o.gif" height="10" border="0" /><img alt='' src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/a.gif" height="10" border="0" /><img alt='' src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/r.gif" height="10" border="0" /><img alt='' src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/d.gif" height="10" border="0" /><img alt='' src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/s.gif" height="10" border="0" /></div></div><img src="/images/otherimages/museum/lb.gif" alt="You Robot, Leaderboards" /></a></td></tr><tr><td width=100 height=100><a href='museum.php?place=leaderboards&whichboard=53&floor=1' style='text-align:center;display: block; height: 100px; width: 100px'><div style='height:15px'></div><div style='margin-bottom: 2px'><div class="pp"><div><img alt="11TIHAU" title="11TIHAU" src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/1.gif" height="10" border="0" /><img alt='' src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/1.gif" height="10" border="0" /><img alt='' src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/T.gif" height="10" border="0" /><img alt='' src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/I.gif" height="10" border="0" /><img alt='' src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/H.gif" height="10" border="0" /><img alt='' src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/A.gif" height="10" border="0" /><img alt='' src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/U.gif" height="10" border="0" /></div></div></div><div class="pp"><div><img alt="Leaderboards" title="Leaderboards" src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/L.gif" height="10" border="0" /><img alt='' src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/e.gif" height="10" border="0" /><img alt='' src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/a.gif" height="10" border="0" /><img alt='' src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/d.gif" height="10" border="0" /><img alt='' src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/e.gif" height="10" border="0" /><img alt='' src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/r.gif" height="10" border="0" /><img alt='' src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/b.gif" height="10" border="0" /><img alt='' src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/o.gif" height="10" border="0" /><img alt='' src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/a.gif" height="10" border="0" /><img alt='' src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/r.gif" height="10" border="0" /><img alt='' src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/d.gif" height="10" border="0" /><img alt='' src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/s.gif" height="10" border="0" /></div></div><img src="/images/otherimages/museum/lb.gif" alt="11TIHAU Leaderboards" /></a></td><td width=100 height=100><a href='museum.php?place=leaderboards&whichboard=52&floor=1' style='text-align:center;display: block; height: 100px; width: 100px'><div style='height:15px'></div><div style='margin-bottom: 2px'><div class="pp"><div><img alt="WereProf" title="WereProf" src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/W.gif" height="10" border="0" /><img alt='' src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/e.gif" height="10" border="0" /><img alt='' src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/r.gif" height="10" border="0" /><img alt='' src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/e.gif" height="10" border="0" /><img alt='' src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/P.gif" height="10" border="0" /><img alt='' src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/r.gif" height="10" border="0" /><img alt='' src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/o.gif" height="10" border="0" /><img alt='' src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/f.gif" height="10" border="0" /></div></div></div><div class="pp"><div><img alt="Leaderboards" title="Leaderboards" src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/L.gif" height="10" border="0" /><img alt='' src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/e.gif" height="10" border="0" /><img alt='' src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/a.gif" height="10" border="0" /><img alt='' src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/d.gif" height="10" border="0" /><img alt='' src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/e.gif" height="10" border="0" /><img alt='' src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/r.gif" height="10" border="0" /><img alt='' src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/b.gif" height="10" border="0" /><img alt='' src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/o.gif" height="10" border="0" /><img alt='' src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/a.gif" height="10" border="0" /><img alt='' src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/r.gif" height="10" border="0" /><img alt='' src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/d.gif" height="10" border="0" /><img alt='' src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/s.gif" height="10" border="0" /></div></div><img src="/images/otherimages/museum/lb.gif" alt="WereProf" /></a></td><td width=100 height=100><a href='museum.php?place=leaderboards&whichboard=54&floor=1' style='text-align:center;display: block; height: 100px; width: 100px'><div style='height:15px'></div><div style='margin-bottom: 2px'><div class="pp"><div><img alt="Avant Guard" title="Avant Guard" src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/A.gif" height="10" border="0" /><img alt='' src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/v.gif" height="10" border="0" /><img alt='' src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/a.gif" height="10" border="0" /><img alt='' src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/n.gif" height="10" border="0" /><img alt='' src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/t.gif" height="10" border="0" style="margin-right: 4px"/></div><div><img alt='' src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/G.gif" height="10" border="0" /><img alt='' src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/u.gif" height="10" border="0" /><img alt='' src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/a.gif" height="10" border="0" /><img alt='' src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/r.gif" height="10" border="0" /><img alt='' src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/d.gif" height="10" border="0" /></div></div></div><div class="pp"><div><img alt="Leaderboards" title="Leaderboards" src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/L.gif" height="10" border="0" /><img alt='' src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/e.gif" height="10" border="0" /><img alt='' src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/a.gif" height="10" border="0" /><img alt='' src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/d.gif" height="10" border="0" /><img alt='' src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/e.gif" height="10" border="0" /><img alt='' src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/r.gif" height="10" border="0" /><img alt='' src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/b.gif" height="10" border="0" /><img alt='' src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/o.gif" height="10" border="0" /><img alt='' src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/a.gif" height="10" border="0" /><img alt='' src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/r.gif" height="10" border="0" /><img alt='' src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/d.gif" height="10" border="0" /><img alt='' src="https://d2uyhvukfffg5a.cloudfront.net/otherimages/zonefont/s.gif" height="10" border="0" /></div></div><img src="/images/otherimages/museum/lb.gif" alt="Avant Guard" /></a></td><td width=100 height=100><a href=museum.php?floor=1&place=leaderboards&whichboard=999><img src=/images/otherimages/museum/lbstandard.gif width=100 height=100 border=0 alt="Standard Ascension Leaderboards" title="Standard Ascension Leaderboards"></a></td></tr><tr><td colspan=6 height=100 width=500><A href=town.php><img src=/images/otherimages/museum/museum_bottom.gif width=500 height=100 border=0></a></td></tr></table><p><a href=town.php>Back to Seaside Town</a></center></td></tr></table></center></td></tr><tr><td height=4></td></tr></table></center><div id='menu' class='rcm'></div></body><script language="Javascript"> var notchat = true; var actions = { "sendmessage.php" : { "action" : 1, "title" : "Send Message", "arg" : "toid" }, "town_sendgift.php" : { "action" : 1, "title" : "Send Gift", "arg" : "towho" }, "makeoffer.php" : { "action" : 1, "title" : "Propose Trade", "arg" : "towho" }, "mallstore.php" : { "action" : 1, "title" : "Mall Store", "arg" : "whichstore" }, "/./curse.php" : { "action" : 1, "title" : "Throw TP", "arg" : "whichitem=1923&targetplayer" }, "/msg" : { "action" : 3, "useid" : true, "query" : "Enter message to send to %:" }}; </script><script language="Javascript" src="/images/scripts/rcm.20101215.js"></script><script src="/onfocus.1.js"></script></html>
@@ -0,0 +1,44 @@
1
+ import { describe, expect, it } from "vitest";
2
+ import { loadFixture } from "../testUtils.js";
3
+ import { parseLeaderboard } from "./leaderboard.js";
4
+
5
+ describe("Leaderboards", () => {
6
+ it("can parse a regular path leaderboard", async () => {
7
+ const page = await loadFixture(__dirname, "leaderboard_wotsf.html");
8
+ const leaderboard = parseLeaderboard(page);
9
+
10
+ // Group name
11
+ expect(leaderboard.name).toBe(
12
+ "Way of the Surprising Fist (Frozen) Leaderboards",
13
+ );
14
+
15
+ // Hardcore and normal should both be detected, and no more.
16
+ expect(leaderboard.boards).toHaveLength(2);
17
+
18
+ // Hardcore
19
+ const hardcore = leaderboard.boards[0];
20
+ expect(hardcore.name).toBe(
21
+ "Fastest Hardcore Way of the Surprising Fist Ascensions",
22
+ );
23
+ expect(hardcore.runs).toHaveLength(35);
24
+ expect(hardcore.runs[0].player).toBe("Iron Bob (AT)");
25
+ expect(hardcore.runs[0].days).toBe("3");
26
+ expect(hardcore.runs[0].turns).toBe("712");
27
+ expect(hardcore.updated).toStrictEqual(
28
+ new Date("2024-11-21T02:34:30-07:00"),
29
+ );
30
+
31
+ // Softcore
32
+ const softcore = leaderboard.boards[1];
33
+ expect(softcore.name).toBe(
34
+ "Fastest Normal Way of the Surprising Fist Ascensions",
35
+ );
36
+ expect(softcore.runs).toHaveLength(35);
37
+ expect(softcore.runs[34].player).toBe("Jesusisagurl (SC)");
38
+ expect(softcore.runs[34].days).toBe("3");
39
+ expect(softcore.runs[34].turns).toBe("583");
40
+ expect(softcore.updated).toStrictEqual(
41
+ new Date("2024-11-21T02:34:31-07:00"),
42
+ );
43
+ });
44
+ });
@@ -1,5 +1,7 @@
1
- import xpath, { select } from "xpath";
2
- import { DOMParser } from "@xmldom/xmldom";
1
+ import { selectAll, selectOne } from "css-select";
2
+ import { parseDocument } from "htmlparser2";
3
+ import { isComment, Text } from "domhandler";
4
+ import { innerText } from "domutils";
3
5
 
4
6
  export type LeaderboardInfo = {
5
7
  name: string;
@@ -18,49 +20,34 @@ type RunInfo = {
18
20
  turns: string;
19
21
  };
20
22
 
21
- const parser = new DOMParser({
22
- locator: {},
23
- errorHandler: {
24
- warning: () => {},
25
- error: () => {},
26
- fatalError: console.error,
27
- },
28
- });
29
-
30
- const selectMulti = (expression: string, node: Node) => {
31
- const selection = select(expression, node);
32
- if (Array.isArray(selection)) return selection;
33
- return selection instanceof Node ? [selection] : [];
34
- };
23
+ const blankNode = new Text("");
35
24
 
36
25
  export function parseLeaderboard(page: string): LeaderboardInfo {
37
- const document = parser.parseFromString(page);
38
- const [board, ...boards] = selectMulti("//table", document);
26
+ const doc = parseDocument(page);
27
+ const [container, ...boards] = selectAll("table", doc);
39
28
 
40
29
  return {
41
- name: selectMulti(".//text()", board.firstChild!)
42
- .map((node) => node.nodeValue)
43
- .join("")
30
+ name: innerText(selectOne("tr", container) ?? blankNode)
44
31
  .replace(/\s+/g, " ")
45
32
  .trim(),
46
33
  boards: boards
47
34
  .slice(1)
48
- .filter(
49
- (board) =>
50
- selectMulti("./tr//text()", board)[0]?.nodeValue?.match(
51
- /^((Fast|Funn|B)est|Most (Goo|Elf))/,
52
- ) && selectMulti("./tr", board).length > 1,
53
- )
35
+ .filter((board) => {
36
+ if (selectAll(":scope > tr, :scope > tbody > tr", board).length <= 1)
37
+ return false;
38
+ const text = innerText(selectOne("tr", board) ?? blankNode);
39
+ return text.match(/^((Fast|Funn|B)est|Most (Goo|Elf))/);
40
+ })
54
41
  .map((subboard) => {
55
- const rows = selectMulti("./tr", subboard);
42
+ const rows = selectAll("tr", subboard);
56
43
 
57
44
  return {
58
- name: (selectMulti(".//text()", rows[0])[0]?.nodeValue || "").trim(),
59
- runs: selectMulti("./td//tr", rows[1])
45
+ name: innerText(rows[0]),
46
+ runs: selectAll("td tr", rows[1])
60
47
  .slice(2)
61
48
  .map((node) => {
62
- const rowText = selectMulti(".//text()", node).map((text) =>
63
- text.toString().replace(/&amp;nbsp;/g, ""),
49
+ const rowText = selectAll("td", node).map((col) =>
50
+ innerText(col).replace(/&amp;nbsp;/g, ""),
64
51
  );
65
52
  const hasTwoNumbers = !!parseInt(rowText[rowText.length - 2]);
66
53
  return {
@@ -75,9 +62,10 @@ export function parseLeaderboard(page: string): LeaderboardInfo {
75
62
  turns: rowText[rowText.length - 1].toString() || "0",
76
63
  };
77
64
  }),
78
- updated: xpath.isComment(subboard.nextSibling)
79
- ? new Date(subboard.nextSibling.data.slice(9, -1))
80
- : null,
65
+ updated:
66
+ subboard.nextSibling && isComment(subboard.nextSibling)
67
+ ? new Date(subboard.nextSibling.data.slice(9, -1))
68
+ : null,
81
69
  };
82
70
  }),
83
71
  };