diff options
Diffstat (limited to 'npc/items/alcohol.txt')
-rw-r--r-- | npc/items/alcohol.txt | 44 |
1 files changed, 29 insertions, 15 deletions
diff --git a/npc/items/alcohol.txt b/npc/items/alcohol.txt index 81c6a6bd0..ad91da8db 100644 --- a/npc/items/alcohol.txt +++ b/npc/items/alcohol.txt @@ -36,23 +36,30 @@ } OnUse: - if (@Alcohol <= 0) close; - // Do you have enough vitality to hold your beer? - .@vit=readparam(bVit); - if (@Alcohol+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! + if (@Alcohol <= 0 || @taste <= 0) { + Exception("Invalid alcoholic item, deleting without any effect."); end; } + // Do you have enough vitality to hold your beer? + // Skip this check on the first drink + if (ALC_THRESHOLD) { + .@vit=readparam(bVit); + if (@Alcohol+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; + } + } .@deltatime=60*1000; // How long (in ms) each Alcohol point works? (max. 100 points) // Default value is 1 minute per alcohol point - you'll be somber after at most two hours. // Taste is affected by users near you. - // Each user raises exp bonus in 1%, capped to the beverage taste + // Each user raises exp bonus in 1.5%, capped to the beverage taste // If you are with many people, drink a better beverage! ;-) getmapxy(.@m$, .@x, .@y, 0); - .@bonus=getareausers(.@m$, .@x-10, .@y-10, .@x+10, .@y+10)-1; + .@bonus=getareausers(.@m$, .@x-12, .@y-12, .@x+12, .@y+12)-1; + .@bonus=.@bonus*15/10; @taste+=min(@taste, .@bonus); // Alcohol EXP Bonus - ponderate average, so having more VIT doesn't means @@ -73,19 +80,26 @@ OnUse: // Recalculate Alcohol Threshold and time ALC_THRESHOLD+=@Alcohol; - if (ALC_DELAYTIME < gettimetick(2)) + if (ALC_DELAYTIME < gettimetick(2)) { ALC_DELAYTIME=gettimetick(2); + ALC_THRESHOLD=@Alcohol; + } ALC_DELAYTIME+=@Alcohol*.@deltatime; // Debug comment if you need to check stuff //debugmes "%d %d | %d %d | f t ", remaining_bonus(SC_OVERLAPEXPUP, false), remaining_bonus(SC_OVERLAPEXPUP, true), remaining_bonus(SC_ATTHASTE_INFINITY, false), remaining_bonus(SC_ATTHASTE_INFINITY, true); // For debuff I'll use inc_sc_bonus utilities (exp gain = atk speed loss) - @min=-(remaining_bonus(SC_OVERLAPEXPUP, true)*2); - @max=-(remaining_bonus(SC_OVERLAPEXPUP, true)*2); - @type=SC_ATTHASTE_INFINITY; - @delay=@Alcohol*(.@deltatime/1000); - doevent "inc_sc_bonus::OnUse"; + .@delay=@Alcohol*(.@deltatime/1000); + .@min=-(remaining_bonus(SC_OVERLAPEXPUP, true)*2); + .@max=-(remaining_bonus(SC_OVERLAPEXPUP, true)*2); + SC_Bonus(.@delay, SC_ATTHASTE_INFINITY, .@min, .@max); close; } +function script ALCReset { + if (ALC_DELAYTIME < gettimetick(2)) + ALC_THRESHOLD=0; + end; +} + |