kol.js 0.1.6 → 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.6",
3
+ "version": "0.1.7",
4
4
  "main": "src/index.ts",
5
5
  "type": "module",
6
6
  "files": [
@@ -18,17 +18,19 @@
18
18
  "vitest": "^2.1.0"
19
19
  },
20
20
  "dependencies": {
21
- "@xmldom/xmldom": "^0.9.2",
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
- "xpath": "^0.0.34"
34
+ "typed-emitter": "^2.1.0"
33
35
  }
34
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
@@ -115,19 +115,20 @@ export class Client extends (EventEmitter as unknown as new () => TypedEmitter<E
115
115
  ): Promise<Result | null> {
116
116
  if (!(await this.login())) return fallback ?? null;
117
117
 
118
- // Make the request
119
- const response = await this.session(path, {
120
- ...options,
121
- responseType: "json",
122
- });
118
+ let failed = false;
123
119
 
124
- // If we've been redirected to the login page, clear the pwd and try again
125
- if (response.url.includes("/login.php")) {
126
- this.#pwd = "";
127
- return this.fetchJson(path, options);
128
- }
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) {}
129
128
 
130
- 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);
131
132
  }
132
133
 
133
134
  async login(): Promise<boolean> {
@@ -514,7 +515,8 @@ export class Client extends (EventEmitter as unknown as new () => TypedEmitter<E
514
515
  static #descIdToIdCache: Map<number, number> = new Map();
515
516
 
516
517
  async descIdToId(descId: number): Promise<number> {
517
- if (Client.#descIdToIdCache.has(descId)) return Client.#descIdToIdCache.get(descId)!;
518
+ if (Client.#descIdToIdCache.has(descId))
519
+ return Client.#descIdToIdCache.get(descId)!;
518
520
  const page = await this.fetchText("desc_item.php", {
519
521
  searchParams: {
520
522
  whichitem: descId,
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, MIME_TYPE } 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,47 +20,34 @@ type RunInfo = {
18
20
  turns: string;
19
21
  };
20
22
 
21
- const parser = new DOMParser({
22
- onError: (level, message) => {
23
- if (level === "fatalError") console.error(message);
24
- },
25
- });
26
-
27
- const selectMulti = (expression: string, node: Node) => {
28
- const selection = select(expression, node);
29
- if (Array.isArray(selection)) return selection;
30
- return selection instanceof Node ? [selection] : [];
31
- };
23
+ const blankNode = new Text("");
32
24
 
33
25
  export function parseLeaderboard(page: string): LeaderboardInfo {
34
- const doc = parser.parseFromString(page, MIME_TYPE.HTML);
35
- // @ts-expect-error see https://github.com/xmldom/xmldom/issues/724
36
- const [board, ...boards] = selectMulti("//table", doc);
26
+ const doc = parseDocument(page);
27
+ const [container, ...boards] = selectAll("table", doc);
37
28
 
38
29
  return {
39
- name: selectMulti(".//text()", board.firstChild!)
40
- .map((node) => node.nodeValue)
41
- .join("")
30
+ name: innerText(selectOne("tr", container) ?? blankNode)
42
31
  .replace(/\s+/g, " ")
43
32
  .trim(),
44
33
  boards: boards
45
34
  .slice(1)
46
- .filter(
47
- (board) =>
48
- selectMulti("./tr//text()", board)[0]?.nodeValue?.match(
49
- /^((Fast|Funn|B)est|Most (Goo|Elf))/,
50
- ) && selectMulti("./tr", board).length > 1,
51
- )
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
+ })
52
41
  .map((subboard) => {
53
- const rows = selectMulti("./tr", subboard);
42
+ const rows = selectAll("tr", subboard);
54
43
 
55
44
  return {
56
- name: (selectMulti(".//text()", rows[0])[0]?.nodeValue || "").trim(),
57
- runs: selectMulti("./td//tr", rows[1])
45
+ name: innerText(rows[0]),
46
+ runs: selectAll("td tr", rows[1])
58
47
  .slice(2)
59
48
  .map((node) => {
60
- const rowText = selectMulti(".//text()", node).map((text) =>
61
- text.toString().replace(/&amp;nbsp;/g, ""),
49
+ const rowText = selectAll("td", node).map((col) =>
50
+ innerText(col).replace(/&amp;nbsp;/g, ""),
62
51
  );
63
52
  const hasTwoNumbers = !!parseInt(rowText[rowText.length - 2]);
64
53
  return {
@@ -73,9 +62,10 @@ export function parseLeaderboard(page: string): LeaderboardInfo {
73
62
  turns: rowText[rowText.length - 1].toString() || "0",
74
63
  };
75
64
  }),
76
- updated: xpath.isComment(subboard.nextSibling)
77
- ? new Date(subboard.nextSibling.data.slice(9, -1))
78
- : null,
65
+ updated:
66
+ subboard.nextSibling && isComment(subboard.nextSibling)
67
+ ? new Date(subboard.nextSibling.data.slice(9, -1))
68
+ : null,
79
69
  };
80
70
  }),
81
71
  };