summaryrefslogblamecommitdiff
path: root/npc/items/alcohol.txt
blob: d1a519d00d85ec40e9f5afdb3af7a5f8f27a28a7 (plain) (tree)
1
2
3
4
5
6
7
8
9
10









                                                         
                                                                                                


























                                                                           

                              

                                                     
                                         




                                                                                                              
                                   





                                                                     
 

                                                             
                                                      
                                 




                                                    

                                              
 
                                    

                                                             

                                    




                                                    
                              
                                             
                            

                                       

                                     


          
// TMW-2 Script.
// Author:
//    Crush
//    Jesusalva
// Description:
//    Alcohol effects
//    TODO: Retroactive, weakens every hour...
//
// Variables:
//    @taste    Alcohol taste (0~100) - influences exp up
//    @Alcohol   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:
    debugmes "I'm being run!";
    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!
        end;
    }
    debugmes "It's safe to drink!";
    // 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);

    debugmes "You should get exp!";
    // Put the delay in ms. Each Alcohol point is 10 minutes.
    .@delay = remaining_bonus(SC_OVERLAPEXPUP, false);
    .@delay += @Alcohol*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;

    debugmes "You attack too fast!";
    // Same goes for attack speed debuff
    // Except delay does not stack, and malus is recalculated
    .@delay = @Alcohol*600*1000;
    .@val1 = ALC_THRESHOLD+@Alcohol;

    // Reset Attack Speed Debuff
    sc_end SC_ATTHASTE_INFINITY;
    sc_start SC_ATTHASTE_INFINITY, .@delay, -.@val1;

    debugmes "Stop drinking!";
    // Recalculate Alcohol Threshold and time
    ALC_THRESHOLD+=@Alcohol;
    if (ALC_DELAYTIME < gettimetick(2))
        ALC_DELAYTIME=gettimetick(2);
    ALC_DELAYTIME+=@Alcohol*600*1000;
    debugmes "I'm done!";
    close;
}