// 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; }