H4Mm3r Posted October 8, 2015 Posted October 8, 2015 (edited) Hi all, Thanks to this old post (https://rathena.org/board/topic/67722-sitting-regeneration-and-weight-limit/), I really would like to increase HP/SP sitting regeneration. The last proposition in skill.c can't compile : if( type ) { +sd->regen.rate.hp += 2; // boost 3 times clif_status_load(&sd->bl,SI_SIT,1); } else { +sd->regen.rate.hp = 1; // return to normal clif_status_load(&sd->bl,SI_SIT,0); } Modified one compile but don't change anything : if( type ) { sd->regen.rate.hp += 2; // boost 3 times clif_status_load(&sd->bl,SI_SIT,1); } else { sd->regen.rate.hp = 1; // return to normal clif_status_load(&sd->bl,SI_SIT,0); } Any idea about it ? Thanks by advance. Regards Edited October 15, 2015 by H4Mm3r Quote
H4Mm3r Posted October 15, 2015 Author Posted October 15, 2015 Hi, Your first suggestion is working but affecting sitting and standing regen. In addition, it was affecting the amount of regenrated HP/SP. With those clues, I've found the adapted solution to my goal. Sitting HP/SP recovery is faster, but regenrated amounts are the same. status.c line if(vd && vd->dead_sit == 2) multi += 2; if(regen->state.gc) multi += 1; Change "multi += 2;" by the ratio you want. (ex. 9 is *10 faster) Thanks for all answers !!! Regards Quote
Stolao Posted October 14, 2015 Posted October 14, 2015 What git version arebyiu using, because I just did this the other day and that's not the code to change. I'll post method when I'm home if no one else does before then Hi ! No idea ? Regards. Hi ! No idea ? Regards. Quote
H4Mm3r Posted October 14, 2015 Author Posted October 14, 2015 What git version arebyiu using, because I just did this the other day and that's not the code to change. I'll post method when I'm home if no one else does before then Hi ! No idea ? Regards. Hi ! No idea ? Regards. Hello, I'm using the latest revision. Regards. Quote
benching Posted October 14, 2015 Posted October 14, 2015 (edited) im not sure if that code(s) is the fix for what you want. but here's my suggestion. if( type ) { +sd->regen.rate.hp += 2; // boost 3 times clif_status_load(&sd->bl,SI_SIT,1); } else { +sd->regen.rate.hp = 1; // return to normal clif_status_load(&sd->bl,SI_SIT,0); } i dont know how that '+' before the sd->regen.rate works, i dont even know that.why not just remove the '+' and change the value manually. try this. if( type ) { sd->regen.rate.hp += 6; // boost 3 times if default is 2 clif_status_load(&sd->bl,SI_SIT,1); } else { sd->regen.rate.hp = 1; // return to normal clif_status_load(&sd->bl,SI_SIT,0); } Edited October 14, 2015 by Eat Sleep Dota Quote
Stolao Posted October 14, 2015 Posted October 14, 2015 status.c change // Natural Hp regen if (flag&RGN_HP) { rate = (int)(natural_heal_diff_tick * (regen->rate.hp/100. * multi)); if (ud && ud->walktimer != INVALID_TIMER) rate /= 2; // Homun HP regen fix (they should regen as if they were sitting (twice as fast) if(bl->type == BL_HOM) rate *= 2; regen->tick.hp += rate; if(regen->tick.hp >= (unsigned int)battle_config.natural_healhp_interval) { int val = 0; do { val += regen->hp; regen->tick.hp -= battle_config.natural_healhp_interval; } while(regen->tick.hp >= (unsigned int)battle_config.natural_healhp_interval); if (status_heal(bl, val, 0, 1) < val) flag &= ~RGN_SHP; // Full. } } // Natural SP regen if(flag&RGN_SP) { rate = (int)(natural_heal_diff_tick * (regen->rate.sp/100. * multi)); // Homun SP regen fix (they should regen as if they were sitting (twice as fast) if(bl->type==BL_HOM) rate *= 2; #ifdef RENEWAL if (bl->type == BL_PC && (((TBL_PC*)bl)->class_&MAPID_UPPERMASK) == MAPID_MONK && sc && sc->data[SC_EXPLOSIONSPIRITS] && (!sc->data[SC_SPIRIT] || sc->data[SC_SPIRIT]->val2 != SL_MONK)) rate /= 2; // Tick is doubled in Fury state #endif regen->tick.sp += rate; if(regen->tick.sp >= (unsigned int)battle_config.natural_healsp_interval) { int val = 0; do { val += regen->sp; regen->tick.sp -= battle_config.natural_healsp_interval; } while(regen->tick.sp >= (unsigned int)battle_config.natural_healsp_interval); if (status_heal(bl, 0, val, 1) < val) flag &= ~RGN_SSP; // full. } } if (!regen->sregen) return flag; // Skill regen sregen = regen->sregen; if(flag&RGN_SHP) { // Skill HP regen sregen->tick.hp += (int)(natural_heal_diff_tick * (sregen->rate.hp / 100.)); while(sregen->tick.hp >= (unsigned int)battle_config.natural_heal_skill_interval) { sregen->tick.hp -= battle_config.natural_heal_skill_interval; if(status_heal(bl, sregen->hp, 0, 3) < sregen->hp) break; // Full } } if(flag&RGN_SSP) { // Skill SP regen sregen->tick.sp += (int)(natural_heal_diff_tick * (sregen->rate.sp /100.)); while(sregen->tick.sp >= (unsigned int)battle_config.natural_heal_skill_interval) { int val = sregen->sp; if (sd && sd->state.doridori) { val *= 2; sd->state.doridori = 0; if ((rate = pc_checkskill(sd,TK_SPTIME))) sc_start(bl,bl,status_skill2sc(TK_SPTIME), 100,rate,skill_get_time(TK_SPTIME, rate)); if ( (sd->class_&MAPID_UPPERMASK) == MAPID_STAR_GLADIATOR && rnd()%10000 < battle_config.sg_angel_skill_ratio ) { // Angel of the Sun/Moon/Star clif_feel_hate_reset(sd); pc_resethate(sd); pc_resetfeel(sd); } } sregen->tick.sp -= battle_config.natural_heal_skill_interval; if(status_heal(bl, 0, val, 3) < val) break; // Full } } return flag; } to // Natural Hp regen if (flag&RGN_HP) { rate = (int)(natural_heal_diff_tick * (regen->rate.hp/100. * multi)); if (ud && ud->walktimer != INVALID_TIMER) rate /= 2; // Homun HP regen fix (they should regen as if they were sitting (twice as fast) if(bl->type == BL_HOM) rate *= 2; regen->tick.hp += rate; if(regen->tick.hp >= (unsigned int)battle_config.natural_healhp_interval) { int val = 0; do { val += regen->hp; val *= multi; regen->tick.hp -= battle_config.natural_healhp_interval; } while(regen->tick.hp >= (unsigned int)battle_config.natural_healhp_interval); if (status_heal(bl, val, 0, 1) < val) flag &= ~RGN_SHP; // Full. } } // Natural SP regen if(flag&RGN_SP) { rate = (int)(natural_heal_diff_tick * (regen->rate.sp/100. * multi)); // Homun SP regen fix (they should regen as if they were sitting (twice as fast) if(bl->type==BL_HOM) rate *= 2; #ifdef RENEWAL if (bl->type == BL_PC && (((TBL_PC*)bl)->class_&MAPID_UPPERMASK) == MAPID_MONK && sc && sc->data[SC_EXPLOSIONSPIRITS] && (!sc->data[SC_SPIRIT] || sc->data[SC_SPIRIT]->val2 != SL_MONK)) rate /= 2; // Tick is doubled in Fury state #endif regen->tick.sp += rate; if(regen->tick.sp >= (unsigned int)battle_config.natural_healsp_interval) { int val = 0; do { val += regen->sp; val *= multi; regen->tick.sp -= battle_config.natural_healsp_interval; } while(regen->tick.sp >= (unsigned int)battle_config.natural_healsp_interval); if (status_heal(bl, 0, val, 1) < val) flag &= ~RGN_SSP; // full. } } if (!regen->sregen) return flag; // Skill regen sregen = regen->sregen; if(flag&RGN_SHP) { // Skill HP regen sregen->tick.hp += (int)(natural_heal_diff_tick * (sregen->rate.hp / 100.)); while(sregen->tick.hp >= (unsigned int)battle_config.natural_heal_skill_interval) { sregen->tick.hp -= battle_config.natural_heal_skill_interval; if(status_heal(bl, sregen->hp, 0, 3) < sregen->hp) break; // Full } } if(flag&RGN_SSP) { // Skill SP regen sregen->tick.sp += (int)(natural_heal_diff_tick * (sregen->rate.sp /100.)); while(sregen->tick.sp >= (unsigned int)battle_config.natural_heal_skill_interval) { int val = sregen->sp; val *= multi; if (sd && sd->state.doridori) { val *= 2; sd->state.doridori = 0; if ((rate = pc_checkskill(sd,TK_SPTIME))) sc_start(bl,bl,status_skill2sc(TK_SPTIME), 100,rate,skill_get_time(TK_SPTIME, rate)); if ( (sd->class_&MAPID_UPPERMASK) == MAPID_STAR_GLADIATOR && rnd()%10000 < battle_config.sg_angel_skill_ratio ) { // Angel of the Sun/Moon/Star clif_feel_hate_reset(sd); pc_resethate(sd); pc_resetfeel(sd); } } sregen->tick.sp -= battle_config.natural_heal_skill_interval; if(status_heal(bl, 0, val, 3) < val) break; // Full } } return flag; } and that should work and if that doesnt work change status.c if (flag&(RGN_HP|RGN_SP)) { if(!vd) vd = status_get_viewdata(bl); if(vd && vd->dead_sit == 2) multi += 1; //This causes the interval to be halved if(regen->state.gc) multi += 1; //This causes the interval to be halved } to if (flag&(RGN_HP|RGN_SP)) { if(!vd) vd = status_get_viewdata(bl); if(vd && vd->dead_sit == 2) multi += 3; //This causes the interval to be halved if(regen->state.gc) multi += 3; //This causes the interval to be halved } Quote
Question
H4Mm3r
Hi all,
Thanks to this old post (https://rathena.org/board/topic/67722-sitting-regeneration-and-weight-limit/), I really would like to increase HP/SP sitting regeneration.
The last proposition in skill.c can't compile :
Modified one compile but don't change anything :
Any idea about it ?
Thanks by advance.
Regards
Edited by H4Mm3r6 answers to this question
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.