- 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");
}
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_evtc())
{
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");
initnpctimer; // start counting
announce l("@@ increased experience rate to @@%. It will only last @@!", strcharinfo(2), .@new_rate, FuzzyTime(time_from_hours(.max_hours), 2, 2));
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
}
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_evtc())
{
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");
initnpctimer; // start counting
announce l("@@ increased drop rates to @@%. It will only last @@!", strcharinfo(2), .@new_rate, FuzzyTime(time_from_hours(.max_hours), 2, 2));
//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");
}