summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--npc/015-3/arkim.txt2
-rw-r--r--npc/024-9/_import.txt1
-rw-r--r--npc/024-9/barkeeper.txt8
-rw-r--r--npc/024-9/sake.txt175
4 files changed, 184 insertions, 2 deletions
diff --git a/npc/015-3/arkim.txt b/npc/015-3/arkim.txt
index 21a5ce307..274d9cd9b 100644
--- a/npc/015-3/arkim.txt
+++ b/npc/015-3/arkim.txt
@@ -120,6 +120,8 @@ L_Research:
mesq l("@@ is developing these potions.", "Fate, in Nivalis,"); break; // TODO: Missing NPC
case 6:
mesq l("@@ is developing these potions.", "Frostia Dwarves"); break;
+ case 7:
+ mesq l("@@ is developing these potions.", "Frostia Dwarves"); break;
default:
mesq l("@@ is developing these potions.", "Jesusalva"); // TODO: Lachesis and Atropos
break;
diff --git a/npc/024-9/_import.txt b/npc/024-9/_import.txt
index b0d325f44..b196b3f7b 100644
--- a/npc/024-9/_import.txt
+++ b/npc/024-9/_import.txt
@@ -2,3 +2,4 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
"npc/024-9/_warps.txt",
"npc/024-9/barkeeper.txt",
+"npc/024-9/sake.txt",
diff --git a/npc/024-9/barkeeper.txt b/npc/024-9/barkeeper.txt
index 3bfe518a9..584a70888 100644
--- a/npc/024-9/barkeeper.txt
+++ b/npc/024-9/barkeeper.txt
@@ -14,20 +14,24 @@
OnInit:
tradertype(NST_MARKET);
- sellitem DwarvenSake, 1100, 5;
+ sellitem DwarvenSake, 1100, 1;
sellitem Beer, 300, 20;
if ($ARKIM_ST >= 4000)
sellitem ClothoLiquor, -1, (($ARKIM_ST-4000)/500)+1;
+ if ($ARKIM_ST >= 4700)
+ sellitem LachesisBrew, -1, (($ARKIM_ST-4700)/500)+1;
.sex = G_MALE;
.distance = 5;
end;
OnClock2358:
- restoreshopitem DwarvenSake, 1100, 5;
+ restoreshopitem DwarvenSake, 1100, 1;
restoreshopitem Beer, 300, 20;
if ($ARKIM_ST >= 4000)
restoreshopitem ClothoLiquor, (($ARKIM_ST-4000)/500)+1;
+ if ($ARKIM_ST >= 4700)
+ restoreshopitem LachesisBrew, (($ARKIM_ST-4700)/500)+1;
end;
// Pay your taxes!
diff --git a/npc/024-9/sake.txt b/npc/024-9/sake.txt
new file mode 100644
index 000000000..61e1aabf6
--- /dev/null
+++ b/npc/024-9/sake.txt
@@ -0,0 +1,175 @@
+// 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*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);
+ 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;
+
+}
+
+
+