// 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; } // Taste is affected by users near you. // Each user raises exp bonus in 1%, 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); @taste+=min(@taste, .@bonus); // 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_CASH_PLUSEXP; sc_start SC_CASH_PLUSEXP, .@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; }