Skip to content

Instantly share code, notes, and snippets.

@Ricardonacif
Last active February 9, 2020 01:50
Show Gist options
  • Save Ricardonacif/dcd13f79293eb075f5cb19401ff2782c to your computer and use it in GitHub Desktop.
Save Ricardonacif/dcd13f79293eb075f5cb19401ff2782c to your computer and use it in GitHub Desktop.
// -------------------------------------------------------
// Rest System
// -------------------------------------------------------
// Automatically converts offline seconds to exp, limit of
// how many days offline can be set on OnInit.
// -------------------------------------------------------
// Author: Ricardo Nacif
// Thanks to Cyan Hijirikawa for helping with the base
// -------------------------------------------------------
// Version
// 1.0 - Initial Release
// 1.1 - Added in town only restriction
// 1.2 - Lots of improviments
// 1.3 - Added @mute_rest_exp to enable/disable messages related to rest system
// 1.4 - Fixed calculation when killing monsters
// -------------------------------------------------------
- script RestSystem -1,{
OnPCLogoutEvent:
if (!getmapflag(strcharinfo(3),mf_town)) end;
set lastlogouttime,gettimetick(2);
if(rest_base_experience_buffer < 0){
set rest_base_experience_buffer,0;
}
if(rest_job_experience_buffer < 0){
set rest_job_experience_buffer,0;
}
end;
OnPCLoginEvent:
if (!getmapflag(strcharinfo(3),mf_town)) end;
if(!lastlogouttime) end;
if(rest_base_experience_buffer < 0){
set rest_base_experience_buffer,0;
}
if(rest_job_experience_buffer < 0){
set rest_job_experience_buffer,0;
}
// define how much experience to add to the buffer according to the time the char spent away
set .@difference_from_last_login_base_exp, ((gettimetick(2) - lastlogouttime)/60) * .experience_points_per_minute;
set .@difference_from_last_login_job_exp, .@difference_from_last_login_base_exp / .job_exp_divisor;
// set the base and job rest buffers. Job is half.
set rest_base_experience_buffer, (.@difference_from_last_login_base_exp + rest_base_experience_buffer);
set rest_job_experience_buffer, (.@difference_from_last_login_job_exp + rest_job_experience_buffer);
// limit buffers to .max_offline_exp and .max_offline_exp/2
if(rest_base_experience_buffer > .max_offline_exp) {
set rest_base_experience_buffer, .max_offline_exp;
}
if(rest_job_experience_buffer > (.max_offline_exp / .job_exp_divisor)) {
set rest_job_experience_buffer, (.max_offline_exp / .job_exp_divisor);
}
if (!mute_rest_exp_messages)
{
if (.@difference_from_last_login_base_exp > 0)
{
dispbottom "You just earned "+.@difference_from_last_login_base_exp+"/"+.@difference_from_last_login_job_exp+" Base/Job experience while resting!";
}
dispbottom "You have "+rest_base_experience_buffer+"/"+rest_job_experience_buffer+" Base/Job rest experience points. Go kill some mobs!";
}
end;
OnNPCKillEvent:
// get the monster exp
set .@base_exp_gained, strmobinfo(6,killedrid);
set .@job_exp_gained, strmobinfo(7,killedrid);
set .@new_rest_base_exp_buffer, (rest_base_experience_buffer - .@base_exp_gained);
set .@new_rest_job_exp_buffer, (rest_job_experience_buffer - .@job_exp_gained);
// if there's buffer, apply it to the char experience and reduce from buffer according to monster's given exp
if (.@new_rest_base_exp_buffer >= 0)
{
set BaseExp, BaseExp + .@base_exp_gained;
set rest_base_experience_buffer, .@new_rest_base_exp_buffer;
set .@display_messages, 1;
}
if (.@new_rest_job_exp_buffer >= 0)
{
set JobExp, JobExp + .@job_exp_gained;
set rest_job_experience_buffer, .@new_rest_job_exp_buffer;
set .@display_messages, 1;
}
if (!mute_rest_exp_messages && .@display_messages)
{
dispbottom "You gained additional ["+.@base_exp_gained+"/"+.@job_exp_gained+"] Base/Job Experience";
dispbottom "Your current rest experience buffer is ["+rest_base_experience_buffer+"/"+rest_job_experience_buffer+"] Base/Job points.";
}
end;
OnInit:
bindatcmd "mute_rest_exp",strnpcinfo(3)+"::OnAtcommand";
set .experience_points_per_minute, 40;
set .max_offline_exp, 403200; //one week
set .job_exp_divisor, 2;
end;
OnAtcommand:
if (mute_rest_exp_messages)
{
set mute_rest_exp_messages, 0;
dispbottom "You will now see notifications related to the Rest System.";
} else {
set mute_rest_exp_messages, 1;
dispbottom "You will no longer see notifications related to the Rest System.";
}
end;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment