// 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,{
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 clothes?"),
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;
getinventorylist();
if (is_staff())
mesf "Item Index %d (%s) - ID %d", .@item_index,
getitemlink(@inventorylist_id[.@item_index]),
@inventorylist_id[.@item_index];
if (@inventorylist_card1[.@item_index] != 0) {
if ((@inventorylist_card1[.@item_index] > YellowDye) ||
(@inventorylist_card1[.@item_index] < CrimsonDye)) {
return false;
}
.@is_bleachable = true;
}
return .@is_bleachable;
}
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;
}
speech S_LAST_NEXT,
l("Your mind is set? You will probably lose the color dye during this process.");
switch (askyesno()) {
case 1:
speech S_FIRST_BLANK_LINE | S_LAST_NEXT,
l("Ok, let me see..."),
l("...");
if (rand2(1, 1000) > readparam2(bLuk))
failedremovecardsindex .@item_index, 1;
else
successremovecardsindex(.@item_index);
// 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;
case 2:
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, NPCEyes);
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;
}