// TMW2 Scripts // Author: // Jesusalva // Description: // Dwarven Sake, the most powerful beverage which is not a rare // Variables: // DWARVEN_DATE = When the Sake started being done // DWARVEN_DONE = When the Sake will be ready // DWARVEN_AMMO = How much Sake you're trying to make // Success Rate is based on how much you're trying to do and how long ago that was 024-9,43,30,0 script Sake Barrel NPC_NO_SPRITE,{ goto L_Main; // dwarvensake_chance() // Returns chance (0~10,000) to successfully obtain sake // DWARVEN_DONE/DWARVEN_DATE is taken in account function dwarvensake_chance { .@max=10000; .@base=DWARVEN_DATE;//-(DWARVEN_DONE-DWARVEN_DATE); // .@c = how much time is left until completion // .@d = original amount of time required // .@e = Current time .@c=DWARVEN_DONE-.@base; //-gettimetick(2); .@d=DWARVEN_DATE-.@base; //-DWARVEN_DONE; .@e=gettimetick(2)-.@base; // We must divide everything by 10 to cause imprecision // aka. don't cause overflow bug .@c=.@c/10; .@d=.@d/10; .@e=.@e/10; //debugmes "%d - %d - %d", .@d, .@e, .@c; //debugmes "Start - Now - Finish"; if (.@c == 0) return .@max; if ($@GM_OVERRIDE) debugmes "Ratio: %d/%d = %d", .@e, .@c, (.@e*.@max)/.@c; return min(10000, (.@e*.@max)/.@c); } L_Main: if (!DWARVEN_DATE) { mesn; mesc l("Do you want to make sake?"); mesc l("This barrel is a courtesy from Dimond Cove Inn."); next; select l("Information"), l("Yes"), l("No"); mes ""; switch (@menu) { case 1: mesc l("Produced item:"); mesc l("@@", getitemlink(DwarvenSake)); mes ""; mesc l("Cost per two glass:"); mesc l("* @@/@@ @@", countitem(ArtichokeHerb), 25, getitemlink(ArtichokeHerb)); mesc l("* @@/@@ @@", countitem(MauveHerb), 25, getitemlink(MauveHerb)); mesc l("* @@/@@ @@", countitem(CobaltHerb), 25, getitemlink(CobaltHerb)); mesc l("* @@/@@ @@", countitem(GambogeHerb), 25, getitemlink(GambogeHerb)); mesc l("* @@/@@ @@", countitem(AlizarinHerb), 25, getitemlink(AlizarinHerb)); mesc l("* @@/@@ @@", countitem(ShadowHerb), 20, getitemlink(ShadowHerb)); mesc l("* @@ Water Bottle", 1); next; break; case 2: mesc l("How many batches do you want to produce? (max. 5)"); input .@glass_count; if (.@glass_count < 1 || .@glass_count > 5 || countitem(ArtichokeHerb) < 25*.@glass_count || countitem(MauveHerb) < 25*.@glass_count || countitem(CobaltHerb) < 25*.@glass_count || countitem(GambogeHerb) < 25*.@glass_count || countitem(AlizarinHerb) < 25*.@glass_count || countitem(ShadowHerb) < .@glass_count*20 ) { mesc l("Not enough ingredients or invalid amount."), 1; break; } mesc l("Which water will you use?"); mesc l("The bottom-most the water, the better the bonus."); menuint l("Cancel"), -1, rif(countitem(BottleOfSewerWater) >= .@glass_count, l("Sewer Water")), 0, rif(countitem(BottleOfSeaWater) >= .@glass_count, l("Sea Water")), 3600, rif(countitem(BottleOfTonoriWater) >= .@glass_count, l("Tonori Water")), 11760, rif(countitem(BottleOfWoodlandWater) >= .@glass_count, l("Woodland Water")), 12000, rif(countitem(BottleOfDivineWater) >= .@glass_count, l("Divine Water")), 21600; mes ""; if (@menuret < 0) break; switch (@menuret) { case 0: .@bonus=@menuret; .@water=BottleOfSewerWater; break; case 3600: .@bonus=@menuret; .@water=BottleOfSeaWater; break; case 11760: .@bonus=@menuret; .@water=BottleOfTonoriWater; break; case 12000: .@bonus=@menuret; .@water=BottleOfWoodlandWater; break; case 21600: .@bonus=@menuret; .@water=BottleOfDivineWater; break; default: mesc l("Error, invalid return code, blame Saulc"), 1; mes "==== SCRIPT ABORTED"; close; } // Save data delitem ArtichokeHerb, .@glass_count*25; delitem MauveHerb, .@glass_count*25; delitem CobaltHerb, .@glass_count*25; delitem GambogeHerb, .@glass_count*25; delitem AlizarinHerb, .@glass_count*25; delitem ShadowHerb, .@glass_count*20; delitem .@water, .@glass_count; DWARVEN_AMMO=.@glass_count; DWARVEN_DATE=gettimetick(2); DWARVEN_DONE=gettimetick(2)-.@bonus+.mintime; DWARVEN_DONE+=(.cuptime-(.@bonus/3))*DWARVEN_AMMO; break; case 3: close; break; } goto L_Main; } else { mesn; mesc l("Your request for @@ @@ are being fermented for @@.", DWARVEN_AMMO, getitemlink(DwarvenSake), FuzzyTime(DWARVEN_DATE)); next; inventoryplace DwarvenSake, DWARVEN_AMMO; mesn; mes l("Trying to retrieve it now will have @@ % chance to be successful.", dwarvensake_chance()/100); if (dwarvensake_chance()/100 < 1) close; mes l("Attempt to retrieve it now?"); next; if (askyesno() == ASK_YES) { if (rand(1000,10000) < dwarvensake_chance()) { mesc l("Success!"), 3; getitem DwarvenSake, DWARVEN_AMMO*2; } else { mesc l("The sake wasn't ready yet and you lost it..."), 1; } DWARVEN_DATE=0; DWARVEN_AMMO=0; } } close; OnInit: .sex = G_OTHER; .distance = 4; // Time to make each batch (12 hours) .cuptime=(60*60*12); // Base time to make any amount of cups (72 hours) .mintime=(60*60*72); end; }