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