In /conf/battle/player.conf
You may adjust the following to alter the time factor of regen for HP/SP:
// The time interval for HP to restore naturally. (in milliseconds)
natural_healhp_interval: 6000
// The time interval for SP to restore naturally. (in milliseconds)
natural_healsp_interval: 8000
An alternative but not recommended method source-side:
In /src/map/pc.cpp:
Replace:
//Character regen. Flag is used to know which types of regen can take place.
//&1: HP regen
//&2: SP regen
void pc_regen (map_session_data *sd, t_tick diff_tick)
{
int hp = 0, sp = 0;
if (sd->hp_regen.value) {
sd->hp_regen.tick += diff_tick;
while (sd->hp_regen.tick >= sd->hp_regen.rate) {
hp += sd->hp_regen.value;
sd->hp_regen.tick -= sd->hp_regen.rate;
}
}
if (sd->sp_regen.value) {
sd->sp_regen.tick += diff_tick;
while (sd->sp_regen.tick >= sd->sp_regen.rate) {
sp += sd->sp_regen.value;
sd->sp_regen.tick -= sd->sp_regen.rate;
}
}
if (sd->percent_hp_regen.value) {
sd->percent_hp_regen.tick += diff_tick;
while (sd->percent_hp_regen.tick >= sd->percent_hp_regen.rate) {
hp += sd->status.max_hp * sd->percent_hp_regen.value / 100;
sd->percent_hp_regen.tick -= sd->percent_hp_regen.rate;
}
}
if (sd->percent_sp_regen.value) {
sd->percent_sp_regen.tick += diff_tick;
while (sd->percent_sp_regen.tick >= sd->percent_sp_regen.rate) {
sp += sd->status.max_sp * sd->percent_sp_regen.value / 100;
sd->percent_sp_regen.tick -= sd->percent_sp_regen.rate;
}
}
if (hp > 0 || sp > 0)
status_heal(&sd->bl, hp, sp, 0);
}
With:
void pc_regen (map_session_data *sd, t_tick diff_tick)
{
int hp = 0, sp = 0;
int regen_rate_modifier = 1; // Normal rate
// Check if the player is sitting to apply a rate modifier [NimbleStorm]
if (pc_issit(sd)) {
regen_rate_modifier = 2; // Increase tick rate by a factor of 2, adjust as needed [NimbleStorm]
}
if (sd->hp_regen.value) {
sd->hp_regen.tick += diff_tick * regen_rate_modifier; // Apply modified rate
while (sd->hp_regen.tick >= sd->hp_regen.rate) {
hp += sd->hp_regen.value;
sd->hp_regen.tick -= sd->hp_regen.rate;
}
}
if (sd->sp_regen.value) {
sd->sp_regen.tick += diff_tick * regen_rate_modifier; // Apply modified rate
while (sd->sp_regen.tick >= sd->sp_regen.rate) {
sp += sd->sp_regen.value;
sd->sp_regen.tick -= sd->sp_regen.rate;
}
}
if (sd->percent_hp_regen.value) {
sd->percent_hp_regen.tick += diff_tick * regen_rate_modifier; // Apply modified rate
while (sd->percent_hp_regen.tick >= sd->percent_hp_regen.rate) {
hp += sd->status.max_hp * sd->percent_hp_regen.value / 100;
sd->percent_hp_regen.tick -= sd->percent_hp_regen.rate;
}
}
if (sd->percent_sp_regen.value) {
sd->percent_sp_regen.tick += diff_tick * regen_rate_modifier; // Apply modified rate
while (sd->percent_sp_regen.tick >= sd->percent_sp_regen.rate) {
sp += sd->status.max_sp * sd->percent_sp_regen.value / 100;
sd->percent_sp_regen.tick -= sd->percent_sp_regen.rate;
}
}
if (hp > 0 || sp > 0)
status_heal(&sd->bl, hp, sp, 0);
}
Good luck. You can do it.