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