summaryrefslogblamecommitdiff
path: root/npc/commands/rate-management.txt
blob: d2ef19ec76513d51627e8fb8f70538a5a2e0a766 (plain) (tree)
1
2
3
4
5
6
7
8
9








                                                           
                                                                
                                                                                 
                                        
                        









                                                                          
                
            




                                                                                              

                         




                                                   
                                                      
                                    
                                        
                        

                                       
                                                                                                                                                                       
 

                                                                                                               
                                                                                         
 

                                                     
                               
                                                  
                                                                                           
                




                                                                                                        
 

            









                                                                       
                                 






                    
                         





                                                                   
                                                                          











                                                                    





















                                                                                                               
                        









                                                                          
                  























                                                                                              
                        

                                       
                                                                                                                                                                  


                                                                                                                




































































                                                                                                         
-	script	@exprate	32767,{
    end;

    function rateCleanUp {
        stopnpctimer;
        .hours = 0;
        .max_hours = 0;
        .current_rate = .original_exp_rate;
        setbattleflag("base_exp_rate", .original_exp_rate);
        //setbattleflag("quest_exp_rate", .original_quest_rate);
        charcommand("@reloadmobdb"); // this is on purpose (callable without RID)
        //charcommand("@reloadquestdb");
        SeasonReload(1);
    }

    function remainingTime {
        .@total_seconds = (3600 * .max_hours);
        .@seconds_elapsed = (3600 * .hours) + (getnpctimer(0) / 1000);
        .@seconds_remaining = max(1, .@total_seconds - .@seconds_elapsed);
        return FuzzyTime(time_from_seconds(.@seconds_remaining), 2, 2);
    }

OnCall:
   if (!is_gm())
        end;

    .@special$ = strip(.@atcmd_parameters$[0]); // special value
    .@new_rate = min(atoi(.@special$), 1000); // or just a regular integer
    .@hours = min(0x7FFFFFFE, max(1, atoi(strip(.@atcmd_parameters$[1])))); // number of hours

    if (.@new_rate > 0) {

        // set new exp rate
        .hours = 0;
        .max_hours = .@hours;
        .current_rate = .@new_rate;
        setbattleflag("base_exp_rate", .@new_rate);
        //setbattleflag("quest_exp_rate", .@new_rate);
        charcommand("@reloadmobdb");
        //charcommand("@reloadquestdb");
        SeasonReload(1);
        initnpctimer; // start counting

        announce strcharinfo(0)+" increased experience rate to "+str(.@new_rate)+"%. It will only last "+str(FuzzyTime(time_from_hours(.max_hours), 2, 2))+"!", bc_all;

        //dispbottom l("You successfully set the exp rate to @@%. It will reset to @@% (default value) in @@.",
        //            .@new_rate, .original_exp_rate, FuzzyTime(time_from_hours(.max_hours), 2, 2));
        dispbottom l("You can also manually stop it at any time with: @exprate default");

    } else if (.@new_rate == 0 && .@special$ == "") {

        // get current exp rate
        if (.current_rate == .original_exp_rate) {
            dispbottom l("Current exp rate is set to @@% (default value).", .current_rate);
        } else {
            dispbottom l("Current exp rate is set to @@%, and will reset to @@% (default value) in @@.",
                        .current_rate, .original_exp_rate, remainingTime());

            dispbottom l("If you meant to reset the exp rate to its default value: @exprate default");
        }

    } else {

        // reset
        rateCleanUp;
        dispbottom l("Exp rate has been reset to @@% (default value).",
                    .original_exp_rate);
    }

    end;

OnTimer3600000:
    // runs every hour
    if (++.hours == .max_hours) {
        rateCleanUp;
        end;
    }
    initnpctimer;
    end;

OnPCLoginEvent:
    if (.max_hours > 0) {
        dispbottom col(l("Exp rate is set to @@% for the next @@.",
                        .current_rate, remainingTime()), 6);
    }
    end;

OnInit:
    bindatcmd "exprate", "@exprate::OnCall", 80, 80, 1; // change exp rate

    // WARNING: using @reloadscript will change the "original" value
    .original_exp_rate = getbattleflag("base_exp_rate");
    .original_quest_rate = getbattleflag("quest_exp_rate");
    .current_rate = .original_exp_rate;

    // XXX: maybe in the future:
    //.original_item_rate = getbattleflag("item_rate_common");
    //.original_job_rate = getbattleflag("base_job_rate");
    //.original_pk_mode = getbattleflag("pk_mode");
    //.original_death_penalty = getbattleflag("death_penalty_type");
}


