1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
|
// TMW2/LOF Script.
// Author:
// Jesusalva
// Description:
// Katze the Cat, guardian of Katzei Village.
// Variables:
// $KATZE_DONATION = int
// CaveQuest_Katze ( state, today_contribution, date )
010-4-1,44,30,0 script Katze NPC_KATZE,{
mesn;
if (isequipped(CatEars))
mesq l("Meow, fellow cat!");
else
mesq l("Meow.");
next;
if (getq(LoFQuest_Inspector) == 5) goto L_InspectorQuest;
if (getq(LoFQuest_Inspector) >= 6 && getq(CaveQuest_Katze) == 1) goto L_CatEars;
mesn strcharinfo(0);
mesq l("What is a cat doing in the middle of the desert?");
next;
mesn;
mesq l("Why, I'm waiting for donors, of course. Don't you see the pot there?");
next;
mesn strcharinfo(0);
mesq l("Do I gain anything by donating?");
next;
mesn;
mesq l("My gratitude and the knowledge you helped to make this cave a nicer place to live?");
compareandsetq CaveQuest_Katze, 0, 1;
npctalk3 l("Did you knew that %s's generosity is legendary?", rand_sponsor());
close;
L_InspectorQuest:
mesc l("You ask Katze about the recent cheese robberies in Dimond's Cove.");
next;
mesn;
mesq l("It was... an itch I couldn't scratch. But meow! I paid the fair price for the cheese I took.");
next;
mesn;
mesq l("I know %s are rare and expensive. They should have more than covered the costs for what I took.", getitemlink(GoldenApple));
next;
mesc l("You spend some time explaining to Katze about how trade works.");
next;
mesn;
mesq l("So you want me to sell the Apple to some vendor, and then purchase the Cheese with the money? Sure, just tell me the name of a NPC which buys %s and sells %s. But I warn you, they must be close, in either Tulimshar or Halinarzo.", getitemlink(GoldenApple), getitemlink(Cheese));
next;
input .@ans$;
// I won't even bother blackboxing this one
if (!riddlevalidation(.@ans$, "Juliet", l("Juliet"))) {
mesn;
mesq l("Don't be ridiculous and stop wasting my time.");
mesc l("%s scrathes you! -%s HP.", .name$, fnum(Hp/5));
percentheal -20, 0;
close;
}
mesn;
mesq l("Nard's nurse and shipkeeper? Yeah, I can do that, I can get a copy of his ship schedule rather easily.");
next;
inventoryplace GoldenApple, 1;
mesn;
mesq l("Well %s, you're not as incompentent as you look! Meow, here, you can have this %s, as a token of my appreciation.", strcharinfo(0), getitemlink(GoldenApple));
next;
mesn;
mesq l("Let's be friends from now on, meow!");
setq LoFQuest_Inspector, 6, 0;
getitem GoldenApple, 1;
getexp 60000, 600;
close;
L_CatEars:
mesn;
mesq l("Actually, while we're friends, you don't look like a cat, which is weird. I guess we should fix that.");
next;
mesn;
mesq l("Please bring me the following, and I'll make a fine cat out of you!");
next;
mesc b(l(".:: Katze's Request ::.")), 3;
msObjective(countitem(WhiteFur) >= 250, l("* %d %s", 250, getitemlink(WhiteFur)));
msObjective(countitem(Milk) >= 200, l("* %d %s", 200, getitemlink(Milk)));
msObjective(countitem(DuckFeather) >= 150, l("* %d %s", 150, getitemlink(DuckFeather)));
msObjective(countitem(RawLog) >= 50, l("* %d %s", 50, getitemlink(RawLog)));
msObjective(countitem(BlackDye) >= 1, l("* %d %s", 1, getitemlink(BlackDye)));
if (countitem(WhiteFur) < 250 ||
countitem(Milk) < 200 ||
countitem(DuckFeather) < 150 ||
countitem(RawLog) < 50 ||
countitem(BlackDye) < 1)
close;
mesc l("Deliver the items to Katze?"), 1;
if (askyesno() == ASK_NO) { closeclientdialog; close; }
inventoryplace CatEars, 1;
delitem WhiteFur, 250;
delitem Milk, 200;
delitem DuckFeather, 150;
delitem RawLog, 50;
delitem BlackDye, 1;
getitem CatEars, 1;
getexp 92000, 8000;
setq1 CaveQuest_Katze, 2;
mesn;
mesq l("Purrfect! Now wear this %s and... Vóila! You look like me, meow!", getitemlink(CatEars));
next;
mesn;
mesq l("Come visit me whenever, meow!");
// TODO: Unlock access to Katze's Village
close;
// At some times, she goes to rob the bank... No, just kidding, but she has errands
OnClock1945:
.here = false;
disablenpc .name$;
end;
OnClock2015:
enablenpc .name$;
.here = true;
end;
OnInit:
.distance=5;
.sex = G_OTHER;
.here = true;
OnLoadMobilia:
if ($KATZE_DONATION >= 5000)
setcells "010-4-1", 44, 31, 44, 31, 2, "Katze_Books1";
if ($KATZE_DONATION >= 10000)
setcells "010-4-1", 43, 29, 43, 29, 2, "Katze_Hat1";
if ($KATZE_DONATION >= 25000)
setcells "010-4-1", 44, 22, 44, 22, 2, "Katze_Paint1";
if ($KATZE_DONATION >= 60000)
setcells "010-4-1", 46, 29, 46, 29, 2, "Katze_Flower1";
if ($KATZE_DONATION >= 120000)
setcells "010-4-1", 40, 33, 40, 33, 2, "Katze_Paint2";
if ($KATZE_DONATION >= 250000)
setcells "010-4-1", 40, 28, 40, 28, 2, "Katze_Books2";
if ($KATZE_DONATION >= 500000)
setcells "010-4-1", 46, 35, 46, 35, 2, "Katze_Flower2";
if ($KATZE_DONATION >= 1000000)
setcells "010-4-1", 46, 22, 46, 22, 2, "Katze_Paint3";
if ($KATZE_DONATION >= 1500000)
setcells "010-4-1", 41, 22, 41, 22, 2, "Katze_Cooks1";
if ($KATZE_DONATION >= 2500000)
setcells "010-4-1", 47, 30, 47, 30, 2, "Katze_Cooks2";
if ($KATZE_DONATION >= 3000000)
setcells "010-4-1", 42, 29, 42, 29, 2, "Katze_Cryst1";
if ($KATZE_DONATION >= 3500000)
setcells "010-4-1", 45, 31, 45, 31, 2, "Katze_Candle";
if ($KATZE_DONATION >= 4000000)
setcells "010-4-1", 46, 33, 46, 33, 2, "Katze_Paint4";
if ($KATZE_DONATION >= 4500000)
setcells "010-4-1", 47, 29, 47, 29, 2, "Katze_Desks1";
if ($KATZE_DONATION >= 5000000)
setcells "010-4-1", 48, 29, 48, 29, 2, "Katze_Cooks3";
if ($KATZE_DONATION >= 6000000)
setcells "010-4-1", 41, 28, 41, 28, 2, "Katze_Books3";
if ($KATZE_DONATION >= 7000000)
setcells "010-4-1", 45, 22, 45, 22, 2, "Katze_Paint5";
if ($KATZE_DONATION >= 8000000)
setcells "010-4-1", 37, 28, 37, 28, 2, "Katze_Flower3";
if ($KATZE_DONATION >= 9000000)
setcells "010-4-1", 43, 22, 43, 22, 2, "Katze_Cooks4";
if ($KATZE_DONATION >= 1000000)
setcells "010-4-1", 39, 33, 39, 33, 2, "Katze_Clock1";
if ($KATZE_DONATION >= 1250000)
setcells "010-4-1", 53, 24, 53, 24, 2, "Katze_Notes1";
if ($KATZE_DONATION >= 1500000)
setcells "010-4-1", 56, 25, 56, 25, 2, "Katze_Gifts1";
if ($KATZE_DONATION >= 1750000)
setcells "010-4-1", 40, 22, 40, 22, 2, "Katze_Cooks5";
if ($KATZE_DONATION >= 2000000)
setcells "010-4-1", 53, 26, 53, 26, 2, "Katze_Anvil1";
if ($KATZE_DONATION >= 2500000)
setcells "010-4-1", 35, 20, 35, 21, 2, "Katze_Statue1";
end;
}
010-4-1,46,30,0 script Pot#Katze NPC_NO_SPRITE,{
.@q = getq(CaveQuest_Katze);
.@q3 = getq3(CaveQuest_Katze);
// Quest not started
if (!.@q) end;
// Katze outside the cave
if (!getvariableofnpc(.here, "Katze")) {
npctalk3 l("Katze is not here currently. I'll need to wait she to come back.");
end;
}
// Daily limit reset
if (.@q3 != gettimeparam(GETTIME_DAYOFMONTH))
setq CaveQuest_Katze, .@q, 0, gettimeparam(GETTIME_DAYOFMONTH);
// Main loop
mes "##B" + l("Drag and drop an item from your inventory.") + "##b";
.@id = requestitem();
// Check for donation restrictions
if (.@id < 1) {
mesc l("You give up.");
close;
} else if (checkbound(.@id) && .@id != LeatherSuitcase) {
mesc l("You cannot donate bound items!");
close;
} else if ((getiteminfo(.@id, ITEMINFO_TRADE) & ITR_NOSELLTONPC)) {
mesc l("This item cannot be given to NPCs!");
close;
} else if (!getiteminfo(.@id, ITEMINFO_MAXCHANCE) && .@id != LeatherSuitcase) {
mesc l("This item is too precious, you cannot part with it!");
close;
} else if (getiteminfo(.@id, ITEMINFO_TYPE) != IT_HEALING &&
getiteminfo(.@id, ITEMINFO_TYPE) != IT_USABLE &&
getiteminfo(.@id, ITEMINFO_TYPE) != IT_ETC) {
mesc l("You can only donate generic items to Katze.");
close;
}
// Limit checks
.@q2 = getq2(CaveQuest_Katze);
.@gp = getiteminfo(.@id, ITEMINFO_SELLPRICE);
if ((.@q2 + .@gp) > .limit) {
mesc l("You cannot donate this item, as Katze is no beggar and she'll not allow you to impoverish yourself for her sake.");
mesc l("Daily limit: %s / %s GP", fnum(.@q2 + .@gp), fnum(.limit)), 1;
close;
}
// Everything went fine, so confirm & complete the donation
mesc l("Are you sure you want to donate a %s to Katze?", getitemlink(.@id)), 1;
if (askyesno() == ASK_YES) {
delitem .@id, 1;
setq2 CaveQuest_Katze, .@q2 + .@gp;
$KATZE_DONATION += .@gp;
npctalk l("Why %s, thank you!", strcharinfo(0)), "Katze";
if ($@GM_OVERRIDE)
debugmes sprintf("Katze Donations: %s", fnum($KATZE_DONATION));
donpcevent "Katze::OnLoadMobilia";
// Handle quest items
if (.@id == LeatherSuitcase) {
$KATZE_DONATION += rand2(500); // The suitcase contents
compareandsetq LoFQuest_Inspector, 4, 5;
getexp 5000, 100;
dispbottom l("Now I should be able to ask Katze about the cheese robbery in the Land of Fire.");
}
}
closeclientdialog;
close;
OnInit:
.distance=2;
.sex = G_OTHER;
.limit = 10000; // Max worth you can donate at once
end;
}
|