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
|
// TMW2 Script.
// Author:
// Saulc
// Jesusalva
// Dye Quest added by:
// Povo
// Description:
// Will be with dye functions for a while... May be wrong. Only Card2 is available per hercules rules
// Original code from evol
// Authors:
// Reid
003-6,33,30,0 script Cyndala NPC_FEMALE_ARGAES,{
function explain_dyes;
function item_is_bleachable;
function remove_cards_from_item;
function give_yellow_dye;
function deny_yellow_dye;
function craft_yellow_dye;
mesn;
mesq l("Hello, darling!");
mes "";
do
{
.@q = getq(TulimsharQuest_Cyndala);
select
l("Excuse me."),
l("Could you bleach my equipment?"),
l("What can you say about dyes?"),
rif(.@q > 0, l("I would like to order some dye.")),
rif(is_staff(), "Technical problem, gimme info about an item.");
switch (@menu) {
case 2:
remove_cards_from_item();
break;
case 3:
explain_dyes();
break;
case 4:
craft_yellow_dye();
break;
case 5:
.@item = requestitemindex();
mes "Item index selected: " + str(.@item);
mes "slots=" + str(MAX_SLOTS);
for (.@i = 0; .@i < MAX_SLOTS; .@i++)
{
mes "slot " + str(.@i) + " = " + str(getcardbyindex(.@item, .@i));
}
mes str(@inventorylist_card1[.@item]);
mes str(YellowDye);
mes "item options:";
for (.@i = 0; .@i < 5; .@i ++)
{
mes sprintf("%d: Option: %d, Value: %d", .@i, getitemoptionidbyindex(.@item, .@i),
getitemoptionvaluebyindex(.@item, .@i));
}
mes "Note named items (Card1 254 and 255) have Card3 and Card4 reserved";
break;
default:
mes "";
mesn;
mesq l("I wish you a good time in town.");
next;
break;
}
} while (@menu != 1);
closeclientdialog;
goodbye;
close;
/////////////////////////////////////////////////////////////////////////////////
function explain_dyes {
.@q = getq(TulimsharQuest_Cyndala);
speech S_FIRST_BLANK_LINE | S_LAST_NEXT,
l("Dyes are a special kind of ink to make certain objects fancier."),
l("Once you have the appropriate colorant for the item, ##bdrag the colorant##b to the material."),
l("Example:"),
l("Drag and drop a %s in a %s, and you will obtain a %s.", getitemlink(YellowDye),
getitemlink(ArtisTankTop), getitemlink(ArtisTankTop, YellowDye)),
l("Dye cards are not the only thing which exist, but they are the coolest!");
if (.@q < 1) {
speech S_FIRST_BLANK_LINE | S_LAST_NEXT,
l("By the way, did you know that the official color of Tulimshar is yellow?"),
l("In fact, the Tulimshar Noble District is world-renowned for crafting high-quality yellow garments!"),
l("Normally I would offer to make you some %s, but economic problems in Halinarzo have caused a shortage of supplies...",
getitemlink(YellowDye));
if (BaseLevel > 20 &&
.@q < 1) {
speech S_FIRST_BLANK_LINE | S_LAST_NEXT,
l("Wait a minute! I have an idea!"),
l("You look like you have enough experience to know your way around town..."),
l("If you can manage to gather the supplies I need, I can surely craft some %s for you!",
getitemlink(YellowDye)),
l("Of course, I do charge a nominal fee of for the service. %s GP to be exact.", fnum(50)),
l("In addition to my fee, I will also need the following items:");
mesq l("%d/%d %s", countitem(BottleOfSewerWater), 1, getitemlink(BottleOfSewerWater));
mesq l("%d/%d %s", countitem(PiouFeathers), 50, getitemlink(PiouFeathers));
next;
mesq l("I am sure that an adventurer like you can gather everything in no time at all!");
setq TulimsharQuest_Cyndala, 1;
}
}
}
function item_is_bleachable
{
.@item_index = getarg(0);
if (.@item_index < 0)
return false;
// Collect the item ID
delinventorylist();
getinventorylist();
.@x=@inventorylist_id[.@id];
// Debug info
if (is_staff())
mesf "Item Index %d (%s) - ID %d", .@item_index,
getitemlink(@inventorylist_id[.@item_index]),
@inventorylist_id[.@item_index];
// No duplicates
if (countitem(.@x) > 1) {
mesc l("You are carrying duplicates of the same item. Sorry, but I have no idea which one you want to tweak."), 1;
return false;
}
// Must have a card, d'oh
if (@inventorylist_card1[.@item_index] == 0)
return false;
return true;
}
function remove_cards_from_item
{
.@item_index = -1;
speech S_FIRST_BLANK_LINE,
l("What item would you like to bleach?");
narrator S_FIRST_BLANK_LINE | S_LAST_NEXT,
l("You can drag and drop an item to the NPC window or select an item through your inventory.");
.@item_index = requestitemindex();
if (!item_is_bleachable(.@item_index)) {
speech S_LAST_NEXT,
l("You should know this, an item like this can't be bleached.");
return;
}
.@item_id = @inventorylist_id[.@item_index];
speech S_LAST_NEXT,
l("Your mind is set? You will probably lose all the dyes and/or cards during on the item during this process. You're bleaching a %s by the way.", getitemlink(.@item_id));
switch (askyesno()) {
case ASK_YES:
speech S_FIRST_BLANK_LINE | S_LAST_NEXT,
l("Ok, let me see..."),
l("...");
// FIXME: Register this on picklog
if (rand2(1, 800) > readparam2(bLuk)) {
failedremovecardsindex .@item_index, 1;
logmes("Deleted Cards from item: "+.@item_id);
} else {
successremovecardsindex(.@item_index);
logmes("Removed Cards from item: "+.@item_id);
}
// First option slot of weapon: Raises STR in 5
// setequipoption(EQI_HAND_R, 1, VAR_STRAMOUNT, 5);
// This is an option :3
speech S_LAST_NEXT | S_NO_NPC_NAME,
l("..."),
l("Here it is, clean like a whistle!");
break;
default:
speech S_FIRST_BLANK_LINE | S_LAST_NEXT,
l("Is it truly a hard choice to make?");
break;
}
return;
}
function give_yellow_dye {
.@q = getq(TulimsharQuest_Cyndala);
inventoryplace YellowDye, 1, EmptyBottle, 1;
Zeny = Zeny - 50;
delitem BottleOfSewerWater, 1;
delitem PiouFeathers, 50;
mesn;
mesq l("Here you are, you won't find a dye more yellow than this!");
getitem(YellowDye, 1);
getitem(EmptyBottle, 1);
if (.@q == 1) {
setq TulimsharQuest_Cyndala, 2;
getexp 80, 0;
}
return;
}
function deny_yellow_dye {
mesn;
mesc l("I am sorry, but it does not look like you have everything. You will need to bring:");
next;
mesc l("%d/%d %s", countitem(BottleOfSewerWater), 1, getitemlink(BottleOfSewerWater));
mesc l("%d/%d %s", countitem(PiouFeathers), 50, getitemlink(PiouFeathers));
mesc l("%s/%s GP", fnum(Zeny), fnum(50));
next;
return;
}
function craft_yellow_dye {
if (countitem(BottleOfSewerWater) < 1 ||
countitem(PiouFeathers) < 50 ||
Zeny < 50)
deny_yellow_dye();
else
give_yellow_dye();
return;
}
OnInit:
.@npcId = getnpcid(.name$);
setunitdata(.@npcId, UDT_HEADTOP, NPCEyesD);
setunitdata(.@npcId, UDT_HEADMIDDLE, ValentineDress); //TODO
setunitdata(.@npcId, UDT_HEADBOTTOM, CottonTrousers);
setunitdata(.@npcId, UDT_WEAPON, DeepBlackBoots); // Boots
setunitdata(.@npcId, UDT_HAIRSTYLE, 16);
setunitdata(.@npcId, UDT_HAIRCOLOR, 11);
.sex = G_FEMALE;
.distance = 5;
end;
}
|