kol.js 0.0.2 → 0.1.1
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 +7 -6
- package/src/Cache.ts +33 -0
- package/src/Client.test.ts +206 -0
- package/src/Client.ts +506 -0
- package/src/Player.test.ts +101 -0
- package/src/Player.ts +209 -0
- package/src/__fixtures__/backoffice_prices_alien_meat.html +46 -0
- package/src/__fixtures__/backoffice_prices_lov_elephant.html +30 -0
- package/src/__fixtures__/backoffice_prices_magical_mystery_juice.html +30 -0
- package/src/__fixtures__/backoffice_prices_tofurkey_leg.html +48 -0
- package/src/__fixtures__/backoffice_prices_turtle_wax_greaves.html +42 -0
- package/src/__fixtures__/backoffice_prices_turtle_wax_helmet.html +42 -0
- package/src/__fixtures__/backoffice_prices_turtle_wax_shield.html +47 -0
- package/src/__fixtures__/desc_effect_pasta_oneness.html +31 -0
- package/src/__fixtures__/desc_effect_the_visible_adventurer.html +31 -0
- package/src/__fixtures__/desc_item_alien_meat.html +38 -0
- package/src/__fixtures__/desc_item_hypodermic_needle.html +39 -0
- package/src/__fixtures__/desc_item_lov_elephant.html +39 -0
- package/src/__fixtures__/desc_item_magical_mystery_juice.html +39 -0
- package/src/__fixtures__/desc_item_mosquito_larva.html +39 -0
- package/src/__fixtures__/desc_item_tofurkey_leg.html +38 -0
- package/src/__fixtures__/desc_item_turtle_wax_shield.html +79 -0
- package/src/__fixtures__/desc_skill_impetuous_sauciness.html +32 -0
- package/src/__fixtures__/desc_skill_overload_discarded_refridgerator.html +32 -0
- package/src/__fixtures__/familiar_in_standard_run.html +184 -0
- package/src/__fixtures__/searchplayer_mad_carew.html +53 -0
- package/src/__fixtures__/showplayer_dependence_day.html +47 -0
- package/src/__fixtures__/showplayer_golden_gun.html +28 -0
- package/src/__fixtures__/showplayer_regular.html +56 -0
- package/{dist/index.d.ts → src/index.ts} +1 -0
- package/src/testUtils.ts +13 -0
- package/src/utils/avatar.ts +90 -0
- package/src/utils/kmail.ts +48 -0
- package/src/utils/leaderboard.ts +84 -0
- package/src/utils/utils.ts +33 -0
- package/dist/Cache.d.ts +0 -11
- package/dist/Cache.js +0 -26
- package/dist/Client.d.ts +0 -84
- package/dist/Client.js +0 -343
- package/dist/Client.test.d.ts +0 -1
- package/dist/Client.test.js +0 -162
- package/dist/Player.d.ts +0 -28
- package/dist/Player.js +0 -136
- package/dist/Player.test.d.ts +0 -1
- package/dist/Player.test.js +0 -48
- package/dist/index.js +0 -3
- package/dist/testUtils.d.ts +0 -2
- package/dist/testUtils.js +0 -10
- package/dist/utils/avatar.d.ts +0 -1
- package/dist/utils/avatar.js +0 -70
- package/dist/utils/kmail.d.ts +0 -32
- package/dist/utils/kmail.js +0 -1
- package/dist/utils/leaderboard.d.ts +0 -16
- package/dist/utils/leaderboard.js +0 -56
- package/dist/utils/utils.d.ts +0 -4
- package/dist/utils/utils.js +0 -27
- package/dist/utils/visit.d.ts +0 -3
- package/dist/utils/visit.js +0 -10
package/src/Player.ts
ADDED
|
@@ -0,0 +1,209 @@
|
|
|
1
|
+
import { Client } from "./Client.js";
|
|
2
|
+
import { generateAvatarSvg } from "./utils/avatar.js";
|
|
3
|
+
import { parsePlayerDate } from "./utils/utils.js";
|
|
4
|
+
|
|
5
|
+
export type If<
|
|
6
|
+
Value extends boolean,
|
|
7
|
+
TrueResult,
|
|
8
|
+
FalseResult = null,
|
|
9
|
+
> = Value extends true
|
|
10
|
+
? TrueResult
|
|
11
|
+
: Value extends false
|
|
12
|
+
? FalseResult
|
|
13
|
+
: TrueResult | FalseResult;
|
|
14
|
+
|
|
15
|
+
export class Player<IsFull extends boolean = boolean> {
|
|
16
|
+
#client: Client;
|
|
17
|
+
|
|
18
|
+
id: number;
|
|
19
|
+
name: string;
|
|
20
|
+
|
|
21
|
+
level: If<IsFull, number>;
|
|
22
|
+
kolClass: If<IsFull, string>;
|
|
23
|
+
avatar: If<IsFull, string>;
|
|
24
|
+
ascensions: If<IsFull, number>;
|
|
25
|
+
trophies: If<IsFull, number>;
|
|
26
|
+
tattoos: If<IsFull, number>;
|
|
27
|
+
favoriteFood: If<IsFull, string | null>;
|
|
28
|
+
favoriteBooze: If<IsFull, string | null>;
|
|
29
|
+
createdDate: If<IsFull, Date>;
|
|
30
|
+
lastLogin: If<IsFull, Date>;
|
|
31
|
+
hasDisplayCase: If<IsFull, boolean>;
|
|
32
|
+
|
|
33
|
+
constructor(
|
|
34
|
+
client: Client,
|
|
35
|
+
id: number,
|
|
36
|
+
name: string,
|
|
37
|
+
level: number | null = null,
|
|
38
|
+
kolClass: string | null = null,
|
|
39
|
+
) {
|
|
40
|
+
this.#client = client;
|
|
41
|
+
this.id = id;
|
|
42
|
+
this.name = name;
|
|
43
|
+
this.level = level as If<IsFull, number>;
|
|
44
|
+
this.kolClass = kolClass as If<IsFull, string>;
|
|
45
|
+
this.avatar = null as If<IsFull, string>;
|
|
46
|
+
this.ascensions = null as If<IsFull, number>;
|
|
47
|
+
this.trophies = null as If<IsFull, number>;
|
|
48
|
+
this.tattoos = null as If<IsFull, number>;
|
|
49
|
+
this.favoriteFood = null as If<IsFull, string>;
|
|
50
|
+
this.favoriteBooze = null as If<IsFull, string>;
|
|
51
|
+
this.createdDate = null as If<IsFull, Date>;
|
|
52
|
+
this.lastLogin = null as If<IsFull, Date>;
|
|
53
|
+
this.hasDisplayCase = null as If<IsFull, boolean>;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
isFull(): this is Player<true> {
|
|
57
|
+
return this.createdDate !== null;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
isPartial(): this is Player<false> {
|
|
61
|
+
return this.createdDate === null;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
static async getNameFromId(
|
|
65
|
+
client: Client,
|
|
66
|
+
id: number,
|
|
67
|
+
): Promise<string | null> {
|
|
68
|
+
try {
|
|
69
|
+
const profile = await client.fetchText("showplayer.php", {
|
|
70
|
+
searchParams: { who: id },
|
|
71
|
+
});
|
|
72
|
+
const name = profile.match(/<b>([^>]*?)<\/b> \(#(\d+)\)<br>/)?.[1];
|
|
73
|
+
return name || null;
|
|
74
|
+
} catch {
|
|
75
|
+
return null;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
static async fromName(
|
|
80
|
+
client: Client,
|
|
81
|
+
name: string,
|
|
82
|
+
): Promise<Player<false> | null> {
|
|
83
|
+
try {
|
|
84
|
+
const matcher =
|
|
85
|
+
/href="showplayer.php\?who=(?<playerId>\d+)">(?<playerName>.*?)<\/a>\D+(clan=\d+[^<]+\D+)?\d+\D*(?<level>(\d+)|(inf_large\.gif))\D+valign=top>(?<class>[^<]*)<\/td>/i;
|
|
86
|
+
const search = await client.fetchText("searchplayer.php", {
|
|
87
|
+
searchParams: {
|
|
88
|
+
searchstring: name.replace(/_/g, "\\_"),
|
|
89
|
+
searching: "Yep.",
|
|
90
|
+
for: "",
|
|
91
|
+
startswith: 1,
|
|
92
|
+
hardcoreonly: 0,
|
|
93
|
+
},
|
|
94
|
+
});
|
|
95
|
+
const match = matcher.exec(search)?.groups;
|
|
96
|
+
|
|
97
|
+
if (!match) {
|
|
98
|
+
return null;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
return new Player(
|
|
102
|
+
client,
|
|
103
|
+
Number(match.playerId),
|
|
104
|
+
match.playerName,
|
|
105
|
+
parseInt(match.level),
|
|
106
|
+
match.class,
|
|
107
|
+
);
|
|
108
|
+
} catch (error) {
|
|
109
|
+
return null;
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
static async fromId(
|
|
114
|
+
client: Client,
|
|
115
|
+
id: number,
|
|
116
|
+
): Promise<Player<false> | null> {
|
|
117
|
+
const name = await Player.getNameFromId(client, id);
|
|
118
|
+
if (!name) return null;
|
|
119
|
+
return await Player.fromName(client, name);
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
static async from(
|
|
123
|
+
client: Client,
|
|
124
|
+
identifier: string | number,
|
|
125
|
+
): Promise<Player<false> | null> {
|
|
126
|
+
const id = Number(identifier);
|
|
127
|
+
|
|
128
|
+
if (!Number.isNaN(id) || typeof identifier === "number") {
|
|
129
|
+
return await Player.fromId(client, id);
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
return await Player.fromName(client, identifier);
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
matchesIdentifier(identifier: string | number) {
|
|
136
|
+
const id = Number(identifier);
|
|
137
|
+
if (!Number.isNaN(id) || typeof identifier === "number") {
|
|
138
|
+
return this.id === identifier;
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
return this.name.toLowerCase() === identifier.toLowerCase();
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
async full(): Promise<Player<true> | null> {
|
|
145
|
+
const t = this as unknown as Player<true>;
|
|
146
|
+
|
|
147
|
+
if (this.isFull()) return this;
|
|
148
|
+
|
|
149
|
+
try {
|
|
150
|
+
const profile = await this.#client.fetchText("showplayer.php", {
|
|
151
|
+
searchParams: {
|
|
152
|
+
who: this.id,
|
|
153
|
+
},
|
|
154
|
+
});
|
|
155
|
+
const header = profile.match(
|
|
156
|
+
/<center><table><tr><td><center>.*?<img.*?src="(.*?)".*?<b>([^>]*?)<\/b> \(#(\d+)\)<br>/,
|
|
157
|
+
);
|
|
158
|
+
if (!header) return null;
|
|
159
|
+
|
|
160
|
+
t.avatar = (await generateAvatarSvg(profile)) || header[1];
|
|
161
|
+
|
|
162
|
+
t.ascensions =
|
|
163
|
+
Number(
|
|
164
|
+
profile
|
|
165
|
+
.match(/>Ascensions<\/a>:<\/b><\/td><td>(.*?)<\/td>/)?.[1]
|
|
166
|
+
?.replace(/,/g, ""),
|
|
167
|
+
) || 0;
|
|
168
|
+
|
|
169
|
+
t.trophies = Number(
|
|
170
|
+
profile.match(/>Trophies Collected:<\/b><\/td><td>(.*?)<\/td>/)?.[1] ??
|
|
171
|
+
0,
|
|
172
|
+
);
|
|
173
|
+
|
|
174
|
+
t.tattoos = Number(
|
|
175
|
+
profile.match(/>Tattoos Collected:<\/b><\/td><td>(.*?)<\/td>/)?.[1] ??
|
|
176
|
+
0,
|
|
177
|
+
);
|
|
178
|
+
|
|
179
|
+
t.favoriteFood =
|
|
180
|
+
profile.match(/>Favorite Food:<\/b><\/td><td>(.*?)<\/td>/)?.[1] ?? null;
|
|
181
|
+
t.favoriteBooze =
|
|
182
|
+
profile.match(/>Favorite Booze:<\/b><\/td><td>(.*?)<\/td>/)?.[1] ??
|
|
183
|
+
null;
|
|
184
|
+
|
|
185
|
+
t.createdDate = parsePlayerDate(
|
|
186
|
+
profile.match(/>Account Created:<\/b><\/td><td>(.*?)<\/td>/)?.[1],
|
|
187
|
+
);
|
|
188
|
+
|
|
189
|
+
t.lastLogin = parsePlayerDate(
|
|
190
|
+
profile.match(/>Last Login:<\/b><\/td><td>(.*?)<\/td>/)?.[1],
|
|
191
|
+
);
|
|
192
|
+
|
|
193
|
+
t.hasDisplayCase =
|
|
194
|
+
profile.match(/Display Case<\/b><\/a> in the Museum<\/td>/) !== null;
|
|
195
|
+
|
|
196
|
+
return t;
|
|
197
|
+
} catch (error) {
|
|
198
|
+
console.error(error);
|
|
199
|
+
return null;
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
async isOnline() {
|
|
204
|
+
const response = await this.#client.useChatMacro(`/whois ${this.name}`);
|
|
205
|
+
return (
|
|
206
|
+
response?.output.includes("This player is currently online") ?? false
|
|
207
|
+
);
|
|
208
|
+
}
|
|
209
|
+
}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
<script type="text/javascript">
|
|
2
|
+
if (window.updateInv) updateInv([]);
|
|
3
|
+
</script>
|
|
4
|
+
<script type="text/javascript">
|
|
5
|
+
if (!window.updateInv && parent.mainpane.updateInv)
|
|
6
|
+
parent.mainpane.updateInv([]);
|
|
7
|
+
</script>
|
|
8
|
+
<center>
|
|
9
|
+
<table width="95%" cellspacing="0" cellpadding="0">
|
|
10
|
+
<tr>
|
|
11
|
+
<td style="color: white" align="center" bgcolor="blue">
|
|
12
|
+
<b>Results:</b>
|
|
13
|
+
</td>
|
|
14
|
+
</tr>
|
|
15
|
+
<tr>
|
|
16
|
+
<td style="padding: 5px; border: 1px solid blue">
|
|
17
|
+
<center>
|
|
18
|
+
<table>
|
|
19
|
+
<tr>
|
|
20
|
+
<td>
|
|
21
|
+
<div class="res">
|
|
22
|
+
<table border="0">
|
|
23
|
+
<tr>
|
|
24
|
+
<td>unlimited:</td>
|
|
25
|
+
<td><b>1,995</b> x12</td>
|
|
26
|
+
<td><b>2,000</b> x2</td>
|
|
27
|
+
<td><b>2,933</b> x41</td>
|
|
28
|
+
<td><b>2,934</b> x2104</td>
|
|
29
|
+
</tr>
|
|
30
|
+
<tr>
|
|
31
|
+
<td>limited:</td>
|
|
32
|
+
<td><b>6,390</b>(11/day) x78</td>
|
|
33
|
+
</tr>
|
|
34
|
+
</table>
|
|
35
|
+
</div>
|
|
36
|
+
</td>
|
|
37
|
+
</tr>
|
|
38
|
+
</table>
|
|
39
|
+
</center>
|
|
40
|
+
</td>
|
|
41
|
+
</tr>
|
|
42
|
+
<tr>
|
|
43
|
+
<td height="4"></td>
|
|
44
|
+
</tr>
|
|
45
|
+
</table>
|
|
46
|
+
</center>
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
<script type="text/javascript">
|
|
2
|
+
if (window.updateInv) updateInv([]);
|
|
3
|
+
</script>
|
|
4
|
+
<script type="text/javascript">
|
|
5
|
+
if (!window.updateInv && parent.mainpane.updateInv)
|
|
6
|
+
parent.mainpane.updateInv([]);
|
|
7
|
+
</script>
|
|
8
|
+
<center>
|
|
9
|
+
<table width="95%" cellspacing="0" cellpadding="0">
|
|
10
|
+
<tr>
|
|
11
|
+
<td style="color: white" align="center" bgcolor="blue">
|
|
12
|
+
<b>Results:</b>
|
|
13
|
+
</td>
|
|
14
|
+
</tr>
|
|
15
|
+
<tr>
|
|
16
|
+
<td style="padding: 5px; border: 1px solid blue">
|
|
17
|
+
<center>
|
|
18
|
+
<table>
|
|
19
|
+
<tr>
|
|
20
|
+
<td><div class="res">None in the mall</div></td>
|
|
21
|
+
</tr>
|
|
22
|
+
</table>
|
|
23
|
+
</center>
|
|
24
|
+
</td>
|
|
25
|
+
</tr>
|
|
26
|
+
<tr>
|
|
27
|
+
<td height="4"></td>
|
|
28
|
+
</tr>
|
|
29
|
+
</table>
|
|
30
|
+
</center>
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
<script type="text/javascript">
|
|
2
|
+
if (window.updateInv) updateInv([]);
|
|
3
|
+
</script>
|
|
4
|
+
<script type="text/javascript">
|
|
5
|
+
if (!window.updateInv && parent.mainpane.updateInv)
|
|
6
|
+
parent.mainpane.updateInv([]);
|
|
7
|
+
</script>
|
|
8
|
+
<center>
|
|
9
|
+
<table width="95%" cellspacing="0" cellpadding="0">
|
|
10
|
+
<tr>
|
|
11
|
+
<td style="color: white" align="center" bgcolor="blue">
|
|
12
|
+
<b>Results:</b>
|
|
13
|
+
</td>
|
|
14
|
+
</tr>
|
|
15
|
+
<tr>
|
|
16
|
+
<td style="padding: 5px; border: 1px solid blue">
|
|
17
|
+
<center>
|
|
18
|
+
<table>
|
|
19
|
+
<tr>
|
|
20
|
+
<td><div class="res">None in the mall</div></td>
|
|
21
|
+
</tr>
|
|
22
|
+
</table>
|
|
23
|
+
</center>
|
|
24
|
+
</td>
|
|
25
|
+
</tr>
|
|
26
|
+
<tr>
|
|
27
|
+
<td height="4"></td>
|
|
28
|
+
</tr>
|
|
29
|
+
</table>
|
|
30
|
+
</center>
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
<script type="text/javascript">
|
|
2
|
+
if (window.updateInv) updateInv([]);
|
|
3
|
+
</script>
|
|
4
|
+
<script type="text/javascript">
|
|
5
|
+
if (!window.updateInv && parent.mainpane.updateInv)
|
|
6
|
+
parent.mainpane.updateInv([]);
|
|
7
|
+
</script>
|
|
8
|
+
<center>
|
|
9
|
+
<table width="95%" cellspacing="0" cellpadding="0">
|
|
10
|
+
<tr>
|
|
11
|
+
<td style="color: white" align="center" bgcolor="blue">
|
|
12
|
+
<b>Results:</b>
|
|
13
|
+
</td>
|
|
14
|
+
</tr>
|
|
15
|
+
<tr>
|
|
16
|
+
<td style="padding: 5px; border: 1px solid blue">
|
|
17
|
+
<center>
|
|
18
|
+
<table>
|
|
19
|
+
<tr>
|
|
20
|
+
<td>
|
|
21
|
+
<div class="res">
|
|
22
|
+
<table border="0">
|
|
23
|
+
<tr>
|
|
24
|
+
<td>unlimited:</td>
|
|
25
|
+
<td><b>502</b> x7</td>
|
|
26
|
+
<td><b>502</b> x5</td>
|
|
27
|
+
<td><b>502</b> x6</td>
|
|
28
|
+
<td><b>502</b> x3</td>
|
|
29
|
+
</tr>
|
|
30
|
+
<tr>
|
|
31
|
+
<td>limited:</td>
|
|
32
|
+
<td><b>3,850</b>(1/day) x6</td>
|
|
33
|
+
<td><b>4,000</b>(1/day) x1</td>
|
|
34
|
+
<td><b>9,989</b>(5/day) x3</td>
|
|
35
|
+
</tr>
|
|
36
|
+
</table>
|
|
37
|
+
</div>
|
|
38
|
+
</td>
|
|
39
|
+
</tr>
|
|
40
|
+
</table>
|
|
41
|
+
</center>
|
|
42
|
+
</td>
|
|
43
|
+
</tr>
|
|
44
|
+
<tr>
|
|
45
|
+
<td height="4"></td>
|
|
46
|
+
</tr>
|
|
47
|
+
</table>
|
|
48
|
+
</center>
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
<script type="text/javascript">
|
|
2
|
+
if (window.updateInv) updateInv([]);
|
|
3
|
+
</script>
|
|
4
|
+
<script type="text/javascript">
|
|
5
|
+
if (!window.updateInv && parent.mainpane.updateInv)
|
|
6
|
+
parent.mainpane.updateInv([]);
|
|
7
|
+
</script>
|
|
8
|
+
<center>
|
|
9
|
+
<table width="95%" cellspacing="0" cellpadding="0">
|
|
10
|
+
<tr>
|
|
11
|
+
<td style="color: white" align="center" bgcolor="blue">
|
|
12
|
+
<b>Results:</b>
|
|
13
|
+
</td>
|
|
14
|
+
</tr>
|
|
15
|
+
<tr>
|
|
16
|
+
<td style="padding: 5px; border: 1px solid blue">
|
|
17
|
+
<center>
|
|
18
|
+
<table>
|
|
19
|
+
<tr>
|
|
20
|
+
<td>
|
|
21
|
+
<div class="res">
|
|
22
|
+
<table border="0">
|
|
23
|
+
<tr>
|
|
24
|
+
<td>unlimited:</td>
|
|
25
|
+
<td><b>300</b> x1</td>
|
|
26
|
+
<td><b>450</b> x1</td>
|
|
27
|
+
<td><b>500</b> x1</td>
|
|
28
|
+
<td><b>650</b> x1</td>
|
|
29
|
+
</tr>
|
|
30
|
+
</table>
|
|
31
|
+
</div>
|
|
32
|
+
</td>
|
|
33
|
+
</tr>
|
|
34
|
+
</table>
|
|
35
|
+
</center>
|
|
36
|
+
</td>
|
|
37
|
+
</tr>
|
|
38
|
+
<tr>
|
|
39
|
+
<td height="4"></td>
|
|
40
|
+
</tr>
|
|
41
|
+
</table>
|
|
42
|
+
</center>
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
<script type="text/javascript">
|
|
2
|
+
if (window.updateInv) updateInv([]);
|
|
3
|
+
</script>
|
|
4
|
+
<script type="text/javascript">
|
|
5
|
+
if (!window.updateInv && parent.mainpane.updateInv)
|
|
6
|
+
parent.mainpane.updateInv([]);
|
|
7
|
+
</script>
|
|
8
|
+
<center>
|
|
9
|
+
<table width="95%" cellspacing="0" cellpadding="0">
|
|
10
|
+
<tr>
|
|
11
|
+
<td style="color: white" align="center" bgcolor="blue">
|
|
12
|
+
<b>Results:</b>
|
|
13
|
+
</td>
|
|
14
|
+
</tr>
|
|
15
|
+
<tr>
|
|
16
|
+
<td style="padding: 5px; border: 1px solid blue">
|
|
17
|
+
<center>
|
|
18
|
+
<table>
|
|
19
|
+
<tr>
|
|
20
|
+
<td>
|
|
21
|
+
<div class="res">
|
|
22
|
+
<table border="0">
|
|
23
|
+
<tr>
|
|
24
|
+
<td>unlimited:</td>
|
|
25
|
+
<td><b>100</b> x1</td>
|
|
26
|
+
<td><b>331</b> x2</td>
|
|
27
|
+
<td><b>331</b> x1</td>
|
|
28
|
+
<td><b>350</b> x1</td>
|
|
29
|
+
</tr>
|
|
30
|
+
</table>
|
|
31
|
+
</div>
|
|
32
|
+
</td>
|
|
33
|
+
</tr>
|
|
34
|
+
</table>
|
|
35
|
+
</center>
|
|
36
|
+
</td>
|
|
37
|
+
</tr>
|
|
38
|
+
<tr>
|
|
39
|
+
<td height="4"></td>
|
|
40
|
+
</tr>
|
|
41
|
+
</table>
|
|
42
|
+
</center>
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
<script type="text/javascript">
|
|
2
|
+
if (window.updateInv) updateInv([]);
|
|
3
|
+
</script>
|
|
4
|
+
<script type="text/javascript">
|
|
5
|
+
if (!window.updateInv && parent.mainpane.updateInv)
|
|
6
|
+
parent.mainpane.updateInv([]);
|
|
7
|
+
</script>
|
|
8
|
+
<center>
|
|
9
|
+
<table width="95%" cellspacing="0" cellpadding="0">
|
|
10
|
+
<tr>
|
|
11
|
+
<td style="color: white" align="center" bgcolor="blue">
|
|
12
|
+
<b>Results:</b>
|
|
13
|
+
</td>
|
|
14
|
+
</tr>
|
|
15
|
+
<tr>
|
|
16
|
+
<td style="padding: 5px; border: 1px solid blue">
|
|
17
|
+
<center>
|
|
18
|
+
<table>
|
|
19
|
+
<tr>
|
|
20
|
+
<td>
|
|
21
|
+
<div class="res">
|
|
22
|
+
<table border="0">
|
|
23
|
+
<tr>
|
|
24
|
+
<td>unlimited:</td>
|
|
25
|
+
<td><b>500</b> x1</td>
|
|
26
|
+
<td><b>500</b> x2</td>
|
|
27
|
+
<td><b>500</b> x3</td>
|
|
28
|
+
<td><b>500</b> x4</td>
|
|
29
|
+
</tr>
|
|
30
|
+
<tr>
|
|
31
|
+
<td>limited:</td>
|
|
32
|
+
<td><b>999</b>(1/day) x3</td>
|
|
33
|
+
<td><b>999,999,999</b>(1/day) x2</td>
|
|
34
|
+
</tr>
|
|
35
|
+
</table>
|
|
36
|
+
</div>
|
|
37
|
+
</td>
|
|
38
|
+
</tr>
|
|
39
|
+
</table>
|
|
40
|
+
</center>
|
|
41
|
+
</td>
|
|
42
|
+
</tr>
|
|
43
|
+
<tr>
|
|
44
|
+
<td height="4"></td>
|
|
45
|
+
</tr>
|
|
46
|
+
</table>
|
|
47
|
+
</center>
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
|
|
2
|
+
<html><head>
|
|
3
|
+
<title>Effect Description</title>
|
|
4
|
+
<script language="Javascript" src="/basics.js"></script><link rel="stylesheet" href="/basics.1.css" /></head>
|
|
5
|
+
<body bgcolor=white text=black link=black alink=black vlink=black>
|
|
6
|
+
<div id="description">
|
|
7
|
+
|
|
8
|
+
<font face=Arial,Helvetica size=2><!-- effectid: 23 --><center><img src="/images/itemimages/mandala.gif" width=30 height=30><p><u><a class="hand" style="cursor: pointer;" onclick='window.open("http://kol.coldfront.net/thekolwiki/index.php/Pasta_Oneness", "_blank");window.close();'><b>Pasta Oneness</b></u></a><p></center><blockquote>You feel at one with the forces of the pastaverse. Your fingers pulse with Magicalness.</blockquote><center><font color=blue><b>Mysticality +2</b></font></center></font></font>
|
|
9
|
+
</div>
|
|
10
|
+
<script type="text/javascript">
|
|
11
|
+
<!--
|
|
12
|
+
var resizetries = 0;
|
|
13
|
+
var fsckinresize;
|
|
14
|
+
setTimeout(fsckinresize = function () {
|
|
15
|
+
var desch = document.getElementById('description').offsetHeight;
|
|
16
|
+
if (desch < 100 && resizetries < 5) {
|
|
17
|
+
setTimeout(fsckinresize, 100);
|
|
18
|
+
resizetries++;
|
|
19
|
+
}
|
|
20
|
+
if (desch < 100) desch = 200;
|
|
21
|
+
//alert('resizing on try #' + resizetries);
|
|
22
|
+
if (self.resizeTo && window.outerHeight) {
|
|
23
|
+
self.resizeTo(400, desch + (window.outerHeight - window.innerHeight) + 50);
|
|
24
|
+
}
|
|
25
|
+
else if (self.resizeTo ) { self.resizeTo(400, desch+130); }
|
|
26
|
+
else { window.innerHeight = newh; }
|
|
27
|
+
}, 100);
|
|
28
|
+
//-->
|
|
29
|
+
</script>
|
|
30
|
+
</body>
|
|
31
|
+
<script src="/onfocus.1.js"></script></html>
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
|
|
2
|
+
<html><head>
|
|
3
|
+
<title>Effect Description</title>
|
|
4
|
+
<script language="Javascript" src="/basics.js"></script><link rel="stylesheet" href="/basics.1.css" /></head>
|
|
5
|
+
<body bgcolor=white text=black link=black alink=black vlink=black>
|
|
6
|
+
<div id="description">
|
|
7
|
+
|
|
8
|
+
<font face=Arial,Helvetica size=2><!-- effectid: 1888 --><center><img src="/images/itemimages/handmirror.gif" width=30 height=30><p><u><a class="hand" style="cursor: pointer;" onclick='window.open("http://kol.coldfront.net/thekolwiki/index.php/The_Visible_Adventurer", "_blank");window.close();'><b>The Visible Adventurer</b></u></a><p></center><blockquote>You turned your skin transparent so that you could see what your skeleton looks like. It turns out it look like Charlie Brown's skeleton. Maybe you should see a doctor.</blockquote><center><font color=blue><b>Makes you look like a skeleton</b></font></center></font></font>
|
|
9
|
+
</div>
|
|
10
|
+
<script type="text/javascript">
|
|
11
|
+
<!--
|
|
12
|
+
var resizetries = 0;
|
|
13
|
+
var fsckinresize;
|
|
14
|
+
setTimeout(fsckinresize = function () {
|
|
15
|
+
var desch = document.getElementById('description').offsetHeight;
|
|
16
|
+
if (desch < 100 && resizetries < 5) {
|
|
17
|
+
setTimeout(fsckinresize, 100);
|
|
18
|
+
resizetries++;
|
|
19
|
+
}
|
|
20
|
+
if (desch < 100) desch = 200;
|
|
21
|
+
//alert('resizing on try #' + resizetries);
|
|
22
|
+
if (self.resizeTo && window.outerHeight) {
|
|
23
|
+
self.resizeTo(400, desch + (window.outerHeight - window.innerHeight) + 50);
|
|
24
|
+
}
|
|
25
|
+
else if (self.resizeTo ) { self.resizeTo(400, desch+130); }
|
|
26
|
+
else { window.innerHeight = newh; }
|
|
27
|
+
}, 100);
|
|
28
|
+
//-->
|
|
29
|
+
</script>
|
|
30
|
+
</body>
|
|
31
|
+
<script src="/onfocus.1.js"></script></html>
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
|
|
2
|
+
"http://www.w3.org/TR/html4/loose.dtd">
|
|
3
|
+
<html><head>
|
|
4
|
+
<title>Item Description</title>
|
|
5
|
+
<link rel="stylesheet" type="text/css" href="/images/styles.20230117d.css">
|
|
6
|
+
<style>
|
|
7
|
+
a.hand {
|
|
8
|
+
cursor: pointer;
|
|
9
|
+
}
|
|
10
|
+
</style>
|
|
11
|
+
<script language=Javascript src="/images/scripts/keybinds.min.2.js"></script>
|
|
12
|
+
<script language=Javascript src="/images/scripts/window.20111231.js"></script>
|
|
13
|
+
<script language="Javascript" src="/basics.js"></script><link rel="stylesheet" href="/basics.1.css" /></head>
|
|
14
|
+
<body>
|
|
15
|
+
|
|
16
|
+
<div id="description" class=small><center><img src="/images/itemimages/alienmeat.gif" height=30 width=30 alt="alienmeat"><br><u><a class="hand" style="cursor: pointer;" onclick='window.open("http://kol.coldfront.net/thekolwiki/index.php/alien_meat", "_blank");window.close();'><b>alien meat</b></u></a></center><p><blockquote>This is a slab of meat from an alien animal.<!-- itemid: 9423 --><br><br>(Cooking ingredient)<br>Type: <b>food <font color=green>(good)</font></b><br>Size: <b>1</b><br>Selling Price: <b>8 Meat.</b><p><center><b><font color=blue>Gives 5 Adventures of a random positive effect</font></b></center></blockquote><script type="text/javascript">
|
|
17
|
+
<!--
|
|
18
|
+
var resizetries = 0;
|
|
19
|
+
var fsckinresize;
|
|
20
|
+
setTimeout(fsckinresize = function () {
|
|
21
|
+
var desch = document.getElementById('description').offsetHeight;
|
|
22
|
+
if (desch < 100 && resizetries < 5) {
|
|
23
|
+
setTimeout(fsckinresize, 100);
|
|
24
|
+
resizetries++;
|
|
25
|
+
}
|
|
26
|
+
if (desch < 100) desch = 200;
|
|
27
|
+
//alert('resizing on try #' + resizetries);
|
|
28
|
+
if (self.resizeTo && window.outerHeight) {
|
|
29
|
+
self.resizeTo(400, desch + (window.outerHeight - window.innerHeight) + 50);
|
|
30
|
+
}
|
|
31
|
+
else if (self.resizeTo ) { self.resizeTo(400, desch+130); }
|
|
32
|
+
else { window.innerHeight = newh; }
|
|
33
|
+
}, 100);
|
|
34
|
+
//-->
|
|
35
|
+
</script>
|
|
36
|
+
</div>
|
|
37
|
+
</body>
|
|
38
|
+
<script src="/onfocus.1.js"></script></html>
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
|
|
2
|
+
"http://www.w3.org/TR/html4/loose.dtd">
|
|
3
|
+
<html><head>
|
|
4
|
+
<title>Item Description</title>
|
|
5
|
+
<link rel="stylesheet" type="text/css" href="/images/styles.20230117d.css">
|
|
6
|
+
<style>
|
|
7
|
+
a.hand {
|
|
8
|
+
cursor: pointer;
|
|
9
|
+
}
|
|
10
|
+
</style>
|
|
11
|
+
<script language=Javascript src="/images/scripts/keybinds.min.2.js"></script>
|
|
12
|
+
<script language=Javascript src="/images/scripts/window.20111231.js"></script>
|
|
13
|
+
<script language=Javascript src="/images/scripts/jquery-1.3.1.min.js"></script>
|
|
14
|
+
<script language="javascript" src="/tcrs.js"></script><link rel="stylesheet" href="/tcrs.css" /><script language="Javascript" src="/basics.js"></script><link rel="stylesheet" href="/basics.1.css" /></head>
|
|
15
|
+
<body>
|
|
16
|
+
|
|
17
|
+
<div id="description" class=small><center><img src="/images/itemimages/syringe.gif" height=30 width=30 alt="syringe"><br><u><a class="hand" style="cursor: pointer;" onclick='window.open("http://kol.coldfront.net/thekolwiki/index.php/hypodermic_needle", "_blank");window.close();'><b>hypodermic needle</b></u></a></center><p><blockquote>This is a tiny syringe that has been custom-made to be operated by a mosquito. How, you might ask? Yup, you certainly might ask. This should make the mosquito's blood collection much more efficient.<!-- itemid: 848 --><br><br>Type: <b>familiar equipment</b><br>Familiar: <b>Mosquito</b></b><br>Selling Price: <b>75 Meat.</b><p><center><b><font color=blue>+5 to Familiar Weight<br></font></b></center></blockquote><script type="text/javascript">
|
|
18
|
+
<!--
|
|
19
|
+
var resizetries = 0;
|
|
20
|
+
var fsckinresize;
|
|
21
|
+
setTimeout(fsckinresize = function () {
|
|
22
|
+
var desch = document.getElementById('description').offsetHeight;
|
|
23
|
+
if (desch < 100 && resizetries < 5) {
|
|
24
|
+
setTimeout(fsckinresize, 100);
|
|
25
|
+
resizetries++;
|
|
26
|
+
}
|
|
27
|
+
if (desch < 100) desch = 200;
|
|
28
|
+
//alert('resizing on try #' + resizetries);
|
|
29
|
+
if (self.resizeTo && window.outerHeight) {
|
|
30
|
+
self.resizeTo(400, desch + (window.outerHeight - window.innerHeight) + 50);
|
|
31
|
+
}
|
|
32
|
+
else if (self.resizeTo ) { self.resizeTo(400, desch+130); }
|
|
33
|
+
else { window.innerHeight = newh; }
|
|
34
|
+
}, 100);
|
|
35
|
+
//-->
|
|
36
|
+
</script>
|
|
37
|
+
</div>
|
|
38
|
+
</body>
|
|
39
|
+
<script src="/onfocus.1.js"></script></html>
|