// 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, EmptyBottle, 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*3;
} else {
mesc l("The sake wasn't ready yet and you lost it..."), 1;
}
getitem EmptyBottle, DWARVEN_AMMO;
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;
}