/////////////////////////////////////////////////////////////////////////////////
-	script	@droprate	32767,{
    end;

    function rateCleanUp {
        stopnpctimer;
        .hours = 0;
        .max_hours = 0;
        .current_rate = .original_exp_rate;
        setbattleflag("item_rate_common", .org_dcn);
        setbattleflag("item_rate_common_boss", .org_dcb);
        setbattleflag("item_rate_heal", .org_dhn);
        setbattleflag("item_rate_heal_boss", .org_dhb);
        setbattleflag("item_rate_use", .org_dun);
        setbattleflag("item_rate_use_boss", .org_dub);
        setbattleflag("item_rate_equip", .org_den);
        setbattleflag("item_rate_equip_boss", .org_deb);
        setbattleflag("item_rate_card", .org_dxn);
        setbattleflag("item_rate_card_boss", .org_dxb);
        charcommand("@reloadmobdb"); // this is on purpose (callable without RID) - no idea what is the purpose
        SeasonReload(1);
    }

    function remainingTime {
        .@total_seconds = (3600 * .max_hours);
        .@seconds_elapsed = (3600 * .hours) + (getnpctimer(0) / 1000);
        .@seconds_remaining = max(1, .@total_seconds - .@seconds_elapsed);
        return FuzzyTime(time_from_seconds(.@seconds_remaining), 2, 2);
    }

OnCall:
   if (!is_gm()) {
        end;
    }

    .@special$ = strip(.@atcmd_parameters$[0]); // special value
    .@new_rate = min(atoi(.@special$), 1000); // or just a regular integer
    .@hours = min(0x7FFFFFFE, max(1, atoi(strip(.@atcmd_parameters$[1])))); // number of hours

    if (.@new_rate > 0)
    {
        // set new exp rate
        .hours = 0;
        .max_hours = .@hours;
        .current_rate = .@new_rate;
        setbattleflag("item_rate_common", .@new_rate);
        setbattleflag("item_rate_common_boss", .@new_rate);
        setbattleflag("item_rate_heal", .@new_rate);
        setbattleflag("item_rate_heal_boss", .@new_rate);
        setbattleflag("item_rate_use", .@new_rate);
        setbattleflag("item_rate_use_boss", .@new_rate);
        setbattleflag("item_rate_equip", .@new_rate);
        setbattleflag("item_rate_equip_boss", .@new_rate);
        setbattleflag("item_rate_card", .@new_rate);
        setbattleflag("item_rate_card_boss", .@new_rate);
        charcommand("@reloadmobdb");
        SeasonReload(1);
        initnpctimer; // start counting

        announce strcharinfo(0)+" increased drop rates to "+str(.@new_rate)+"%. It will only last "+str(FuzzyTime(time_from_hours(.max_hours), 2, 2))+"!", bc_all;

        //dispbottom l("You successfully set the drop rate to @@%. It will reset to @@% (default value) in @@.",
        //            .@new_rate, .org_dcn, FuzzyTime(time_from_hours(.max_hours), 2, 2));
        dispbottom l("You can also manually stop it at any time with: @droprate default");
    }

    else if (.@new_rate == 0 && .@special$ == "")
    {
        // get current exp rate
        if (.current_rate == .org_dcn)
        {
            dispbottom l("Current drop rate is set to @@% (default value).", .current_rate);
        }

        else
        {
            dispbottom l("Current drop rate is set to @@%, and will reset to @@% (default value) in @@.",
                        .current_rate, .org_dcn, remainingTime());

            dispbottom l("If you meant to reset the drop rate to its default value: @droprate default");
        }
    }

    else
    {
        // reset
        rateCleanUp;
        dispbottom l("Drop rate has been reset to @@% (default value).",
                    .org_dcn);
    }

    end;

OnTimer3600000:
    // runs every hour
    if (++.hours == .max_hours)
    {
        rateCleanUp;
        end;
    }
    initnpctimer;
    end;

OnPCLoginEvent:
    if (.max_hours > 0)
    {
        dispbottom col(l("Drop rate is set to @@% for the next @@.",
                        .current_rate, remainingTime()), 6);
    }
    end;

OnInit:
    bindatcmd "droprate", "@droprate::OnCall", 80, 80, 1; // change drop rate

    // WARNING: using @reloadscript will change the "original" value, use @reloadbattleconf before!
    .org_dcn = getbattleflag("item_rate_common");
    .org_dcb = getbattleflag("item_rate_common_boss");
    .org_dhn = getbattleflag("item_rate_heal");
    .org_dhb = getbattleflag("item_rate_heal_boss");
    .org_dun = getbattleflag("item_rate_use");
    .org_dub = getbattleflag("item_rate_use_boss");
    .org_den = getbattleflag("item_rate_equip");
    .org_deb = getbattleflag("item_rate_equip_boss");
    .org_dxn = getbattleflag("item_rate_card");
    .org_dxb = getbattleflag("item_rate_card_boss");
    .current_rate = .org_dcn;

    // XXX: maybe in the future:
    //.original_job_rate = getbattleflag("base_job_rate");
    //.original_pk_mode = getbattleflag("pk_mode");
    //.original_death_penalty = getbattleflag("death_penalty_type");
}