summaryrefslogtreecommitdiff
path: root/npc/items/alcohol.txt
diff options
context:
space:
mode:
Diffstat (limited to 'npc/items/alcohol.txt')
-rw-r--r--npc/items/alcohol.txt76
1 files changed, 76 insertions, 0 deletions
diff --git a/npc/items/alcohol.txt b/npc/items/alcohol.txt
new file mode 100644
index 000000000..6ecad5571
--- /dev/null
+++ b/npc/items/alcohol.txt
@@ -0,0 +1,76 @@
+// TMW-2 Script.
+// Author:
+// Crush
+// Jesusalva
+// Description:
+// Alcohol effects
+// TODO: Retroactive, weakens every hour...
+//
+// Variables:
+// @taste Alcohol taste (0~100) - influences exp up
+// @Alcool Alcoholic rating (0~100) - influences Attack Speed Malus, Min. Vit and duration
+// ALC_DELAYTIME For how long you are drunk (the delay) - gettimetick(2)
+// ALC_THRESHOLD How drunk you are (the bonus)
+//
+// When drunk, attack speed is lowered but exp gain is increased.
+// Attack Speed Reductor: SC_ATTHASTE_INFINITY
+// Max HP Reductor: SC_INCMHPRATE
+// EXP Increaser: SC_OVERLAPEXPUP
+
+- script alcohol_sc -1,{
+
+ // Stack remaning bonuses if the last one hasn't finished
+ // remaining_bonuses(sc, type)
+ // type 0: delay
+ // type 1: value
+ function remaining_bonus
+ {
+ if (getstatus(getarg(0)))
+ {
+ if (getarg(1))
+ return getstatus(getarg(0), 1);
+ else
+ return getstatus(getarg(0), 4); // Shouldn't it be 5?
+ }
+ return 0;
+ }
+
+OnUse:
+ if (@Alcool <= 0) close;
+ // Do you have enough vitality to hold your beer?
+ .@vit=readparam(bVit);
+ if (@Alcool+ALC_THRESHOLD > .@vit) {
+ dispbottom l("You vomit, you are too drunk for this to have effect anymore.");
+ dispbottom l("Raise vitality to be able to drink even more.");
+ sc_start SC_CONFUSION, 5000, 0, 10000, SCFLAG_NOAVOID; // Warning, forces user to use @resync!
+ end;
+ }
+
+ // Put the delay in ms. Each ALCOOL point is 10 minutes.
+ .@delay = remaining_bonus(SC_OVERLAPEXPUP, false);
+ .@delay += @Alcool*600*1000;
+ // Alcohol EXP Bonus sums to previous exp bonus
+ .@val1 = remaining_bonus(SC_OVERLAPEXPUP, true);
+ .@val1 += @taste;
+
+ // Reset EXP Bonus
+ sc_end SC_OVERLAPEXPUP;
+ sc_start SC_OVERLAPEXPUP, .@delay, .@val1;
+
+ // Same goes for attack speed debuff
+ // Except delay does not stack, and malus is recalculated
+ .@delay = @Alcool*600*1000;
+ .@val1 = ALC_THRESHOLD+@Alcool;
+
+ // Reset Attack Speed Debuff
+ sc_end SC_ATTHASTE_INFINITY;
+ sc_start SC_ATTHASTE_INFINITY, .@delay, -.@val1;
+
+ // Recalculate Alcohol Threshold and time
+ ALC_THRESHOLD+=@Alcool;
+ if (ALC_DELAYTIME < gettimetick(2))
+ ALC_DELAYTIME=gettimetick(2);
+ ALC_DELAYTIME+=@Alcool*600*1000;
+ close;
+}
+