Last active
February 9, 2020 01:50
-
-
Save Ricardonacif/dcd13f79293eb075f5cb19401ff2782c to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// ------------------------------------------------------- | |
// 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