// TMW2 Scripts // Author: // Jesusalva // Description: // Crazyfefe Rum // Variables: // FORTRESS_DATE = When the Rum started being done // FORTRESS_DONE = When the Rum will be ready // FORTRESS_AMMO = How much Rum you're trying to make // Success Rate is based on how much you're trying to do and how long ago that was 025-1,106,56,0 script Rum Barrel NPC_NO_SPRITE,{ goto L_Main; // rumbarrel_chance() // Returns chance (0~10,000) to successfully obtain sake // FORTRESS_DONE/FORTRESS_DATE is taken in account function rumbarrel_chance { .@max=10000; .@base=FORTRESS_DATE;//-(FORTRESS_DONE-FORTRESS_DATE); // .@c = how much time is left until completion // .@d = original amount of time required // .@e = Current time .@c=FORTRESS_DONE-.@base; //-gettimetick(2); .@d=FORTRESS_DATE-.@base; //-FORTRESS_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 (!FORTRESS_DATE) { mesn; mesc l("Do you want to make %s?", l("Rum")); 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(CrazyRum)); mesc l("%s (rare)", getitemlink(WhiskeyAle)); mes ""; mesc l("Cost per %s glass:", l("twelve")); mesc l("* @@/@@ @@", countitem(Beer), 5, getitemlink(Beer)); mesc l("* @@/@@ @@", countitem(ArtichokeHerb), 25, getitemlink(ArtichokeHerb)); mesc l("* @@/@@ @@", countitem(Fungus), 25, getitemlink(Fungus)); mesc l("* @@/@@ @@", countitem(RedApple), 25, getitemlink(RedApple)); mesc l("* @@/@@ @@", countitem(Milk), 25, getitemlink(Milk)); mesc l("* @@/@@ @@", countitem(ShadowHerb), 100, 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(Fungus) < 25*.@glass_count || countitem(RedApple) < 25*.@glass_count || countitem(Beer) < 5*.@glass_count || countitem(Milk) < 25*.@glass_count || countitem(ShadowHerb) < 100*.@glass_count ) { 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 Fungus, .@glass_count*25; delitem RedApple, .@glass_count*25; delitem Beer, .@glass_count*5; delitem Milk, .@glass_count*25; delitem ShadowHerb, .@glass_count*100; delitem .@water, .@glass_count; FORTRESS_AMMO=.@glass_count; FORTRESS_DATE=gettimetick(2); FORTRESS_DONE=gettimetick(2)-.@bonus+.mintime; FORTRESS_DONE+=.cuptime*FORTRESS_AMMO; break; case 3: close; break; } goto L_Main; } else { mesn; mesc l("Your request for @@ @@ are being fermented for @@.", FORTRESS_AMMO, getitemlink(CrazyRum), FuzzyTime(FORTRESS_DATE)); next; inventoryplace CrazyRum, FORTRESS_AMMO; mesn; mes l("Trying to retrieve it now will have @@ % chance to be successful.", rumbarrel_chance()/100); mes l("Attempt to retrieve it now?"); next; if (askyesno() == ASK_YES) { if (rand(1000,10000) < rumbarrel_chance()) { mesc l("Success!"), 3; if (REBIRTH > rand2(20)) getitem WhiskeyAle, FORTRESS_AMMO*.cupammo; else getitem CrazyRum, FORTRESS_AMMO*.cupammo; } else { mesc l("The %s wasn't ready yet and you lost it...", l("Rum")), 1; } FORTRESS_DATE=0; FORTRESS_AMMO=0; } } close; OnInit: .sex = G_OTHER; .distance = 4; // Time to make each batch (48 hours) .cuptime=(60*60*48); // Base time to make any amount of cups (120 hours - five days) .mintime=(60*60*120); // Amount of cups .cupammo=12; end; }